@@ -25,7 +25,7 @@ import { ContextAwareMenuEntryActionViewItem } from 'vs/platform/actions/browser
2525import { SCMMenus } from './menus' ;
2626import { ActionBar , IActionViewItemProvider , Separator , ActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar' ;
2727import { IThemeService , LIGHT , registerThemingParticipant , IFileIconTheme } from 'vs/platform/theme/common/themeService' ;
28- import { isSCMResource , isSCMResourceGroup , connectPrimaryMenuToInlineActionBar , isSCMRepository , isSCMInput } from './util' ;
28+ import { isSCMResource , isSCMResourceGroup , connectPrimaryMenuToInlineActionBar , isSCMRepository , isSCMInput , connectPrimaryMenuToInlineToolbarBar } from './util' ;
2929import { attachBadgeStyler } from 'vs/platform/theme/common/styler' ;
3030import { WorkbenchCompressibleObjectTree , IOpenEvent } from 'vs/platform/list/browser/listService' ;
3131import { IConfigurationService , ConfigurationTarget } from 'vs/platform/configuration/common/configuration' ;
@@ -77,6 +77,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
7777import { DEFAULT_FONT_FAMILY } from 'vs/workbench/browser/style' ;
7878import { Command } from 'vs/editor/common/modes' ;
7979import { renderCodicons } from 'vs/base/common/codicons' ;
80+ import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar' ;
8081
8182type TreeElement = ISCMRepository | ISCMInput | ISCMResourceGroup | IResourceNode < ISCMResource , ISCMResourceGroup > | ISCMResource ;
8283
@@ -152,7 +153,8 @@ interface RepositoryTemplate {
152153 readonly description : HTMLElement ;
153154 readonly countContainer : HTMLElement ;
154155 readonly count : CountBadge ;
155- readonly actionBar : ActionBar ;
156+ readonly statusActionBar : ActionBar ;
157+ readonly toolBar : ToolBar ;
156158 disposable : IDisposable ;
157159 readonly templateDisposable : IDisposable ;
158160}
@@ -163,7 +165,10 @@ class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMRepository, Fu
163165 get templateId ( ) : string { return RepositoryRenderer . TEMPLATE_ID ; }
164166
165167 constructor (
168+ private actionViewItemProvider : IActionViewItemProvider ,
169+ private menus : SCMMenus ,
166170 @ICommandService private commandService : ICommandService ,
171+ @IContextMenuService private contextMenuService : IContextMenuService ,
167172 @IThemeService private themeService : IThemeService
168173 ) { }
169174
@@ -176,14 +181,17 @@ class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMRepository, Fu
176181 const label = append ( provider , $ ( '.label' ) ) ;
177182 const name = append ( label , $ ( 'span.name' ) ) ;
178183 const description = append ( label , $ ( 'span.description' ) ) ;
179- const actionBar = new ActionBar ( provider , { actionViewItemProvider : a => new StatusBarActionViewItem ( a as StatusBarAction ) } ) ;
184+ const status = append ( provider , $ ( '.status' ) ) ;
185+ const statusActionBar = new ActionBar ( status , { actionViewItemProvider : a => new StatusBarActionViewItem ( a as StatusBarAction ) } ) ;
186+ const actions = append ( provider , $ ( '.actions' ) ) ;
187+ const toolBar = new ToolBar ( actions , this . contextMenuService , { actionViewItemProvider : this . actionViewItemProvider } ) ;
180188 const countContainer = append ( provider , $ ( '.count' ) ) ;
181189 const count = new CountBadge ( countContainer ) ;
182190 const badgeStyler = attachBadgeStyler ( count , this . themeService ) ;
183191 const disposable = Disposable . None ;
184- const templateDisposable = combinedDisposable ( actionBar , badgeStyler ) ;
192+ const templateDisposable = combinedDisposable ( statusActionBar , toolBar , badgeStyler ) ;
185193
186- return { name, description, countContainer, count, actionBar , disposable, templateDisposable } ;
194+ return { name, description, countContainer, count, statusActionBar , toolBar , disposable, templateDisposable } ;
187195 }
188196
189197 renderElement ( node : ITreeNode < ISCMRepository , FuzzyScore > , index : number , templateData : RepositoryTemplate , height : number | undefined ) : void {
@@ -209,17 +217,20 @@ class RepositoryRenderer implements ICompressibleTreeRenderer<ISCMRepository, Fu
209217
210218 const commands = repository . provider . statusBarCommands || [ ] ;
211219 actions . splice ( 0 , actions . length , ...commands . map ( c => new StatusBarAction ( c , this . commandService ) ) ) ;
212- templateData . actionBar . clear ( ) ;
213- templateData . actionBar . push ( actions ) ;
220+ templateData . statusActionBar . clear ( ) ;
221+ templateData . statusActionBar . push ( actions ) ;
214222
215223 const count = repository . provider . count || 0 ;
216224 toggleClass ( templateData . countContainer , 'hidden' , count === 0 ) ;
217225 templateData . count . setCount ( count ) ;
218226 } ;
219-
220227 disposables . add ( repository . provider . onDidChange ( update , null ) ) ;
221228 update ( ) ;
222229
230+ const menus = this . menus . getRepositoryMenus ( repository . provider ) ;
231+ disposables . add ( connectPrimaryMenuToInlineToolbarBar ( menus . titleMenu , templateData . toolBar ) ) ;
232+ templateData . toolBar . context = repository . provider ;
233+
223234 templateData . disposable = disposables ;
224235 }
225236
@@ -334,8 +345,8 @@ class ResourceGroupRenderer implements ICompressibleTreeRenderer<ISCMResourceGro
334345
335346 constructor (
336347 private actionViewItemProvider : IActionViewItemProvider ,
337- private themeService : IThemeService ,
338- private menus : SCMMenus
348+ private menus : SCMMenus ,
349+ @ IThemeService private themeService : IThemeService ,
339350 ) { }
340351
341352 renderTemplate ( container : HTMLElement ) : ResourceGroupTemplate {
@@ -424,8 +435,8 @@ class ResourceRenderer implements ICompressibleTreeRenderer<ISCMResource | IReso
424435 private labels : ResourceLabels ,
425436 private actionViewItemProvider : IActionViewItemProvider ,
426437 private actionRunner : ActionRunner ,
427- private themeService : IThemeService ,
428- private menus : SCMMenus
438+ private menus : SCMMenus ,
439+ @ IThemeService private themeService : IThemeService
429440 ) { }
430441
431442 renderTemplate ( container : HTMLElement ) : ResourceTemplate {
@@ -1452,12 +1463,11 @@ export class SCMViewPane extends ViewPane {
14521463 this . _register ( actionRunner ) ;
14531464 this . _register ( actionRunner . onDidBeforeRun ( ( ) => this . tree . domFocus ( ) ) ) ;
14541465
1455- const inputRenderer = new InputRenderer ( this . layoutCache , ( input , height ) => this . tree . updateElementHeight ( input , height ) , this . instantiationService ) ;
14561466 const renderers = [
1457- new RepositoryRenderer ( this . commandService , this . themeService ) ,
1458- inputRenderer ,
1459- new ResourceGroupRenderer ( actionViewItemProvider , this . themeService , this . menus ) ,
1460- new ResourceRenderer ( ( ) => this . viewModel , this . listLabels , actionViewItemProvider , actionRunner , this . themeService , this . menus )
1467+ this . instantiationService . createInstance ( RepositoryRenderer , actionViewItemProvider , this . menus ) ,
1468+ this . instantiationService . createInstance ( InputRenderer , this . layoutCache , ( input , height ) => this . tree . updateElementHeight ( input , height ) ) ,
1469+ this . instantiationService . createInstance ( ResourceGroupRenderer , actionViewItemProvider , this . menus ) ,
1470+ this . instantiationService . createInstance ( ResourceRenderer , ( ) => this . viewModel , this . listLabels , actionViewItemProvider , actionRunner , this . menus )
14611471 ] ;
14621472
14631473 const filter = new SCMTreeFilter ( ) ;
0 commit comments