4
4
*--------------------------------------------------------------------------------------------*/
5
5
'use strict' ;
6
6
7
- import * as winjs from 'vs/base/common/winjs.base' ;
8
- import * as paths from 'vs/base/common/paths' ;
9
- import dom = require( 'vs/base/browser/dom' ) ;
10
- import { IMarker } from 'vs/platform/markers/common/markers' ;
11
- import tree = require( 'vs/base/parts/tree/browser/tree' ) ;
12
- import { Marker , Resource } from 'vs/workbench/parts/markers/common/MarkersModel' ;
7
+ import { TPromise , Promise } from 'vs/base/common/winjs.base' ;
8
+ import * as dom from 'vs/base/browser/dom' ;
9
+ import { IDataSource , ITree , IRenderer } from 'vs/base/parts/tree/browser/tree' ;
10
+ import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar' ;
11
+ import { IActionRunner } from 'vs/base/common/actions' ;
13
12
import Severity from 'vs/base/common/severity' ;
14
13
import { IWorkspaceContextService } from 'vs/workbench/services/workspace/common/contextService' ;
15
- import { getPathLabel } from 'vs/base/common/labels' ;
16
-
17
- var $ = dom . emmet ;
14
+ import { ActionProvider } from 'vs/workbench/parts/markers/browser/MarkersActionProvider' ;
15
+ import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge' ;
16
+ import { FileLabel } from 'vs/base/browser/ui/fileLabel/fileLabel' ;
17
+ import { IMarker } from 'vs/platform/markers/common/markers' ;
18
+ import { Marker , Resource } from 'vs/workbench/parts/markers/common/MarkersModel' ;
18
19
19
20
interface IResourceTemplateData {
20
- label : HTMLElement ;
21
+ file : FileLabel ;
22
+ count : CountBadge ;
23
+ actionBar : ActionBar ;
21
24
}
22
25
23
26
interface IMarkerTemplateData {
24
27
icon : HTMLElement ;
25
28
label : HTMLElement ;
26
29
}
27
30
28
- export class DataSource implements tree . IDataSource {
29
- public getId ( tree : tree . ITree , element : any ) : string {
31
+ export class DataSource implements IDataSource {
32
+ public getId ( tree : ITree , element : any ) : string {
30
33
if ( element instanceof Resource ) {
31
34
return 'resource' + ( < Resource > element ) . uri . toString ( ) ;
32
35
}
@@ -36,39 +39,42 @@ export class DataSource implements tree.IDataSource {
36
39
return 'root' ;
37
40
}
38
41
39
- public hasChildren ( tree : tree . ITree , element : any ) : boolean {
42
+ public hasChildren ( tree : ITree , element : any ) : boolean {
40
43
return ! ( element instanceof Marker ) ;
41
44
}
42
45
43
- public getChildren ( tree : tree . ITree , element : any ) : winjs . Promise {
46
+ public getChildren ( tree : ITree , element : any ) : Promise {
44
47
if ( element instanceof Resource ) {
45
- return winjs . TPromise . as ( ( < Resource > element ) . markers ) ;
48
+ return TPromise . as ( ( < Resource > element ) . markers ) ;
46
49
}
47
- return winjs . TPromise . as ( element [ 'resources' ] ) ;
50
+ return TPromise . as ( element [ 'resources' ] ) ;
48
51
}
49
52
50
- public getParent ( tree : tree . ITree , element : any ) : winjs . Promise {
51
- return winjs . TPromise . as ( null ) ;
53
+ public getParent ( tree : ITree , element : any ) : Promise {
54
+ return TPromise . as ( null ) ;
52
55
}
53
56
}
54
57
55
- export class Renderer implements tree . IRenderer {
56
- constructor ( @IWorkspaceContextService private contextService : IWorkspaceContextService
58
+ export class Renderer implements IRenderer {
59
+
60
+ constructor ( private actionRunner : IActionRunner ,
61
+ private actionProvider :ActionProvider ,
62
+ @IWorkspaceContextService private contextService : IWorkspaceContextService
57
63
) {
58
64
}
59
65
60
- public getHeight ( tree :tree . ITree , element :any ) : number {
66
+ public getHeight ( tree :ITree , element :any ) : number {
61
67
return 22 ;
62
68
}
63
69
64
- public getTemplateId ( tree :tree . ITree , element :any ) : string {
70
+ public getTemplateId ( tree :ITree , element :any ) : string {
65
71
if ( element instanceof Resource ) {
66
72
return 'resource' ;
67
73
}
68
74
return 'marker' ;
69
75
}
70
76
71
- public renderTemplate ( tree : tree . ITree , templateId : string , container : HTMLElement ) : any {
77
+ public renderTemplate ( tree : ITree , templateId : string , container : HTMLElement ) : any {
72
78
if ( 'resource' === templateId ) {
73
79
return this . renderResourceTemplate ( container ) ;
74
80
} else {
@@ -78,36 +84,41 @@ export class Renderer implements tree.IRenderer {
78
84
79
85
private renderResourceTemplate ( container : HTMLElement ) : IResourceTemplateData {
80
86
var data : IResourceTemplateData = Object . create ( null ) ;
81
- data . label = dom . append ( container , $ ( '.label' ) ) ;
87
+ data . file = new FileLabel ( container , null , this . contextService ) ;
88
+
89
+ const badgeWrapper = dom . append ( container , dom . emmet ( '.count-badge-wrapper' ) ) ;
90
+ data . count = new CountBadge ( badgeWrapper ) ;
91
+
92
+ data . actionBar = new ActionBar ( container , { actionRunner : this . actionRunner } ) ;
93
+ data . actionBar . push ( this . actionProvider . getActionsForResource ( ) , { icon : true , label : false } ) ;
82
94
return data ;
83
95
}
84
96
85
97
private renderMarkerTemplate ( container : HTMLElement ) : IMarkerTemplateData {
86
98
var data : IMarkerTemplateData = Object . create ( null ) ;
87
- data . icon = dom . append ( container , $ ( '.marker-icon' ) ) ;
88
- data . label = dom . append ( container , $ ( 'span.label' ) ) ;
99
+ data . icon = dom . append ( container , dom . emmet ( '.marker-icon' ) ) ;
100
+ data . label = dom . append ( container , dom . emmet ( 'span.label' ) ) ;
89
101
return data ;
90
102
}
91
103
92
- public renderElement ( tree : tree . ITree , element : any , templateId : string , templateData : any ) : void {
104
+ public renderElement ( tree : ITree , element : any , templateId : string , templateData : any ) : void {
93
105
if ( 'resource' === templateId ) {
94
106
return this . renderResourceElement ( tree , < Resource > element , templateData ) ;
95
107
} else {
96
108
return this . renderMarkerElement ( tree , ( < Marker > element ) . marker , templateData ) ;
97
109
}
98
110
}
99
111
100
- public disposeTemplate ( tree : tree . ITree , templateId : string , templateData : any ) : void {
101
- }
102
-
103
- private renderResourceElement ( tree : tree . ITree , element : Resource , templateData : IResourceTemplateData ) {
104
- let fileNameElement = dom . append ( templateData . label , $ ( 'span.file-name' ) ) ;
105
- fileNameElement . textContent = paths . basename ( element . uri . fsPath ) ;
106
- let fileLocationElement = dom . append ( templateData . label , $ ( 'span.file-path' ) ) ;
107
- fileLocationElement . textContent = getPathLabel ( element . uri , this . contextService ) ;
112
+ private renderResourceElement ( tree : ITree , element : Resource , templateData : IResourceTemplateData ) {
113
+ templateData . file . setValue ( element . uri ) ;
114
+ templateData . count . setCount ( 10 ) ;
115
+ templateData . actionBar . context = {
116
+ tree : tree ,
117
+ element : element
118
+ } ;
108
119
}
109
120
110
- private renderMarkerElement ( tree : tree . ITree , element : IMarker , templateData : IMarkerTemplateData ) {
121
+ private renderMarkerElement ( tree : ITree , element : IMarker , templateData : IMarkerTemplateData ) {
111
122
templateData . icon . className = 'icon ' + Renderer . iconClassNameFor ( element ) ;
112
123
templateData . label . textContent = element . message ;
113
124
}
@@ -125,4 +136,7 @@ export class Renderer implements tree.IRenderer {
125
136
}
126
137
return '' ;
127
138
}
139
+
140
+ public disposeTemplate ( tree : ITree , templateId : string , templateData : any ) : void {
141
+ }
128
142
}
0 commit comments