@@ -34,6 +34,7 @@ import { IMenuService } from 'vs/platform/actions/common/actions';
3434import { IAction , IActionItem } from 'vs/base/common/actions' ;
3535import { createActionItem } from 'vs/platform/actions/browser/menuItemActionItem' ;
3636import { SCMMenus } from './scmMenus' ;
37+ import { ActionBar , IActionItemProvider } from 'vs/base/browser/ui/actionbar/actionbar' ;
3738
3839interface SearchInputEvent extends Event {
3940 target : HTMLInputElement ;
@@ -43,25 +44,35 @@ interface SearchInputEvent extends Event {
4344interface ResourceGroupTemplate {
4445 name : HTMLElement ;
4546 count : CountBadge ;
47+ actionBar : ActionBar ;
4648}
4749
4850class ResourceGroupRenderer implements IRenderer < ISCMResourceGroup , ResourceGroupTemplate > {
4951
5052 static TEMPLATE_ID = 'resource group' ;
5153 get templateId ( ) : string { return ResourceGroupRenderer . TEMPLATE_ID ; }
5254
55+ constructor (
56+ private scmMenus : SCMMenus ,
57+ private actionItemProvider : IActionItemProvider
58+ ) { }
59+
5360 renderTemplate ( container : HTMLElement ) : ResourceGroupTemplate {
5461 const element = append ( container , $ ( '.resource-group' ) ) ;
5562 const name = append ( element , $ ( '.name' ) ) ;
56- const countContainer = append ( element , $ ( 'div ' ) ) ;
63+ const countContainer = append ( element , $ ( '.count ' ) ) ;
5764 const count = new CountBadge ( countContainer ) ;
65+ const actionsContainer = append ( element , $ ( '.actions' ) ) ;
66+ const actionBar = new ActionBar ( actionsContainer , { actionItemProvider : this . actionItemProvider } ) ;
5867
59- return { name, count } ;
68+ return { name, count, actionBar } ;
6069 }
6170
6271 renderElement ( group : ISCMResourceGroup , index : number , template : ResourceGroupTemplate ) : void {
6372 template . name . textContent = group . label ;
6473 template . count . setCount ( group . resources . length ) ;
74+ template . actionBar . clear ( ) ;
75+ template . actionBar . push ( this . scmMenus . getResourceGroupActions ( group . id ) ) ;
6576 }
6677
6778 disposeTemplate ( template : ResourceGroupTemplate ) : void {
@@ -71,6 +82,7 @@ class ResourceGroupRenderer implements IRenderer<ISCMResourceGroup, ResourceGrou
7182
7283interface ResourceTemplate {
7384 fileLabel : FileLabel ;
85+ actionBar : ActionBar ;
7486}
7587
7688class ResourceRenderer implements IRenderer < ISCMResource , ResourceTemplate > {
@@ -79,19 +91,27 @@ class ResourceRenderer implements IRenderer<ISCMResource, ResourceTemplate> {
7991 get templateId ( ) : string { return ResourceRenderer . TEMPLATE_ID ; }
8092
8193 constructor (
94+ private scmMenus : SCMMenus ,
95+ private actionItemProvider : IActionItemProvider ,
8296 @IInstantiationService private instantiationService : IInstantiationService
8397 ) {
8498
8599 }
86100
87101 renderTemplate ( container : HTMLElement ) : ResourceTemplate {
88- const fileLabel = this . instantiationService . createInstance ( FileLabel , container , void 0 ) ;
102+ const element = append ( container , $ ( '.resource' ) ) ;
103+ const name = append ( element , $ ( '.name' ) ) ;
104+ const fileLabel = this . instantiationService . createInstance ( FileLabel , name , void 0 ) ;
105+ const actionsContainer = append ( element , $ ( '.actions' ) ) ;
106+ const actionBar = new ActionBar ( actionsContainer , { actionItemProvider : this . actionItemProvider } ) ;
89107
90- return { fileLabel } ;
108+ return { fileLabel, actionBar } ;
91109 }
92110
93111 renderElement ( resource : ISCMResource , index : number , template : ResourceTemplate ) : void {
94112 template . fileLabel . setFile ( resource . uri ) ;
113+ template . actionBar . clear ( ) ;
114+ template . actionBar . push ( this . scmMenus . getResourceActions ( resource . resourceGroupId ) ) ;
95115 }
96116
97117 disposeTemplate ( template : ResourceTemplate ) : void {
@@ -176,9 +196,11 @@ export class SCMViewlet extends Viewlet {
176196 this . listContainer = append ( root , $ ( '.scm-status.show-file-icons' ) ) ;
177197 const delegate = new Delegate ( ) ;
178198
199+ const actionItemProvider = action => this . getActionItem ( action ) ;
200+
179201 this . list = new List ( this . listContainer , delegate , [
180- new ResourceGroupRenderer ( ) ,
181- this . instantiationService . createInstance ( ResourceRenderer )
202+ new ResourceGroupRenderer ( this . menus , actionItemProvider ) ,
203+ this . instantiationService . createInstance ( ResourceRenderer , this . menus , actionItemProvider )
182204 ] ) ;
183205
184206 chain ( this . list . onSelectionChange )
@@ -254,21 +276,15 @@ export class SCMViewlet extends Viewlet {
254276 }
255277
256278 private onListContextMenu ( e : IListMouseEvent < ISCMResourceGroup | ISCMResource > ) : void {
257- const provider = this . scmService . activeProvider ;
258-
259- if ( ! provider ) {
260- return ;
261- }
262-
263279 const element = e . element ;
264280 let actions : IAction [ ] ;
265281
266282 if ( ( element as ISCMResource ) . uri ) {
267283 const resource = element as ISCMResource ;
268- actions = this . menus . getResourceContextActions ( provider . id , resource . resourceGroupId ) ;
284+ actions = this . menus . getResourceContextActions ( resource . resourceGroupId ) ;
269285 } else {
270286 const resourceGroup = element as ISCMResourceGroup ;
271- actions = this . menus . getResourceGroupContextActions ( provider . id , resourceGroup . id ) ;
287+ actions = this . menus . getResourceGroupContextActions ( resourceGroup . id ) ;
272288 }
273289
274290 this . contextMenuService . showContextMenu ( {
0 commit comments