diff --git a/src/vs/workbench/browser/parts/editor/baseEditor.ts b/src/vs/workbench/browser/parts/editor/baseEditor.ts index fdd52c24c69..eb288e1763a 100644 --- a/src/vs/workbench/browser/parts/editor/baseEditor.ts +++ b/src/vs/workbench/browser/parts/editor/baseEditor.ts @@ -131,14 +131,6 @@ export abstract class BaseEditor extends Panel implements IEditor { return this._position; } - /** - * Controls if the editor shows an action to split the input of the editor to the side. Subclasses should override - * if they are capable of showing the same editor input side by side. - */ - public supportsSplitEditor(): boolean { - return false; - } - public dispose(): void { this._input = null; this._options = null; diff --git a/src/vs/workbench/browser/parts/editor/editorActions.ts b/src/vs/workbench/browser/parts/editor/editorActions.ts index 4b165a4f9bb..924d3a7412f 100644 --- a/src/vs/workbench/browser/parts/editor/editorActions.ts +++ b/src/vs/workbench/browser/parts/editor/editorActions.ts @@ -7,7 +7,6 @@ import {TPromise} from 'vs/base/common/winjs.base'; import nls = require('vs/nls'); import {Action} from 'vs/base/common/actions'; -import {BaseEditor} from 'vs/workbench/browser/parts/editor/baseEditor'; import {EditorInput, getUntitledOrFileResource, TextEditorOptions, EditorOptions, IEditorIdentifier} from 'vs/workbench/common/editor'; import {QuickOpenEntryGroup} from 'vs/base/parts/quickopen/browser/quickOpenModel'; import {EditorQuickOpenEntry, EditorQuickOpenEntryGroup, IEditorQuickOpenEntry, QuickOpenAction} from 'vs/workbench/browser/quickopen'; @@ -49,7 +48,7 @@ export class SplitEditorAction extends Action { } // Return if the editor to split does not support split editing - if (!(editorToSplit).supportsSplitEditor()) { + if (editorToSplit.input instanceof EditorInput && !(editorToSplit.input).supportsSplitEditor()) { return TPromise.as(true); } @@ -215,7 +214,7 @@ export abstract class BaseFocusSideGroupAction extends Action { } // Require the reference editor to be visible and supporting split editor - if (referenceEditor && (referenceEditor).supportsSplitEditor()) { + if (referenceEditor && (referenceEditor.input).supportsSplitEditor()) { return this.editorService.openEditor(referenceEditor.input, null, this.getTargetEditorSide()); } diff --git a/src/vs/workbench/browser/parts/editor/iframeEditor.ts b/src/vs/workbench/browser/parts/editor/iframeEditor.ts index 4c25caabda4..de06bf54d82 100644 --- a/src/vs/workbench/browser/parts/editor/iframeEditor.ts +++ b/src/vs/workbench/browser/parts/editor/iframeEditor.ts @@ -261,10 +261,6 @@ export class IFrameEditor extends BaseEditor { setTimeout(() => this.reload(true)); } - public supportsSplitEditor(): boolean { - return true; - } - /** * Reloads the contents of the iframe in this editor by reapplying the input. */ diff --git a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts index 168cdf3af8d..bcc66e4da2f 100644 --- a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts @@ -10,9 +10,8 @@ import {prepareActions} from 'vs/workbench/browser/actionBarRegistry'; import errors = require('vs/base/common/errors'); import arrays = require('vs/base/common/arrays'); import {Builder, $} from 'vs/base/browser/builder'; -import {IEditorGroup} from 'vs/workbench/common/editor'; +import {IEditorGroup, EditorInput} from 'vs/workbench/common/editor'; import DOM = require('vs/base/browser/dom'); -import {BaseEditor} from 'vs/workbench/browser/parts/editor/baseEditor'; import {ToolBar} from 'vs/base/browser/ui/toolbar/toolbar'; import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService'; import {IContextMenuService} from 'vs/platform/contextview/browser/contextView'; @@ -153,8 +152,6 @@ export class NoTabsTitleControl extends TitleControl { const isPinned = group.isPinned(group.activeEditor); const isActive = this.stacks.isActive(group); - const position = this.stacks.positionOfGroup(group); - const control = this.editorService.getVisibleEditors()[position]; // Pinned state if (isPinned) { @@ -194,7 +191,7 @@ export class NoTabsTitleControl extends TitleControl { // Update Editor Actions Toolbar const editorActions = this.getEditorActions(group); const primaryEditorActions = prepareActions(editorActions.primary); - if (isActive && control instanceof BaseEditor && control.supportsSplitEditor()) { + if (isActive && editor instanceof EditorInput && editor.supportsSplitEditor()) { primaryEditorActions.push(this.splitEditorAction); } primaryEditorActions.push(this.closeEditorAction); diff --git a/src/vs/workbench/browser/parts/editor/stringEditor.ts b/src/vs/workbench/browser/parts/editor/stringEditor.ts index f530f11c46f..0dcd4ef01db 100644 --- a/src/vs/workbench/browser/parts/editor/stringEditor.ts +++ b/src/vs/workbench/browser/parts/editor/stringEditor.ts @@ -162,10 +162,6 @@ export class StringEditor extends BaseTextEditor { } } - public supportsSplitEditor(): boolean { - return true; - } - public clearInput(): void { // Keep editor view state in settings to restore when coming back diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 05a58d8e1b2..eeccf692ba9 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -13,7 +13,7 @@ import errors = require('vs/base/common/errors'); import {Builder} from 'vs/base/browser/builder'; import {BaseEditor, IEditorInputActionContext} from 'vs/workbench/browser/parts/editor/baseEditor'; import {RunOnceScheduler} from 'vs/base/common/async'; -import {IEditorStacksModel, IEditorGroup} from 'vs/workbench/common/editor'; +import {IEditorStacksModel, IEditorGroup, EditorInput} from 'vs/workbench/common/editor'; import {EventType as BaseEventType} from 'vs/base/common/events'; import {IActionItem, ActionsOrientation, Separator} from 'vs/base/browser/ui/actionbar/actionbar'; import {ToolBar} from 'vs/base/browser/ui/toolbar/toolbar'; @@ -208,8 +208,7 @@ export abstract class TitleControl { } protected getGroupActions(group: IEditorGroup): IToolbarActions { - const position = this.stacks.positionOfGroup(group); - const editor = this.editorService.getVisibleEditors()[position]; + const editor = group.activeEditor; const primary: IAction[] = []; const isOverflowing = group.count > 1; @@ -241,7 +240,7 @@ export abstract class TitleControl { } // Splitting - if (editor && editor instanceof BaseEditor && editor.supportsSplitEditor()) { + if (editor instanceof EditorInput && editor.supportsSplitEditor()) { primary.push(this.splitEditorAction); } diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 27ea167abb4..cfe30f6c61b 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -121,6 +121,13 @@ export abstract class EditorInput extends EventEmitter implements IEditorInput { this.dispose(); } + /** + * Subclasses can set this to false if it does not make sense to split the editor input. + */ + public supportsSplitEditor(): boolean { + return true; + } + /** * Returns true if this input is identical to the otherInput. */ diff --git a/src/vs/workbench/common/editor/diffEditorInput.ts b/src/vs/workbench/common/editor/diffEditorInput.ts index c3ba06f9578..13e7525dc9a 100644 --- a/src/vs/workbench/common/editor/diffEditorInput.ts +++ b/src/vs/workbench/common/editor/diffEditorInput.ts @@ -153,6 +153,10 @@ export class DiffEditorInput extends BaseDiffEditorInput { }); } + public supportsSplitEditor(): boolean { + return false; + } + public matches(otherInput: any): boolean { if (super.matches(otherInput) === true) { return true; diff --git a/src/vs/workbench/parts/files/browser/editors/binaryFileEditor.ts b/src/vs/workbench/parts/files/browser/editors/binaryFileEditor.ts index 3008bd63ea0..efcceabb886 100644 --- a/src/vs/workbench/parts/files/browser/editors/binaryFileEditor.ts +++ b/src/vs/workbench/parts/files/browser/editors/binaryFileEditor.ts @@ -27,8 +27,4 @@ export class BinaryFileEditor extends BaseBinaryResourceEditor { public getTitle(): string { return this.getInput() ? this.getInput().getName() : nls.localize('binaryFileEditor', "Binary File Viewer"); } - - public supportsSplitEditor(): boolean { - return true; // yes, we can! - } } \ No newline at end of file diff --git a/src/vs/workbench/parts/files/browser/editors/textFileEditor.ts b/src/vs/workbench/parts/files/browser/editors/textFileEditor.ts index 38250413e2f..6766f21deac 100644 --- a/src/vs/workbench/parts/files/browser/editors/textFileEditor.ts +++ b/src/vs/workbench/parts/files/browser/editors/textFileEditor.ts @@ -272,10 +272,6 @@ export class TextFileEditor extends BaseTextEditor { return options; } - public supportsSplitEditor(): boolean { - return true; // yes, we can! - } - /** * Saves the text editor view state under the given key. */ diff --git a/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts b/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts index f3d54595cdb..b8d21d03964 100644 --- a/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts +++ b/src/vs/workbench/parts/html/browser/htmlPreviewPart.ts @@ -68,10 +68,6 @@ export class HtmlPreviewPart extends BaseEditor { super.dispose(); } - public supportsSplitEditor(): boolean { - return true; - } - public createEditor(parent: Builder): void { this._container = document.createElement('div'); this._container.style.paddingLeft = '20px';