Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

GTree.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 #ifndef __GTREE2_H
00006 #define __GTREE2_H
00007 
00008 #include "GList.h"
00009 
00010 enum GTreeItemRect
00011 {
00012     TreeItemPos,
00013     TreeItemThumb,
00014     TreeItemText,
00015     TreeItemIcon
00016 };
00017 
00018 class GTreeItem;
00019 
00020 class LgiClass GTreeNode
00021 {
00022 protected:
00023     GTree *Tree;
00024     GTreeItem *Parent;
00025     List<GTreeItem> Items;
00026 
00027     virtual GTreeItem *Item() { return 0; }
00028     virtual GRect *Pos() { return 0; }
00029 
00030 public:
00031     GTreeNode();
00032     virtual ~GTreeNode();
00033 
00035     GTreeItem *Insert(GTreeItem *Obj = NULL, int Pos = -1);
00037     void Remove();
00039     void Detach();
00041     GTreeItem *GetNext();
00043     GTreeItem *GetPrev();
00045     GTreeItem *GetChild();
00047     GTreeItem *GetParent() { return Parent; }
00049     GTree *GetTree() { return Tree; }
00051     bool IsRoot();
00053     int IndexOf();
00054 };
00055 
00057 class LgiClass GTreeItem : public GItem, public GTreeNode
00058 {
00059     friend class GTree;
00060     friend class GTreeNode;
00061 
00062 protected:
00063     class GTreeItemPrivate *d;
00064 
00065     // Private methods
00066     void _RePour();
00067     void _Pour(GdcPt2 *Limit, int Depth, bool Visible);
00068     void _Remove();
00069     void _MouseClick(GMouse &m);
00070     void _SetTreePtr(GTree *t);
00071     GTreeItem *_HitTest(int x, int y);
00072     GRect *_GetRect(GTreeItemRect Which);
00073     GdcPt2 _ScrollPos();
00074     GTreeItem *Item() { return this; }
00075     GRect *Pos();
00076 
00077     virtual void _PourText(GdcPt2 &Size);
00078     virtual void _PaintText(GSurface *pDC, COLOUR Fore, COLOUR Back);
00079 
00080 protected:
00081     char *Str;
00082     int Sys_Image;
00083 
00084 public:
00085     GTreeItem();
00086     virtual ~GTreeItem();
00087 
00094     char *GetText(int i=0);
00098     bool SetText(char *s, int i=0);
00100     int GetImage(int Flags = 0);
00102     void SetImage(int i);
00105     void Update();
00107     bool Select();
00109     void Select(bool b);
00111     bool Expanded();
00113     void Expanded(bool b);
00115     void ScrollTo();
00116 
00118     virtual void OnExpand(bool b) {}
00119 
00121     virtual void OnPaint(GSurface *pDC, GRect &r, COLOUR Back);
00122 };
00123 
00125 class LgiClass GTree :
00126     public GLayout,
00127     public ResObject,
00128     public GItemContainer,
00129     public GTreeNode
00130 {
00131     friend class GTreeItem;
00132     friend class GTreeNode;
00133 
00134     class GTreePrivate *d;
00135 
00136     // Private methods
00137     void _Pour();
00138     void _OnSelect(GTreeItem *Item);
00139     GdcPt2 _ScrollPos();
00140     void _Update(GRect *r = 0, bool Now = false);
00141     void _UpdateBelow(int y, bool Now = false);
00142     void _UpdateScrollBars();
00143 
00144 protected:
00145     // Options
00146     bool Lines;
00147     bool Buttons;
00148     bool LinesAtRoot;
00149     bool EditLabels;
00150     bool MultipleSelect;
00151     
00152     GTreeItem *GetAdjacent(GTreeItem *From, bool Down);
00153     
00154 public:
00155     GTree(int id, int x, int y, int cx, int cy, char *name = 0);
00156     ~GTree();
00157 
00159     virtual void OnItemClick(GTreeItem *Item, GMouse &m);
00161     virtual void OnItemBeginDrag(GTreeItem *Item, int Flags);
00163     virtual void OnItemExpand(GTreeItem *Item, bool Expand);
00165     virtual void OnItemSelect(GTreeItem *Item);
00166     
00167     // Implementation
00168     void OnMouseClick(GMouse &m);
00169     void OnMouseMove(GMouse &m);
00170     void OnMouseWheel(double Lines);
00171     void OnPaint(GSurface *pDC);
00172     void OnFocus(bool b);
00173     void OnPosChange();
00174     bool OnKey(GKey &k);
00175     int OnNotify(GViewI *Ctrl, int Flags);
00176     int OnEvent(GMessage *Msg);
00177 
00179     GTreeItem *Insert(GTreeItem *Obj = 0, int Pos = -1);
00181     bool Delete(GTreeItem *Obj);
00183     bool Remove(GTreeItem *Obj);
00185     GTreeItem *ItemAt(int Pos) { return Items.ItemAt(Pos); }
00186 
00188     bool Select(GTreeItem *Obj);
00190     GTreeItem *Selection();
00192     GTreeItem *ItemAtPoint(int x, int y);
00195     void SelectDropTarget(GTreeItem *Item);
00196 
00198     void Empty();
00200     void RemoveAll();
00201 };
00202 
00203 #endif
00204 

Generated on Tue May 2 10:24:42 2006 for Lgi by  doxygen 1.4.1