make table keyboard shortcuts configurable (#22582)

* make table keyboard shortcuts configurable

* fix error

* new slickgrid version

* add comment

* tree grid
This commit is contained in:
Alan Ren
2023-04-03 13:21:00 -07:00
committed by GitHub
parent 38a3312cb6
commit 61b3285eaf
38 changed files with 275 additions and 87 deletions

View File

@@ -50,6 +50,7 @@ import { attachTableFilterStyler } from 'sql/platform/theme/common/styler';
import { DASHBOARD_BORDER } from 'sql/workbench/common/theme';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export const ASMTRESULTSVIEW_SELECTOR: string = 'asmt-results-view-component';
export const ROW_HEIGHT: number = 25;
@@ -148,7 +149,8 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
@Inject(ILogService) protected _logService: ILogService,
@Inject(IContextViewService) private _contextViewService: IContextViewService,
@Inject(IAccessibilityService) private _accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private _quickInputService: IQuickInputService
@Inject(IQuickInputService) private _quickInputService: IQuickInputService,
@Inject(ITableService) private tableService: ITableService
) {
super();
let self = this;
@@ -360,7 +362,7 @@ export class AsmtResultsViewComponent extends TabChild implements IAssessmentCom
this._table.grid.setData(this.dataView, true);
this._table.registerPlugin(<any>this.rowDetail);
this._table.registerPlugin(filterPlugin);
this._register(this.tableService.registerTable(this._table));
this.placeholderElem = document.createElement('span');
this.placeholderElem.className = 'placeholder';

View File

@@ -16,6 +16,7 @@ import { IInsightOptions, InsightType } from 'sql/workbench/contrib/charts/commo
import { IInsightData } from 'sql/platform/dashboard/browser/insightRegistry';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export class TableInsight extends Disposable implements IInsight {
public static readonly types = [InsightType.Table];
@@ -29,7 +30,8 @@ export class TableInsight extends Disposable implements IInsight {
constructor(container: HTMLElement, options: any,
@IThemeService themeService: IThemeService,
@IAccessibilityService accessibilityService: IAccessibilityService,
@IQuickInputService quickInputService: IQuickInputService
@IQuickInputService quickInputService: IQuickInputService,
@ITableService private tableService: ITableService
) {
super();
let tableContainer = $('div');
@@ -40,6 +42,7 @@ export class TableInsight extends Disposable implements IInsight {
this.table = new Table(tableContainer, accessibilityService, quickInputService, { dataProvider: this.dataView }, { showRowNumber: true });
this.table.setSelectionModel(new CellSelectionModel());
this._register(attachTableStyler(this.table, themeService));
this._register(this.tableService.registerTable(this.table));
}
set data(data: IInsightData) {

View File

@@ -20,6 +20,7 @@ import { ExplorerFilter } from 'sql/workbench/contrib/dashboard/browser/widgets/
import { ExplorerView, NameProperty } from 'sql/workbench/contrib/dashboard/browser/widgets/explorer/explorerView';
import { ObjectMetadataWrapper } from 'sql/workbench/contrib/dashboard/browser/widgets/explorer/objectMetadataWrapper';
import { CommonServiceInterface } from 'sql/workbench/services/bootstrap/browser/commonServiceInterface.service';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
import * as DOM from 'vs/base/browser/dom';
import { status } from 'vs/base/browser/ui/aria/aria';
import { IAction } from 'vs/base/common/actions';
@@ -67,7 +68,8 @@ export class ExplorerTable extends Disposable {
private readonly logService: ILogService,
private readonly dashboardService: IDashboardService,
readonly accessibilityService: IAccessibilityService,
readonly quickInputService: IQuickInputService) {
readonly quickInputService: IQuickInputService,
private readonly tableService: ITableService) {
super();
this._explorerView = new ExplorerView(this.context);
const connectionInfo = this.bootStrapService.connectionManagementService.connectionInfo;
@@ -113,6 +115,7 @@ export class ExplorerTable extends Disposable {
this._table.grid.invalidateAllRows();
this._table.updateRowCount();
}));
this._register(this.tableService.registerTable(this._table));
}
private showContextMenu(item: Slick.SlickData, anchor: HTMLElement | { x: number, y: number }): void {

View File

@@ -33,6 +33,7 @@ import { getFlavor } from 'sql/workbench/contrib/dashboard/browser/dashboardRegi
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
@Component({
selector: 'explorer-widget',
@@ -64,6 +65,7 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
@Inject(IDashboardService) private readonly dashboardService: IDashboardService,
@Inject(IAccessibilityService) private readonly accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private readonly quickInputService: IQuickInputService,
@Inject(ITableService) private readonly tableService: ITableService,
@Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef
) {
super(changeRef);
@@ -98,7 +100,8 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
this.logService,
this.dashboardService,
this.accessibilityService,
this.quickInputService);
this.quickInputService,
this.tableService);
this._register(this._input);
this._register(attachInputBoxStyler(this._input, this.themeService));
this._register(this._table);

View File

@@ -16,6 +16,7 @@ import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelect
import { IInsightsView, IInsightData } from 'sql/platform/dashboard/browser/insightRegistry';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
@Component({
template: ''
@@ -29,7 +30,8 @@ export default class TableInsight extends Disposable implements IInsightsView, O
@Inject(forwardRef(() => ElementRef)) private _elementRef: ElementRef,
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService,
@Inject(IAccessibilityService) private accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private quickInputService: IQuickInputService
@Inject(IQuickInputService) private quickInputService: IQuickInputService,
@Inject(ITableService) private tableService: ITableService
) {
super();
}
@@ -68,6 +70,7 @@ export default class TableInsight extends Disposable implements IInsightsView, O
this.table = new Table(this._elementRef.nativeElement, this.accessibilityService, this.quickInputService, { dataProvider: this.dataView, columns: this.columns }, { showRowNumber: true });
this.table.setSelectionModel(new CellSelectionModel());
this._register(attachTableStyler(this.table, this.themeService));
this._register(this.tableService.registerTable(this.table));
}
}
}

View File

@@ -20,6 +20,7 @@ import { Codicon } from 'vs/base/common/codicons';
import { deepClone } from 'vs/base/common/objects';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export enum ExecutionPlanCompareOrientation {
Horizontal = 'horizontal',
@@ -66,9 +67,10 @@ export class ExecutionPlanComparisonPropertiesView extends ExecutionPlanProperti
@IContextMenuService contextMenuService: IContextMenuService,
@IContextViewService contextViewService: IContextViewService,
@IAccessibilityService accessibilityService: IAccessibilityService,
@IQuickInputService quickInputService: IQuickInputService
@IQuickInputService quickInputService: IQuickInputService,
@ITableService tableService: ITableService
) {
super(parentContainer, themeService, instantiationService, contextMenuService, contextViewService, accessibilityService, quickInputService);
super(parentContainer, themeService, instantiationService, contextMenuService, contextViewService, accessibilityService, quickInputService, tableService);
this._model = <ExecutionPlanComparisonPropertiesViewModel>{};
this._parentContainer.style.display = 'none';
const header = DOM.$('.compare-operation-name');

View File

@@ -15,6 +15,7 @@ import { IContextMenuService, IContextViewService } from 'vs/platform/contextvie
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export class ExecutionPlanPropertiesView extends ExecutionPlanPropertiesViewBase {
// Div that holds the name of the element selected
@@ -28,9 +29,10 @@ export class ExecutionPlanPropertiesView extends ExecutionPlanPropertiesViewBase
@IContextMenuService contextMenuService: IContextMenuService,
@IContextViewService contextViewService: IContextViewService,
@IAccessibilityService accessibilityService: IAccessibilityService,
@IQuickInputService quickInputService: IQuickInputService
@IQuickInputService quickInputService: IQuickInputService,
@ITableService tableService: ITableService
) {
super(parentContainer, themeService, instantiationService, contextMenuService, contextViewService, accessibilityService, quickInputService);
super(parentContainer, themeService, instantiationService, contextMenuService, contextViewService, accessibilityService, quickInputService, tableService);
this._model = <ExecutionPlanPropertiesView>{};
this._operationName = DOM.$('h3');
this._operationName.classList.add('operation-name');

View File

@@ -27,6 +27,7 @@ import { deepClone } from 'vs/base/common/objects';
import { Disposable } from 'vs/base/common/lifecycle';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export abstract class ExecutionPlanPropertiesViewBase extends Disposable implements IVerticalSashLayoutProvider {
// Title bar with close button action
@@ -71,7 +72,8 @@ export abstract class ExecutionPlanPropertiesViewBase extends Disposable impleme
@IContextMenuService private _contextMenuService: IContextMenuService,
@IContextViewService private _contextViewService: IContextViewService,
@IAccessibilityService accessibilityService: IAccessibilityService,
@IQuickInputService quickInputService: IQuickInputService
@IQuickInputService quickInputService: IQuickInputService,
@ITableService private _tableService: ITableService
) {
super();
const sashContainer = DOM.$('.properties-sash');
@@ -190,6 +192,8 @@ export abstract class ExecutionPlanPropertiesViewBase extends Disposable impleme
this._register(copyHandler.onCopy(e => {
this._instantiationService.createInstance(CopyTableData).run(this.getCopyString());
}));
this._register(this._tableService.registerTable(this._tableComponent));
new ResizeObserver((e) => {
this.resizeSash.layout();

View File

@@ -26,6 +26,7 @@ import { Disposable } from 'vs/base/common/lifecycle';
import { deepClone } from 'vs/base/common/objects';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export class ExecutionPlanTreeTab extends Disposable implements IPanelTab {
public readonly title: string = localize('planTreeTab.title', 'Plan Tree');
@@ -55,7 +56,8 @@ export class ExecutionPlanTreeTabView extends Disposable implements IPanelView {
@IInstantiationService private _instantiationService: IInstantiationService,
@IContextMenuService private _contextMenuService: IContextMenuService,
@IAccessibilityService private _accessibilityService: IAccessibilityService,
@IQuickInputService private _quickInputService: IQuickInputService
@IQuickInputService private _quickInputService: IQuickInputService,
@ITableService private _tableService: ITableService
) {
super();
}
@@ -278,6 +280,7 @@ export class ExecutionPlanTreeTabView extends Disposable implements IPanelView {
treeGrid.registerPlugin(copyHandler);
treeGrid.setTableTitle(localize('topOperationsTableTitle', "Execution Plan Tree"));
this._treeGrids.push(treeGrid);
this._register(this._tableService.registerTable(treeGrid));
const contextMenuAction = [
this._register(this._instantiationService.createInstance(CopyTableData)),

View File

@@ -32,6 +32,7 @@ import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
import { filterIconClassNames, searchPlaceholder, topOperationsSearchDescription } from 'sql/workbench/contrib/executionPlan/browser/constants';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
const TABLE_SORT_COLUMN_KEY = 'tableCostColumnForSorting';
@@ -66,6 +67,7 @@ export class TopOperationsTabView extends Disposable implements IPanelView {
@IContextViewService private _contextViewService: IContextViewService,
@IAccessibilityService private _accessibilityService: IAccessibilityService,
@IQuickInputService private _quickInputService: IQuickInputService,
@ITableService private _tableService: ITableService
) {
super();
}
@@ -408,6 +410,8 @@ export class TopOperationsTabView extends Disposable implements IPanelView {
table.layout(new DOM.Dimension(tableContainer.clientWidth, tableContainer.clientHeight));
}).observe(tableContainer);
this._register(this._tableService.registerTable(table));
return table;
}

View File

@@ -26,6 +26,7 @@ import { AlertsCacheObject } from 'sql/workbench/services/jobManagement/common/j
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowDetailView';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export const VIEW_SELECTOR: string = 'jobalertsview-component';
export const ROW_HEIGHT: number = 45;
@@ -80,7 +81,8 @@ export class AlertsViewComponent extends JobManagementView implements OnInit, On
@Inject(IKeybindingService) keybindingService: IKeybindingService,
@Inject(IDashboardService) _dashboardService: IDashboardService,
@Inject(IAccessibilityService) private _accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private _quickInputService: IQuickInputService) {
@Inject(IQuickInputService) private _quickInputService: IQuickInputService,
@Inject(ITableService) private _tableService: ITableService) {
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService, _agentViewComponent);
this._didTabChange = false;
this._isCloud = commonService.connectionManagementService.connectionInfo.serverInfo.isCloud;
@@ -148,6 +150,7 @@ export class AlertsViewComponent extends JobManagementView implements OnInit, On
this.initActionBar();
this._table = new Table(this._gridEl.nativeElement, this._accessibilityService, this._quickInputService, { columns }, this.options);
this._register(this._tableService.registerTable(this._table));
this._table.grid.setData(this.dataView, true);
this._register(this._table.onContextMenu(e => {
self.openContextMenu(e);

View File

@@ -36,6 +36,7 @@ import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
import { attachTableFilterStyler } from 'sql/platform/theme/common/styler';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export const JOBSVIEW_SELECTOR: string = 'jobsview-component';
export const ROW_HEIGHT: number = 45;
@@ -112,7 +113,8 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
@Inject(IAdsTelemetryService) private _telemetryService: IAdsTelemetryService,
@Inject(IContextViewService) private _contextViewService: IContextViewService,
@Inject(IAccessibilityService) private _accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private _quickInputService: IQuickInputService
@Inject(IQuickInputService) private _quickInputService: IQuickInputService,
@Inject(ITableService) private _tableService: ITableService
) {
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService, _agentViewComponent);
let jobCacheObjectMap = this._jobManagementService.jobCacheObjectMap;
@@ -200,6 +202,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
self._agentViewComponent.agentJobInfo = job;
self._agentViewComponent.showHistory = true;
});
this._register(this._tableService.registerTable(this._table));
this._register(this._table.onContextMenu(e => {
self.openContextMenu(e);
}));

View File

@@ -37,6 +37,7 @@ import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
import { attachTableFilterStyler } from 'sql/platform/theme/common/styler';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export const NOTEBOOKSVIEW_SELECTOR: string = 'notebooksview-component';
@@ -111,7 +112,8 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
@Inject(IAdsTelemetryService) private _telemetryService: IAdsTelemetryService,
@Inject(IContextViewService) private _contextViewService: IContextViewService,
@Inject(IAccessibilityService) private _accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private _quickInputService: IQuickInputService
@Inject(IQuickInputService) private _quickInputService: IQuickInputService,
@Inject(ITableService) private _tableService: ITableService
) {
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService, _agentViewComponent);
let notebookCacheObjectMap = this._jobManagementService.notebookCacheObjectMap;
@@ -199,6 +201,7 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit,
self._agentViewComponent.agentNotebookInfo = notebook;
self._agentViewComponent.showNotebookHistory = true;
});
this._register(this._tableService.registerTable(this._table));
this._register(this._table.onContextMenu(e => {
self.openContextMenu(e);
}));

View File

@@ -26,6 +26,7 @@ import { OperatorsCacheObject } from 'sql/workbench/services/jobManagement/commo
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowDetailView';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export const VIEW_SELECTOR: string = 'joboperatorsview-component';
export const ROW_HEIGHT: number = 45;
@@ -79,7 +80,8 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit,
@Inject(IKeybindingService) keybindingService: IKeybindingService,
@Inject(IDashboardService) _dashboardService: IDashboardService,
@Inject(IAccessibilityService) private _accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private _quickInputService: IQuickInputService
@Inject(IQuickInputService) private _quickInputService: IQuickInputService,
@Inject(ITableService) private _tableService: ITableService
) {
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService, _agentViewComponent);
this._isCloud = commonService.connectionManagementService.connectionInfo.serverInfo.isCloud;
@@ -149,6 +151,7 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit,
this.initActionBar();
this._table = new Table(this._gridEl.nativeElement, this._accessibilityService, this._quickInputService, { columns }, this.options);
this._table.grid.setData(this.dataView, true);
this._register(this._tableService.registerTable(this._table));
this._register(this._table.onContextMenu(e => {
self.openContextMenu(e);

View File

@@ -26,6 +26,7 @@ import { ProxiesCacheObject } from 'sql/workbench/services/jobManagement/common/
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowDetailView';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export const VIEW_SELECTOR: string = 'jobproxiesview-component';
export const ROW_HEIGHT: number = 45;
@@ -80,7 +81,8 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
@Inject(IKeybindingService) keybindingService: IKeybindingService,
@Inject(IDashboardService) _dashboardService: IDashboardService,
@Inject(IAccessibilityService) private _accessibilityService: IAccessibilityService,
@Inject(IQuickInputService) private _quickInputService: IQuickInputService
@Inject(IQuickInputService) private _quickInputService: IQuickInputService,
@Inject(ITableService) private _tableService: ITableService
) {
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService, _agentViewComponent);
this._isCloud = commonService.connectionManagementService.connectionInfo.serverInfo.isCloud;
@@ -148,6 +150,7 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
jQuery(this.actionBarContainer.nativeElement).empty();
this.initActionBar();
this._table = new Table(this._gridEl.nativeElement, this._accessibilityService, this._quickInputService, { columns }, this.options);
this._register(this._tableService.registerTable(this._table));
this._table.grid.setData(this.dataView, true);
this._register(this._table.onContextMenu(e => {

View File

@@ -51,6 +51,7 @@ import { ITextResourcePropertiesService } from 'vs/editor/common/services/textRe
import { mssqlProviderName } from 'sql/platform/connection/common/constants';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
@Component({
selector: GridOutputComponent.SELECTOR,
@@ -244,12 +245,13 @@ class DataResourceTable extends GridTableBase<any> {
@INotificationService notificationService: INotificationService,
@IExecutionPlanService executionPlanService: IExecutionPlanService,
@IAccessibilityService accessibilityService: IAccessibilityService,
@IQuickInputService quickInputService: IQuickInputService
@IQuickInputService quickInputService: IQuickInputService,
@ITableService tableService: ITableService
) {
super(state, createResultSet(source), {
actionOrientation: ActionsOrientation.HORIZONTAL,
inMemoryDataProcessing: true
}, contextMenuService, instantiationService, editorService, untitledEditorService, configurationService, queryModelService, themeService, contextViewService, notificationService, executionPlanService, accessibilityService, quickInputService);
}, contextMenuService, instantiationService, editorService, untitledEditorService, configurationService, queryModelService, themeService, contextViewService, notificationService, executionPlanService, accessibilityService, quickInputService, tableService);
this._gridDataProvider = this.instantiationService.createInstance(DataResourceDataProvider, source, this.resultSet, this.cellModel);
this._chart = this.instantiationService.createInstance(ChartView, false);

View File

@@ -56,6 +56,7 @@ import { IModelService } from 'vs/editor/common/services/model';
import { CommonFindController, FindStartFocusAction } from 'vs/editor/contrib/find/browser/findController';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
class BasicView implements IView {
public get element(): HTMLElement {
@@ -175,7 +176,8 @@ export class ProfilerEditor extends EditorPane {
@ITextResourcePropertiesService private readonly textResourcePropertiesService: ITextResourcePropertiesService,
@IEditorGroupsService editorGroupsService: IEditorGroupsService,
@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,
@IQuickInputService private readonly _quickInputService: IQuickInputService
@IQuickInputService private readonly _quickInputService: IQuickInputService,
@ITableService private readonly _tableService: ITableService
) {
super(ProfilerEditor.ID, telemetryService, themeService, storageService);
this._profilerEditorContextKey = CONTEXT_PROFILER_EDITOR.bindTo(this._contextKeyService);
@@ -429,6 +431,7 @@ export class ProfilerEditor extends EditorPane {
});
this._detailTable.setSelectionModel(new CellSelectionModel());
this._detailTable.registerPlugin(detailTableCopyKeybind);
this._register(this._tableService.registerTable(this._detailTable));
this._tabbedPanel.pushTab({

View File

@@ -35,6 +35,7 @@ import { ITextResourcePropertiesService } from 'vs/editor/common/services/textRe
import { FindReplaceState, FindReplaceStateChangedEvent } from 'vs/editor/contrib/find/browser/findState';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export interface ProfilerTableViewState {
scrollTop: number;
@@ -72,7 +73,8 @@ export class ProfilerTableEditor extends EditorPane implements IProfilerControll
@IClipboardService private _clipboardService: IClipboardService,
@ITextResourcePropertiesService private readonly textResourcePropertiesService: ITextResourcePropertiesService,
@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,
@IQuickInputService private readonly _quickInputService: IQuickInputService
@IQuickInputService private readonly _quickInputService: IQuickInputService,
@ITableService private readonly _tableService: ITableService
) {
super(ProfilerTableEditor.ID, telemetryService, _themeService, storageService);
this._actionMap[ACTION_IDS.FIND_NEXT] = this._instantiationService.createInstance(ProfilerFindNext, this);
@@ -115,6 +117,7 @@ export class ProfilerTableEditor extends EditorPane implements IProfilerControll
});
this._profilerTable.registerPlugin(copyKeybind);
attachTableStyler(this._profilerTable, this._themeService);
this._register(this._tableService.registerTable(this._profilerTable));
this._findState = new FindReplaceState();
this._findState.onFindReplaceStateChange(e => this._onFindStateChange(e));

View File

@@ -57,6 +57,7 @@ import { formatDocumentWithSelectedProvider, FormattingMode } from 'vs/editor/co
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { queryEditorNullBackground } from 'sql/platform/theme/common/colorRegistry';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
const ROW_HEIGHT = 29;
const HEADER_HEIGHT = 26;
@@ -417,7 +418,8 @@ export abstract class GridTableBase<T> extends Disposable implements IView {
@INotificationService private readonly notificationService: INotificationService,
@IExecutionPlanService private readonly executionPlanService: IExecutionPlanService,
@IAccessibilityService private readonly accessibilityService: IAccessibilityService,
@IQuickInputService private readonly quickInputService: IQuickInputService
@IQuickInputService private readonly quickInputService: IQuickInputService,
@ITableService private readonly tableService: ITableService
) {
super();
@@ -580,6 +582,7 @@ export abstract class GridTableBase<T> extends Disposable implements IView {
}));
this.table.registerPlugin(this.filterPlugin);
this._register(this.tableService.registerTable(this.table));
if (this.styles) {
this.table.style(this.styles);
}
@@ -966,14 +969,15 @@ class GridTable<T> extends GridTableBase<T> {
@INotificationService notificationService: INotificationService,
@IExecutionPlanService executionPlanService: IExecutionPlanService,
@IAccessibilityService accessibilityService: IAccessibilityService,
@IQuickInputService quickInputService: IQuickInputService
@IQuickInputService quickInputService: IQuickInputService,
@ITableService tableService: ITableService
) {
super(state, resultSet, {
actionOrientation: ActionsOrientation.VERTICAL,
inMemoryDataProcessing: true,
showActionBar: configurationService.getValue<IQueryEditorConfiguration>('queryEditor').results.showActionBar,
inMemoryDataCountThreshold: configurationService.getValue<IQueryEditorConfiguration>('queryEditor').results.inMemoryDataProcessingThreshold,
}, contextMenuService, instantiationService, editorService, untitledEditorService, configurationService, queryModelService, themeService, contextViewService, notificationService, executionPlanService, accessibilityService, quickInputService);
}, contextMenuService, instantiationService, editorService, untitledEditorService, configurationService, queryModelService, themeService, contextViewService, notificationService, executionPlanService, accessibilityService, quickInputService, tableService);
this._gridDataProvider = this.instantiationService.createInstance(QueryGridDataProvider, this._runner, resultSet.batchId, resultSet.id);
this.providerId = this._runner.getProviderId();
}

View File

@@ -27,6 +27,7 @@ import { LoadingSpinnerPlugin } from 'sql/base/browser/ui/table/plugins/loadingS
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
export class ResourceViewerTable extends Disposable {
@@ -43,7 +44,8 @@ export class ResourceViewerTable extends Disposable {
@INotificationService private _notificationService: INotificationService,
@IContextViewService private _contextViewService: IContextViewService,
@IAccessibilityService private _accessibilityService: IAccessibilityService,
@IQuickInputService private _quickInputService: IQuickInputService) {
@IQuickInputService private _quickInputService: IQuickInputService,
@ITableService private readonly _tableService: ITableService) {
super();
let filterFn = (data: Array<azdata.DataGridItem>): Array<azdata.DataGridItem> => {
return data.filter(item => this.filter(item));
@@ -89,6 +91,7 @@ export class ResourceViewerTable extends Disposable {
});
this._resourceViewerTable.registerPlugin(filterPlugin);
this._resourceViewerTable.registerPlugin(this._loadingSpinnerPlugin);
this._register(this._tableService.registerTable(this._resourceViewerTable));
}
public set data(data: azdata.DataGridItem[]) {

View File

@@ -0,0 +1,52 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Table } from 'sql/base/browser/ui/table/table';
import { FilteringEnabled, InTable } from 'sql/workbench/services/table/browser/tableContext';
import { ITableService } from 'sql/workbench/services/table/browser/tableService';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { KeybindingWeight, KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { HeaderFilter } from 'sql/base/browser/ui/table/plugins/headerFilter.plugin';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
export const RESIZE_COLUMN_COMMAND_ID = 'table.resizeColumn';
export const SHOW_COLUMN_MENU_COMMAND_ID = 'table.showColumnMenu';
KeybindingsRegistry.registerCommandAndKeybindingRule({
id: RESIZE_COLUMN_COMMAND_ID,
weight: KeybindingWeight.WorkbenchContrib,
when: InTable,
primary: KeyMod.Shift | KeyMod.Alt | KeyCode.KeyS,
handler: async (accessor) => {
await handleTableCommand(accessor, async (table) => {
await table.resizeActiveColumn();
});
}
});
KeybindingsRegistry.registerCommandAndKeybindingRule({
id: SHOW_COLUMN_MENU_COMMAND_ID,
weight: KeybindingWeight.WorkbenchContrib,
when: ContextKeyExpr.and(InTable, FilteringEnabled),
primary: KeyCode.F3,
handler: async (accessor) => {
await handleTableCommand(accessor, async (table) => {
let plugin = table.grid.getPlugins().find(p => p instanceof HeaderFilter) as HeaderFilter<any>;
if (plugin) {
await plugin.showMenu();
}
});
}
});
async function handleTableCommand(accessor: ServicesAccessor, action: (table: Table<any>) => Promise<void>) {
const tableService = accessor.get(ITableService);
const table = tableService.getActiveTable();
if (table) {
await action(table);
}
}