Add focus logic to the tabbed panel (#5649)

* add focus logic to the tabbed panel

* change enter to be on key up

* fix  tests
This commit is contained in:
Anthony Dresser
2019-05-28 12:44:22 -07:00
committed by GitHub
parent d386311e54
commit f8ccafd2af
13 changed files with 62 additions and 15 deletions

View File

@@ -29,6 +29,7 @@ export interface IPanelOptions {
export interface IPanelView {
render(container: HTMLElement): void;
layout(dimension: DOM.Dimension): void;
focus(): void;
remove?(): void;
}
@@ -143,7 +144,7 @@ export class TabbedPanel extends Disposable {
tabLabel.innerText = tab.title;
tabElement.appendChild(tabLabel);
tab.disposables.push(DOM.addDisposableListener(tabHeaderElement, DOM.EventType.CLICK, e => this.showTab(tab.identifier)));
tab.disposables.push(DOM.addDisposableListener(tabHeaderElement, DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {
tab.disposables.push(DOM.addDisposableListener(tabHeaderElement, DOM.EventType.KEY_UP, (e: KeyboardEvent) => {
let event = new StandardKeyboardEvent(e);
if (event.equals(KeyCode.Enter)) {
this.showTab(tab.identifier);
@@ -188,6 +189,7 @@ export class TabbedPanel extends Disposable {
if (this._currentDimensions) {
this._layoutCurrentTab(new DOM.Dimension(this._currentDimensions.width, this._currentDimensions.height - this.headersize));
}
this.focus();
}
public removeTab(tab: PanelTabIdentifier) {
@@ -306,7 +308,12 @@ export class TabbedPanel extends Disposable {
}
public focus(): void {
if (this._shownTabId) {
const tab = this._tabMap.get(this._shownTabId);
if (tab) {
tab.view.focus();
}
}
}
public set collapsed(val: boolean) {

View File

@@ -78,9 +78,10 @@ export class DialogPane extends Disposable implements IThemable {
container.appendChild(tabContainer);
tabContainer.style.display = 'block';
},
layout: (dimension) => { this.getTabDimension(); }
} as IPanelView
} as IPanelTab);
layout: (dimension) => { this.getTabDimension(); },
focus: () => { }
}
});
});
}

View File

@@ -177,6 +177,9 @@ export class ChartView extends Disposable implements IPanelView {
}
}
focus(): void {
}
public set queryRunner(runner: QueryRunner) {
this._queryRunner = runner;
this.shouldGraph();

View File

@@ -341,7 +341,8 @@ export class ProfilerEditor extends BaseEditor {
title: nls.localize('text', "Text"),
view: {
layout: dim => this._editor.layout(dim),
render: parent => parent.appendChild(editorContainer)
render: parent => parent.appendChild(editorContainer),
focus: () => this._editor.focus()
}
});
@@ -379,7 +380,8 @@ export class ProfilerEditor extends BaseEditor {
title: nls.localize('details', "Details"),
view: {
layout: dim => this._detailTable.layout(dim),
render: parent => parent.appendChild(detailTableContainer)
render: parent => parent.appendChild(detailTableContainer),
focus: () => this._detailTable.focus()
}
});

View File

@@ -94,6 +94,7 @@ export class MessagePanel extends Disposable {
renderer: this.renderer,
controller: this.controller
}, { keyboardSupport: false, horizontalScrollMode: ScrollbarVisibility.Auto }));
this.tree.setInput(this.model);
this.tree.onDidScroll(e => {
// convert to old VS Code tree interface with expandable methods
let expandableTree: IExpandableTree = <IExpandableTree>this.tree;
@@ -158,7 +159,6 @@ export class MessagePanel extends Disposable {
this.container.style.height = '100%';
this._register(attachListStyler(this.tree, this.themeService));
container.appendChild(this.container);
this.tree.setInput(this.model);
}
public layout(size: Dimension): void {
@@ -176,6 +176,11 @@ export class MessagePanel extends Disposable {
}
}
public focus(): void {
this.tree.refresh();
this.tree.domFocus();
}
public set queryRunner(runner: QueryRunner) {
dispose(this.queryRunnerDisposables);
this.queryRunnerDisposables = [];

View File

@@ -110,7 +110,7 @@ export class QueryEditor extends BaseEditor {
this.splitview.addView({
element: this.textEditorContainer,
layout: size => this.textEditor.layout(new DOM.Dimension(this.dimension.width, size)),
minimumSize: 220,
minimumSize: 0,
maximumSize: Number.POSITIVE_INFINITY,
onDidChange: Event.None
}, Sizing.Distribute);
@@ -336,7 +336,7 @@ export class QueryEditor extends BaseEditor {
this.splitview.addView({
element: this.resultsEditorContainer,
layout: size => this.resultsEditor && this.resultsEditor.layout(new DOM.Dimension(this.dimension.width, size)),
minimumSize: 220,
minimumSize: 0,
maximumSize: Number.POSITIVE_INFINITY,
onDidChange: Event.None
}, Sizing.Distribute);

View File

@@ -42,6 +42,10 @@ class MessagesView extends Disposable implements IPanelView {
this.messagePanel.layout(dimension);
}
focus(): void {
this.messagePanel.focus();
}
public clear() {
this.messagePanel.clear();
}
@@ -85,6 +89,10 @@ class ResultsView extends Disposable implements IPanelView {
this.gridPanel.layout(dimension);
}
focus(): void {
this.gridPanel.focus();
}
public clear() {
this.gridPanel.clear();
}

View File

@@ -155,6 +155,10 @@ export class GridPanel {
this.currentHeight = size.height;
}
public focus(): void {
// will need to add logic to save the focused grid and focus that
}
public set queryRunner(runner: QueryRunner) {
dispose(this.queryRunnerDisposables);
this.reset();

View File

@@ -49,6 +49,10 @@ export class QueryModelViewTabView implements IPanelView {
public layout(dimension: Dimension): void {
}
public focus(): void {
}
/**
* Load the angular components and record for this input that we have done so
*/

View File

@@ -89,6 +89,10 @@ export class TopOperationsView implements IPanelView {
this.table.layout(dimension);
}
public focus(): void {
this.table.focus();
}
public clear() {
this.dataView.clear();
}

View File

@@ -64,6 +64,10 @@ export class QueryPlanView implements IPanelView {
this.container.style.height = dimension.height + 'px';
}
public focus() {
this.container.focus();
}
public clear() {
if (this.qp) {
this.qp.xml = undefined;

View File

@@ -336,7 +336,8 @@ export class RestoreDialog extends Modal {
render: c => {
DOM.append(c, generalTab);
},
layout: () => { }
layout: () => { },
focus: () => generalTab.focus()
}
});
@@ -347,7 +348,8 @@ export class RestoreDialog extends Modal {
layout: () => { },
render: c => {
c.appendChild(fileContentElement);
}
},
focus: () => fileContentElement.focus()
}
});
@@ -358,7 +360,8 @@ export class RestoreDialog extends Modal {
layout: () => { },
render: c => {
c.appendChild(optionsContentElement);
}
},
focus: () => optionsContentElement.focus()
}
});

View File

@@ -163,7 +163,8 @@ export class ConnectionDialogWidget extends Modal {
render: c => {
c.append(recentConnectionTab);
},
layout: () => { }
layout: () => { },
focus: () => this._recentConnectionTree.domFocus()
}
});
@@ -174,7 +175,8 @@ export class ConnectionDialogWidget extends Modal {
layout: () => { },
render: c => {
c.append(savedConnectionTab);
}
},
focus: () => this._savedConnectionTree.domFocus()
}
});