]>
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.
24 @style{wxSP_3DBORDER}:
25 Synonym for wxSP_BORDER.
27 Draws a standard border.
28 @style{wxSP_NOBORDER}:
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
51 Constructor for creating the window.
54 The parent of the splitter window.
56 The window identifier.
62 The window style. See wxSplitterWindow.
66 @remarks After using this constructor, you must create either one or two
67 subwindows with the splitter window as parent, and then
68 call one of Initialize(),
70 SplitHorizontally() in order to set the
73 @see Initialize(), SplitVertically(),
74 SplitHorizontally(), Create()
77 wxSplitterWindow(wxWindow
* parent
, wxWindowID id
,
78 const wxPoint
& point
= wxDefaultPosition
,
79 const wxSize
& size
= wxDefaultSize
,
81 const wxString
& name
= "splitterWindow");
85 Destroys the wxSplitterWindow and its children.
90 Creation function, for two-step construction. See wxSplitterWindow() for
93 bool Create(wxWindow
* parent
, wxWindowID id
,
94 const wxPoint
& point
= wxDefaultPosition
,
95 const wxSize
& size
= wxDefaultSize
,
97 const wxString
& name
= "splitterWindow");
100 Returns the current minimum pane size (defaults to zero).
102 @see SetMinimumPaneSize()
104 int GetMinimumPaneSize() const;
107 Returns the current sash gravity.
109 @see SetSashGravity()
111 double GetSashGravity();
114 Returns the current sash position.
116 @see SetSashPosition()
118 int GetSashPosition();
123 @see SetSplitMode(), SplitVertically(),
126 int GetSplitMode() const;
129 Returns the left/top or only pane.
131 wxWindow
* GetWindow1() const;
134 Returns the right/bottom pane.
136 wxWindow
* GetWindow2() const;
139 Initializes the splitter window to have one pane. The child window is
140 shown if it is currently hidden.
143 The pane for the unsplit window.
145 @remarks This should be called if you wish to initially view only a
146 single pane in the splitter window.
148 @see SplitVertically(), SplitHorizontally()
150 void Initialize(wxWindow
* window
);
153 Returns @true if the window is split, @false otherwise.
155 bool IsSplit() const;
158 Application-overridable function called when the sash is double-clicked with
159 the left mouse button.
162 The x position of the mouse cursor.
164 The y position of the mouse cursor.
166 @remarks The default implementation of this function calls Unsplit if the
167 minimum pane size is zero.
171 virtual void OnDoubleClickSash(int x
, int y
);
174 Application-overridable function called when the sash position is changed by
175 user. It may return @false to prevent the change or @true to allow it.
177 @param newSashPosition
178 The new sash position (always positive or zero)
180 @remarks The default implementation of this function verifies that the
181 sizes of both panes of the splitter are greater than
184 virtual bool OnSashPositionChange(int newSashPosition
);
187 Application-overridable function called when the window is unsplit, either
188 programmatically or using the wxSplitterWindow user interface.
191 The window being removed.
193 @remarks The default implementation of this function simply hides
194 removed. You may wish to delete the window.
196 virtual void OnUnsplit(wxWindow
* removed
);
199 This function replaces one of the windows managed by the wxSplitterWindow with
200 another one. It is in general better to use it instead of calling Unsplit()
201 and then resplitting the window back because it will provoke much less flicker
202 (if any). It is valid to call this function whether the splitter has two
204 Both parameters should be non-@NULL and @a winOld must specify one of the
205 windows managed by the splitter. If the parameters are incorrect or the window
206 couldn't be replaced, @false is returned. Otherwise the function will return
207 @true, but please notice that it will not delete the replaced window and you
208 may wish to do it yourself.
210 @see GetMinimumPaneSize()
212 bool ReplaceWindow(wxWindow
* winOld
, wxWindow
* winNew
);
215 Sets the minimum pane size.
218 Minimum pane size in pixels.
220 @remarks The default minimum pane size is zero, which means that either
221 pane can be reduced to zero by dragging the sash, thus
222 removing one of the panes. To prevent this behaviour
223 (and veto out-of-range sash dragging), set a minimum
224 size, for example 20 pixels. If the wxSP_PERMIT_UNSPLIT
225 style is used when a splitter window is created, the
226 window may be unsplit even if minimum size is non-zero.
228 @see GetMinimumPaneSize()
230 void SetMinimumPaneSize(int paneSize
);
233 Sets the sash gravity.
236 The sash gravity. Value between 0.0 and 1.0.
238 @see GetSashGravity()
240 void SetSashGravity(double gravity
);
243 Sets the sash position.
246 The sash position in pixels.
248 If @true, resizes the panes and redraws the sash and border.
250 @remarks Does not currently check for an out-of-range value.
252 @see GetSashPosition()
254 void SetSashPosition(int position
, const bool redraw
= true);
257 Sets the sash size. Normally, the sash size is determined according to the
259 of each platform, but the application can override this, for example to show
260 a thin sash that the user is not expected to drag. If @a size is more -1,
261 the custom sash size will be used.
263 void SetSashSize(int size
);
269 Can be wxSPLIT_VERTICAL or wxSPLIT_HORIZONTAL.
271 @remarks Only sets the internal variable; does not update the display.
273 @see GetSplitMode(), SplitVertically(),
276 void SetSplitMode(int mode
);
279 Initializes the top and bottom panes of the splitter window. The
280 child windows are shown if they are currently hidden.
287 The initial position of the sash. If this value is
288 positive, it specifies the size of the upper pane. If it is negative, its
289 absolute value gives the size of the lower pane. Finally, specify 0
291 to choose the default position (half of the total window height).
293 @returns @true if successful, @false otherwise (the window was already
296 @remarks This should be called if you wish to initially view two panes.
297 It can also be called at any subsequent time, but the
298 application should check that the window is not
299 currently split using IsSplit.
301 @see SplitVertically(), IsSplit(),
304 bool SplitHorizontally(wxWindow
* window1
, wxWindow
* window2
,
305 int sashPosition
= 0);
308 Initializes the left and right panes of the splitter window. The
309 child windows are shown if they are currently hidden.
316 The initial position of the sash. If this value is
317 positive, it specifies the size of the left pane. If it is negative, it is
318 absolute value gives the size of the right pane. Finally, specify 0
320 to choose the default position (half of the total window width).
322 @returns @true if successful, @false otherwise (the window was already
325 @remarks This should be called if you wish to initially view two panes.
326 It can also be called at any subsequent time, but the
327 application should check that the window is not
328 currently split using IsSplit.
330 @see SplitHorizontally(), IsSplit(),
333 bool SplitVertically(wxWindow
* window1
, wxWindow
* window2
,
334 int sashPosition
= 0);
340 The pane to remove, or @NULL to remove the right or bottom pane.
342 @returns @true if successful, @false otherwise (the window was not split).
344 @remarks This call will not actually delete the pane being removed; it
345 calls OnUnsplit which can be overridden for the desired
346 behaviour. By default, the pane being removed is hidden.
348 @see SplitHorizontally(), SplitVertically(),
349 IsSplit(), OnUnsplit()
351 bool Unsplit(wxWindow
* toRemove
= NULL
);
354 Causes any pending sizing of the sash and child panes to take place
356 Such resizing normally takes place in idle time, in order
357 to wait for layout to be completed. However, this can cause
358 unacceptable flicker as the panes are resized after the window has been
359 shown. To work around this, you can perform window layout (for
360 example by sending a size event to the parent window), and then
361 call this function, before showing the top-level window.
369 @class wxSplitterEvent
370 @wxheader{splitter.h}
372 This class represents the events generated by a splitter control. Also there is
373 only one event class, the data associated to the different events is not the
374 same and so not all accessor functions may be called for each event. The
375 documentation mentions the kind of event(s) for which the given accessor
376 function makes sense: calling it for other types of events will result
377 in assert failure (in debug mode) and will return meaningless results.
382 @see wxSplitterWindow, @ref overview_eventhandlingoverview
384 class wxSplitterEvent
: public wxNotifyEvent
388 Constructor. Used internally by wxWidgets only.
390 wxSplitterEvent(wxEventType eventType
= wxEVT_NULL
,
391 wxSplitterWindow
* splitter
= NULL
);
394 Returns the new sash position.
395 May only be called while processing
396 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
397 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
399 int GetSashPosition() const;
402 Returns a pointer to the window being removed when a splitter window
404 May only be called while processing
405 wxEVT_COMMAND_SPLITTER_UNSPLIT events.
407 wxWindow
* GetWindowBeingRemoved() const;
410 Returns the x coordinate of the double-click point.
411 May only be called while processing
412 wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
417 Returns the y coordinate of the double-click point.
418 May only be called while processing
419 wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
424 In the case of wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events,
425 sets the new sash position. In the case of
426 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING events, sets the new
427 tracking bar position so visual feedback during dragging will
428 represent that change that will actually take place. Set to -1 from
429 the event handler code to prevent repositioning.
430 May only be called while processing
431 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
432 wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
437 void SetSashPosition(int pos
);