]>
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     @beginEventEmissionTable{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 
= wxID_ANY
, 
  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_events 
 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
);