@@ -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
639654export 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 ) {
0 commit comments