mirror of
https://github.com/Microsoft/vscode
synced 2024-10-12 22:37:41 +00:00
support to hide/show submenus too
This commit is contained in:
parent
3f92eb60d8
commit
70f629f997
|
@ -11,7 +11,7 @@ import { BugIndicatingError } from 'vs/base/common/errors';
|
|||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { localize } from 'vs/nls';
|
||||
import { createAndFillInActionBarActions, createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem';
|
||||
import { IMenuActionOptions, IMenuService, MenuId, MenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
import { IMenuActionOptions, IMenuService, MenuId, MenuItemAction, SubmenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
|
@ -102,7 +102,7 @@ export class WorkbenchToolBar extends ToolBar {
|
|||
let shouldPrependSeparator = secondary.length > 0;
|
||||
for (let i = 0; i < primary.length; i++) {
|
||||
const action = primary[i];
|
||||
if (!(action instanceof MenuItemAction)) {
|
||||
if (!(action instanceof MenuItemAction) && !(action instanceof SubmenuItemAction)) {
|
||||
// console.warn(`Action ${action.id}/${action.label} is not a MenuItemAction`);
|
||||
continue;
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ export class WorkbenchToolBar extends ToolBar {
|
|||
|
||||
// add "hide foo" actions
|
||||
let hideAction: IAction;
|
||||
if (action instanceof MenuItemAction && action.hideActions) {
|
||||
if ((action instanceof MenuItemAction || action instanceof SubmenuItemAction) && action.hideActions) {
|
||||
hideAction = action.hideActions.hide;
|
||||
} else {
|
||||
hideAction = toAction({
|
||||
|
|
|
@ -368,6 +368,7 @@ export class SubmenuItemAction extends SubmenuAction {
|
|||
|
||||
constructor(
|
||||
readonly item: ISubmenuItem,
|
||||
readonly hideActions: IMenuItemHide | undefined,
|
||||
private readonly _menuService: IMenuService,
|
||||
private readonly _contextKeyService: IContextKeyService,
|
||||
private readonly _options?: IMenuActionOptions
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
import { RunOnceScheduler } from 'vs/base/common/async';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { IMenu, IMenuActionOptions, IMenuCreateOptions, IMenuItem, IMenuItemHide, IMenuService, isIMenuItem, ISubmenuItem, MenuId, MenuItemAction, MenuRegistry, SubmenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
import { IMenu, IMenuActionOptions, IMenuCreateOptions, IMenuItem, IMenuItemHide, IMenuService, isIMenuItem, isISubmenuItem, ISubmenuItem, MenuId, MenuItemAction, MenuRegistry, SubmenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
import { ICommandAction, ILocalizedString } from 'vs/platform/action/common/action';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { ContextKeyExpression, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
|
@ -252,13 +252,12 @@ class Menu implements IMenu {
|
|||
if (this._contextKeyService.contextMatchesRules(item.when)) {
|
||||
let action: MenuItemAction | SubmenuItemAction | undefined;
|
||||
const isMenuItem = isIMenuItem(item);
|
||||
|
||||
const menuHide = createMenuHide(this._id, isMenuItem ? item.command : item, this._hiddenStates);
|
||||
if (isMenuItem) {
|
||||
const menuHide = createMenuHide(this._id, item.command, this._hiddenStates);
|
||||
action = new MenuItemAction(item.command, item.alt, options, menuHide, this._contextKeyService, this._commandService);
|
||||
|
||||
} else {
|
||||
action = new SubmenuItemAction(item, this._menuService, this._contextKeyService, options);
|
||||
action = new SubmenuItemAction(item, menuHide, this._menuService, this._contextKeyService, options);
|
||||
if (action.actions.length === 0) {
|
||||
action = undefined;
|
||||
}
|
||||
|
@ -338,24 +337,24 @@ class Menu implements IMenu {
|
|||
}
|
||||
}
|
||||
|
||||
function createMenuHide(menu: MenuId, command: ICommandAction, states: PersistedMenuHideState): IMenuItemHide {
|
||||
function createMenuHide(menu: MenuId, command: ICommandAction | ISubmenuItem, states: PersistedMenuHideState): IMenuItemHide {
|
||||
|
||||
const id = `${menu.id}/${command.id}`;
|
||||
const id = isISubmenuItem(command) ? command.submenu.id : command.id;
|
||||
const title = typeof command.title === 'string' ? command.title : command.title.value;
|
||||
|
||||
const hide = toAction({
|
||||
id,
|
||||
id: `hide/${menu.id}/${id}`,
|
||||
label: localize('hide.label', 'Hide \'{0}\'', title),
|
||||
run() { states.updateHidden(menu, command.id, true); }
|
||||
run() { states.updateHidden(menu, id, true); }
|
||||
});
|
||||
|
||||
const toggle = toAction({
|
||||
id,
|
||||
id: `toggle/${menu.id}/${id}`,
|
||||
label: title,
|
||||
get checked() { return !states.isHidden(menu, command.id); },
|
||||
get checked() { return !states.isHidden(menu, id); },
|
||||
run() {
|
||||
const newValue = !states.isHidden(menu, command.id);
|
||||
states.updateHidden(menu, command.id, newValue);
|
||||
const newValue = !states.isHidden(menu, id);
|
||||
states.updateHidden(menu, id, newValue);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue