]> git.saurik.com Git - wxWidgets.git/blob - contrib/include/wx/gizmos/splittree.h
a6877851db4c07fb6a811b59924b194be1e9d5ff
[wxWidgets.git] / contrib / include / wx / gizmos / splittree.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: splittree.h
3 // Purpose: Classes to achieve a remotely-scrolled tree in a splitter
4 // window that can be scrolled by a scrolled window higher in the
5 // hierarchy
6 // Author: Julian Smart
7 // Modified by:
8 // Created: 8/7/2000
9 // RCS-ID: $Id$
10 // Copyright: (c) Julian Smart
11 // Licence: wxWindows licence
12 /////////////////////////////////////////////////////////////////////////////
13
14 #ifndef _WX_SPLITTREE_H_
15 #define _WX_SPLITTREE_H_
16
17 #ifdef __GNUG__
18 #pragma interface "splittree.h"
19 #endif
20
21 // Set this to 1 to use generic tree control (doesn't yet work properly)
22 #define USE_GENERIC_TREECTRL 0
23
24 #include "wx/wx.h"
25 #include "wx/treectrl.h"
26 #include "wx/splitter.h"
27 #include "wx/scrolwin.h"
28
29 #if USE_GENERIC_TREECTRL
30 #include "wx/generic/treectlg.h"
31 #ifndef wxTreeCtrl
32 #define wxTreeCtrl wxGenericTreeCtrl
33 #define sm_classwxTreeCtrl sm_classwxGenericTreeCtrl
34 #endif
35 #endif
36
37 class wxRemotelyScrolledTreeCtrl;
38 class wxThinSplitterWindow;
39 class wxSplitterScrolledWindow;
40
41 /*
42 * wxRemotelyScrolledTreeCtrl
43 *
44 * This tree control disables its vertical scrollbar and catches scroll
45 * events passed by a scrolled window higher in the hierarchy.
46 * It also updates the scrolled window vertical scrollbar as appropriate.
47 */
48
49 class wxRemotelyScrolledTreeCtrl: public wxTreeCtrl
50 {
51 DECLARE_CLASS(wxRemotelyScrolledTreeCtrl)
52 public:
53 wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt = wxDefaultPosition,
54 const wxSize& sz = wxDefaultSize, long style = wxTR_HAS_BUTTONS);
55 ~wxRemotelyScrolledTreeCtrl();
56
57 //// Events
58 void OnSize(wxSizeEvent& event);
59 void OnExpand(wxTreeEvent& event);
60 void OnScroll(wxScrollWinEvent& event);
61
62 //// Overrides
63 // Override this in case we're using the generic tree control.
64 // Calls to this should disable the vertical scrollbar.
65
66 // Number of pixels per user unit (0 or -1 for no scrollbar)
67 // Length of virtual canvas in user units
68 // Length of page in user units
69 virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
70 int noUnitsX, int noUnitsY,
71 int xPos = 0, int yPos = 0,
72 bool noRefresh = FALSE );
73
74 // In case we're using the generic tree control.
75 // Get the view start
76 virtual void GetViewStart(int *x, int *y) const;
77
78 // In case we're using the generic tree control.
79 virtual void PrepareDC(wxDC& dc);
80
81 //// Helpers
82 void HideVScrollbar();
83
84 // Calculate the tree overall size so we can set the scrollbar
85 // correctly
86 void CalcTreeSize(wxRect& rect);
87 void CalcTreeSize(wxTreeItemId& id, wxRect& rect);
88
89 // Adjust the containing wxScrolledWindow's scrollbars appropriately
90 void AdjustRemoteScrollbars();
91
92 // Find the scrolled window that contains this control
93 wxScrolledWindow* GetScrolledWindow() const;
94
95 // Scroll to the given line (in scroll units where each unit is
96 // the height of an item)
97 void ScrollToLine(int posHoriz, int posVert);
98
99 DECLARE_EVENT_TABLE()
100 protected:
101 };
102
103 /*
104 * wxThinSplitterWindow
105 *
106 * Implements a splitter with a less obvious sash
107 * than the usual one.
108 */
109
110 class wxThinSplitterWindow: public wxSplitterWindow
111 {
112 public:
113 DECLARE_DYNAMIC_CLASS(wxThinSplitterWindow)
114
115 wxThinSplitterWindow(wxWindow* parent, wxWindowID id = -1,
116 const wxPoint& pos = wxDefaultPosition,
117 const wxSize& sz = wxDefaultSize,
118 long style = wxSP_3D | wxCLIP_CHILDREN);
119
120 //// Overrides
121
122 void SizeWindows();
123 // Tests for x, y over sash. Overriding this allows us to increase
124 // the tolerance.
125 bool SashHitTest(int x, int y, int tolerance = 2);
126 void DrawSash(wxDC& dc);
127
128 //// Events
129
130 void OnSize(wxSizeEvent& event);
131
132 //// Operations
133
134 //// Accessors
135
136 //// Data members
137 protected:
138 DECLARE_EVENT_TABLE()
139 };
140
141 /*
142 * wxSplitterScrolledWindow
143 *
144 * This scrolled window is aware of the fact that one of its
145 * children is a splitter window. It passes on its scroll events
146 * (after some processing) to both splitter children for them
147 * scroll appropriately.
148 */
149
150 class wxSplitterScrolledWindow: public wxScrolledWindow
151 {
152 public:
153 DECLARE_DYNAMIC_CLASS(wxSplitterScrolledWindow)
154
155 wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = -1,
156 const wxPoint& pos = wxDefaultPosition,
157 const wxSize& sz = wxDefaultSize,
158 long style = 0);
159
160 //// Overrides
161
162 //// Events
163
164 void OnScroll(wxScrollWinEvent& event);
165 void OnSize(wxSizeEvent& event);
166
167 //// Operations
168
169 //// Accessors
170
171 //// Data members
172 public:
173 DECLARE_EVENT_TABLE()
174 };
175
176 #endif
177 // _SPLITTREE_H_