From c24868168f4ef8a59dcc69b27b988c426f4d70ed Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 30 Nov 2016 12:36:06 +0100 Subject: [PATCH] proper checked indicator for context menu actions --- src/vs/base/browser/ui/actionbar/actionbar.ts | 9 +++++++++ src/vs/base/common/actions.ts | 18 ++++++++++++++++++ .../parts/activitybar/activityAction.ts | 2 +- .../electron-browser/contextmenuService.ts | 4 ++-- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index da4f851b097..614624ad4c9 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -200,6 +200,7 @@ export class Separator extends Action { constructor(label?: string, order?) { super(Separator.ID, label, label ? 'separator text' : 'separator'); this.checked = false; + this.radio = false; this.enabled = false; this.order = order; } @@ -308,6 +309,14 @@ export class ActionItem extends BaseActionItem { this.$e.removeClass('checked'); } } + + public _updateRadio(): void { + if (this.getAction().radio) { + this.$e.addClass('radio'); + } else { + this.$e.removeClass('radio'); + } + } } export enum ActionsOrientation { diff --git a/src/vs/base/common/actions.ts b/src/vs/base/common/actions.ts index a605a213eac..28b9b368c32 100644 --- a/src/vs/base/common/actions.ts +++ b/src/vs/base/common/actions.ts @@ -17,6 +17,7 @@ export interface IAction extends IDisposable { class: string; enabled: boolean; checked: boolean; + radio: boolean; run(event?: any): TPromise; } @@ -67,6 +68,7 @@ export interface IActionChangeEvent { class?: string; enabled?: boolean; checked?: boolean; + radio?: boolean; } export class Action implements IAction { @@ -78,6 +80,7 @@ export class Action implements IAction { protected _cssClass: string; protected _enabled: boolean; protected _checked: boolean; + protected _radio: boolean; protected _order: number; protected _actionCallback: (event?: any) => TPromise; @@ -169,6 +172,14 @@ export class Action implements IAction { this._setChecked(value); } + public get radio(): boolean { + return this._radio; + } + + public set radio(value: boolean) { + this._setRadio(value); + } + protected _setChecked(value: boolean): void { if (this._checked !== value) { this._checked = value; @@ -176,6 +187,13 @@ export class Action implements IAction { } } + protected _setRadio(value: boolean): void { + if (this._radio !== value) { + this._radio = value; + this._onDidChange.fire({ radio: value }); + } + } + public get order(): number { return this._order; } diff --git a/src/vs/workbench/browser/parts/activitybar/activityAction.ts b/src/vs/workbench/browser/parts/activitybar/activityAction.ts index 7d35646c990..d80c7a3ba01 100644 --- a/src/vs/workbench/browser/parts/activitybar/activityAction.ts +++ b/src/vs/workbench/browser/parts/activitybar/activityAction.ts @@ -163,7 +163,7 @@ export class ViewletOverflowActivityActionItem extends BaseActionItem { const activeViewlet = this.viewletService.getActiveViewlet(); this.actions.forEach(action => { - action.checked = activeViewlet && activeViewlet.getId() === action.id; + action.radio = activeViewlet && activeViewlet.getId() === action.id; const badge = this.getBadge(action.viewlet); let suffix: string | number; diff --git a/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts b/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts index 3242cf16db8..61a6e0eb389 100644 --- a/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts +++ b/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts @@ -81,8 +81,8 @@ export class ContextMenuService implements IContextMenuService { const item = new remote.MenuItem({ label: e.label, - checked: !!e.checked, - type: !!e.checked ? 'radio' : void 0, + checked: !!e.checked || !!e.radio, + type: !!e.checked ? 'checkbox' : !!e.radio ? 'radio' : void 0, accelerator, enabled: !!e.enabled, click: (menuItem, win, event) => { -- GitLab