]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/splitter.h
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxSplitterWindow
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
10 @class wxSplitterWindow
12 This class manages up to two subwindows. The current view can be split
13 into two programmatically (perhaps from a menu command), and unsplit
14 either programmatically or via the wxSplitterWindow user interface.
18 Draws a 3D effect border and sash.
19 @style{wxSP_THIN_SASH}
22 Draws a 3D effect sash (part of default style).
24 Synonym for wxSP_BORDER.
26 Draws a standard border.
29 @style{wxSP_NO_XP_THEME}
30 Under Windows XP, switches off the attempt to draw the splitter
31 using Windows XP theming, so the borders and sash will take on the
33 @style{wxSP_PERMIT_UNSPLIT}
34 Always allow to unsplit, even with the minimum pane size other than zero.
35 @style{wxSP_LIVE_UPDATE}
36 Don't draw XOR line but resize the child windows immediately.
40 @beginEventTable{wxSplitterEvent}
41 @event{EVT_SPLITTER_SASH_POS_CHANGING(id, func)}
42 The sash position is in the process of being changed.
43 May be used to modify the position of the tracking bar to properly
44 reflect the position that would be set if the drag were to be completed
45 at this point. Processes a wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING event.
46 @event{EVT_SPLITTER_SASH_POS_CHANGED(id, func)}
47 The sash position was changed. May be used to modify the sash position
48 before it is set, or to prevent the change from taking place.
49 Processes a wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED event.
50 @event{EVT_SPLITTER_UNSPLIT(id, func)}
51 The splitter has been just unsplit. Processes a wxEVT_COMMAND_SPLITTER_UNSPLIT event.
52 @event{EVT_SPLITTER_DCLICK(id, func)}
53 The sash was double clicked. The default behaviour is to unsplit the
54 window when this happens (unless the minimum pane size has been set
55 to a value greater than zero). Processes a wxEVT_COMMAND_SPLITTER_DOUBLECLICKED event.
62 @see wxSplitterEvent, @ref overview_splitterwindow
64 class wxSplitterWindow
: public wxWindow
73 Constructor for creating the window.
76 The parent of the splitter window.
78 The window identifier.
84 The window style. See wxSplitterWindow.
89 After using this constructor, you must create either one or two
90 subwindows with the splitter window as parent, and then call one
91 of Initialize(), SplitVertically() and SplitHorizontally() in order
93 You can create two windows, with one hidden when not being shown;
94 or you can create and delete the second pane on demand.
96 @see Initialize(), SplitVertically(), SplitHorizontally(), Create()
98 wxSplitterWindow(wxWindow
* parent
, wxWindowID id
,
99 const wxPoint
& pos
= wxDefaultPosition
,
100 const wxSize
& size
= wxDefaultSize
,
101 long style
= wxSP_3D
,
102 const wxString
& name
= "splitterWindow");
105 Destroys the wxSplitterWindow and its children.
107 virtual ~wxSplitterWindow();
110 Creation function, for two-step construction.
111 See wxSplitterWindow() for details.
113 bool Create(wxWindow
* parent
, wxWindowID id
= wxID_ANY
,
114 const wxPoint
& point
= wxDefaultPosition
,
115 const wxSize
& size
= wxDefaultSize
, long style
= wxSP_3D
,
116 const wxString
& name
= "splitter");
119 Returns the current minimum pane size (defaults to zero).
121 @see SetMinimumPaneSize()
123 int GetMinimumPaneSize() const;
126 Returns the current sash gravity.
128 @see SetSashGravity()
130 double GetSashGravity() const;
133 Returns the current sash position.
135 @see SetSashPosition()
137 int GetSashPosition() const;
142 @see SetSplitMode(), SplitVertically(), SplitHorizontally().
144 wxSplitMode
GetSplitMode() const;
147 Returns the left/top or only pane.
149 wxWindow
* GetWindow1() const;
152 Returns the right/bottom pane.
154 wxWindow
* GetWindow2() const;
157 Initializes the splitter window to have one pane.
158 The child window is shown if it is currently hidden.
161 The pane for the unsplit window.
163 @remarks This should be called if you wish to initially view only a
164 single pane in the splitter window.
166 @see SplitVertically(), SplitHorizontally()
168 void Initialize(wxWindow
* window
);
171 Returns @true if the window is split, @false otherwise.
173 bool IsSplit() const;
176 Application-overridable function called when the sash is double-clicked with
177 the left mouse button.
180 The x position of the mouse cursor.
182 The y position of the mouse cursor.
184 @remarks The default implementation of this function calls Unsplit if the
185 minimum pane size is zero.
189 virtual void OnDoubleClickSash(int x
, int y
);
192 Application-overridable function called when the sash position is changed by
193 user. It may return @false to prevent the change or @true to allow it.
195 @param newSashPosition
196 The new sash position (always positive or zero)
198 @remarks The default implementation of this function verifies that the
199 sizes of both panes of the splitter are greater than
202 virtual bool OnSashPositionChange(int newSashPosition
);
205 Application-overridable function called when the window is unsplit, either
206 programmatically or using the wxSplitterWindow user interface.
209 The window being removed.
211 @remarks The default implementation of this function simply hides
212 removed. You may wish to delete the window.
214 virtual void OnUnsplit(wxWindow
* removed
);
217 This function replaces one of the windows managed by the wxSplitterWindow with
218 another one. It is in general better to use it instead of calling Unsplit()
219 and then resplitting the window back because it will provoke much less flicker
220 (if any). It is valid to call this function whether the splitter has two
223 Both parameters should be non-@NULL and @a winOld must specify one of the
224 windows managed by the splitter. If the parameters are incorrect or the window
225 couldn't be replaced, @false is returned. Otherwise the function will return
226 @true, but please notice that it will not delete the replaced window and you
227 may wish to do it yourself.
229 @see GetMinimumPaneSize()
231 bool ReplaceWindow(wxWindow
* winOld
, wxWindow
* winNew
);
234 Sets the minimum pane size.
237 Minimum pane size in pixels.
239 @remarks The default minimum pane size is zero, which means that either
240 pane can be reduced to zero by dragging the sash, thus
241 removing one of the panes. To prevent this behaviour
242 (and veto out-of-range sash dragging), set a minimum
243 size, for example 20 pixels. If the wxSP_PERMIT_UNSPLIT
244 style is used when a splitter window is created, the
245 window may be unsplit even if minimum size is non-zero.
247 @see GetMinimumPaneSize()
249 void SetMinimumPaneSize(int paneSize
);
252 Sets the sash gravity.
255 The sash gravity. Value between 0.0 and 1.0.
258 Gravity is real factor which controls position of sash while resizing
259 wxSplitterWindow. Gravity tells wxSplitterWindow how much will left/top
260 window grow while resizing.
262 - 0.0: only the bottom/right window is automatically resized
263 - 0.5: both windows grow by equal size
264 - 1.0: only left/top window grows
265 Gravity should be a real value between 0.0 and 1.0.
266 Default value of sash gravity is 0.0.
267 That value is compatible with previous (before gravity was introduced)
268 behaviour of wxSplitterWindow.
270 @see GetSashGravity()
272 void SetSashGravity(double gravity
);
275 Sets the sash position.
278 The sash position in pixels.
280 If @true, resizes the panes and redraws the sash and border.
282 @remarks Does not currently check for an out-of-range value.
284 @see GetSashPosition()
286 void SetSashPosition(int position
, bool redraw
= true);
289 Sets the sash size. Normally, the sash size is determined according to the
291 of each platform, but the application can override this, for example to show
292 a thin sash that the user is not expected to drag. If @a size is more -1,
293 the custom sash size will be used.
295 void SetSashSize(int size
);
301 Can be wxSPLIT_VERTICAL or wxSPLIT_HORIZONTAL.
303 @remarks Only sets the internal variable; does not update the display.
305 @see GetSplitMode(), SplitVertically(), SplitHorizontally().
307 void SetSplitMode(int mode
);
310 Initializes the top and bottom panes of the splitter window.
311 The child windows are shown if they are currently hidden.
318 The initial position of the sash. If this value is positive,
319 it specifies the size of the upper pane. If it is negative, its
320 absolute value gives the size of the lower pane.
321 Finally, specify 0 (default) to choose the default position
322 (half of the total window height).
324 @return @true if successful, @false otherwise (the window was already split).
326 @remarks This should be called if you wish to initially view two panes.
327 It can also be called at any subsequent time, but the application
328 should check that the window is not currently split using IsSplit().
330 @see SplitVertically(), IsSplit(), Unsplit()
332 virtual bool SplitHorizontally(wxWindow
* window1
, wxWindow
* window2
,
333 int sashPosition
= 0);
336 Initializes the left and right panes of the splitter window.
337 The child windows are shown if they are currently hidden.
344 The initial position of the sash. If this value is positive, it
345 specifies the size of the left pane. If it is negative, it is
346 absolute value gives the size of the right pane.
347 Finally, specify 0 (default) to choose the default position
348 (half of the total window width).
350 @return @true if successful, @false otherwise (the window was already split).
352 @remarks This should be called if you wish to initially view two panes.
353 It can also be called at any subsequent time, but the
354 application should check that the window is not currently
355 split using IsSplit().
357 @see SplitHorizontally(), IsSplit(), Unsplit().
359 virtual bool SplitVertically(wxWindow
* window1
, wxWindow
* window2
,
360 int sashPosition
= 0);
366 The pane to remove, or @NULL to remove the right or bottom pane.
368 @return @true if successful, @false otherwise (the window was not split).
370 @remarks This call will not actually delete the pane being removed; it
371 calls OnUnsplit() which can be overridden for the desired
372 behaviour. By default, the pane being removed is hidden.
374 @see SplitHorizontally(), SplitVertically(), IsSplit(), OnUnsplit()
376 bool Unsplit(wxWindow
* toRemove
= NULL
);
379 Causes any pending sizing of the sash and child panes to take place
382 Such resizing normally takes place in idle time, in order to wait for
383 layout to be completed. However, this can cause unacceptable flicker as
384 the panes are resized after the window has been shown.
385 To work around this, you can perform window layout (for example by
386 sending a size event to the parent window), and then call this function,
387 before showing the top-level window.
395 @class wxSplitterEvent
397 This class represents the events generated by a splitter control.
399 Also there is only one event class, the data associated to the different events
400 is not the same and so not all accessor functions may be called for each event.
401 The documentation mentions the kind of event(s) for which the given accessor
402 function makes sense: calling it for other types of events will result
403 in assert failure (in debug mode) and will return meaningless results.
405 @beginEventTable{wxSplitterEvent}
406 @event{EVT_SPLITTER_SASH_POS_CHANGING(id, func)}
407 The sash position is in the process of being changed.
408 May be used to modify the position of the tracking bar to properly
409 reflect the position that would be set if the drag were to be completed
410 at this point. Processes a wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING event.
411 @event{EVT_SPLITTER_SASH_POS_CHANGED(id, func)}
412 The sash position was changed. May be used to modify the sash position
413 before it is set, or to prevent the change from taking place.
414 Processes a wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED event.
415 @event{EVT_SPLITTER_UNSPLIT(id, func)}
416 The splitter has been just unsplit. Processes a wxEVT_COMMAND_SPLITTER_UNSPLIT event.
417 @event{EVT_SPLITTER_DCLICK(id, func)}
418 The sash was double clicked. The default behaviour is to unsplit the
419 window when this happens (unless the minimum pane size has been set
420 to a value greater than zero). Processes a wxEVT_COMMAND_SPLITTER_DOUBLECLICKED event.
426 @see wxSplitterWindow, @ref overview_eventhandling
428 class wxSplitterEvent
: public wxNotifyEvent
432 Constructor. Used internally by wxWidgets only.
434 wxSplitterEvent(wxEventType eventType
= wxEVT_NULL
,
435 wxSplitterWindow
* splitter
= NULL
);
438 Returns the new sash position.
440 May only be called while processing
441 @c wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
442 @c wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
444 int GetSashPosition() const;
447 Returns a pointer to the window being removed when a splitter window
450 May only be called while processing
451 @c wxEVT_COMMAND_SPLITTER_UNSPLIT events.
453 wxWindow
* GetWindowBeingRemoved() const;
456 Returns the x coordinate of the double-click point.
458 May only be called while processing
459 @c wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
464 Returns the y coordinate of the double-click point.
466 May only be called while processing
467 @c wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
472 In the case of @c wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events,
473 sets the new sash position.
474 In the case of @c wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING events,
475 sets the new tracking bar position so visual feedback during dragging will
476 represent that change that will actually take place. Set to -1 from
477 the event handler code to prevent repositioning.
479 May only be called while processing
480 @c wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
481 @c wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
486 void SetSashPosition(int pos
);