@@ -10,7 +10,7 @@ import { IDisposable, Disposable, DisposableStore, combinedDisposable, dispose }
1010import { ViewPane , IViewPaneOptions } from 'vs/workbench/browser/parts/views/viewPaneContainer' ;
1111import { append , $ , addClass , toggleClass , removeClass , Dimension } from 'vs/base/browser/dom' ;
1212import { IListVirtualDelegate , IIdentityProvider } from 'vs/base/browser/ui/list/list' ;
13- import { ISCMResourceGroup , ISCMResource , InputValidationType , ISCMService , ISCMRepository , ISCMProvider , ISCMInput } from 'vs/workbench/contrib/scm/common/scm' ;
13+ import { ISCMResourceGroup , ISCMResource , InputValidationType , ISCMService , ISCMRepository , ISCMInput } from 'vs/workbench/contrib/scm/common/scm' ;
1414import { ResourceLabels , IResourceLabel } from 'vs/workbench/browser/labels' ;
1515import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge' ;
1616import { IEditorService } from 'vs/workbench/services/editor/common/editorService' ;
@@ -335,7 +335,7 @@ class ResourceGroupRenderer implements ICompressibleTreeRenderer<ISCMResourceGro
335335 constructor (
336336 private actionViewItemProvider : IActionViewItemProvider ,
337337 private themeService : IThemeService ,
338- private menus : Map < ISCMProvider , SCMMenus >
338+ private menus : SCMMenus
339339 ) { }
340340
341341 renderTemplate ( container : HTMLElement ) : ResourceGroupTemplate {
@@ -365,7 +365,7 @@ class ResourceGroupRenderer implements ICompressibleTreeRenderer<ISCMResourceGro
365365 template . count . setCount ( group . elements . length ) ;
366366
367367 const disposables = new DisposableStore ( ) ;
368- const menus = this . menus . get ( group . provider ) ! ;
368+ const menus = this . menus . getRepositoryMenus ( group . provider ) ;
369369 disposables . add ( connectPrimaryMenuToInlineActionBar ( menus . getResourceGroupMenu ( group ) , template . actionBar ) ) ;
370370
371371 template . elementDisposables = disposables ;
@@ -425,7 +425,7 @@ class ResourceRenderer implements ICompressibleTreeRenderer<ISCMResource | IReso
425425 private actionViewItemProvider : IActionViewItemProvider ,
426426 private actionRunner : ActionRunner ,
427427 private themeService : IThemeService ,
428- private menus : Map < ISCMProvider , SCMMenus >
428+ private menus : SCMMenus
429429 ) { }
430430
431431 renderTemplate ( container : HTMLElement ) : ResourceTemplate {
@@ -471,18 +471,18 @@ class ResourceRenderer implements ICompressibleTreeRenderer<ISCMResource | IReso
471471
472472 if ( ResourceTree . isResourceNode ( resourceOrFolder ) ) {
473473 if ( resourceOrFolder . element ) {
474- const menus = this . menus . get ( resourceOrFolder . element . resourceGroup . provider ) ! ;
474+ const menus = this . menus . getRepositoryMenus ( resourceOrFolder . element . resourceGroup . provider ) ;
475475 elementDisposables . add ( connectPrimaryMenuToInlineActionBar ( menus . getResourceMenu ( resourceOrFolder . element . resourceGroup ) , template . actionBar ) ) ;
476476 toggleClass ( template . name , 'strike-through' , resourceOrFolder . element . decorations . strikeThrough ) ;
477477 toggleClass ( template . element , 'faded' , resourceOrFolder . element . decorations . faded ) ;
478478 } else {
479- const menus = this . menus . get ( resourceOrFolder . context . provider ) ! ;
479+ const menus = this . menus . getRepositoryMenus ( resourceOrFolder . context . provider ) ;
480480 elementDisposables . add ( connectPrimaryMenuToInlineActionBar ( menus . getResourceFolderMenu ( resourceOrFolder . context ) , template . actionBar ) ) ;
481481 removeClass ( template . name , 'strike-through' ) ;
482482 removeClass ( template . element , 'faded' ) ;
483483 }
484484 } else {
485- const menus = this . menus . get ( resourceOrFolder . resourceGroup . provider ) ! ;
485+ const menus = this . menus . getRepositoryMenus ( resourceOrFolder . resourceGroup . provider ) ;
486486 elementDisposables . add ( connectPrimaryMenuToInlineActionBar ( menus . getResourceMenu ( resourceOrFolder . resourceGroup ) , template . actionBar ) ) ;
487487 toggleClass ( template . name , 'strike-through' , resourceOrFolder . decorations . strikeThrough ) ;
488488 toggleClass ( template . element , 'faded' , resourceOrFolder . decorations . faded ) ;
@@ -529,7 +529,7 @@ class ResourceRenderer implements ICompressibleTreeRenderer<ISCMResource | IReso
529529 template . actionBar . clear ( ) ;
530530 template . actionBar . context = folder ;
531531
532- const menus = this . menus . get ( folder . context . provider ) ! ;
532+ const menus = this . menus . getRepositoryMenus ( folder . context . provider ) ;
533533 elementDisposables . add ( connectPrimaryMenuToInlineActionBar ( menus . getResourceFolderMenu ( folder . context ) , template . actionBar ) ) ;
534534
535535 removeClass ( template . name , 'strike-through' ) ;
@@ -921,7 +921,9 @@ class ViewModel {
921921 }
922922
923923 private refresh ( item ?: IRepositoryItem | IGroupItem ) : void {
924- if ( item ) {
924+ if ( this . items . length === 1 && ( ! item || isRepositoryItem ( item ) ) ) {
925+ this . tree . setChildren ( null , this . render ( this . items [ 0 ] ) . children ) ;
926+ } else if ( item ) {
925927 this . tree . setChildren ( item . element , this . render ( item ) . children ) ;
926928 } else {
927929 this . tree . setChildren ( null , this . items . map ( item => this . render ( item ) ) ) ;
@@ -1363,7 +1365,7 @@ export class SCMViewPane extends ViewPane {
13631365 private tree ! : WorkbenchCompressibleObjectTree < TreeElement , FuzzyScore > ;
13641366 private viewModel ! : ViewModel ;
13651367 private listLabels ! : ResourceLabels ;
1366- private menus = new Map < ISCMProvider , SCMMenus > ( ) ;
1368+ private menus : SCMMenus ;
13671369
13681370 constructor (
13691371 options : IViewPaneOptions ,
@@ -1385,6 +1387,7 @@ export class SCMViewPane extends ViewPane {
13851387 @ITelemetryService telemetryService : ITelemetryService ,
13861388 ) {
13871389 super ( options , keybindingService , contextMenuService , configurationService , contextKeyService , viewDescriptorService , instantiationService , openerService , themeService , telemetryService ) ;
1390+ this . menus = instantiationService . createInstance ( SCMMenus ) ;
13881391 this . _register ( Event . any ( this . scmService . onDidAddRepository , this . scmService . onDidRemoveRepository ) ( ( ) => this . _onDidChangeViewWelcomeState . fire ( ) ) ) ;
13891392 }
13901393
@@ -1453,9 +1456,6 @@ export class SCMViewPane extends ViewPane {
14531456 viewMode = storageMode ;
14541457 }
14551458
1456- this . _register ( this . scmService . onDidAddRepository ( r => this . menus . set ( r . provider , this . instantiationService . createInstance ( SCMMenus , r . provider ) ) ) ) ;
1457- this . _register ( this . scmService . onDidRemoveRepository ( r => this . menus . delete ( r . provider ) ) ) ;
1458-
14591459 const repositories = new SimpleSequence ( this . scmService . repositories , this . scmService . onDidAddRepository , this . scmService . onDidRemoveRepository ) ;
14601460 this . _register ( repositories ) ;
14611461
@@ -1542,7 +1542,7 @@ export class SCMViewPane extends ViewPane {
15421542 // TODO@joao
15431543 getActions ( ) : IAction [ ] {
15441544 return [ ] ;
1545- // return this.menus.getTitleActions() ;
1545+ // return this.menus.getRepositoryMenusTitleActions( ;
15461546 }
15471547
15481548 // TODO@joao
@@ -1552,7 +1552,7 @@ export class SCMViewPane extends ViewPane {
15521552 }
15531553
15541554 const result : IAction [ ] = [ new SCMViewSubMenuAction ( this . viewModel ) ] ;
1555- // const secondaryActions = this.menus.getTitleSecondaryActions() ;
1555+ // const secondaryActions = this.menus.getRepositoryMenusTitleSecondaryActions( ;
15561556
15571557 // if (secondaryActions.length > 0) {
15581558 // result.push(new Separator(), ...secondaryActions);
@@ -1603,18 +1603,18 @@ export class SCMViewPane extends ViewPane {
16031603 } else if ( isSCMInput ( element ) ) {
16041604 // TODO@joao
16051605 } else if ( isSCMResourceGroup ( element ) ) {
1606- const menus = this . menus . get ( element . provider ) ! ;
1606+ const menus = this . menus . getRepositoryMenus ( element . provider ) ;
16071607 actions = menus . getResourceGroupContextActions ( element ) ;
16081608 } else if ( ResourceTree . isResourceNode ( element ) ) {
16091609 if ( element . element ) {
1610- const menus = this . menus . get ( element . element . resourceGroup . provider ) ! ;
1610+ const menus = this . menus . getRepositoryMenus ( element . element . resourceGroup . provider ) ;
16111611 actions = menus . getResourceContextActions ( element . element ) ;
16121612 } else {
1613- const menus = this . menus . get ( element . context . provider ) ! ;
1613+ const menus = this . menus . getRepositoryMenus ( element . context . provider ) ;
16141614 actions = menus . getResourceFolderContextActions ( element . context ) ;
16151615 }
16161616 } else {
1617- const menus = this . menus . get ( element . resourceGroup . provider ) ! ;
1617+ const menus = this . menus . getRepositoryMenus ( element . resourceGroup . provider ) ;
16181618 actions = menus . getResourceContextActions ( element ) ;
16191619 }
16201620
0 commit comments