From 947ac1fbf232c981c287a5dd67050f882a3797ea Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Thu, 29 Aug 2019 12:12:14 -0700 Subject: [PATCH] Fix context menu positioning. (#6992) * hack in default actions into menu * fix tests --- .../src/objectExplorer.test.ts | 10 +++---- .../browser/dashboard.contribution.ts | 4 +-- .../browser/serverTreeActionProvider.ts | 29 +++++++++++++++++-- .../parts/query/browser/query.contribution.ts | 4 +-- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/extensions/integration-tests/src/objectExplorer.test.ts b/extensions/integration-tests/src/objectExplorer.test.ts index ee1c8bb618..4556159a48 100644 --- a/extensions/integration-tests/src/objectExplorer.test.ts +++ b/extensions/integration-tests/src/objectExplorer.test.ts @@ -65,7 +65,7 @@ class ObjectExplorerTester { @stressify({ dop: ObjectExplorerTester.ParallelCount }) async sqlDbContextMenuTest(): Promise { const server = await getAzureServer(); - const expectedActions = ['Disconnect', 'Delete Connection', 'Refresh', 'New Query', 'Manage', 'New Notebook', 'Data-tier Application wizard', 'Launch Profiler']; + const expectedActions = ['Manage', 'New Query', 'New Notebook', 'Disconnect', 'Delete Connection', 'Refresh', 'Data-tier Application wizard', 'Launch Profiler']; await this.verifyContextMenu(server, expectedActions); } @@ -75,10 +75,10 @@ class ObjectExplorerTester { let expectedActions: string[] = []; // Generate Scripts and Properties come from the admin-tool-ext-win extension which is for Windows only, so the item won't show up on non-Win32 platforms if (process.platform === 'win32') { - expectedActions = ['Refresh', 'New Query', 'Manage', 'New Notebook', 'Backup', 'Restore', 'Data-tier Application wizard', 'Schema Compare', 'Import wizard', 'Generate Scripts...', 'Properties']; + expectedActions = ['Manage', 'New Query', 'New Notebook', 'Refresh', 'Backup', 'Restore', 'Data-tier Application wizard', 'Schema Compare', 'Import wizard', 'Generate Scripts...', 'Properties']; } else { - expectedActions = ['Refresh', 'New Query', 'Manage', 'New Notebook', 'Backup', 'Restore', 'Data-tier Application wizard', 'Schema Compare', 'Import wizard']; + expectedActions = ['Manage', 'New Query', 'New Notebook', 'Refresh', 'Backup', 'Restore', 'Data-tier Application wizard', 'Schema Compare', 'Import wizard']; } await this.verifyDBContextMenu(server, 3000, expectedActions); } @@ -89,10 +89,10 @@ class ObjectExplorerTester { let expectedActions: string[]; // Properties comes from the admin-tool-ext-win extension which is for Windows only, so the item won't show up on non-Win32 platforms if (process.platform === 'win32') { - expectedActions = ['Disconnect', 'Delete Connection', 'Refresh', 'New Query', 'Manage', 'New Notebook', 'Data-tier Application wizard', 'Launch Profiler', 'Properties']; + expectedActions = ['Manage', 'New Query', 'New Notebook', 'Disconnect', 'Delete Connection', 'Refresh', 'Data-tier Application wizard', 'Launch Profiler', 'Properties']; } else { - expectedActions = ['Disconnect', 'Delete Connection', 'Refresh', 'New Query', 'Manage', 'New Notebook', 'Data-tier Application wizard', 'Launch Profiler']; + expectedActions = ['Manage', 'New Query', 'New Notebook', 'Disconnect', 'Delete Connection', 'Refresh', 'Data-tier Application wizard', 'Launch Profiler']; } await this.verifyContextMenu(server, expectedActions); } diff --git a/src/sql/workbench/parts/dashboard/browser/dashboard.contribution.ts b/src/sql/workbench/parts/dashboard/browser/dashboard.contribution.ts index 80de112acb..04c4fadd66 100644 --- a/src/sql/workbench/parts/dashboard/browser/dashboard.contribution.ts +++ b/src/sql/workbench/parts/dashboard/browser/dashboard.contribution.ts @@ -39,7 +39,7 @@ configurationRegistry.registerConfiguration(dashboardConfig); // // Manage MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, { group: '0_query', - order: 1, + order: 0, command: { id: DE_MANAGE_COMMAND_ID, title: localize('manage', "Manage") @@ -49,7 +49,7 @@ MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, { MenuRegistry.appendMenuItem(MenuId.ObjectExplorerItemContext, { group: '0_query', - order: 1, + order: 0, command: { id: OE_MANAGE_COMMAND_ID, title: localize('manage', "Manage") diff --git a/src/sql/workbench/parts/objectExplorer/browser/serverTreeActionProvider.ts b/src/sql/workbench/parts/objectExplorer/browser/serverTreeActionProvider.ts index ada3fea78b..57a66c784c 100644 --- a/src/sql/workbench/parts/objectExplorer/browser/serverTreeActionProvider.ts +++ b/src/sql/workbench/parts/objectExplorer/browser/serverTreeActionProvider.ts @@ -19,12 +19,14 @@ import { ConnectionProfileGroup } from 'sql/platform/connection/common/connectio import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile'; import { TreeUpdateUtils } from 'sql/workbench/parts/objectExplorer/browser/treeUpdateUtils'; import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement'; -import { MenuId, IMenuService } from 'vs/platform/actions/common/actions'; +import { MenuId, IMenuService, MenuItemAction } from 'vs/platform/actions/common/actions'; import { ConnectionContextKey } from 'sql/workbench/parts/connection/common/connectionContextKey'; import { TreeNodeContextKey } from 'sql/workbench/parts/objectExplorer/common/treeNodeContextKey'; import { IQueryManagementService } from 'sql/platform/query/common/queryManagement'; import { ServerInfoContextKey } from 'sql/workbench/parts/connection/common/serverInfoContextKey'; import { fillInActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; +import { Separator } from 'vs/base/browser/ui/actionbar/actionbar'; +import { ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration'; /** * Provides actions for the server tree elements @@ -88,11 +90,32 @@ export class ServerTreeActionProvider extends ContributableActionProvider { let menu = this.menuService.createMenu(MenuId.ObjectExplorerItemContext, scopedContextService); // Fill in all actions - let actions = getDefaultActions(context); - let options = { arg: undefined, shouldForwardArgs: true }; + const builtIn = getDefaultActions(context); + const actions = []; + const options = { arg: undefined, shouldForwardArgs: true }; const groups = menu.getActions(options); + let insertIndex: number | undefined = 0; + const queryIndex = groups.findIndex(v => { + if (v[0] === '0_query') { + return true; + } else { + insertIndex += v[1].length; + return false; + } + }); + insertIndex = queryIndex > -1 ? insertIndex + groups[queryIndex][1].length : undefined; fillInActions(groups, actions, false); + if (insertIndex) { + builtIn.unshift(new Separator()); + actions.splice(insertIndex, 0, ...builtIn); + } else { + if (actions.length > 0) { + builtIn.push(new Separator()); + } + actions.unshift(...builtIn); + } + // Cleanup scopedContextService.dispose(); menu.dispose(); diff --git a/src/sql/workbench/parts/query/browser/query.contribution.ts b/src/sql/workbench/parts/query/browser/query.contribution.ts index a845fa0df4..dca9e6ee3e 100644 --- a/src/sql/workbench/parts/query/browser/query.contribution.ts +++ b/src/sql/workbench/parts/query/browser/query.contribution.ts @@ -72,7 +72,7 @@ new NewQueryTask().registerTask(); MenuRegistry.appendMenuItem(MenuId.ObjectExplorerItemContext, { group: '0_query', - order: 0, + order: 1, command: { id: OE_NEW_QUERY_ACTION_ID, title: localize('newQuery', "New Query") @@ -83,7 +83,7 @@ MenuRegistry.appendMenuItem(MenuId.ObjectExplorerItemContext, { // New Query MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, { group: '0_query', - order: 0, + order: 1, command: { id: DE_NEW_QUERY_COMMAND_ID, title: localize('newQuery', "New Query")