1 ///////////////////////////////////////////////////////////////////////////////
2 // Name:        treelay.h
3 // Purpose:     wxTreeLayout class
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     7/4/98
7 // RCS-ID:      $Id: treelay.h 35650 2005-09-23 12:56:45Z MR $
8 // Copyright:   (c) 1998 Julian Smart
9 // Licence:     wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_TREELAY_H_
13 #define _WX_TREELAY_H_
14 
15 #ifndef WX_PRECOMP
16 #include "wx/object.h"
17 class wxList;
18 class wxDC;
19 class wxMouseEvent;
20 #endif
21 
22 #include "wx/deprecated/setup.h"
23 #include "wx/string.h"
24 
25 #if wxUSE_TREELAYOUT
26 
27 class WXDLLIMPEXP_DEPRECATED wxTreeLayout: public wxObject
28 {
29 public:
30     wxTreeLayout();
~wxTreeLayout()31     virtual ~wxTreeLayout() { }
32 
33     // Redefine these
34     virtual void GetChildren(long id, wxList& list) = 0;
35     virtual long GetNextNode(long id) = 0;
36     virtual long GetNodeParent(long id) = 0;
37     virtual long GetNodeX(long id) = 0;
38     virtual long GetNodeY(long id) = 0;
39     virtual void SetNodeX(long id, long x) = 0;
40     virtual void SetNodeY(long id, long y) = 0;
41     virtual void ActivateNode(long id, bool active) = 0;
42     virtual bool NodeActive(long id) = 0;
43 
44     // Optional redefinition
45     void Initialize(void);
SetNodeName(long WXUNUSED (id),const wxString & WXUNUSED (name))46     inline virtual void SetNodeName(long WXUNUSED(id), const wxString& WXUNUSED(name)) {}
GetNodeName(long WXUNUSED (id))47     inline virtual wxString GetNodeName(long WXUNUSED(id)) { return wxString(wxT("")); }
48     virtual void GetNodeSize(long id, long *x, long *y, wxDC& dc);
49     virtual void Draw(wxDC& dc);
50     virtual void DrawNodes(wxDC& dc);
51     virtual void DrawBranches(wxDC& dc);
52     virtual void DrawNode(long id, wxDC& dc);
53     virtual void DrawBranch(long from, long to, wxDC& dc);
54 
55     // Don't redefine
56     virtual void DoLayout(wxDC& dc, long topNode = -1);
57 
58     // Accessors -- don't redefine
SetTopNode(long id)59     inline void SetTopNode(long id) { m_parentNode = id; }
GetTopNode(void)60     inline long GetTopNode(void) const { return m_parentNode; }
SetSpacing(long x,long y)61     inline void SetSpacing(long x, long y) { m_xSpacing = x; m_ySpacing = y; }
GetXSpacing(void)62     inline long GetXSpacing(void) const { return m_xSpacing; }
GetYSpacing(void)63     inline long GetYSpacing(void) const { return m_ySpacing; }
SetMargins(long x,long y)64     inline void SetMargins(long x, long y) { m_leftMargin = x; m_topMargin = y; }
GetTopMargin(void)65     inline long GetTopMargin(void) const { return m_topMargin; }
GetLeftMargin(void)66     inline long GetLeftMargin(void) const { return m_leftMargin; }
67 
GetOrientation(void)68     inline bool GetOrientation(void) const { return m_orientation; }
SetOrientation(bool orient)69     inline void SetOrientation(bool orient) { m_orientation = orient; }
70 
71 private:
72     void CalcLayout(long node_id, int level, wxDC& dc);
73 
74 protected:
75     long          m_parentNode;
76     long          m_lastY;
77     long          m_lastX;
78     long          m_xSpacing;
79     long          m_ySpacing;
80     long          m_topMargin;
81     long          m_leftMargin;
82     bool          m_orientation; // true for top-to-bottom, false for left-to-right
83 
84 private:
85     DECLARE_ABSTRACT_CLASS(wxTreeLayout)
86 };
87 
88 class WXDLLIMPEXP_DEPRECATED wxStoredNode
89 {
90 public:
91     wxString      m_name;
92     long          m_x, m_y;
93     long          m_parentId;
94     bool          m_active;
95     long          m_clientData;
96 };
97 
98 /*
99  * A version of wxTreeLayout with storage for nodes
100  */
101 
102 class WXDLLIMPEXP_DEPRECATED wxTreeLayoutStored: public wxTreeLayout
103 {
104 public:
105     wxTreeLayoutStored(int noNodes = 200);
106     virtual ~wxTreeLayoutStored(void);
107     void Initialize(int n);
108 
109     wxString HitTest(wxMouseEvent& event, wxDC& dc);
110     wxStoredNode* GetNode(long id) const;
GetNumNodes()111     inline int GetNumNodes() const { return m_maxNodes; };
GetNodeCount()112     inline int GetNodeCount() const { return m_num; };
113 
114     virtual void GetChildren(long id, wxList& list);
115     virtual long GetNextNode(long id);
116     virtual long GetNodeParent(long id);
117     virtual long GetNodeX(long id);
118     virtual long GetNodeY(long id);
119     virtual void SetNodeX(long id, long x);
120     virtual void SetNodeY(long id, long y);
121     virtual void SetNodeName(long id, const wxString& name);
122     virtual wxString GetNodeName(long id);
123     virtual void ActivateNode(long id, bool active);
124     virtual bool NodeActive(long id);
125     virtual void SetClientData(long id, long clientData);
126     virtual long GetClientData(long id) const;
127 
128     virtual long AddChild(const wxString& name, const wxString& parent = wxT(""));
129     virtual long AddChild(const wxString& name, long parent);
130     virtual long NameToId(const wxString& name);
131 
132     // Data members
133 private:
134     wxStoredNode*     m_nodes;
135     int               m_num;
136     int               m_maxNodes;
137 
138 private:
139     DECLARE_DYNAMIC_CLASS(wxTreeLayoutStored)
140     DECLARE_NO_COPY_CLASS(wxTreeLayoutStored)
141 };
142 
143 // For backward compatibility
144 #define wxStoredTree wxTreeLayoutStored
145 
146 #endif
147     // wxUSE_TREELAYOUT
148 
149 #endif
150  // _WX_TREELAY_H_
151 
152