]>
git.saurik.com Git - wxWidgets.git/blob - interface/splitter.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxSplitterWindow
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
10 @class wxSplitterWindow
13 @ref overview_wxsplitterwindowoverview "wxSplitterWindow overview"
15 This class manages up to two subwindows. The current view can be
16 split into two programmatically (perhaps from a menu command), and unsplit
17 either programmatically or via the wxSplitterWindow user interface.
21 Draws a 3D effect border and sash.
23 Draws a 3D effect sash.
25 Synonym for wxSP_BORDER.
27 Draws a standard border.
30 @style{wxSP_NO_XP_THEME}
31 Under Windows XP, switches off the attempt to draw the splitter
32 using Windows XP theming, so the borders and sash will take on the
34 @style{wxSP_PERMIT_UNSPLIT}
35 Always allow to unsplit, even with the minimum pane size other than
37 @style{wxSP_LIVE_UPDATE}
38 Don't draw XOR line but resize the child windows immediately.
46 class wxSplitterWindow
: public wxWindow
55 Constructor for creating the window.
58 The parent of the splitter window.
60 The window identifier.
66 The window style. See wxSplitterWindow.
70 @remarks After using this constructor, you must create either one or two
71 subwindows with the splitter window as parent, and then
72 call one of Initialize(),
74 SplitHorizontally() in order to set the
77 @see Initialize(), SplitVertically(),
78 SplitHorizontally(), Create()
80 wxSplitterWindow(wxWindow
* parent
, wxWindowID id
,
81 const wxPoint
& point
= wxDefaultPosition
,
82 const wxSize
& size
= wxDefaultSize
,
84 const wxString
& name
= "splitterWindow");
87 Destroys the wxSplitterWindow and its children.
92 Creation function, for two-step construction. See wxSplitterWindow() for
95 bool Create(wxWindow
* parent
, wxWindowID id
,
96 const wxPoint
& point
= wxDefaultPosition
,
97 const wxSize
& size
= wxDefaultSize
,
99 const wxString
& name
= "splitterWindow");
102 Returns the current minimum pane size (defaults to zero).
104 @see SetMinimumPaneSize()
106 int GetMinimumPaneSize() const;
109 Returns the current sash gravity.
111 @see SetSashGravity()
113 double GetSashGravity();
116 Returns the current sash position.
118 @see SetSashPosition()
120 int GetSashPosition();
125 @see SetSplitMode(), SplitVertically(),
128 int GetSplitMode() const;
131 Returns the left/top or only pane.
133 wxWindow
* GetWindow1() const;
136 Returns the right/bottom pane.
138 wxWindow
* GetWindow2() const;
141 Initializes the splitter window to have one pane. The child window is
142 shown if it is currently hidden.
145 The pane for the unsplit window.
147 @remarks This should be called if you wish to initially view only a
148 single pane in the splitter window.
150 @see SplitVertically(), SplitHorizontally()
152 void Initialize(wxWindow
* window
);
155 Returns @true if the window is split, @false otherwise.
157 bool IsSplit() const;
160 Application-overridable function called when the sash is double-clicked with
161 the left mouse button.
164 The x position of the mouse cursor.
166 The y position of the mouse cursor.
168 @remarks The default implementation of this function calls Unsplit if the
169 minimum pane size is zero.
173 virtual void OnDoubleClickSash(int x
, int y
);
176 Application-overridable function called when the sash position is changed by
177 user. It may return @false to prevent the change or @true to allow it.
179 @param newSashPosition
180 The new sash position (always positive or zero)
182 @remarks The default implementation of this function verifies that the
183 sizes of both panes of the splitter are greater than
186 virtual bool OnSashPositionChange(int newSashPosition
);
189 Application-overridable function called when the window is unsplit, either
190 programmatically or using the wxSplitterWindow user interface.
193 The window being removed.
195 @remarks The default implementation of this function simply hides
196 removed. You may wish to delete the window.
198 virtual void OnUnsplit(wxWindow
* removed
);
201 This function replaces one of the windows managed by the wxSplitterWindow with
202 another one. It is in general better to use it instead of calling Unsplit()
203 and then resplitting the window back because it will provoke much less flicker
204 (if any). It is valid to call this function whether the splitter has two
206 Both parameters should be non-@NULL and @a winOld must specify one of the
207 windows managed by the splitter. If the parameters are incorrect or the window
208 couldn't be replaced, @false is returned. Otherwise the function will return
209 @true, but please notice that it will not delete the replaced window and you
210 may wish to do it yourself.
212 @see GetMinimumPaneSize()
214 bool ReplaceWindow(wxWindow
* winOld
, wxWindow
* winNew
);
217 Sets the minimum pane size.
220 Minimum pane size in pixels.
222 @remarks The default minimum pane size is zero, which means that either
223 pane can be reduced to zero by dragging the sash, thus
224 removing one of the panes. To prevent this behaviour
225 (and veto out-of-range sash dragging), set a minimum
226 size, for example 20 pixels. If the wxSP_PERMIT_UNSPLIT
227 style is used when a splitter window is created, the
228 window may be unsplit even if minimum size is non-zero.
230 @see GetMinimumPaneSize()
232 void SetMinimumPaneSize(int paneSize
);
235 Sets the sash gravity.
238 The sash gravity. Value between 0.0 and 1.0.
240 @see GetSashGravity()
242 void SetSashGravity(double gravity
);
245 Sets the sash position.
248 The sash position in pixels.
250 If @true, resizes the panes and redraws the sash and border.
252 @remarks Does not currently check for an out-of-range value.
254 @see GetSashPosition()
256 void SetSashPosition(int position
, const bool redraw
= true);
259 Sets the sash size. Normally, the sash size is determined according to the
261 of each platform, but the application can override this, for example to show
262 a thin sash that the user is not expected to drag. If @a size is more -1,
263 the custom sash size will be used.
265 void SetSashSize(int size
);
271 Can be wxSPLIT_VERTICAL or wxSPLIT_HORIZONTAL.
273 @remarks Only sets the internal variable; does not update the display.
275 @see GetSplitMode(), SplitVertically(),
278 void SetSplitMode(int mode
);
281 Initializes the top and bottom panes of the splitter window. The
282 child windows are shown if they are currently hidden.
289 The initial position of the sash. If this value is
290 positive, it specifies the size of the upper pane. If it is negative, its
291 absolute value gives the size of the lower pane. Finally, specify 0
293 to choose the default position (half of the total window height).
295 @return @true if successful, @false otherwise (the window was already
298 @remarks This should be called if you wish to initially view two panes.
299 It can also be called at any subsequent time, but the
300 application should check that the window is not
301 currently split using IsSplit.
303 @see SplitVertically(), IsSplit(),
306 bool SplitHorizontally(wxWindow
* window1
, wxWindow
* window2
,
307 int sashPosition
= 0);
310 Initializes the left and right panes of the splitter window. The
311 child windows are shown if they are currently hidden.
318 The initial position of the sash. If this value is
319 positive, it specifies the size of the left pane. If it is negative, it is
320 absolute value gives the size of the right pane. Finally, specify 0
322 to choose the default position (half of the total window width).
324 @return @true if successful, @false otherwise (the window was already
327 @remarks This should be called if you wish to initially view two panes.
328 It can also be called at any subsequent time, but the
329 application should check that the window is not
330 currently split using IsSplit.
332 @see SplitHorizontally(), IsSplit(),
335 bool SplitVertically(wxWindow
* window1
, wxWindow
* window2
,
336 int sashPosition
= 0);
342 The pane to remove, or @NULL to remove the right or bottom pane.
344 @return @true if successful, @false otherwise (the window was not split).
346 @remarks This call will not actually delete the pane being removed; it
347 calls OnUnsplit which can be overridden for the desired
348 behaviour. By default, the pane being removed is hidden.
350 @see SplitHorizontally(), SplitVertically(),
351 IsSplit(), OnUnsplit()
353 bool Unsplit(wxWindow
* toRemove
= NULL
);
356 Causes any pending sizing of the sash and child panes to take place
358 Such resizing normally takes place in idle time, in order
359 to wait for layout to be completed. However, this can cause
360 unacceptable flicker as the panes are resized after the window has been
361 shown. To work around this, you can perform window layout (for
362 example by sending a size event to the parent window), and then
363 call this function, before showing the top-level window.
371 @class wxSplitterEvent
372 @wxheader{splitter.h}
374 This class represents the events generated by a splitter control. Also there is
375 only one event class, the data associated to the different events is not the
376 same and so not all accessor functions may be called for each event. The
377 documentation mentions the kind of event(s) for which the given accessor
378 function makes sense: calling it for other types of events will result
379 in assert failure (in debug mode) and will return meaningless results.
384 @see wxSplitterWindow, @ref overview_eventhandlingoverview
386 class wxSplitterEvent
: public wxNotifyEvent
390 Constructor. Used internally by wxWidgets only.
392 wxSplitterEvent(wxEventType eventType
= wxEVT_NULL
,
393 wxSplitterWindow
* splitter
= NULL
);
396 Returns the new sash position.
397 May only be called while processing
398 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
399 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
401 int GetSashPosition() const;
404 Returns a pointer to the window being removed when a splitter window
406 May only be called while processing
407 wxEVT_COMMAND_SPLITTER_UNSPLIT events.
409 wxWindow
* GetWindowBeingRemoved() const;
412 Returns the x coordinate of the double-click point.
413 May only be called while processing
414 wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
419 Returns the y coordinate of the double-click point.
420 May only be called while processing
421 wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
426 In the case of wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events,
427 sets the new sash position. In the case of
428 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING events, sets the new
429 tracking bar position so visual feedback during dragging will
430 represent that change that will actually take place. Set to -1 from
431 the event handler code to prevent repositioning.
432 May only be called while processing
433 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
434 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
439 void SetSashPosition(int pos
);