diff --git a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts index c8085982e03..ab7fc49aa5b 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts @@ -35,7 +35,7 @@ import {KeyMod} from 'vs/base/common/keyCodes'; import {QuickOpenHandler, QuickOpenHandlerDescriptor, IQuickOpenRegistry, Extensions, EditorQuickOpenEntry} from 'vs/workbench/browser/quickopen'; import errors = require('vs/base/common/errors'); import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService'; -import {IPickOpenEntry, IInputOptions, IQuickOpenService, IPickOptions, IShowOptions} from 'vs/workbench/services/quickopen/common/quickOpenService'; +import {IPickOpenEntry, IFilePickOpenEntry, IInputOptions, IQuickOpenService, IPickOptions, IShowOptions} from 'vs/workbench/services/quickopen/common/quickOpenService'; import {IConfigurationService} from 'vs/platform/configuration/common/configuration'; import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; import {IMessageService, Severity} from 'vs/platform/message/common/message'; @@ -273,7 +273,8 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe this.telemetryService ); - this.pickOpenWidget.create(); + const pickOpenContainer = this.pickOpenWidget.create(); + DOM.addClass(pickOpenContainer, 'show-file-icons'); } // Update otherwise @@ -325,9 +326,9 @@ export class QuickOpenController extends WorkbenchComponent implements IQuickOpe // Model const model = new QuickOpenModel(); - const entries = picks.map(e => new PickOpenEntry(e, () => progress(e))); + const entries = picks.map(e => this.instantiationService.createInstance(PickOpenEntry, e, () => progress(e))); if (picks.length === 0) { - entries.push(new PickOpenEntry({ label: nls.localize('emptyPicks', "There are no entries to pick from") })); + entries.push(this.instantiationService.createInstance(PickOpenEntry, { label: nls.localize('emptyPicks', "There are no entries to pick from") }, null)); } model.setEntries(entries); @@ -941,10 +942,13 @@ class PickOpenEntry extends PlaceholderQuickOpenEntry { private hasSeparator: boolean; private separatorLabel: string; private alwaysShow: boolean; + private resource: URI; + private isFolder: boolean; constructor( item: IPickOpenEntry, - private onPreview?: () => void + private onPreview: () => void, + @IModeService private modeService: IModeService ) { super(item.label); @@ -953,6 +957,16 @@ class PickOpenEntry extends PlaceholderQuickOpenEntry { this.hasSeparator = item.separator && item.separator.border; this.separatorLabel = item.separator && item.separator.label; this.alwaysShow = item.alwaysShow; + + const fileItem = item; + this.resource = fileItem.resource; + this.isFolder = fileItem.isFolder; + } + + public getLabelOptions(): IIconLabelOptions { + return { + extraClasses: this.resource ? getIconClasses(this.modeService, this.resource, this.isFolder) : [] + }; } public get shouldRunWithContext(): IEntryRunContext { @@ -1026,7 +1040,7 @@ export class EditorHistoryEntry extends EditorQuickOpenEntry { public getLabelOptions(): IIconLabelOptions { return { - extraClasses: getIconClasses(this.modeService, this.resource), + extraClasses: getIconClasses(this.modeService, this.resource) }; } diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index dd5fb9bf23e..30fc4358ee4 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -23,7 +23,7 @@ import {IConfigurationService} from 'vs/platform/configuration/common/configurat import {CommandsRegistry} from 'vs/platform/commands/common/commands'; import paths = require('vs/base/common/paths'); import {isMacintosh} from 'vs/base/common/platform'; -import {IQuickOpenService, IPickOpenEntry, ISeparator} from 'vs/workbench/services/quickopen/common/quickOpenService'; +import {IQuickOpenService, IPickOpenEntry, IFilePickOpenEntry, ISeparator} from 'vs/workbench/services/quickopen/common/quickOpenService'; import {KeyMod} from 'vs/base/common/keyCodes'; import {ServicesAccessor} from 'vs/platform/instantiation/common/instantiation'; import * as browser from 'vs/base/browser/browser'; @@ -428,8 +428,10 @@ export class OpenRecentAction extends Action { } private openRecent(recentFiles: string[], recentFolders: string[]): void { - function toPick(path: string, separator: ISeparator): IPickOpenEntry { + function toPick(path: string, separator: ISeparator, isFolder: boolean): IFilePickOpenEntry { return { + resource: URI.file(path), + isFolder, label: paths.basename(path), description: paths.dirname(path), separator, @@ -443,8 +445,8 @@ export class OpenRecentAction extends Action { ipc.send('vscode:windowOpen', [path], newWindow); } - const folderPicks: IPickOpenEntry[] = recentFolders.map((p, index) => toPick(p, index === 0 ? { label: nls.localize('folders', "folders") } : void 0)); - const filePicks: IPickOpenEntry[] = recentFiles.map((p, index) => toPick(p, index === 0 ? { label: nls.localize('files', "files"), border: true } : void 0)); + const folderPicks: IFilePickOpenEntry[] = recentFolders.map((p, index) => toPick(p, index === 0 ? { label: nls.localize('folders', "folders") } : void 0, true)); + const filePicks: IFilePickOpenEntry[] = recentFiles.map((p, index) => toPick(p, index === 0 ? { label: nls.localize('files', "files"), border: true } : void 0, false)); const hasWorkspace = !!this.contextService.getWorkspace(); diff --git a/src/vs/workbench/parts/themes/electron-browser/themes.contribution.ts b/src/vs/workbench/parts/themes/electron-browser/themes.contribution.ts index f4bdc21f7fa..aeecd814304 100644 --- a/src/vs/workbench/parts/themes/electron-browser/themes.contribution.ts +++ b/src/vs/workbench/parts/themes/electron-browser/themes.contribution.ts @@ -42,7 +42,7 @@ class SelectColorThemeAction extends Action { const currentThemeId = this.themeService.getColorTheme(); const currentTheme = themes.filter(theme => theme.id === currentThemeId)[0]; -const pickInMarketPlace = findInMarketplacePick(this.viewletService, 'category:themes'); + const pickInMarketPlace = findInMarketplacePick(this.viewletService, 'category:themes'); const picks: IPickOpenEntry[] = themes .map(theme => ({ id: theme.id, label: theme.label, description: theme.description })) @@ -64,12 +64,12 @@ const pickInMarketPlace = findInMarketplacePick(this.viewletService, 'category:t picks.push(pickInMarketPlace); } - return this.quickOpenService.pick(picks, { placeHolder, autoFocus: { autoFocusIndex }}) + return this.quickOpenService.pick(picks, { placeHolder, autoFocus: { autoFocusIndex } }) .then( - theme => delayer.trigger(() => selectTheme(theme || currentTheme, true), 0), - null, - theme => delayer.trigger(() => selectTheme(theme, false)) - ); + theme => delayer.trigger(() => selectTheme(theme || currentTheme, true), 0), + null, + theme => delayer.trigger(() => selectTheme(theme, false)) + ); }); } } @@ -121,11 +121,11 @@ class SelectIconThemeAction extends Action { picks.push(pickInMarketPlace); } - return this.quickOpenService.pick(picks, { placeHolder, autoFocus: { autoFocusIndex }}) + return this.quickOpenService.pick(picks, { placeHolder, autoFocus: { autoFocusIndex } }) .then( - theme => delayer.trigger(() => selectTheme(theme || currentTheme, true), 0), - null, - theme => delayer.trigger(() => selectTheme(theme, false)) + theme => delayer.trigger(() => selectTheme(theme || currentTheme, true), 0), + null, + theme => delayer.trigger(() => selectTheme(theme, false)) ); }); } diff --git a/src/vs/workbench/services/quickopen/common/quickOpenService.ts b/src/vs/workbench/services/quickopen/common/quickOpenService.ts index 7394dd83875..63521a59bae 100644 --- a/src/vs/workbench/services/quickopen/common/quickOpenService.ts +++ b/src/vs/workbench/services/quickopen/common/quickOpenService.ts @@ -5,11 +5,17 @@ 'use strict'; import {TPromise} from 'vs/base/common/winjs.base'; +import uri from 'vs/base/common/uri'; import Event from 'vs/base/common/event'; import {CancellationToken} from 'vs/base/common/cancellation'; import {IQuickNavigateConfiguration, IAutoFocus, IEntryRunContext} from 'vs/base/parts/quickopen/common/quickOpen'; import {createDecorator} from 'vs/platform/instantiation/common/instantiation'; +export interface IFilePickOpenEntry extends IPickOpenEntry { + resource: uri; + isFolder?: boolean; +} + export interface IPickOpenEntry { id?: string; label: string;