]> git.saurik.com Git - wxWidgets.git/blame - contrib/utils/wxrcedit/splittree.h
Elliptic arc fix for getting bounds
[wxWidgets.git] / contrib / utils / wxrcedit / splittree.h
CommitLineData
12d9e308
VS
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
ab7ce33c 17#if defined(__GNUG__) && !defined(__APPLE__)
f80ea77b 18 #pragma interface "splittree.h"
12d9e308
VS
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
37class wxRemotelyScrolledTreeCtrl;
38class wxThinSplitterWindow;
39class 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
49class wxRemotelyScrolledTreeCtrl: public wxTreeCtrl
50{
f80ea77b 51 DECLARE_CLASS(wxRemotelyScrolledTreeCtrl)
12d9e308
VS
52public:
53 wxRemotelyScrolledTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt = wxDefaultPosition,
54 const wxSize& sz = wxDefaultSize, long style = wxTR_HAS_BUTTONS);
f80ea77b 55 ~wxRemotelyScrolledTreeCtrl();
12d9e308
VS
56
57//// Events
f80ea77b
WS
58 void OnSize(wxSizeEvent& event);
59 void OnExpand(wxTreeEvent& event);
12d9e308
VS
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,
f80ea77b 72 bool noRefresh = false );
12d9e308
VS
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 // In case we're using the generic tree control.
82 virtual int GetScrollPos(int orient) const;
83
84//// Helpers
f80ea77b 85 void HideVScrollbar();
12d9e308 86
f80ea77b
WS
87 // Calculate the tree overall size so we can set the scrollbar
88 // correctly
89 void CalcTreeSize(wxRect& rect);
90 void CalcTreeSize(const wxTreeItemId& id, wxRect& rect);
12d9e308 91
f80ea77b
WS
92 // Adjust the containing wxScrolledWindow's scrollbars appropriately
93 void AdjustRemoteScrollbars();
12d9e308 94
f80ea77b
WS
95 // Find the scrolled window that contains this control
96 wxScrolledWindow* GetScrolledWindow() const;
12d9e308
VS
97
98 // Scroll to the given line (in scroll units where each unit is
99 // the height of an item)
100 void ScrollToLine(int posHoriz, int posVert);
101
102//// Accessors
103
f80ea77b
WS
104 // The companion window is one which will get notified when certain
105 // events happen such as node expansion
106 void SetCompanionWindow(wxWindow* companion) { m_companionWindow = companion; }
107 wxWindow* GetCompanionWindow() const { return m_companionWindow; }
12d9e308
VS
108
109
110 DECLARE_EVENT_TABLE()
111protected:
f80ea77b 112 wxWindow* m_companionWindow;
12d9e308
VS
113};
114
115/*
116 * wxTreeCompanionWindow
117 *
118 * A window displaying values associated with tree control items.
119 */
120
121class wxTreeCompanionWindow: public wxWindow
122{
123public:
124 DECLARE_CLASS(wxTreeCompanionWindow)
125
f80ea77b 126 wxTreeCompanionWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
12d9e308
VS
127 const wxPoint& pos = wxDefaultPosition,
128 const wxSize& sz = wxDefaultSize,
129 long style = 0);
130
131//// Overrides
f80ea77b 132 virtual void DrawItem(wxDC& dc, wxTreeItemId id, const wxRect& rect);
12d9e308
VS
133
134//// Events
f80ea77b 135 void OnPaint(wxPaintEvent& event);
12d9e308 136 void OnScroll(wxScrollWinEvent& event);
f80ea77b 137 void OnExpand(wxTreeEvent& event);
12d9e308
VS
138
139//// Operations
140
141//// Accessors
f80ea77b
WS
142 wxRemotelyScrolledTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; };
143 void SetTreeCtrl(wxRemotelyScrolledTreeCtrl* treeCtrl) { m_treeCtrl = treeCtrl; }
12d9e308
VS
144
145//// Data members
146protected:
f80ea77b 147 wxRemotelyScrolledTreeCtrl* m_treeCtrl;
12d9e308
VS
148
149 DECLARE_EVENT_TABLE()
150};
151
152
153/*
154 * wxThinSplitterWindow
155 *
156 * Implements a splitter with a less obvious sash
157 * than the usual one.
158 */
159
160class wxThinSplitterWindow: public wxSplitterWindow
161{
162public:
163 DECLARE_DYNAMIC_CLASS(wxThinSplitterWindow)
164
f80ea77b 165 wxThinSplitterWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
12d9e308
VS
166 const wxPoint& pos = wxDefaultPosition,
167 const wxSize& sz = wxDefaultSize,
168 long style = wxSP_3D | wxCLIP_CHILDREN);
c74caa09 169 ~wxThinSplitterWindow();
12d9e308
VS
170
171//// Overrides
172
173 void SizeWindows();
174 // Tests for x, y over sash. Overriding this allows us to increase
175 // the tolerance.
176 bool SashHitTest(int x, int y, int tolerance = 2);
f80ea77b 177 void DrawSash(wxDC& dc);
12d9e308
VS
178
179//// Events
f80ea77b 180
12d9e308
VS
181 void OnSize(wxSizeEvent& event);
182
183//// Operations
184
185//// Accessors
186
187//// Data members
188protected:
189 DECLARE_EVENT_TABLE()
190};
191
192/*
193 * wxSplitterScrolledWindow
194 *
195 * This scrolled window is aware of the fact that one of its
196 * children is a splitter window. It passes on its scroll events
197 * (after some processing) to both splitter children for them
198 * scroll appropriately.
199 */
200
201class wxSplitterScrolledWindow: public wxScrolledWindow
202{
203public:
204 DECLARE_DYNAMIC_CLASS(wxSplitterScrolledWindow)
205
f80ea77b 206 wxSplitterScrolledWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
12d9e308
VS
207 const wxPoint& pos = wxDefaultPosition,
208 const wxSize& sz = wxDefaultSize,
209 long style = 0);
210
211//// Overrides
212
213//// Events
f80ea77b 214
12d9e308
VS
215 void OnScroll(wxScrollWinEvent& event);
216 void OnSize(wxSizeEvent& event);
217
218//// Operations
219
220//// Accessors
221
222//// Data members
223public:
224 DECLARE_EVENT_TABLE()
225};
226
227#endif
228 // _SPLITTREE_H_