add "Find in Workspace..." to mutli root context menu

fixes #31004
This commit is contained in:
isidor
2017-07-20 16:57:53 +02:00
parent b106857fd1
commit 51df1e19d1
3 changed files with 30 additions and 5 deletions
@@ -29,6 +29,7 @@ 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';
@@ -199,7 +200,11 @@ class ExplorerViewerActionContributor extends ActionBarContributor {
public hasSecondaryActions(context: any): boolean {
let element = context.element;
// Contribute only on file resources
// 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;
@@ -212,9 +217,14 @@ class ExplorerViewerActionContributor extends ActionBarContributor {
let actions: IAction[] = [];
if (this.hasSecondaryActions(context)) {
let fileResource = explorerItemToFileResource(context.element);
let action: Action;
if (context.element instanceof Model) {
action = this._instantiationService.createInstance(searchActions.FindInWorkspaceAction);
} else {
let fileResource = explorerItemToFileResource(context.element);
action = this._instantiationService.createInstance(searchActions.FindInFolderAction, fileResource.resource);
}
let action = this._instantiationService.createInstance(searchActions.FindInFolderAction, fileResource.resource);
action.order = 55;
actions.push(action);
@@ -240,6 +240,21 @@ export class CloseReplaceAction extends Action {
}
}
export class FindInWorkspaceAction extends Action {
public static 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: SearchViewlet) => {
viewlet.searchInFolder(null);
});
}
}
export class FindInFolderAction extends Action {
public static ID = 'filesExplorer.findInFolder';
@@ -247,7 +262,7 @@ export class FindInFolderAction extends Action {
private resource: URI;
constructor(resource: URI, @IInstantiationService private instantiationService: IInstantiationService) {
super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder"));
super(FindInFolderAction.ID, nls.localize('findInFolder', "Find in Folder..."));
this.resource = resource;
}
@@ -839,7 +839,7 @@ export class SearchViewlet extends Viewlet {
public searchInFolder(resource: URI): void {
let folderPath = null;
const workspace = this.contextService.getWorkspace();
if (workspace) {
if (workspace && resource) {
if (workspace.roots.length === 1) {
// Show relative path from the root for single-root mode
folderPath = paths.relative(workspace.roots[0].fsPath, resource.fsPath);