From 4e30275a20bb3da2426af4af7a0de8e572e551c3 Mon Sep 17 00:00:00 2001 From: isidor Date: Fri, 1 Jul 2016 12:20:07 +0200 Subject: [PATCH] Do not use filter icon, but elipses and move clear action up fixes #8386 --- .../electron-browser/extensionsActions.ts | 37 +++++-------------- .../electron-browser/extensionsViewlet.ts | 37 +++++++++---------- .../electron-browser/media/clear-inverse.svg | 1 + .../electron-browser/media/clear.svg | 1 + .../media/extensionActions.css | 12 +++--- .../media/filter-extensions-inverse.svg | 9 ----- .../media/filter-extensions.svg | 9 ----- 7 files changed, 35 insertions(+), 71 deletions(-) create mode 100644 src/vs/workbench/parts/extensions/electron-browser/media/clear-inverse.svg create mode 100644 src/vs/workbench/parts/extensions/electron-browser/media/clear.svg delete mode 100644 src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions-inverse.svg delete mode 100644 src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions.svg diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts index 381bbf6bf49..b456f786e76 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsActions.ts @@ -238,17 +238,18 @@ export class InstallExtensionsAction extends OpenExtensionsViewletAction { static LABEL = localize('installExtensions', "Install Extensions"); } -export class ShowInstalledExtensionsAction extends Action { +export class ClearExtensionsInputAction extends Action { - static ID = 'workbench.extensions.action.showInstalledExtensions'; - static LABEL = localize('showInstalledExtensions', "Show Installed Extensions"); + static ID = 'workbench.extensions.action.clearExtensionsInput'; + static LABEL = localize('clearExtensionsInput', "Clear Extensions Input"); constructor( id: string, label: string, - @IViewletService private viewletService: IViewletService + @IViewletService private viewletService: IViewletService, + @IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService ) { - super(id, label, null, true); + super(id, label, 'clear-extensions', true); } run(): TPromise { @@ -260,9 +261,6 @@ export class ShowInstalledExtensionsAction extends Action { }); } - protected isEnabled(): boolean { - return true; - } } export class ListOutdatedExtensionsAction extends Action { @@ -347,24 +345,7 @@ export class ShowExtensionRecommendationsAction extends Action { } } -export class FilterExtensionsAction extends Action { - - static ID = 'workbench.extensions.action.filterExtensions'; - static LABEL = localize('filterExtensions', "Filter Extensions"); - - constructor( - id: string, - label: string, - @IViewletService private viewletService: IViewletService - ) { - super(id, label, null, true); - } - - run(): TPromise { - return TPromise.as(null); - } - - protected isEnabled(): boolean { - return true; - } +export class ShowInstalledExtensionsAction extends ClearExtensionsInputAction { + static ID = 'workbench.extensions.action.showInstalledExtensions'; + static LABEL = localize('showInstalledExtensions', "Show Installed Extensions"); } \ No newline at end of file diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts index 7d2477dbf66..537eb0f198b 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts @@ -13,8 +13,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { Builder, Dimension } from 'vs/base/browser/builder'; import { onUnexpectedError } from 'vs/base/common/errors'; import { mapEvent, filterEvent } from 'vs/base/common/event'; -import { IAction, IActionItem } from 'vs/base/common/actions'; -import { DropdownMenuActionItem } from 'vs/base/browser/ui/toolbar/toolbar'; +import { IAction } from 'vs/base/common/actions'; import { domEvent } from 'vs/base/browser/event'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyCode } from 'vs/base/common/keyCodes'; @@ -26,11 +25,10 @@ import { PagedList } from 'vs/base/browser/ui/list/listPaging'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { Delegate, Renderer } from './extensionsList'; import { IExtensionsWorkbenchService, IExtension, IExtensionsViewlet, VIEWLET_ID } from './extensions'; -import { ShowExtensionRecommendationsAction, ShowPopularExtensionsAction, ShowInstalledExtensionsAction, ListOutdatedExtensionsAction, FilterExtensionsAction } from './extensionsActions'; +import { ShowExtensionRecommendationsAction, ShowPopularExtensionsAction, ShowInstalledExtensionsAction, ListOutdatedExtensionsAction, ClearExtensionsInputAction } from './extensionsActions'; import { IExtensionManagementService, IExtensionGalleryService, SortBy } from 'vs/platform/extensionManagement/common/extensionManagement'; import { ExtensionsInput } from './extensionsInput'; import { IProgressService } from 'vs/platform/progress/common/progress'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { @@ -42,6 +40,7 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { private list: PagedList; private disposables: IDisposable[] = []; private focusInvokedByTab: boolean; + private clearAction: ClearExtensionsInputAction; constructor( @ITelemetryService telemetryService: ITelemetryService, @@ -50,8 +49,7 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { @IProgressService private progressService: IProgressService, @IInstantiationService private instantiationService: IInstantiationService, @IWorkbenchEditorService private editorService: IWorkbenchEditorService, - @IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService, - @IContextMenuService private contextMenuService: IContextMenuService + @IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService ) { super(VIEWLET_ID, telemetryService); this.searchDelayer = new ThrottledDelayer(500); @@ -65,7 +63,6 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { const header = append(this.root, $('.header')); this.searchBox = append(header, $('input.search-box')); - this.searchBox.type = 'search'; this.searchBox.placeholder = localize('searchExtensions', "Search Extensions in Marketplace"); this.extensionsBox = append(this.root, $('.extensions')); @@ -125,22 +122,22 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { } getActions(): IAction[] { + if (!this.clearAction) { + this.clearAction = this.instantiationService.createInstance(ClearExtensionsInputAction, ClearExtensionsInputAction.ID, ClearExtensionsInputAction.LABEL); + } + return [ - this.instantiationService.createInstance(FilterExtensionsAction, FilterExtensionsAction.ID, FilterExtensionsAction.LABEL) + this.clearAction ]; } - getActionItem(action: IAction): IActionItem { - if (action.id === FilterExtensionsAction.ID) { - return new DropdownMenuActionItem(action, [ - this.instantiationService.createInstance(ShowInstalledExtensionsAction, ShowInstalledExtensionsAction.ID, ShowInstalledExtensionsAction.LABEL), - this.instantiationService.createInstance(ListOutdatedExtensionsAction, ListOutdatedExtensionsAction.ID, ListOutdatedExtensionsAction.LABEL), - this.instantiationService.createInstance(ShowExtensionRecommendationsAction, ShowExtensionRecommendationsAction.ID, ShowExtensionRecommendationsAction.LABEL), - this.instantiationService.createInstance(ShowPopularExtensionsAction, ShowPopularExtensionsAction.ID, ShowPopularExtensionsAction.LABEL) - ], this.contextMenuService, (action: IAction) => this.getActionItem(action), this.actionRunner, null, 'filter-extensions'); - } - - return null; + getSecondaryActions(): IAction[] { + return [ + this.instantiationService.createInstance(ShowInstalledExtensionsAction, ShowInstalledExtensionsAction.ID, ShowInstalledExtensionsAction.LABEL), + this.instantiationService.createInstance(ListOutdatedExtensionsAction, ListOutdatedExtensionsAction.ID, ListOutdatedExtensionsAction.LABEL), + this.instantiationService.createInstance(ShowExtensionRecommendationsAction, ShowExtensionRecommendationsAction.ID, ShowExtensionRecommendationsAction.LABEL), + this.instantiationService.createInstance(ShowPopularExtensionsAction, ShowPopularExtensionsAction.ID, ShowPopularExtensionsAction.LABEL) + ]; } search(text: string, immediate = false): void { @@ -150,6 +147,8 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { private triggerSearch(immediate = false, suggestPopular = false): void { const text = this.searchBox.value; + // Joao do not kill me for this hack -isidor + this.clearAction.enabled = !!text; this.searchDelayer.trigger(() => this.doSearch(text, suggestPopular), immediate || !text ? 0 : 500); } diff --git a/src/vs/workbench/parts/extensions/electron-browser/media/clear-inverse.svg b/src/vs/workbench/parts/extensions/electron-browser/media/clear-inverse.svg new file mode 100644 index 00000000000..7df4455d7c3 --- /dev/null +++ b/src/vs/workbench/parts/extensions/electron-browser/media/clear-inverse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vs/workbench/parts/extensions/electron-browser/media/clear.svg b/src/vs/workbench/parts/extensions/electron-browser/media/clear.svg new file mode 100644 index 00000000000..6e4d3a1d481 --- /dev/null +++ b/src/vs/workbench/parts/extensions/electron-browser/media/clear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/vs/workbench/parts/extensions/electron-browser/media/extensionActions.css b/src/vs/workbench/parts/extensions/electron-browser/media/extensionActions.css index 6b36f9017e2..fc0b00d496f 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/media/extensionActions.css +++ b/src/vs/workbench/parts/extensions/electron-browser/media/extensionActions.css @@ -58,12 +58,12 @@ } -.monaco-action-bar .action-item .action-label.filter-extensions { - background: url('filter-extensions.svg') center center no-repeat; +.monaco-action-bar .action-item .action-label.clear-extensions { + background: url('clear.svg') center center no-repeat; } -.vs-dark .monaco-action-bar .action-item .action-label.filter-extensions { - background: url('filter-extensions-inverse.svg') center center no-repeat; +.vs-dark .monaco-action-bar .action-item .action-label.clear-extensions { + background: url('clear-inverse.svg') center center no-repeat; } .monaco-action-bar .action-item:not(.disabled):hover .action-label.extension-action.enable { @@ -79,6 +79,6 @@ display: none; } -.hc-black .monaco-action-bar .action-item .action-label.filter-extensions { - background: url('filter-extensions-inverse.svg') center center no-repeat; +.hc-black .monaco-action-bar .action-item .action-label.clear-extensions { + background: url('clear-inverse.svg') center center no-repeat; } \ No newline at end of file diff --git a/src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions-inverse.svg b/src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions-inverse.svg deleted file mode 100644 index 4dc4d99cb84..00000000000 --- a/src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions-inverse.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions.svg b/src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions.svg deleted file mode 100644 index 5c929367283..00000000000 --- a/src/vs/workbench/parts/extensions/electron-browser/media/filter-extensions.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - -- GitLab