@@ -25,9 +25,9 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag
2525import { localize } from 'vs/nls' ;
2626import { IContextKey , IContextKeyService } from 'vs/platform/contextkey/common/contextkey' ;
2727import { Iterator } from 'vs/base/common/iterator' ;
28- import { ITreeElement , ITreeNode , ITreeContextMenuEvent } from 'vs/base/browser/ui/tree/tree' ;
28+ import { ITreeElement , ITreeNode , ITreeContextMenuEvent , ITreeRenderer } from 'vs/base/browser/ui/tree/tree' ;
2929import { Relay , Event , Emitter } from 'vs/base/common/event' ;
30- import { WorkbenchObjectTree , TreeResourceNavigator2 } from 'vs/platform/list/browser/listService' ;
30+ import { WorkbenchObjectTree , TreeResourceNavigator2 , IListService } from 'vs/platform/list/browser/listService' ;
3131import { FilterOptions } from 'vs/workbench/contrib/markers/browser/markersFilterOptions' ;
3232import { IExpression } from 'vs/base/common/glob' ;
3333import { deepClone } from 'vs/base/common/objects' ;
@@ -44,6 +44,9 @@ import { ResourceLabels } from 'vs/workbench/browser/labels';
4444import { IMarker } from 'vs/platform/markers/common/markers' ;
4545import { withUndefinedAsNull } from 'vs/base/common/types' ;
4646import { MementoObject } from 'vs/workbench/common/memento' ;
47+ import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list' ;
48+ import { IObjectTreeOptions } from 'vs/base/browser/ui/tree/objectTree' ;
49+ import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility' ;
4750
4851function createModelIterator ( model : MarkersModel ) : Iterator < ITreeElement < TreeElement > > {
4952 const resourcesIt = Iterator . fromArray ( model . resourceMarkers ) ;
@@ -71,8 +74,7 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
7174 private readonly rangeHighlightDecorations : RangeHighlightDecorations ;
7275 private readonly filter : Filter ;
7376
74- private tree ! : WorkbenchObjectTree < TreeElement , FilterData > ;
75- private treeContainer ! : HTMLElement ;
77+ private tree ! : MarkersTree ;
7678 private messageBoxContainer ! : HTMLElement ;
7779 private ariaLabelElement ! : HTMLElement ;
7880
@@ -153,7 +155,6 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
153155 }
154156
155157 public layout ( dimension : dom . Dimension ) : void {
156- this . treeContainer . style . height = `${ dimension . height } px` ;
157158 this . tree . layout ( dimension . height , dimension . width ) ;
158159 if ( this . filterInputActionViewItem ) {
159160 this . filterInputActionViewItem . toggleLayout ( dimension . width < 1200 ) ;
@@ -252,7 +253,7 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
252253 }
253254
254255 const { total, filtered } = this . getFilterStats ( ) ;
255- dom . toggleClass ( this . treeContainer , 'hidden' , total === 0 || filtered === 0 ) ;
256+ this . tree . toggleVisibility ( total === 0 || filtered === 0 ) ;
256257 this . renderMessage ( ) ;
257258 this . _onDidFilter . fire ( ) ;
258259 }
@@ -269,7 +270,7 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
269270 this . _onDidFilter . fire ( ) ;
270271
271272 const { total, filtered } = this . getFilterStats ( ) ;
272- dom . toggleClass ( this . treeContainer , 'hidden' , total === 0 || filtered === 0 ) ;
273+ this . tree . toggleVisibility ( total === 0 || filtered === 0 ) ;
273274 this . renderMessage ( ) ;
274275 }
275276
@@ -300,8 +301,6 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
300301 }
301302
302303 private createTree ( parent : HTMLElement ) : void {
303- this . treeContainer = dom . append ( parent , dom . $ ( '.tree-container.show-file-icons' ) ) ;
304-
305304 const onDidChangeRenderNodeCount = new Relay < ITreeNode < any , any > > ( ) ;
306305
307306 const treeLabels = this . _register ( this . instantiationService . createInstance ( ResourceLabels , this ) ) ;
@@ -320,9 +319,9 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
320319 }
321320 } ;
322321
323- this . tree = this . _register ( this . instantiationService . createInstance ( WorkbenchObjectTree ,
322+ this . tree = this . _register ( this . instantiationService . createInstance ( MarkersTree ,
324323 'MarkersPanel' ,
325- this . treeContainer ,
324+ dom . append ( parent , dom . $ ( '.tree-container.show-file-icons' ) ) ,
326325 virtualDelegate ,
327326 renderers ,
328327 {
@@ -476,7 +475,7 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
476475 private render ( ) : void {
477476 this . cachedFilterStats = undefined ;
478477 this . tree . setChildren ( null , createModelIterator ( this . markersWorkbenchService . markersModel ) ) ;
479- dom . toggleClass ( this . treeContainer , 'hidden' , this . isEmpty ( ) ) ;
478+ this . tree . toggleVisibility ( this . isEmpty ( ) ) ;
480479 this . renderMessage ( ) ;
481480 }
482481
@@ -727,3 +726,32 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
727726 }
728727
729728}
729+
730+ class MarkersTree extends WorkbenchObjectTree < TreeElement , FilterData > {
731+
732+ constructor (
733+ user : string ,
734+ readonly container : HTMLElement ,
735+ delegate : IListVirtualDelegate < TreeElement > ,
736+ renderers : ITreeRenderer < TreeElement , FilterData , any > [ ] ,
737+ options : IObjectTreeOptions < TreeElement , FilterData > ,
738+ @IContextKeyService contextKeyService : IContextKeyService ,
739+ @IListService listService : IListService ,
740+ @IThemeService themeService : IThemeService ,
741+ @IConfigurationService configurationService : IConfigurationService ,
742+ @IKeybindingService keybindingService : IKeybindingService ,
743+ @IAccessibilityService accessibilityService : IAccessibilityService
744+ ) {
745+ super ( user , container , delegate , renderers , options , contextKeyService , listService , themeService , configurationService , keybindingService , accessibilityService ) ;
746+ }
747+
748+ layout ( height : number , width : number ) : void {
749+ this . container . style . height = `${ height } px` ;
750+ super . layout ( height , width ) ;
751+ }
752+
753+ toggleVisibility ( hide : boolean ) : void {
754+ dom . toggleClass ( this . container , 'hidden' , hide ) ;
755+ }
756+
757+ }
0 commit comments