Skip to content

Commit 3dae9c1

Browse files
author
Benjamin Pasero
committed
toResource 💄
1 parent 5491507 commit 3dae9c1

20 files changed

Lines changed: 63 additions & 58 deletions

File tree

src/vs/workbench/browser/labels.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as resources from 'vs/base/common/resources';
88
import { IconLabel, IIconLabelValueOptions, IIconLabelCreationOptions } from 'vs/base/browser/ui/iconLabel/iconLabel';
99
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
1010
import { IModeService } from 'vs/editor/common/services/modeService';
11-
import { toResource, IEditorInput } from 'vs/workbench/common/editor';
11+
import { toResource, IEditorInput, SideBySideEditor } from 'vs/workbench/common/editor';
1212
import { PLAINTEXT_MODE_ID } from 'vs/editor/common/modes/modesRegistry';
1313
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
1414
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
@@ -332,7 +332,7 @@ class ResourceLabelWidget extends IconLabel {
332332

333333
setEditor(editor: IEditorInput, options?: IResourceLabelOptions): void {
334334
this.setResource({
335-
resource: withNullAsUndefined(toResource(editor, { supportSideBySide: true })),
335+
resource: withNullAsUndefined(toResource(editor, { supportSideBySide: SideBySideEditor.MASTER })),
336336
name: withNullAsUndefined(editor.getName()),
337337
description: withNullAsUndefined(editor.getDescription())
338338
}, options);

src/vs/workbench/browser/parts/editor/editorPicker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { QuickOpenHandler } from 'vs/workbench/browser/quickopen';
1515
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
1616
import { IEditorGroupsService, IEditorGroup, EditorsOrder, GroupsOrder } from 'vs/workbench/services/editor/common/editorGroupsService';
1717
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
18-
import { EditorInput, toResource } from 'vs/workbench/common/editor';
18+
import { EditorInput, toResource, SideBySideEditor } from 'vs/workbench/common/editor';
1919
import { compareItemsByScore, scoreItem, ScorerCache, prepareQuery } from 'vs/base/parts/quickopen/common/quickOpenScorer';
2020
import { CancellationToken } from 'vs/base/common/cancellation';
2121

@@ -50,7 +50,7 @@ export class EditorPickerEntry extends QuickOpenEntryGroup {
5050
}
5151

5252
getResource() {
53-
return toResource(this.editor, { supportSideBySide: true });
53+
return toResource(this.editor, { supportSideBySide: SideBySideEditor.MASTER });
5454
}
5555

5656
getAriaLabel(): string {

src/vs/workbench/browser/parts/editor/editorStatus.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar';
1414
import { Action } from 'vs/base/common/actions';
1515
import { Language } from 'vs/base/common/platform';
1616
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
17-
import { IFileEditorInput, EncodingMode, IEncodingSupport, toResource, SideBySideEditorInput, IEditor as IBaseEditor, IEditorInput } from 'vs/workbench/common/editor';
17+
import { IFileEditorInput, EncodingMode, IEncodingSupport, toResource, SideBySideEditorInput, IEditor as IBaseEditor, IEditorInput, SideBySideEditor } from 'vs/workbench/common/editor';
1818
import { IDisposable, combinedDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
1919
import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
2020
import { IEditorAction } from 'vs/editor/common/editorCommon';
@@ -769,7 +769,7 @@ export class EditorStatus implements IStatusbarItem {
769769
private onResourceEncodingChange(resource: URI): void {
770770
const activeControl = this.editorService.activeControl;
771771
if (activeControl) {
772-
const activeResource = toResource(activeControl.input, { supportSideBySide: true });
772+
const activeResource = toResource(activeControl.input, { supportSideBySide: SideBySideEditor.MASTER });
773773
if (activeResource && activeResource.toString() === resource.toString()) {
774774
return this.onEncodingChange(<IBaseEditor>activeControl); // only update if the encoding changed for the active resource
775775
}
@@ -847,7 +847,7 @@ export class ChangeModeAction extends Action {
847847
}
848848

849849
const textModel = activeTextEditorWidget.getModel();
850-
const resource = this.editorService.activeEditor ? toResource(this.editorService.activeEditor, { supportSideBySide: true }) : null;
850+
const resource = this.editorService.activeEditor ? toResource(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.MASTER }) : null;
851851

852852
let hasLanguageSupport = !!resource;
853853
if (resource && resource.scheme === Schemas.untitled && !this.untitledEditorService.hasAssociatedFilePath(resource)) {
@@ -971,7 +971,7 @@ export class ChangeModeAction extends Action {
971971
let languageSelection: ILanguageSelection | undefined;
972972
if (pick === autoDetectMode) {
973973
if (textModel) {
974-
const resource = toResource(activeEditor, { supportSideBySide: true });
974+
const resource = toResource(activeEditor, { supportSideBySide: SideBySideEditor.MASTER });
975975
if (resource) {
976976
languageSelection = this.modeService.createByFilepathOrFirstLine(resource.fsPath, textModel.getLineContent(1));
977977
}
@@ -1187,7 +1187,7 @@ export class ChangeEncodingAction extends Action {
11871187
return undefined;
11881188
}
11891189

1190-
const resource = toResource(activeControl!.input, { supportSideBySide: true });
1190+
const resource = toResource(activeControl!.input, { supportSideBySide: SideBySideEditor.MASTER });
11911191

11921192
return timeout(50 /* quick open is sensitive to being opened so soon after another */)
11931193
.then(() => {

src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import 'vs/css!./media/notabstitlecontrol';
7-
import { toResource, Verbosity, IEditorInput, IEditorPartOptions } from 'vs/workbench/common/editor';
7+
import { toResource, Verbosity, IEditorInput, IEditorPartOptions, SideBySideEditor } from 'vs/workbench/common/editor';
88
import { TitleControl, IToolbarActions } from 'vs/workbench/browser/parts/editor/titleControl';
99
import { ResourceLabel, IResourceLabel } from 'vs/workbench/browser/labels';
1010
import { TAB_ACTIVE_FOREGROUND, TAB_UNFOCUSED_ACTIVE_FOREGROUND } from 'vs/workbench/common/theme';
@@ -237,7 +237,7 @@ export class NoTabsTitleControl extends TitleControl {
237237
this.updateEditorDirty(editor);
238238

239239
// Editor Label
240-
const resource = toResource(editor, { supportSideBySide: true });
240+
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.MASTER });
241241
const name = editor.getName() || '';
242242

243243
const { labelFormat } = this.accessor.partOptions;

src/vs/workbench/browser/parts/editor/sideBySideEditor.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { IStorageService } from 'vs/platform/storage/common/storage';
2121
export class SideBySideEditor extends BaseEditor {
2222

2323
static readonly ID: string = 'workbench.editor.sidebysideEditor';
24+
static MASTER: SideBySideEditor | undefined;
2425

2526
get minimumMasterWidth() { return this.masterEditor ? this.masterEditor.minimumWidth : 0; }
2627
get maximumMasterWidth() { return this.masterEditor ? this.masterEditor.maximumWidth : Number.POSITIVE_INFINITY; }

src/vs/workbench/browser/parts/editor/tabsTitleControl.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import 'vs/css!./media/tabstitlecontrol';
77
import { isMacintosh } from 'vs/base/common/platform';
88
import { shorten } from 'vs/base/common/labels';
9-
import { toResource, GroupIdentifier, IEditorInput, Verbosity, EditorCommandsContextActionRunner, IEditorPartOptions } from 'vs/workbench/common/editor';
9+
import { toResource, GroupIdentifier, IEditorInput, Verbosity, EditorCommandsContextActionRunner, IEditorPartOptions, SideBySideEditor } from 'vs/workbench/common/editor';
1010
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1111
import { EventType as TouchEventType, GestureEvent, Gesture } from 'vs/base/browser/touch';
1212
import { KeyCode } from 'vs/base/common/keyCodes';
@@ -597,7 +597,7 @@ export class TabsTitleControl extends TitleControl {
597597
e.dataTransfer!.effectAllowed = 'copyMove';
598598

599599
// Apply some datatransfer types to allow for dragging the element outside of the application
600-
const resource = toResource(editor, { supportSideBySide: true });
600+
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.MASTER });
601601
if (resource) {
602602
this.instantiationService.invokeFunction(fillResourceDataTransfers, [resource], e);
603603
}
@@ -877,7 +877,7 @@ export class TabsTitleControl extends TitleControl {
877877
tabContainer.title = title;
878878

879879
// Label
880-
tabLabelWidget.setResource({ name, description, resource: toResource(editor, { supportSideBySide: true }) || undefined }, { title, extraClasses: ['tab-label'], italic: !this.group.isPinned(editor) });
880+
tabLabelWidget.setResource({ name, description, resource: toResource(editor, { supportSideBySide: SideBySideEditor.MASTER }) || undefined }, { title, extraClasses: ['tab-label'], italic: !this.group.isPinned(editor) });
881881
}
882882

883883
private redrawEditorActiveAndDirty(isGroupActive: boolean, editor: IEditorInput, tabContainer: HTMLElement, tabLabelWidget: IResourceLabel): void {

src/vs/workbench/browser/parts/editor/titleControl.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
3333
import { BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs';
3434
import { BreadcrumbsControl, IBreadcrumbsControlOptions } from 'vs/workbench/browser/parts/editor/breadcrumbsControl';
3535
import { EDITOR_TITLE_HEIGHT, IEditorGroupsAccessor, IEditorGroupView } from 'vs/workbench/browser/parts/editor/editor';
36-
import { EditorCommandsContextActionRunner, IEditorCommandsContext, IEditorInput, toResource, IEditorPartOptions } from 'vs/workbench/common/editor';
36+
import { EditorCommandsContextActionRunner, IEditorCommandsContext, IEditorInput, toResource, IEditorPartOptions, SideBySideEditor } from 'vs/workbench/common/editor';
3737
import { ResourceContextKey } from 'vs/workbench/common/resources';
3838
import { Themable } from 'vs/workbench/common/theme';
3939
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
@@ -218,7 +218,7 @@ export abstract class TitleControl extends Themable {
218218
this.editorToolBarMenuDisposables = dispose(this.editorToolBarMenuDisposables);
219219

220220
// Update the resource context
221-
this.resourceContext.set(this.group.activeEditor ? toResource(this.group.activeEditor, { supportSideBySide: true }) : null);
221+
this.resourceContext.set(this.group.activeEditor ? toResource(this.group.activeEditor, { supportSideBySide: SideBySideEditor.MASTER }) : null);
222222

223223
// Editor actions require the editor control to be there, so we retrieve it via service
224224
const activeControl = this.group.activeControl;
@@ -258,7 +258,7 @@ export abstract class TitleControl extends Themable {
258258

259259
// If tabs are disabled, treat dragging as if an editor tab was dragged
260260
if (!this.accessor.partOptions.showTabs) {
261-
const resource = this.group.activeEditor ? toResource(this.group.activeEditor, { supportSideBySide: true }) : null;
261+
const resource = this.group.activeEditor ? toResource(this.group.activeEditor, { supportSideBySide: SideBySideEditor.MASTER }) : null;
262262
if (resource) {
263263
this.instantiationService.invokeFunction(fillResourceDataTransfers, [resource], e);
264264
}
@@ -285,7 +285,7 @@ export abstract class TitleControl extends Themable {
285285

286286
// Update the resource context
287287
const currentContext = this.resourceContext.get();
288-
this.resourceContext.set(toResource(editor, { supportSideBySide: true }));
288+
this.resourceContext.set(toResource(editor, { supportSideBySide: SideBySideEditor.MASTER }));
289289

290290
// Find target anchor
291291
let anchor: HTMLElement | { x: number, y: number } = node;

src/vs/workbench/browser/parts/titlebar/titlebarPart.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/co
1717
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
1818
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
1919
import * as nls from 'vs/nls';
20-
import { EditorInput, toResource, Verbosity } from 'vs/workbench/common/editor';
20+
import { EditorInput, toResource, Verbosity, SideBySideEditor } from 'vs/workbench/common/editor';
2121
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
2222
import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
2323
import { IThemeService, registerThemingParticipant, ITheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService';
@@ -179,7 +179,7 @@ export class TitlebarPart extends Part implements ITitleService {
179179
}
180180

181181
private updateRepresentedFilename(): void {
182-
const file = toResource(this.editorService.activeEditor, { supportSideBySide: true, filter: 'file' });
182+
const file = toResource(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.MASTER, filter: 'file' });
183183
const path = file ? file.fsPath : '';
184184

185185
// Apply to window
@@ -282,7 +282,7 @@ export class TitlebarPart extends Part implements ITitleService {
282282
// Compute folder resource
283283
// Single Root Workspace: always the root single workspace in this case
284284
// Otherwise: root folder of the currently active file if any
285-
const folder = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER ? workspace.folders[0] : this.contextService.getWorkspaceFolder(toResource(editor, { supportSideBySide: true })!);
285+
const folder = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER ? workspace.folders[0] : this.contextService.getWorkspaceFolder(toResource(editor, { supportSideBySide: SideBySideEditor.MASTER })!);
286286

287287
// Variables
288288
const activeEditorShort = editor ? editor.getTitle(Verbosity.SHORT) : '';

src/vs/workbench/common/editor.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -979,8 +979,13 @@ export interface IEditorPartOptions extends IEditorPartConfiguration {
979979
iconTheme?: string;
980980
}
981981

982+
export enum SideBySideEditor {
983+
MASTER = 1,
984+
DETAILS = 2
985+
}
986+
982987
export interface IResourceOptions {
983-
supportSideBySide?: boolean;
988+
supportSideBySide?: SideBySideEditor;
984989
filter?: string | string[];
985990
}
986991

@@ -991,7 +996,7 @@ export function toResource(editor: IEditorInput | null | undefined, options?: IR
991996

992997
// Check for side by side if we are asked to
993998
if (options && options.supportSideBySide && editor instanceof SideBySideEditorInput) {
994-
editor = editor.master;
999+
editor = options.supportSideBySide === SideBySideEditor.MASTER ? editor.master : editor.details;
9951000
}
9961001

9971002
const resource = editor.getResource();

src/vs/workbench/common/editor/editorGroup.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { Event, Emitter } from 'vs/base/common/event';
7-
import { Extensions, IEditorInputFactoryRegistry, EditorInput, toResource, IEditorIdentifier, IEditorCloseEvent, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorInput } from 'vs/workbench/common/editor';
7+
import { Extensions, IEditorInputFactoryRegistry, EditorInput, toResource, IEditorIdentifier, IEditorCloseEvent, GroupIdentifier, SideBySideEditorInput, CloseDirection, IEditorInput, SideBySideEditor } from 'vs/workbench/common/editor';
88
import { URI } from 'vs/base/common/uri';
99
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1010
import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration';
@@ -151,7 +151,7 @@ export class EditorGroup extends Disposable {
151151
}
152152

153153
for (const editor of this.editors) {
154-
const editorResource = toResource(editor, { supportSideBySide: true });
154+
const editorResource = toResource(editor, { supportSideBySide: SideBySideEditor.MASTER });
155155
if (editorResource && editorResource.toString() === resource.toString()) {
156156
return editor;
157157
}
@@ -535,7 +535,7 @@ export class EditorGroup extends Disposable {
535535
}
536536

537537
private updateResourceMap(editor: EditorInput, remove: boolean): void {
538-
const resource = toResource(editor, { supportSideBySide: true });
538+
const resource = toResource(editor, { supportSideBySide: SideBySideEditor.MASTER });
539539
if (resource) {
540540

541541
// It is possible to have the same resource opened twice (once as normal input and once as diff input)

0 commit comments

Comments
 (0)