Skip to content

Commit 6f2adf7

Browse files
committed
1 parent 135b261 commit 6f2adf7

4 files changed

Lines changed: 60 additions & 40 deletions

File tree

src/vs/workbench/browser/parts/views/viewsRegistry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export interface IViewDescriptor {
4545

4646
readonly order?: number;
4747

48-
readonly size?: number;
48+
readonly weight?: number;
4949

5050
readonly collapsed?: boolean;
5151

src/vs/workbench/browser/parts/views/viewsViewlet.ts

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ export class ViewsViewlet extends PanelViewlet {
266266
private readonly viewsContextKeys: Set<string> = new Set<string>();
267267
private viewsViewletPanels: ViewsViewletPanel[] = [];
268268
private didLayout = false;
269+
private dimension: Dimension;
269270
protected viewsStates: Map<string, IViewState> = new Map<string, IViewState>();
270271
private areExtensionsReady: boolean = false;
271272

@@ -325,7 +326,7 @@ export class ViewsViewlet extends PanelViewlet {
325326

326327
layout(dimension: Dimension): void {
327328
super.layout(dimension);
328-
329+
this.dimension = dimension;
329330
if (this.didLayout) {
330331
this.snapshotViewsStates();
331332
} else {
@@ -350,18 +351,11 @@ export class ViewsViewlet extends PanelViewlet {
350351
const view = this.getView(id);
351352
let viewState = this.viewsStates.get(id);
352353

353-
if ((visible === true && view) || (visible === false && !view)) {
354+
if (!viewState || (visible === true && view) || (visible === false && !view)) {
354355
return;
355356
}
356357

357-
if (view) {
358-
viewState = viewState || this.createViewState(view);
359-
viewState.isHidden = true;
360-
} else {
361-
viewState = viewState || { collapsed: true, size: 200, isHidden: false, order: void 0 };
362-
viewState.isHidden = false;
363-
}
364-
this.viewsStates.set(id, viewState);
358+
viewState.isHidden = !!view;
365359
this.updateViews();
366360
}
367361

@@ -439,7 +433,7 @@ export class ViewsViewlet extends PanelViewlet {
439433
});
440434
toCreate.push(view);
441435

442-
const size = (viewState && viewState.size) || viewDescriptor.size || 200;
436+
const size = (viewState && viewState.size) || 200;
443437
this.addPanel(view, size, index);
444438
this.viewsViewletPanels.splice(index, 0, view);
445439
}
@@ -461,16 +455,38 @@ export class ViewsViewlet extends PanelViewlet {
461455
return;
462456
}
463457

458+
let initialSizes;
464459
for (const panel of panels) {
465460
const viewState = this.viewsStates.get(panel.id);
466-
const viewDescriptor = this.getViewDescriptorsFromRegistry().filter(viewDescriptor => viewDescriptor.id === panel.id)[0];
467-
const size = (viewState && viewState.size) || viewDescriptor.size || 200;
468-
this.resizePanel(panel, size);
461+
if (viewState && viewState.size) {
462+
this.resizePanel(panel, viewState.size);
463+
} else {
464+
initialSizes = initialSizes ? initialSizes : this.computeInitialSizes();
465+
this.resizePanel(panel, initialSizes[panel.id] || 200);
466+
}
469467
}
470468

471469
this.snapshotViewsStates();
472470
}
473471

472+
private computeInitialSizes(): { [id: string]: number } {
473+
let sizes = {};
474+
if (this.dimension) {
475+
let totalWeight = 0;
476+
const allViewDescriptors = this.getViewDescriptorsFromRegistry();
477+
const viewDescriptors: IViewDescriptor[] = [];
478+
for (const panel of this.viewsViewletPanels) {
479+
const viewDescriptor = allViewDescriptors.filter(viewDescriptor => viewDescriptor.id === panel.id)[0];
480+
totalWeight = totalWeight + (viewDescriptor.weight || 20);
481+
viewDescriptors.push(viewDescriptor);
482+
}
483+
for (const viewDescriptor of viewDescriptors) {
484+
sizes[viewDescriptor.id] = this.dimension.height * (viewDescriptor.weight || 20) / totalWeight;
485+
}
486+
}
487+
return sizes;
488+
}
489+
474490
movePanel(from: ViewletPanel, to: ViewletPanel): void {
475491
const fromIndex = firstIndex(this.viewsViewletPanels, panel => panel === from);
476492
const toIndex = firstIndex(this.viewsViewletPanels, panel => panel === to);
@@ -616,24 +632,23 @@ export class ViewsViewlet extends PanelViewlet {
616632
return;
617633
}
618634

619-
const newViewState = this.createViewState(view);
635+
const collapsed = !view.isExpanded();
636+
const order = this.viewsViewletPanels.indexOf(view);
637+
const panelSize = this.getPanelSize(view);
620638
if (currentState) {
621-
newViewState.isHidden = currentState.isHidden;
622-
newViewState.size = newViewState.collapsed ? currentState.size : newViewState.size;
639+
currentState.collapsed = collapsed;
640+
currentState.size = collapsed ? currentState.size : panelSize;
641+
currentState.order = order;
642+
} else {
643+
this.viewsStates.set(view.id, {
644+
collapsed,
645+
size: this.didLayout ? panelSize : void 0,
646+
isHidden: false,
647+
order,
648+
});
623649
}
624-
this.viewsStates.set(view.id, newViewState);
625650
}
626651
}
627-
628-
protected createViewState(view: ViewsViewletPanel): IViewState {
629-
const viewDescriptor = this.getViewDescriptorsFromRegistry().filter(viewDescriptor => viewDescriptor.id === view.id)[0];
630-
return {
631-
collapsed: !view.isExpanded(),
632-
size: this.didLayout ? this.getPanelSize(view) : viewDescriptor.size || 200, // Take the default value incase of layout not happened yet.
633-
isHidden: false,
634-
order: this.viewsViewletPanels.indexOf(view)
635-
};
636-
}
637652
}
638653

639654
export class PersistentViewsViewlet extends ViewsViewlet {
@@ -672,7 +687,12 @@ export class PersistentViewsViewlet extends ViewsViewlet {
672687
const view = this.getView(id);
673688

674689
if (view) {
675-
viewsStates[id] = this.createViewState(view);
690+
viewsStates[id] = {
691+
collapsed: !view.isExpanded(),
692+
size: this.getPanelSize(view),
693+
isHidden: false,
694+
order: viewState.order
695+
};
676696
} else {
677697
const viewDescriptor = registeredViewDescriptors.filter(v => v.id === id)[0];
678698
if (viewDescriptor) {

src/vs/workbench/parts/debug/electron-browser/debug.contribution.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,10 @@ Registry.as<PanelRegistry>(PanelExtensions.Panels).registerPanel(new PanelDescri
107107
Registry.as<PanelRegistry>(PanelExtensions.Panels).setDefaultPanelId(REPL_ID);
108108

109109
// Register default debug views
110-
ViewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize('variables', "Variables"), ctor: VariablesView, order: 10, size: 40, location: ViewLocation.Debug, canToggleVisibility: true }]);
111-
ViewsRegistry.registerViews([{ id: WATCH_VIEW_ID, name: nls.localize('watch', "Watch"), ctor: WatchExpressionsView, order: 20, size: 10, location: ViewLocation.Debug, canToggleVisibility: true }]);
112-
ViewsRegistry.registerViews([{ id: CALLSTACK_VIEW_ID, name: nls.localize('callStack', "Call Stack"), ctor: CallStackView, order: 30, size: 30, location: ViewLocation.Debug, canToggleVisibility: true }]);
113-
ViewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize('breakpoints', "Breakpoints"), ctor: BreakpointsView, order: 40, size: 20, location: ViewLocation.Debug, canToggleVisibility: true }]);
110+
ViewsRegistry.registerViews([{ id: VARIABLES_VIEW_ID, name: nls.localize('variables', "Variables"), ctor: VariablesView, order: 10, weight: 40, location: ViewLocation.Debug, canToggleVisibility: true }]);
111+
ViewsRegistry.registerViews([{ id: WATCH_VIEW_ID, name: nls.localize('watch', "Watch"), ctor: WatchExpressionsView, order: 20, weight: 10, location: ViewLocation.Debug, canToggleVisibility: true }]);
112+
ViewsRegistry.registerViews([{ id: CALLSTACK_VIEW_ID, name: nls.localize('callStack', "Call Stack"), ctor: CallStackView, order: 30, weight: 30, location: ViewLocation.Debug, canToggleVisibility: true }]);
113+
ViewsRegistry.registerViews([{ id: BREAKPOINTS_VIEW_ID, name: nls.localize('breakpoints', "Breakpoints"), ctor: BreakpointsView, order: 40, weight: 20, location: ViewLocation.Debug, canToggleVisibility: true }]);
114114

115115
// register action to open viewlet
116116
const registry = Registry.as<IWorkbenchActionRegistry>(WorkbenchActionRegistryExtensions.WorkbenchActions);

src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
133133
location: ViewLocation.Extensions,
134134
ctor: ExtensionsListView,
135135
when: ContextKeyExpr.and(ContextKeyExpr.has('searchExtensions'), ContextKeyExpr.not('searchInstalledExtensions'), ContextKeyExpr.not('recommendedExtensions')),
136-
size: 100
136+
weight: 100
137137
};
138138
}
139139

@@ -144,7 +144,7 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
144144
location: ViewLocation.Extensions,
145145
ctor: InstalledExtensionsView,
146146
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions')),
147-
size: 200
147+
weight: 30
148148
};
149149
}
150150

@@ -155,7 +155,7 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
155155
location: ViewLocation.Extensions,
156156
ctor: InstalledExtensionsView,
157157
when: ContextKeyExpr.and(ContextKeyExpr.has('searchInstalledExtensions')),
158-
size: 50
158+
weight: 100
159159
};
160160
}
161161

@@ -166,7 +166,7 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
166166
location: ViewLocation.Extensions,
167167
ctor: RecommendedExtensionsView,
168168
when: ContextKeyExpr.and(ContextKeyExpr.not('searchExtensions')),
169-
size: 600,
169+
weight: 70,
170170
canToggleVisibility: true
171171
};
172172
}
@@ -178,7 +178,7 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
178178
location: ViewLocation.Extensions,
179179
ctor: RecommendedExtensionsView,
180180
when: ContextKeyExpr.and(ContextKeyExpr.has('recommendedExtensions')),
181-
size: 600,
181+
weight: 50,
182182
canToggleVisibility: true,
183183
order: 2
184184
};
@@ -191,7 +191,7 @@ export class ExtensionsViewlet extends PersistentViewsViewlet implements IExtens
191191
location: ViewLocation.Extensions,
192192
ctor: WorkspaceRecommendedExtensionsView,
193193
when: ContextKeyExpr.and(ContextKeyExpr.has('recommendedExtensions'), ContextKeyExpr.has('nonEmptyWorkspace')),
194-
size: 200,
194+
weight: 50,
195195
canToggleVisibility: true,
196196
order: 1
197197
};

0 commit comments

Comments
 (0)