提交 324bf923 编写于 作者: I isidor

open editors: context menu actions for closing

上级 4e9cc698
...@@ -11,7 +11,7 @@ import {IAction, Action} from 'vs/base/common/actions'; ...@@ -11,7 +11,7 @@ import {IAction, Action} from 'vs/base/common/actions';
import treedefaults = require('vs/base/parts/tree/browser/treeDefaults'); import treedefaults = require('vs/base/parts/tree/browser/treeDefaults');
import tree = require('vs/base/parts/tree/browser/tree'); import tree = require('vs/base/parts/tree/browser/tree');
import {IActionProvider} from 'vs/base/parts/tree/browser/actionsRenderer'; import {IActionProvider} from 'vs/base/parts/tree/browser/actionsRenderer';
import {IActionItem, ActionBar} from 'vs/base/browser/ui/actionbar/actionbar'; import {IActionItem, ActionBar, Separator} from 'vs/base/browser/ui/actionbar/actionbar';
import {IKeyboardEvent} from 'vs/base/browser/keyboardEvent'; import {IKeyboardEvent} from 'vs/base/browser/keyboardEvent';
import dom = require('vs/base/browser/dom'); import dom = require('vs/base/browser/dom');
import {IMouseEvent} from 'vs/base/browser/mouseEvent'; import {IMouseEvent} from 'vs/base/browser/mouseEvent';
...@@ -254,7 +254,8 @@ export class Controller extends treedefaults.DefaultController { ...@@ -254,7 +254,8 @@ export class Controller extends treedefaults.DefaultController {
if (event.target && event.target.tagName && event.target.tagName.toLowerCase() === 'input') { if (event.target && event.target.tagName && event.target.tagName.toLowerCase() === 'input') {
return false; return false;
} }
if (!(element instanceof OpenEditor)) { // Check if clicked on some element
if (element === tree.getInput()) {
return false; return false;
} }
...@@ -326,11 +327,26 @@ export class ActionProvider implements IActionProvider { ...@@ -326,11 +327,26 @@ export class ActionProvider implements IActionProvider {
} }
public hasSecondaryActions(tree: tree.ITree, element: any): boolean { public hasSecondaryActions(tree: tree.ITree, element: any): boolean {
return element instanceof OpenEditor; return element instanceof OpenEditor || element instanceof EditorGroup;
} }
public getSecondaryActions(tree: tree.ITree, element: any): TPromise<IAction[]> { public getSecondaryActions(tree: tree.ITree, element: any): TPromise<IAction[]> {
return TPromise.as([]); const result = [];
if (element instanceof EditorGroup) {
result.push(this.instantiationService.createInstance(CloseAllEditorsInGroupAction));
} else {
result.push(this.instantiationService.createInstance(CloseOpenEditorAction));
result.push(new Separator());
result.push(this.instantiationService.createInstance(CloseOtherEditorsInGroupAction));
result.push(this.instantiationService.createInstance(CloseAllEditorsInGroupAction));
result.push(new Separator());
}
result.push(this.instantiationService.createInstance(CloseEditorsInOtherGroupsAction));
result.push(new Separator());
result.push(this.instantiationService.createInstance(CloseAllEditorsAction));
return TPromise.as(result);
} }
public getActionItem(tree: tree.ITree, element: any, action: IAction): IActionItem { public getActionItem(tree: tree.ITree, element: any, action: IAction): IActionItem {
...@@ -351,3 +367,58 @@ class CloseOpenEditorAction extends Action { ...@@ -351,3 +367,58 @@ class CloseOpenEditorAction extends Action {
return this.editorService.closeEditor(position, openEditor.editorInput); return this.editorService.closeEditor(position, openEditor.editorInput);
} }
} }
class CloseOtherEditorsInGroupAction extends Action {
public static ID = 'workbench.files.action.closeOtherEditorsInGroup';
constructor(@IWorkbenchEditorService private editorService: IWorkbenchEditorService) {
super(CloseOtherEditorsInGroupAction.ID, nls.localize('closeOtherEditorsInGroup', "Close Other Editors in Group"));
}
public run(openEditor: OpenEditor): TPromise<any> {
const position = this.editorService.getStacksModel().positionOfGroup(openEditor.editorGroup);
return this.editorService.closeEditors(position, openEditor.editorInput);
}
}
class CloseAllEditorsInGroupAction extends Action {
public static ID = 'workbench.files.action.closeAllEditorsInGroup';
constructor(@IWorkbenchEditorService private editorService: IWorkbenchEditorService) {
super(CloseAllEditorsInGroupAction.ID, nls.localize('closeAllEditorsInGroup', "Close All Editors in Group"));
}
public run(openEditor: OpenEditor): TPromise<any> {
const position = this.editorService.getStacksModel().positionOfGroup(openEditor.editorGroup);
return this.editorService.closeEditors(position);
}
}
class CloseEditorsInOtherGroupsAction extends Action {
public static ID = 'workbench.files.action.closeEditorsInOtherGroups';
constructor(@IWorkbenchEditorService private editorService: IWorkbenchEditorService) {
super(CloseEditorsInOtherGroupsAction.ID, nls.localize('closeEditorsInOtherGroups', "Close Editors in Other Groups"));
}
public run(openEditor: OpenEditor): TPromise<any> {
const position = this.editorService.getStacksModel().positionOfGroup(openEditor.editorGroup);
return this.editorService.closeAllEditors(position);
}
}
class CloseAllEditorsAction extends Action {
public static ID = 'workbench.files.action.closeAllEditors';
constructor(@IWorkbenchEditorService private editorService: IWorkbenchEditorService) {
super(CloseAllEditorsAction.ID, nls.localize('closeAllEditors', "Close All Editors"));
}
public run(): TPromise<any> {
return this.editorService.closeAllEditors();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册