diff --git a/src/vs/workbench/parts/search/electron-browser/search.contribution.ts b/src/vs/workbench/parts/search/electron-browser/search.contribution.ts index 7ec9eebcb5e91644a1858de509d35d9038ebb0c9..fc281c3c9af3c08c3135935c0a76eb6071074031 100644 --- a/src/vs/workbench/parts/search/electron-browser/search.contribution.ts +++ b/src/vs/workbench/parts/search/electron-browser/search.contribution.ts @@ -12,17 +12,14 @@ import { ViewletRegistry, Extensions as ViewletExtensions, ViewletDescriptor } f import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import nls = require('vs/nls'); import { TPromise } from 'vs/base/common/winjs.base'; -import { IAction, Action } from 'vs/base/common/actions'; +import { Action } from 'vs/base/common/actions'; import * as objects from 'vs/base/common/objects'; -import { explorerItemToFileResource } from 'vs/workbench/parts/files/common/files'; -import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; -import { Separator } from 'vs/base/browser/ui/actionbar/actionbar'; -import { Scope, IActionBarRegistry, Extensions as ActionBarExtensions, ActionBarContributor } from 'vs/workbench/browser/actions'; +import { explorerItemToFileResource, ExplorerFolderContext, ExplorerRootContext } from 'vs/workbench/parts/files/common/files'; +import { SyncActionDescriptor, MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions'; import { QuickOpenHandlerDescriptor, IQuickOpenRegistry, Extensions as QuickOpenExtensions } from 'vs/workbench/browser/quickopen'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { getSelectionSearchString } from 'vs/editor/contrib/find/findController'; @@ -30,7 +27,6 @@ import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; import { ITree } from 'vs/base/parts/tree/browser/tree'; import * as searchActions from 'vs/workbench/parts/search/browser/searchActions'; -import { Model } from 'vs/workbench/parts/files/common/explorerModel'; import * as Constants from 'vs/workbench/parts/search/common/constants'; import { registerContributions as replaceContributions } from 'vs/workbench/parts/search/browser/replaceContributions'; import { registerContributions as searchWidgetContributions } from 'vs/workbench/parts/search/browser/searchWidget'; @@ -45,9 +41,12 @@ import { OpenSymbolHandler } from 'vs/workbench/parts/search/browser/openSymbolH import { OpenAnythingHandler } from 'vs/workbench/parts/search/browser/openAnythingHandler'; import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions'; import { getWorkspaceSymbols } from 'vs/workbench/parts/search/common/search'; -import { illegalArgument } from 'vs/base/common/errors'; -import { FindInFolderAction, findInFolderCommand, FindInWorkspaceAction } from 'vs/workbench/parts/search/electron-browser/searchActions'; -import { WorkbenchListFocusContextKey } from 'vs/platform/list/browser/listService'; +import { illegalArgument, onUnexpectedError } from 'vs/base/common/errors'; +import { WorkbenchListFocusContextKey, IListService } from 'vs/platform/list/browser/listService'; +import URI from 'vs/base/common/uri'; +import { relative } from 'path'; +import { dirname } from 'vs/base/common/resources'; +import { ResourceContextKey } from 'vs/workbench/common/resources'; registerSingleton(ISearchWorkbenchService, SearchWorkbenchService); replaceContributions(); @@ -183,54 +182,62 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ } }); -CommandsRegistry.registerCommand(FindInFolderAction.ID, findInFolderCommand); - -class ExplorerViewerActionContributor extends ActionBarContributor { - private _instantiationService: IInstantiationService; - - constructor( @IInstantiationService instantiationService: IInstantiationService, @IWorkspaceContextService contextService: IWorkspaceContextService) { - super(); - - this._instantiationService = instantiationService; - } - - public hasSecondaryActions(context: any): boolean { - let element = context.element; - - // Contribute only on file resources and model (context menu for multi root) - if (element instanceof Model) { - return true; - } - - let fileResource = explorerItemToFileResource(element); - if (!fileResource) { - return false; +const FIND_IN_FOLDER_ID = 'filesExplorer.findInFolder'; +CommandsRegistry.registerCommand({ + id: FIND_IN_FOLDER_ID, + handler: (accessor, resource?: URI) => { + const listService = accessor.get(IListService); + const viewletService = accessor.get(IViewletService); + + if (!URI.isUri(resource)) { + const lastFocusedList = listService.lastFocusedList; + const focus = lastFocusedList ? lastFocusedList.getFocus() : void 0; + if (focus) { + const file = explorerItemToFileResource(focus); + if (file) { + resource = file.isDirectory ? file.resource : dirname(file.resource); + } + } } - return fileResource.isDirectory && fileResource.resource.scheme === 'file'; - } - - public getSecondaryActions(context: any): IAction[] { - let actions: IAction[] = []; - - if (this.hasSecondaryActions(context)) { - let action: Action; - if (context.element instanceof Model) { - action = this._instantiationService.createInstance(FindInWorkspaceAction); - } else { - let fileResource = explorerItemToFileResource(context.element); - action = this._instantiationService.createInstance(FindInFolderAction, fileResource.resource); + viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { + if (resource) { + (viewlet as SearchViewlet).searchInFolder(resource, (from, to) => relative(from, to)); } + }).done(null, onUnexpectedError); + } +}); - action.order = 55; - actions.push(action); +const FIND_IN_WORKSPACE_ID = 'filesExplorer.findInWorkspace'; +CommandsRegistry.registerCommand({ + id: FIND_IN_WORKSPACE_ID, + handler: (accessor, ) => { + const viewletService = accessor.get(IViewletService); + return viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { + (viewlet as SearchViewlet).searchInFolder(null, (from, to) => relative(from, to)); + }); + } +}); - actions.push(new Separator('', 56)); - } +MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { + group: '3_find', + order: 20, + command: { + id: FIND_IN_FOLDER_ID, + title: nls.localize('findInFolder', "Find in Folder...") + }, + when: ContextKeyExpr.and(ExplorerFolderContext, ResourceContextKey.Scheme.isEqualTo('file')) +}); - return actions; - } -} +MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { + group: '3_find', + order: 20, + command: { + id: FIND_IN_WORKSPACE_ID, + title: nls.localize('findInWorkspace', "Find in Workspace...") + }, + when: ContextKeyExpr.and(ExplorerRootContext, ExplorerFolderContext.toNegated()) +}); const ACTION_ID = 'workbench.action.showAllSymbols'; const ACTION_LABEL = nls.localize('showTriggerActions', "Go to Symbol in Workspace..."); @@ -327,10 +334,6 @@ registry.registerWorkbenchAction(new SyncActionDescriptor(searchActions.ShowPrev registry.registerWorkbenchAction(new SyncActionDescriptor(ShowAllSymbolsAction, ACTION_ID, ACTION_LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_T }), 'Go to Symbol in Workspace...'); -// Contribute to Explorer Viewer -const actionBarRegistry = Registry.as(ActionBarExtensions.Actionbar); -actionBarRegistry.registerActionBarContributor(Scope.VIEWER, ExplorerViewerActionContributor); - // Register Quick Open Handler Registry.as(QuickOpenExtensions.Quickopen).registerDefaultQuickOpenHandler( new QuickOpenHandlerDescriptor( diff --git a/src/vs/workbench/parts/search/electron-browser/searchActions.ts b/src/vs/workbench/parts/search/electron-browser/searchActions.ts deleted file mode 100644 index ad6bc5404c42551d93d6156ae82226bc0200b5ca..0000000000000000000000000000000000000000 --- a/src/vs/workbench/parts/search/electron-browser/searchActions.ts +++ /dev/null @@ -1,72 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import nls = require('vs/nls'); -import errors = require('vs/base/common/errors'); -import resources = require('vs/base/common/resources'); -import { TPromise } from 'vs/base/common/winjs.base'; -import URI from 'vs/base/common/uri'; -import { Action } from 'vs/base/common/actions'; -import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; -import { SearchViewlet } from 'vs/workbench/parts/search/browser/searchViewlet'; -import * as Constants from 'vs/workbench/parts/search/common/constants'; -import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IListService } from 'vs/platform/list/browser/listService'; -import { explorerItemToFileResource } from 'vs/workbench/parts/files/common/files'; -import { relative } from 'path'; - -export class FindInFolderAction extends Action { - - public static readonly ID = 'filesExplorer.findInFolder'; - - private resource: URI; - - constructor(resource: URI, @IInstantiationService private instantiationService: IInstantiationService) { - super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder...")); - - this.resource = resource; - } - - public run(event?: any): TPromise { - return this.instantiationService.invokeFunction.apply(this.instantiationService, [findInFolderCommand, this.resource]); - } -} - -export const findInFolderCommand = (accessor: ServicesAccessor, resource?: URI) => { - const listService = accessor.get(IListService); - const viewletService = accessor.get(IViewletService); - - if (!URI.isUri(resource)) { - const lastFocusedList = listService.lastFocusedList; - const focus = lastFocusedList ? lastFocusedList.getFocus() : void 0; - if (focus) { - const file = explorerItemToFileResource(focus); - if (file) { - resource = file.isDirectory ? file.resource : resources.dirname(file.resource); - } - } - } - - viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { - if (resource) { - (viewlet as SearchViewlet).searchInFolder(resource, (from, to) => relative(from, to)); - } - }).done(null, errors.onUnexpectedError); -}; - -export class FindInWorkspaceAction extends Action { - - public static readonly ID = 'filesExplorer.findInWorkspace'; - - constructor( @IViewletService private viewletService: IViewletService) { - super(FindInWorkspaceAction.ID, nls.localize('findInWorkspace', "Find in Workspace...")); - } - - public run(event?: any): TPromise { - return this.viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => { - (viewlet as SearchViewlet).searchInFolder(null, (from, to) => relative(from, to)); - }); - } -} \ No newline at end of file