@@ -8,7 +8,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
8
8
import { IListOptions , List , IIdentityProvider , IMultipleSelectionController , IListStyles , IAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget' ;
9
9
import { IListVirtualDelegate , IListRenderer , IListMouseEvent , IListEvent , IListContextMenuEvent } from 'vs/base/browser/ui/list/list' ;
10
10
import { append , $ , toggleClass } from 'vs/base/browser/dom' ;
11
- import { Event , Relay , chain } from 'vs/base/common/event' ;
11
+ import { Event , Relay , chain , mapEvent } from 'vs/base/common/event' ;
12
12
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent' ;
13
13
import { KeyCode } from 'vs/base/common/keyCodes' ;
14
14
import { ITreeModel , ITreeNode , ITreeRenderer , ITreeModelOptions } from 'vs/base/browser/ui/tree/tree' ;
@@ -175,24 +175,49 @@ function isInputElement(e: HTMLElement): boolean {
175
175
}
176
176
177
177
export interface ITreeOptions < T , TFilterData = void > extends IListOptions < T > , ITreeModelOptions < T , TFilterData > { }
178
- export interface ITreeEvent < T , TFilterData > extends IListEvent < ITreeNode < T , TFilterData > > { }
179
- export interface ITreeContextMenuEvent < T , TFilterData > extends IListContextMenuEvent < ITreeNode < T , TFilterData > > { }
178
+
179
+ export interface ITreeEvent < T > {
180
+ elements : T [ ] ;
181
+ browserEvent ?: UIEvent ;
182
+ }
183
+
184
+ export interface ITreeContextMenuEvent < T > {
185
+ browserEvent : UIEvent ;
186
+ element : T | undefined ;
187
+ anchor : HTMLElement | { x : number ; y : number ; } | undefined ;
188
+ }
189
+
190
+ function asTreeEvent < T > ( event : IListEvent < ITreeNode < T , any > > ) : ITreeEvent < T > {
191
+ return {
192
+ elements : event . elements . map ( node => node . element ) ,
193
+ browserEvent : event . browserEvent
194
+ } ;
195
+ }
196
+
197
+ function asTreeContextMenuEvent < T > ( event : IListContextMenuEvent < ITreeNode < T , any > > ) : ITreeContextMenuEvent < T > {
198
+ return {
199
+ element : event . element . element ,
200
+ browserEvent : event . browserEvent ,
201
+ anchor : event . anchor
202
+ } ;
203
+ }
180
204
181
205
export abstract class AbstractTree < T , TFilterData , TRef > implements IDisposable {
182
206
183
207
private view : List < ITreeNode < T , TFilterData > > ;
184
208
protected model : ITreeModel < T , TFilterData , TRef > ;
185
209
protected disposables : IDisposable [ ] = [ ] ;
186
210
187
- readonly onDidChangeCollapseState : Event < ITreeNode < T , TFilterData > > ;
188
- readonly onDidChangeRenderNodeCount : Event < ITreeNode < T , TFilterData > > ;
189
- readonly onDidChangeFocus : Event < ITreeEvent < T , TFilterData > > ;
190
- readonly onDidChangeSelection : Event < ITreeEvent < T , TFilterData > > ;
191
-
192
- readonly onContextMenu : Event < ITreeContextMenuEvent < T , TFilterData > > ;
211
+ get onDidChangeFocus ( ) : Event < ITreeEvent < T > > { return mapEvent ( this . view . onFocusChange , asTreeEvent ) ; }
212
+ get onDidChangeSelection ( ) : Event < ITreeEvent < T > > { return mapEvent ( this . view . onSelectionChange , asTreeEvent ) ; }
193
213
214
+ get onContextMenu ( ) : Event < ITreeContextMenuEvent < T > > { return mapEvent ( this . view . onContextMenu , asTreeContextMenuEvent ) ; }
194
215
get onDidFocus ( ) : Event < void > { return this . view . onDidFocus ; }
195
216
get onDidBlur ( ) : Event < void > { return this . view . onDidBlur ; }
217
+
218
+ get onDidChangeCollapseState ( ) : Event < ITreeNode < T , TFilterData > > { return this . model . onDidChangeCollapseState ; }
219
+ get onDidChangeRenderNodeCount ( ) : Event < ITreeNode < T , TFilterData > > { return this . model . onDidChangeRenderNodeCount ; }
220
+
196
221
get onDidDispose ( ) : Event < void > { return this . view . onDidDispose ; }
197
222
198
223
constructor (
@@ -208,14 +233,9 @@ export abstract class AbstractTree<T, TFilterData, TRef> implements IDisposable
208
233
this . disposables . push ( ...treeRenderers ) ;
209
234
210
235
this . view = new List ( container , treeDelegate , treeRenderers , createComposedTreeListOptions ( options ) ) ;
211
- this . onDidChangeFocus = this . view . onFocusChange ;
212
- this . onDidChangeSelection = this . view . onSelectionChange ;
213
- this . onContextMenu = this . view . onContextMenu ;
214
236
215
237
this . model = this . createModel ( this . view , options ) ;
216
238
onDidChangeCollapseStateRelay . input = this . model . onDidChangeCollapseState ;
217
- this . onDidChangeCollapseState = this . model . onDidChangeCollapseState ;
218
- this . onDidChangeRenderNodeCount = this . model . onDidChangeRenderNodeCount ;
219
239
220
240
if ( options . mouseSupport !== false ) {
221
241
this . view . onMouseClick ( this . onMouseClick , this , this . disposables ) ;
0 commit comments