提交 60bf96cc 编写于 作者: I isidor

find actions to commands

上级 4897f57c
......@@ -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;
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);
}
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;
}
return fileResource.isDirectory && fileResource.resource.scheme === 'file';
viewletService.openViewlet(Constants.VIEWLET_ID, true).then(viewlet => {
if (resource) {
(viewlet as SearchViewlet).searchInFolder(resource, (from, to) => relative(from, to));
}
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);
}).done(null, onUnexpectedError);
}
});
action.order = 55;
actions.push(action);
actions.push(new Separator('', 56));
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));
});
}
});
return actions;
}
}
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'))
});
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<IActionBarRegistry>(ActionBarExtensions.Actionbar);
actionBarRegistry.registerActionBarContributor(Scope.VIEWER, ExplorerViewerActionContributor);
// Register Quick Open Handler
Registry.as<IQuickOpenRegistry>(QuickOpenExtensions.Quickopen).registerDefaultQuickOpenHandler(
new QuickOpenHandlerDescriptor(
......
/*---------------------------------------------------------------------------------------------
* 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<any> {
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<any> {
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册