@@ -34,6 +34,7 @@ import { FileKind } from 'vs/platform/files/common/files';
3434import { WorkbenchTreeController } from 'vs/platform/list/browser/listService' ;
3535import { ViewletPanel , IViewletPanelOptions } from 'vs/workbench/browser/parts/views/panelViewlet' ;
3636import { IMouseEvent } from 'vs/base/browser/mouseEvent' ;
37+ import { localize } from 'vs/nls' ;
3738
3839export class CustomTreeViewPanel extends ViewletPanel {
3940
@@ -176,7 +177,9 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
176177 private _hasIconForParentNode = false ;
177178 private _hasIconForLeafNode = false ;
178179
180+ private domNode : HTMLElement ;
179181 private treeContainer : HTMLElement ;
182+ private message : HTMLDivElement ;
180183 private tree : FileIconThemableWorkbenchTree ;
181184 private root : ITreeItem ;
182185 private elementsToRefresh : ITreeItem [ ] = [ ] ;
@@ -213,6 +216,8 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
213216 this . doRefresh ( [ this . root ] ) ; /** soft refresh **/
214217 }
215218 } ) ) ;
219+
220+ this . create ( ) ;
216221 }
217222
218223 get dataProvider ( ) : ITreeViewDataProvider {
@@ -233,10 +238,13 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
233238 } ) ;
234239 }
235240 } ;
241+ DOM . removeClass ( this . domNode , 'message' ) ;
242+ this . refresh ( ) ;
236243 } else {
237244 this . _dataProvider = null ;
245+ DOM . addClass ( this . domNode , 'message' ) ;
246+ this . message . innerText = localize ( 'no-dataprovider' , "There is no data provider registered that can provide view data." ) ;
238247 }
239- this . refresh ( ) ;
240248 }
241249
242250 get hasIconForParentNode ( ) : boolean {
@@ -301,11 +309,16 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
301309 if ( ! this . tree ) {
302310 this . createTree ( ) ;
303311 }
304- DOM . append ( container , this . treeContainer ) ;
312+ DOM . append ( container , this . domNode ) ;
313+ }
314+
315+ private create ( ) {
316+ this . domNode = DOM . $ ( '.tree-explorer-viewlet-tree-view' ) ;
317+ this . message = DOM . append ( this . domNode , DOM . $ ( '.customview-message' ) ) ;
318+ this . treeContainer = DOM . append ( this . domNode , DOM . $ ( '.customview-tree' ) ) ;
305319 }
306320
307321 private createTree ( ) {
308- this . treeContainer = DOM . $ ( '.tree-explorer-viewlet-tree-view' ) ;
309322 const actionItemProvider = ( action : IAction ) => action instanceof MenuItemAction ? this . instantiationService . createInstance ( ContextAwareMenuItemActionItem , action ) : undefined ;
310323 const menus = this . instantiationService . createInstance ( TreeMenus , this . id ) ;
311324 const dataSource = this . instantiationService . createInstance ( TreeDataSource , this , this . container ) ;
@@ -322,8 +335,8 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
322335 }
323336
324337 layout ( size : number ) {
338+ this . domNode . style . height = size + 'px' ;
325339 if ( this . tree ) {
326- this . treeContainer . style . height = size + 'px' ;
327340 this . tree . layout ( size ) ;
328341 }
329342 }
@@ -338,7 +351,7 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
338351 }
339352
340353 refresh ( elements ?: ITreeItem [ ] ) : TPromise < void > {
341- if ( this . tree ) {
354+ if ( this . dataProvider && this . tree ) {
342355 elements = elements || [ this . root ] ;
343356 for ( const element of elements ) {
344357 element . children = null ; // reset children
@@ -353,7 +366,7 @@ export class CustomTreeViewer extends Disposable implements ITreeViewer {
353366 }
354367
355368 reveal ( item : ITreeItem , parentChain : ITreeItem [ ] , options ?: { select ?: boolean , focus ?: boolean } ) : TPromise < void > {
356- if ( this . tree && this . isVisible ) {
369+ if ( this . dataProvider && this . tree && this . isVisible ) {
357370 options = options ? options : { select : false , focus : false } ;
358371 const select = isUndefinedOrNull ( options . select ) ? false : options . select ;
359372 const focus = isUndefinedOrNull ( options . focus ) ? false : options . focus ;
0 commit comments