Skip to content

Commit 1bfe34f

Browse files
authored
* refs microsoft#94331 * fixes compile errors * fixes compile errors
1 parent 49f196e commit 1bfe34f

8 files changed

Lines changed: 42 additions & 43 deletions

File tree

src/vs/workbench/browser/composite.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ export abstract class CompositeDescriptor<T extends Composite> {
239239
readonly name: string,
240240
readonly cssClass?: string,
241241
readonly order?: number,
242+
readonly requestedIndex?: number,
242243
readonly keybindingId?: string,
243244
) { }
244245

src/vs/workbench/browser/panel.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ export abstract class Panel extends PaneComposite implements IPanel { }
1717
*/
1818
export class PanelDescriptor extends CompositeDescriptor<Panel> {
1919

20-
static create<Services extends BrandedService[]>(ctor: { new(...services: Services): Panel }, id: string, name: string, cssClass?: string, order?: number, _commandId?: string): PanelDescriptor {
21-
return new PanelDescriptor(ctor as IConstructorSignature0<Panel>, id, name, cssClass, order, _commandId);
20+
static create<Services extends BrandedService[]>(ctor: { new(...services: Services): Panel }, id: string, name: string, cssClass?: string, order?: number, requestedIndex?: number, _commandId?: string): PanelDescriptor {
21+
return new PanelDescriptor(ctor as IConstructorSignature0<Panel>, id, name, cssClass, order, requestedIndex, _commandId);
2222
}
2323

24-
private constructor(ctor: IConstructorSignature0<Panel>, id: string, name: string, cssClass?: string, order?: number, _commandId?: string) {
25-
super(ctor, id, name, cssClass, order, _commandId);
24+
private constructor(ctor: IConstructorSignature0<Panel>, id: string, name: string, cssClass?: string, order?: number, requestedIndex?: number, _commandId?: string) {
25+
super(ctor, id, name, cssClass, order, requestedIndex, _commandId);
2626
}
2727
}
2828

src/vs/workbench/browser/parts/compositeBar.ts

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export class CompositeDragAndDrop implements ICompositeDragAndDrop {
102102

103103
const items = this.getItems();
104104
const before = this.targetContainerLocation === ViewContainerLocation.Panel ? before2d?.horizontallyBefore : before2d?.verticallyBefore;
105-
return items.findIndex(o => o.id === targetId) + (before ? 0 : 1);
105+
return items.filter(o => o.visible).findIndex(o => o.id === targetId) + (before ? 0 : 1);
106106
}
107107

108108
private canDrop(data: CompositeDragAndDropData, targetCompositeId: string | undefined): boolean {
@@ -284,9 +284,9 @@ export class CompositeBar extends Widget implements ICompositeBar {
284284
this.updateCompositeSwitcher();
285285
}
286286

287-
addComposite({ id, name, order }: { id: string; name: string, order?: number }): void {
287+
addComposite({ id, name, order, requestedIndex }: { id: string; name: string, order?: number, requestedIndex?: number }): void {
288288
// Add to the model
289-
if (this.model.add(id, name, order)) {
289+
if (this.model.add(id, name, order, requestedIndex)) {
290290
this.computeSizes([this.model.findItem(id)]);
291291
this.updateCompositeSwitcher();
292292
}
@@ -674,17 +674,9 @@ class CompositeBarModel {
674674
this._items = result;
675675
}
676676

677-
this.updateItemsOrder();
678677
return hasChanges;
679678
}
680679

681-
682-
private updateItemsOrder(): void {
683-
if (this._items) {
684-
this.items.forEach((item, index) => { if (item.order !== undefined) { item.order = index; } });
685-
}
686-
}
687-
688680
get visibleItems(): ICompositeBarModelItem[] {
689681
return this.items.filter(item => item.visible);
690682
}
@@ -707,7 +699,7 @@ class CompositeBarModel {
707699
};
708700
}
709701

710-
add(id: string, name: string, order: number | undefined): boolean {
702+
add(id: string, name: string, order: number | undefined, requestedIndex: number | undefined): boolean {
711703
const item = this.findItem(id);
712704
if (item) {
713705
let changed = false;
@@ -721,11 +713,20 @@ class CompositeBarModel {
721713
changed = true;
722714
}
723715

724-
this.updateItemsOrder();
725716
return changed;
726717
} else {
727718
const item = this.createCompositeBarItem(id, name, order, true, true);
728-
if (isUndefinedOrNull(order)) {
719+
if (!isUndefinedOrNull(requestedIndex)) {
720+
let index = 0;
721+
let rIndex = requestedIndex;
722+
while (rIndex > 0 && index < this.items.length) {
723+
if (this.items[index++].visible) {
724+
rIndex--;
725+
}
726+
}
727+
728+
this.items.splice(index, 0, item);
729+
} else if (isUndefinedOrNull(order)) {
729730
this.items.push(item);
730731
} else {
731732
let index = 0;
@@ -735,7 +736,6 @@ class CompositeBarModel {
735736
this.items.splice(index, 0, item);
736737
}
737738

738-
this.updateItemsOrder();
739739
return true;
740740
}
741741
}
@@ -744,7 +744,6 @@ class CompositeBarModel {
744744
for (let index = 0; index < this.items.length; index++) {
745745
if (this.items[index].id === id) {
746746
this.items.splice(index, 1);
747-
this.updateItemsOrder();
748747
return true;
749748
}
750749
}
@@ -780,8 +779,6 @@ class CompositeBarModel {
780779
// Make sure a moved composite gets pinned
781780
sourceItem.pinned = true;
782781

783-
this.updateItemsOrder();
784-
785782
return true;
786783
}
787784

src/vs/workbench/browser/parts/panel/panelPart.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
220220
const newPanel = {
221221
id: panel.id,
222222
name: panel.name,
223-
order: cachedPanel?.order === undefined ? panel.order : cachedPanel.order
223+
order: panel.order,
224+
requestedIndex: panel.requestedIndex
224225
};
225226

226227
this.compositeBar.addComposite(newPanel);
@@ -676,17 +677,14 @@ export class PanelPart extends CompositePart<Panel> implements IPanelService {
676677
const cachedPanels = this.getCachedPanels();
677678

678679
for (const cachedPanel of cachedPanels) {
679-
// Add and update existing items
680-
const existingItem = compositeItems.filter(({ id }) => id === cachedPanel.id)[0];
681-
if (existingItem) {
682-
newCompositeItems.push({
683-
id: existingItem.id,
684-
name: existingItem.name,
685-
order: existingItem.order,
686-
pinned: cachedPanel.pinned,
687-
visible: existingItem.visible
688-
});
689-
}
680+
// copy behavior from activity bar
681+
newCompositeItems.push({
682+
id: cachedPanel.id,
683+
name: cachedPanel.name,
684+
order: cachedPanel.order,
685+
pinned: cachedPanel.pinned,
686+
visible: !!compositeItems.find(({ id }) => id === cachedPanel.id)
687+
});
690688
}
691689

692690
for (let index = 0; index < compositeItems.length; index++) {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ export class ViewsService extends Disposable implements IViewsService {
445445
viewContainer.name,
446446
undefined,
447447
viewContainer.order,
448+
viewContainer.requestedIndex,
448449
viewContainer.focusCommand?.id,
449450
));
450451
}
@@ -480,6 +481,7 @@ export class ViewsService extends Disposable implements IViewsService {
480481
viewContainer.name,
481482
isString(viewContainer.icon) ? viewContainer.icon : undefined,
482483
viewContainer.order,
484+
viewContainer.requestedIndex,
483485
viewContainer.icon instanceof URI ? viewContainer.icon : undefined
484486
));
485487
}

src/vs/workbench/browser/viewlet.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@ export class ViewletDescriptor extends CompositeDescriptor<Viewlet> {
7373
name: string,
7474
cssClass?: string,
7575
order?: number,
76+
requestedIndex?: number,
7677
iconUrl?: URI
7778
): ViewletDescriptor {
7879

79-
return new ViewletDescriptor(ctor as IConstructorSignature0<Viewlet>, id, name, cssClass, order, iconUrl);
80+
return new ViewletDescriptor(ctor as IConstructorSignature0<Viewlet>, id, name, cssClass, order, requestedIndex, iconUrl);
8081
}
8182

8283
private constructor(
@@ -85,9 +86,10 @@ export class ViewletDescriptor extends CompositeDescriptor<Viewlet> {
8586
name: string,
8687
cssClass?: string,
8788
order?: number,
89+
requestedIndex?: number,
8890
readonly iconUrl?: URI
8991
) {
90-
super(ctor, id, name, cssClass, order, id);
92+
super(ctor, id, name, cssClass, order, requestedIndex, id);
9193
}
9294
}
9395

src/vs/workbench/common/views.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ export interface IViewContainerDescriptor {
6060

6161
readonly rejectAddedViews?: boolean;
6262

63-
order?: number;
63+
readonly order?: number;
64+
65+
requestedIndex?: number;
6466
}
6567

6668
export interface IViewContainersRegistry {
@@ -515,7 +517,7 @@ export interface IViewDescriptorService {
515517
getViewContainerModel(viewContainer: ViewContainer): IViewContainerModel;
516518

517519
readonly onDidChangeContainerLocation: Event<{ viewContainer: ViewContainer, from: ViewContainerLocation, to: ViewContainerLocation }>;
518-
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, order?: number): void;
520+
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, requestedIndex?: number): void;
519521

520522
// Views
521523
getViewDescriptorById(id: string): IViewDescriptor | null;

src/vs/workbench/services/views/browser/viewDescriptorService.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor
295295
return this.viewContainersRegistry.getDefaultViewContainer(location);
296296
}
297297

298-
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, order?: number): void {
298+
moveViewContainerToLocation(viewContainer: ViewContainer, location: ViewContainerLocation, requestedIndex?: number): void {
299299
const from = this.getViewContainerLocation(viewContainer);
300300
const to = location;
301301
if (from !== to) {
@@ -304,10 +304,7 @@ export class ViewDescriptorService extends Disposable implements IViewDescriptor
304304
const defaultLocation = this.isGeneratedContainerId(viewContainer.id) ? true : this.getViewContainerLocation(viewContainer) === this.getDefaultViewContainerLocation(viewContainer);
305305
this.getOrCreateDefaultViewContainerLocationContextKey(viewContainer).set(defaultLocation);
306306

307-
if (order !== undefined) {
308-
viewContainer.order = order;
309-
}
310-
307+
viewContainer.requestedIndex = requestedIndex;
311308
this._onDidChangeContainerLocation.fire({ viewContainer, from, to });
312309

313310
const views = this.getViewsByContainer(viewContainer);

0 commit comments

Comments
 (0)