提交 e5cbf755 编写于 作者: I isidor

commands use precondition for enablement

fixes #41103
上级 64b5169c
...@@ -11,7 +11,7 @@ import { revertLocalChangesCommand, acceptLocalChangesCommand, CONFLICT_RESOLUTI ...@@ -11,7 +11,7 @@ import { revertLocalChangesCommand, acceptLocalChangesCommand, CONFLICT_RESOLUTI
import { SyncActionDescriptor, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; import { SyncActionDescriptor, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions';
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions'; import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes'; import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes';
import { openWindowCommand, REVEAL_IN_OS_COMMAND_ID, COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, REVEAL_IN_OS_LABEL } from 'vs/workbench/parts/files/electron-browser/fileCommands'; import { openWindowCommand, REVEAL_IN_OS_COMMAND_ID, COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, REVEAL_IN_OS_LABEL, DirtyEditorContext } from 'vs/workbench/parts/files/electron-browser/fileCommands';
import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands'; import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
...@@ -195,7 +195,8 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, { ...@@ -195,7 +195,8 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
order: 10, order: 10,
command: { command: {
id: SAVE_FILE_COMMAND_ID, id: SAVE_FILE_COMMAND_ID,
title: SAVE_FILE_LABEL title: SAVE_FILE_LABEL,
precondition: DirtyEditorContext
}, },
when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay')) when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay'))
}); });
...@@ -205,7 +206,8 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, { ...@@ -205,7 +206,8 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
order: 20, order: 20,
command: { command: {
id: REVERT_FILE_COMMAND_ID, id: REVERT_FILE_COMMAND_ID,
title: nls.localize('revert', "Revert File") title: nls.localize('revert', "Revert File"),
precondition: DirtyEditorContext
}, },
when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay')) when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay'))
}); });
...@@ -233,9 +235,10 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, { ...@@ -233,9 +235,10 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
order: 10, order: 10,
command: { command: {
id: COMPARE_WITH_SAVED_COMMAND_ID, id: COMPARE_WITH_SAVED_COMMAND_ID,
title: nls.localize('compareWithSaved', "Compare with Saved") title: nls.localize('compareWithSaved', "Compare with Saved"),
precondition: DirtyEditorContext
}, },
when: ResourceContextKey.IsFile when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay'))
}); });
const compareResourceCommand = { const compareResourceCommand = {
...@@ -363,9 +366,10 @@ MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { ...@@ -363,9 +366,10 @@ MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
order: 20, order: 20,
command: { command: {
id: PASTE_FILE_ID, id: PASTE_FILE_ID,
title: PASTE_FILE_LABEL title: PASTE_FILE_LABEL,
precondition: FileCopiedContext
}, },
when: ContextKeyExpr.and(ExplorerFolderContext, FileCopiedContext) when: ExplorerFolderContext
}); });
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
......
...@@ -66,6 +66,7 @@ export const SAVE_FILES_COMMAND_ID = 'workbench.command.files.saveFiles'; ...@@ -66,6 +66,7 @@ export const SAVE_FILES_COMMAND_ID = 'workbench.command.files.saveFiles';
export const SAVE_FILES_LABEL = nls.localize('saveFiles', "Save All Files"); export const SAVE_FILES_LABEL = nls.localize('saveFiles', "Save All Files");
export const OpenEditorsGroupContext = new RawContextKey<boolean>('groupFocusedInOpenEditors', false); export const OpenEditorsGroupContext = new RawContextKey<boolean>('groupFocusedInOpenEditors', false);
export const DirtyEditorContext = new RawContextKey<boolean>('dirtyEditor', false);
export const ResourceSelectedForCompareContext = new RawContextKey<boolean>('resourceSelectedForCompare', false); export const ResourceSelectedForCompareContext = new RawContextKey<boolean>('resourceSelectedForCompare', false);
export const openWindowCommand = (accessor: ServicesAccessor, paths: string[], forceNewWindow: boolean) => { export const openWindowCommand = (accessor: ServicesAccessor, paths: string[], forceNewWindow: boolean) => {
......
...@@ -40,7 +40,7 @@ import { KeyCode } from 'vs/base/common/keyCodes'; ...@@ -40,7 +40,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { fillInActions } from 'vs/platform/actions/browser/menuItemActionItem'; import { fillInActions } from 'vs/platform/actions/browser/menuItemActionItem';
import { IMenuService, MenuId, IMenu } from 'vs/platform/actions/common/actions'; import { IMenuService, MenuId, IMenu } from 'vs/platform/actions/common/actions';
import { OpenEditorsGroupContext } from 'vs/workbench/parts/files/electron-browser/fileCommands'; import { OpenEditorsGroupContext, DirtyEditorContext } from 'vs/workbench/parts/files/electron-browser/fileCommands';
import { ResourceContextKey } from 'vs/workbench/common/resources'; import { ResourceContextKey } from 'vs/workbench/common/resources';
import { DataTransfers } from 'vs/base/browser/dnd'; import { DataTransfers } from 'vs/base/browser/dnd';
import { getPathLabel, getBaseLabel } from 'vs/base/common/labels'; import { getPathLabel, getBaseLabel } from 'vs/base/common/labels';
...@@ -64,6 +64,7 @@ export class OpenEditorsView extends ViewsViewletPanel { ...@@ -64,6 +64,7 @@ export class OpenEditorsView extends ViewsViewletPanel {
private needsRefresh: boolean; private needsRefresh: boolean;
private resourceContext: ResourceContextKey; private resourceContext: ResourceContextKey;
private groupFocusedContext: IContextKey<boolean>; private groupFocusedContext: IContextKey<boolean>;
private dirtyEditorFocusedContext: IContextKey<boolean>;
constructor( constructor(
options: IViewletViewOptions, options: IViewletViewOptions,
...@@ -159,13 +160,16 @@ export class OpenEditorsView extends ViewsViewletPanel { ...@@ -159,13 +160,16 @@ export class OpenEditorsView extends ViewsViewletPanel {
this.resourceContext = this.instantiationService.createInstance(ResourceContextKey); this.resourceContext = this.instantiationService.createInstance(ResourceContextKey);
this.groupFocusedContext = OpenEditorsGroupContext.bindTo(this.contextKeyService); this.groupFocusedContext = OpenEditorsGroupContext.bindTo(this.contextKeyService);
this.dirtyEditorFocusedContext = DirtyEditorContext.bindTo(this.contextKeyService);
this.disposables.push(this.list.onContextMenu(e => this.onListContextMenu(e))); this.disposables.push(this.list.onContextMenu(e => this.onListContextMenu(e)));
this.list.onFocusChange(e => { this.list.onFocusChange(e => {
this.resourceContext.reset(); this.resourceContext.reset();
this.groupFocusedContext.reset(); this.groupFocusedContext.reset();
this.dirtyEditorFocusedContext.reset();
const element = e.elements.length ? e.elements[0] : undefined; const element = e.elements.length ? e.elements[0] : undefined;
if (element instanceof OpenEditor) { if (element instanceof OpenEditor) {
this.dirtyEditorFocusedContext.set(this.textFileService.isDirty(element.getResource()));
this.resourceContext.set(element.getResource()); this.resourceContext.set(element.getResource());
} else if (!!element) { } else if (!!element) {
this.groupFocusedContext.set(true); this.groupFocusedContext.set(true);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册