12 #ifndef ROOT_TGListTree
13 #define ROOT_TGListTree
45 friend class TGListTree;
48 TGListTreeItem(
const TGListTreeItem&);
49 TGListTreeItem& operator=(
const TGListTreeItem&);
53 TGListTreeItem *fParent;
54 TGListTreeItem *fFirstchild;
55 TGListTreeItem *fLastchild;
56 TGListTreeItem *fPrevsibling;
57 TGListTreeItem *fNextsibling;
70 TGListTreeItem(TGClient *client=gClient);
71 virtual ~TGListTreeItem() {}
73 TGListTreeItem *GetParent()
const {
return fParent; }
74 TGListTreeItem *GetFirstChild()
const {
return fFirstchild; }
75 TGListTreeItem *GetLastChild()
const {
return fLastchild; }
76 TGListTreeItem *GetPrevSibling()
const {
return fPrevsibling; }
77 TGListTreeItem *GetNextSibling()
const {
return fNextsibling; }
79 virtual Bool_t IsOpen()
const {
return fOpen; }
80 virtual void SetOpen(Bool_t o) { fOpen = o; }
82 virtual Bool_t IsActive()
const = 0;
83 virtual Pixel_t GetActiveColor()
const = 0;
84 virtual void SetActive(Bool_t) {}
86 void Rename(
const char* new_name) { SetText(new_name); }
87 virtual const char *GetText()
const = 0;
88 virtual Int_t GetTextLength()
const = 0;
89 virtual const char *GetTipText()
const = 0;
90 virtual Int_t GetTipTextLength()
const = 0;
91 virtual void SetText(
const char *) {}
92 virtual void SetTipText(
const char *) {}
94 virtual void SetUserData(
void *, Bool_t=kFALSE) {}
95 virtual void *GetUserData()
const = 0;
97 virtual const TGPicture*GetPicture()
const = 0;
98 virtual void SetPictures(
const TGPicture*,
const TGPicture*) {}
99 virtual const TGPicture*GetCheckBoxPicture()
const = 0;
100 virtual void SetCheckBoxPictures(
const TGPicture*,
const TGPicture*) {}
101 virtual UInt_t GetPicWidth()
const;
103 virtual void SetCheckBox(Bool_t=kTRUE) {}
104 virtual Bool_t HasCheckBox()
const = 0;
105 virtual void CheckItem(Bool_t=kTRUE) = 0;
106 virtual void Toggle() { SetCheckBox( ! IsChecked()); }
107 virtual Bool_t IsChecked()
const = 0;
110 virtual void CheckAllChildren(Bool_t=kTRUE) {}
111 virtual void CheckChildren(TGListTreeItem*, Bool_t) {}
112 virtual Bool_t HasCheckedChild(Bool_t=kFALSE) {
return kTRUE; }
113 virtual Bool_t HasUnCheckedChild(Bool_t=kFALSE) {
return kTRUE; }
114 virtual void UpdateState() {}
117 virtual Bool_t HasColor()
const = 0;
118 virtual Color_t GetColor()
const = 0;
119 virtual void SetColor(Color_t) {}
120 virtual void ClearColor() {}
123 void SetDNDSource(Bool_t onoff)
124 {
if (onoff) fDNDState |= kIsDNDSource;
else fDNDState &= ~kIsDNDSource; }
125 void SetDNDTarget(Bool_t onoff)
126 {
if (onoff) fDNDState |= kIsDNDTarget;
else fDNDState &= ~kIsDNDTarget; }
127 Bool_t IsDNDSource()
const {
return fDNDState & kIsDNDSource; }
128 Bool_t IsDNDTarget()
const {
return fDNDState & kIsDNDTarget; }
131 virtual Bool_t HandlesDragAndDrop()
const {
return kFALSE; }
132 virtual void HandleDrag() {}
133 virtual void HandleDrop() {}
135 virtual void SavePrimitive(std::ostream&, Option_t*, Int_t) {}
137 ClassDef(TGListTreeItem,0)
141 class TGListTreeItemStd :
public TGListTreeItem
150 const TGPicture *fOpenPic;
151 const TGPicture *fClosedPic;
152 const TGPicture *fCheckedPic;
153 const TGPicture *fUncheckedPic;
159 TGListTreeItemStd(
const TGListTreeItemStd&);
160 TGListTreeItemStd& operator=(
const TGListTreeItemStd&);
163 TGListTreeItemStd(TGClient *fClient = gClient,
const char *name = 0,
164 const TGPicture *opened = 0,
const TGPicture *closed = 0,
165 Bool_t checkbox = kFALSE);
166 virtual ~TGListTreeItemStd();
168 virtual Pixel_t GetActiveColor()
const;
169 virtual Bool_t IsActive()
const {
return fActive; }
170 virtual void SetActive(Bool_t a) { fActive = a; }
172 virtual const char *GetText()
const {
return fText.Data(); }
173 virtual Int_t GetTextLength()
const {
return fText.Length(); }
174 virtual const char *GetTipText()
const {
return fTipText.Data(); }
175 virtual Int_t GetTipTextLength()
const {
return fTipText.Length(); }
176 virtual void SetText(
const char *text) { fText = text; }
177 virtual void SetTipText(
const char *tip) { fTipText = tip; }
179 virtual void SetUserData(
void *userData, Bool_t own=kFALSE) { fUserData = userData; fOwnsData=own; }
180 virtual void *GetUserData()
const {
return fUserData; }
182 virtual const TGPicture*GetPicture()
const {
return fOpen ? fOpenPic : fClosedPic; }
183 virtual const TGPicture*GetCheckBoxPicture()
const {
return fCheckBox ? (fChecked ? fCheckedPic : fUncheckedPic) : 0; }
184 virtual void SetPictures(
const TGPicture *opened,
const TGPicture *closed);
185 virtual void SetCheckBoxPictures(
const TGPicture *checked,
const TGPicture *unchecked);
187 virtual void SetCheckBox(Bool_t on = kTRUE);
188 virtual Bool_t HasCheckBox()
const {
return fCheckBox; }
189 virtual void CheckItem(Bool_t checked = kTRUE) { fChecked = checked; }
190 virtual void Toggle() { fChecked = !fChecked; }
191 virtual Bool_t IsChecked()
const {
return fChecked; }
193 virtual void CheckAllChildren(Bool_t state = kTRUE);
194 virtual void CheckChildren(TGListTreeItem *item, Bool_t state);
195 virtual Bool_t HasCheckedChild(Bool_t first=kFALSE);
196 virtual Bool_t HasUnCheckedChild(Bool_t first=kFALSE);
197 virtual void UpdateState();
199 virtual Bool_t HasColor()
const {
return fHasColor; }
200 virtual Color_t GetColor()
const {
return fColor; }
201 virtual void SetColor(Color_t color) { fHasColor =
true;fColor = color; }
202 virtual void ClearColor() { fHasColor =
false; }
204 virtual void SavePrimitive(std::ostream &out, Option_t *option, Int_t n);
206 ClassDef(TGListTreeItemStd,0)
210 class TGListTree :
public TGContainer {
214 enum EColorMarkupMode {
216 kColorUnderline = BIT(0),
225 TGListTreeItem *fFirst;
226 TGListTreeItem *fLast;
227 TGListTreeItem *fSelected;
228 TGListTreeItem *fCurrent;
229 TGListTreeItem *fBelowMouse;
235 GContext_t fActiveGC;
238 GContext_t fHighlightGC;
245 TGListTreeItem *fTipItem;
248 Atom_t *fDNDTypeList;
249 TGListTreeItem *fDropItem;
251 Bool_t fAutoCheckBoxPic;
253 Bool_t fUserControlled;
254 Bool_t fEventHandled;
255 UInt_t fLastEventState;
257 EColorMarkupMode fColorMode;
258 ECheckMode fCheckMode;
261 static Pixel_t fgGrayPixel;
262 static const TGFont *fgDefaultFont;
263 static TGGC *fgActiveGC;
264 static TGGC *fgDrawGC;
265 static TGGC *fgLineGC;
266 static TGGC *fgHighlightGC;
267 static TGGC *fgColorGC;
268 static const TGPicture *fgOpenPic;
269 static const TGPicture *fgClosedPic;
270 static const TGPicture *fgCheckedPic;
271 static const TGPicture *fgUncheckedPic;
273 static Pixel_t GetGrayPixel();
274 static FontStruct_t GetDefaultFontStruct();
275 static const TGGC &GetActiveGC();
276 static const TGGC &GetDrawGC();
277 static const TGGC &GetLineGC();
278 static const TGGC &GetHighlightGC();
279 static const TGGC &GetColorGC();
281 void Draw(Handle_t
id, Int_t yevent, Int_t hevent);
282 void Draw(Option_t * =
"") { MayNotUse(
"Draw(Option_t*)"); }
283 Int_t DrawChildren(Handle_t
id, TGListTreeItem *item, Int_t x, Int_t y, Int_t xroot);
284 void DrawItem(Handle_t
id, TGListTreeItem *item, Int_t x, Int_t y, Int_t *xroot,
285 UInt_t *retwidth, UInt_t *retheight);
286 void DrawItemName(Handle_t
id, TGListTreeItem *item);
287 void DrawNode(Handle_t
id, TGListTreeItem *item, Int_t x, Int_t y);
288 virtual void UpdateChecked(TGListTreeItem *item, Bool_t redraw = kFALSE);
290 void SaveChildren(std::ostream &out, TGListTreeItem *item, Int_t &n);
291 void RemoveReference(TGListTreeItem *item);
292 void PDeleteItem(TGListTreeItem *item);
293 void PDeleteChildren(TGListTreeItem *item);
294 void InsertChild(TGListTreeItem *parent, TGListTreeItem *item);
295 void InsertChildren(TGListTreeItem *parent, TGListTreeItem *item);
296 Int_t SearchChildren(TGListTreeItem *item, Int_t y, Int_t findy,
297 TGListTreeItem **finditem);
298 TGListTreeItem *FindItem(Int_t findy);
299 void *FindItem(
const TString& name,
300 Bool_t direction = kTRUE,
301 Bool_t caseSensitive = kTRUE,
302 Bool_t beginWith = kFALSE)
303 {
return TGContainer::FindItem(name, direction, caseSensitive, beginWith); }
305 virtual void Layout() {}
307 void OnMouseOver(TGFrame*) { }
308 void CurrentChanged(Int_t , Int_t ) { }
309 void CurrentChanged(TGFrame *) { }
310 void ReturnPressed(TGFrame*) { }
311 void Clicked(TGFrame *, Int_t ) { }
312 void Clicked(TGFrame *, Int_t , Int_t , Int_t ) { }
313 void DoubleClicked(TGFrame *, Int_t ) { }
314 void DoubleClicked(TGFrame *, Int_t , Int_t , Int_t ) { }
315 void KeyPressed(TGFrame *, UInt_t , UInt_t ) { }
318 TGListTree(
const TGListTree&);
319 TGListTree& operator=(
const TGListTree&);
322 TGListTree(TGWindow *p = 0, UInt_t w = 1, UInt_t h = 1,
323 UInt_t options = 0, Pixel_t back = GetWhitePixel());
324 TGListTree(TGCanvas *p, UInt_t options, Pixel_t back = GetWhitePixel());
326 virtual ~TGListTree();
328 virtual Bool_t HandleButton(Event_t *event);
329 virtual Bool_t HandleDoubleClick(Event_t *event);
330 virtual Bool_t HandleCrossing(Event_t *event);
331 virtual Bool_t HandleMotion(Event_t *event);
332 virtual Bool_t HandleKey(Event_t *event);
334 virtual void SetCanvas(TGCanvas *canvas) { fCanvas = canvas; }
335 virtual void DrawRegion(Int_t x, Int_t y, UInt_t w, UInt_t h);
337 virtual void DrawOutline(Handle_t
id, TGListTreeItem *item, Pixel_t col=0xbbbbbb,
338 Bool_t clear=kFALSE);
339 virtual void DrawActive(Handle_t
id, TGListTreeItem *item);
341 virtual TGDimension GetDefaultSize()
const
342 {
return TGDimension(fDefw, fDefh); }
344 void AddItem(TGListTreeItem *parent, TGListTreeItem *item);
345 TGListTreeItem *AddItem(TGListTreeItem *parent,
const char *
string,
346 const TGPicture *open = 0,
347 const TGPicture *closed = 0,
348 Bool_t checkbox = kFALSE);
349 TGListTreeItem *AddItem(TGListTreeItem *parent,
const char *
string,
350 void *userData,
const TGPicture *open = 0,
351 const TGPicture *closed = 0,
352 Bool_t checkbox = kFALSE);
353 void RenameItem(TGListTreeItem *item,
const char *
string);
354 Int_t DeleteItem(TGListTreeItem *item);
355 void OpenItem(TGListTreeItem *item);
356 void CloseItem(TGListTreeItem *item);
357 void CheckItem(TGListTreeItem *item, Bool_t check = kTRUE);
358 void SetCheckBox(TGListTreeItem *item, Bool_t on = kTRUE);
359 void ToggleItem(TGListTreeItem *item);
360 Int_t RecursiveDeleteItem(TGListTreeItem *item,
void *userData);
362 Int_t DeleteChildren(TGListTreeItem *item);
363 Int_t Reparent(TGListTreeItem *item, TGListTreeItem *newparent);
364 Int_t ReparentChildren(TGListTreeItem *item, TGListTreeItem *newparent);
365 void SetToolTipItem(TGListTreeItem *item,
const char *
string);
366 void SetAutoTips(Bool_t on = kTRUE) { fAutoTips = on; }
367 void SetAutoCheckBoxPic(Bool_t on) { fAutoCheckBoxPic = on; }
368 void SetSelected(TGListTreeItem *item) { fSelected = item; }
369 void AdjustPosition(TGListTreeItem *item);
370 void AdjustPosition() { TGContainer::AdjustPosition(); }
373 void Home(Bool_t select = kFALSE);
374 void End(Bool_t select = kFALSE);
375 void PageUp(Bool_t select = kFALSE);
376 void PageDown(Bool_t select = kFALSE);
377 void LineUp(Bool_t select = kFALSE);
378 void LineDown(Bool_t select = kFALSE);
379 void Search(Bool_t close = kTRUE);
381 Int_t Sort(TGListTreeItem *item);
382 Int_t SortSiblings(TGListTreeItem *item);
383 Int_t SortChildren(TGListTreeItem *item);
384 void HighlightItem(TGListTreeItem *item);
385 void ClearHighlighted();
386 void GetPathnameFromItem(TGListTreeItem *item,
char *path, Int_t depth = 0);
387 void UnselectAll(Bool_t draw);
388 void SetToolTipText(
const char *text, Int_t x, Int_t y, Long_t delayms);
389 void HighlightItem(TGListTreeItem *item, Bool_t state, Bool_t draw);
390 void HighlightChildren(TGListTreeItem *item, Bool_t state, Bool_t draw);
391 void DisableOpen(Bool_t disable = kTRUE) { fDisableOpen = disable;}
392 void GetChecked(TList *checked);
393 void GetCheckedChildren(TList *checked, TGListTreeItem *item);
394 void CheckAllChildren(TGListTreeItem *item, Bool_t state);
396 TGListTreeItem *GetFirstItem()
const {
return fFirst; }
397 TGListTreeItem *GetSelected()
const {
return fSelected; }
398 TGListTreeItem *GetCurrent()
const {
return fCurrent; }
399 TGListTreeItem *GetBelowMouse()
const {
return fBelowMouse; }
400 TGListTreeItem *FindSiblingByName(TGListTreeItem *item,
const char *name);
401 TGListTreeItem *FindSiblingByData(TGListTreeItem *item,
void *userData);
402 TGListTreeItem *FindChildByName(TGListTreeItem *item,
const char *name);
403 TGListTreeItem *FindChildByData(TGListTreeItem *item,
void *userData);
404 TGListTreeItem *FindItemByPathname(
const char *path);
405 TGListTreeItem *FindItemByObj(TGListTreeItem *item,
void *ptr);
407 void AddItem(
const char *
string) { AddItem(fSelected,
string); }
408 void AddRoot(
const char *
string) { AddItem(0,
string); }
409 Int_t DeleteSelected() {
return (fSelected ? DeleteItem(fSelected) : 0); }
410 void RenameSelected(
const char *
string) {
if (fSelected) RenameItem(fSelected,
string); }
412 virtual void MouseOver(TGListTreeItem *entry);
413 virtual void MouseOver(TGListTreeItem *entry, UInt_t mask);
414 virtual void KeyPressed(TGListTreeItem *entry, UInt_t keysym, UInt_t mask);
415 virtual void ReturnPressed(TGListTreeItem *entry);
416 virtual void Clicked(TGListTreeItem *entry, Int_t btn);
417 virtual void Clicked(TGListTreeItem *entry, Int_t btn, Int_t x, Int_t y);
418 virtual void Clicked(TGListTreeItem *entry, Int_t btn, UInt_t mask, Int_t x, Int_t y);
419 virtual void DoubleClicked(TGListTreeItem *entry, Int_t btn);
420 virtual void DoubleClicked(TGListTreeItem *entry, Int_t btn, Int_t x, Int_t y);
421 virtual void Checked(TObject *obj, Bool_t check);
422 virtual void DataDropped(TGListTreeItem *item, TDNDData *data);
427 Int_t TextWidth(
const char *c);
429 static const TGPicture *GetOpenPic();
430 static const TGPicture *GetClosedPic();
431 static const TGPicture *GetCheckedPic();
432 static const TGPicture *GetUncheckedPic();
435 void SetUserControl(Bool_t ctrl=kTRUE) { fUserControlled = ctrl; }
436 Bool_t HasUserControl()
const {
return fUserControlled; }
437 void SetEventHandled(Bool_t eh=kTRUE) { fEventHandled = eh; }
438 Bool_t IsEventHandled()
const {
return fEventHandled; }
440 Bool_t HandleDNDDrop(TDNDData *data);
441 Atom_t HandleDNDPosition(Int_t x, Int_t y, Atom_t action,
442 Int_t xroot, Int_t yroot);
443 Atom_t HandleDNDEnter(Atom_t * typelist);
444 Bool_t HandleDNDLeave();
446 virtual TDNDData *GetDNDData(Atom_t) {
450 EColorMarkupMode GetColorMode()
const {
return fColorMode; }
451 void SetColorMode(EColorMarkupMode colorMode) { fColorMode = colorMode; }
453 ECheckMode GetCheckMode()
const {
return fCheckMode; }
454 void SetCheckMode(ECheckMode mode) { fCheckMode = mode; }
456 virtual void SavePrimitive(std::ostream &out, Option_t *option =
"");
458 ClassDef(TGListTree,0)