git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53043 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			440 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			440 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        splitter.h
 | |
| // Purpose:     interface of wxSplitterWindow
 | |
| // Author:      wxWidgets team
 | |
| // RCS-ID:      $Id$
 | |
| // Licence:     wxWindows license
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| /**
 | |
|     @class wxSplitterWindow
 | |
|     @wxheader{splitter.h}
 | |
| 
 | |
|     @ref overview_wxsplitterwindowoverview "wxSplitterWindow overview"
 | |
| 
 | |
|     This class manages up to two subwindows. The current view can be
 | |
|     split into two programmatically (perhaps from a menu command), and unsplit
 | |
|     either programmatically or via the wxSplitterWindow user interface.
 | |
| 
 | |
|     @beginStyleTable
 | |
|     @style{wxSP_3D}
 | |
|            Draws a 3D effect border and sash.
 | |
|     @style{wxSP_3DSASH}
 | |
|            Draws a 3D effect sash.
 | |
|     @style{wxSP_3DBORDER}
 | |
|            Synonym for wxSP_BORDER.
 | |
|     @style{wxSP_BORDER}
 | |
|            Draws a standard border.
 | |
|     @style{wxSP_NOBORDER}
 | |
|            No border (default).
 | |
|     @style{wxSP_NO_XP_THEME}
 | |
|            Under Windows XP, switches off the attempt to draw the splitter
 | |
|            using Windows XP theming, so the borders and sash will take on the
 | |
|            pre-XP look.
 | |
|     @style{wxSP_PERMIT_UNSPLIT}
 | |
|            Always allow to unsplit, even with the minimum pane size other than
 | |
|            zero.
 | |
|     @style{wxSP_LIVE_UPDATE}
 | |
|            Don't draw XOR line but resize the child windows immediately.
 | |
|     @endStyleTable
 | |
| 
 | |
|     @library{wxcore}
 | |
|     @category{miscwnd}
 | |
| 
 | |
|     @see wxSplitterEvent
 | |
| */
 | |
| class wxSplitterWindow : public wxWindow
 | |
| {
 | |
| public:
 | |
|     //@{
 | |
|     /**
 | |
|         Constructor for creating the window.
 | |
| 
 | |
|         @param parent
 | |
|             The parent of the splitter window.
 | |
|         @param id
 | |
|             The window identifier.
 | |
|         @param pos
 | |
|             The window position.
 | |
|         @param size
 | |
|             The window size.
 | |
|         @param style
 | |
|             The window style. See wxSplitterWindow.
 | |
|         @param name
 | |
|             The window name.
 | |
| 
 | |
|         @remarks After using this constructor, you must create either one or two
 | |
|                  subwindows with the splitter window as parent, and then
 | |
|                  call one of Initialize(),
 | |
|                  SplitVertically() and
 | |
|                  SplitHorizontally() in order to set the
 | |
|                  pane(s).
 | |
| 
 | |
|         @see Initialize(), SplitVertically(),
 | |
|              SplitHorizontally(), Create()
 | |
|     */
 | |
|     wxSplitterWindow();
 | |
|     wxSplitterWindow(wxWindow* parent, wxWindowID id,
 | |
|                      const wxPoint& point = wxDefaultPosition,
 | |
|                      const wxSize& size = wxDefaultSize,
 | |
|                      long style = wxSP_3D,
 | |
|                      const wxString& name = "splitterWindow");
 | |
|     //@}
 | |
| 
 | |
|     /**
 | |
|         Destroys the wxSplitterWindow and its children.
 | |
|     */
 | |
|     ~wxSplitterWindow();
 | |
| 
 | |
|     /**
 | |
|         Creation function, for two-step construction. See wxSplitterWindow() for
 | |
|         details.
 | |
|     */
 | |
|     bool Create(wxWindow* parent, wxWindowID id,
 | |
|                 const wxPoint& point = wxDefaultPosition,
 | |
|                 const wxSize& size = wxDefaultSize,
 | |
|                 long style = wxSP_3D,
 | |
|                 const wxString& name = "splitterWindow");
 | |
| 
 | |
|     /**
 | |
|         Returns the current minimum pane size (defaults to zero).
 | |
| 
 | |
|         @see SetMinimumPaneSize()
 | |
|     */
 | |
|     int GetMinimumPaneSize() const;
 | |
| 
 | |
|     /**
 | |
|         Returns the current sash gravity.
 | |
| 
 | |
|         @see SetSashGravity()
 | |
|     */
 | |
|     double GetSashGravity();
 | |
| 
 | |
|     /**
 | |
|         Returns the current sash position.
 | |
| 
 | |
|         @see SetSashPosition()
 | |
|     */
 | |
|     int GetSashPosition();
 | |
| 
 | |
|     /**
 | |
|         Gets the split mode.
 | |
| 
 | |
|         @see SetSplitMode(), SplitVertically(),
 | |
|              SplitHorizontally().
 | |
|     */
 | |
|     int GetSplitMode() const;
 | |
| 
 | |
|     /**
 | |
|         Returns the left/top or only pane.
 | |
|     */
 | |
|     wxWindow* GetWindow1() const;
 | |
| 
 | |
|     /**
 | |
|         Returns the right/bottom pane.
 | |
|     */
 | |
|     wxWindow* GetWindow2() const;
 | |
| 
 | |
|     /**
 | |
|         Initializes the splitter window to have one pane.  The child window is
 | |
|         shown if it is currently hidden.
 | |
| 
 | |
|         @param window
 | |
|             The pane for the unsplit window.
 | |
| 
 | |
|         @remarks This should be called if you wish to initially view only a
 | |
|                  single pane in the splitter window.
 | |
| 
 | |
|         @see SplitVertically(), SplitHorizontally()
 | |
|     */
 | |
|     void Initialize(wxWindow* window);
 | |
| 
 | |
|     /**
 | |
|         Returns @true if the window is split, @false otherwise.
 | |
|     */
 | |
|     bool IsSplit() const;
 | |
| 
 | |
|     /**
 | |
|         Application-overridable function called when the sash is double-clicked with
 | |
|         the left mouse button.
 | |
| 
 | |
|         @param x
 | |
|             The x position of the mouse cursor.
 | |
|         @param y
 | |
|             The y position of the mouse cursor.
 | |
| 
 | |
|         @remarks The default implementation of this function calls Unsplit if the
 | |
|                  minimum pane size is zero.
 | |
| 
 | |
|         @see Unsplit()
 | |
|     */
 | |
|     virtual void OnDoubleClickSash(int x, int y);
 | |
| 
 | |
|     /**
 | |
|         Application-overridable function called when the sash position is changed by
 | |
|         user. It may return @false to prevent the change or @true to allow it.
 | |
| 
 | |
|         @param newSashPosition
 | |
|             The new sash position (always positive or zero)
 | |
| 
 | |
|         @remarks The default implementation of this function verifies that the
 | |
|                  sizes of both  panes of the splitter are greater than
 | |
|                  minimum pane size.
 | |
|     */
 | |
|     virtual bool OnSashPositionChange(int newSashPosition);
 | |
| 
 | |
|     /**
 | |
|         Application-overridable function called when the window is unsplit, either
 | |
|         programmatically or using the wxSplitterWindow user interface.
 | |
| 
 | |
|         @param removed
 | |
|             The window being removed.
 | |
| 
 | |
|         @remarks The default implementation of this function simply hides
 | |
|                  removed. You may wish to delete the window.
 | |
|     */
 | |
|     virtual void OnUnsplit(wxWindow* removed);
 | |
| 
 | |
|     /**
 | |
|         This function replaces one of the windows managed by the wxSplitterWindow with
 | |
|         another one. It is in general better to use it instead of calling Unsplit()
 | |
|         and then resplitting the window back because it will provoke much less flicker
 | |
|         (if any). It is valid to call this function whether the splitter has two
 | |
|         windows or only one.
 | |
|         Both parameters should be non-@NULL and @a winOld must specify one of the
 | |
|         windows managed by the splitter. If the parameters are incorrect or the window
 | |
|         couldn't be replaced, @false is returned. Otherwise the function will return
 | |
|         @true, but please notice that it will not delete the replaced window and you
 | |
|         may wish to do it yourself.
 | |
| 
 | |
|         @see GetMinimumPaneSize()
 | |
|     */
 | |
|     bool ReplaceWindow(wxWindow* winOld, wxWindow* winNew);
 | |
| 
 | |
|     /**
 | |
|         Sets the minimum pane size.
 | |
| 
 | |
|         @param paneSize
 | |
|             Minimum pane size in pixels.
 | |
| 
 | |
|         @remarks The default minimum pane size is zero, which means that either
 | |
|                  pane can be reduced to zero by dragging the sash, thus
 | |
|                  removing one of the panes. To prevent this behaviour
 | |
|                  (and veto out-of-range sash dragging), set a minimum
 | |
|                  size, for example 20 pixels. If the wxSP_PERMIT_UNSPLIT
 | |
|                  style is used when a splitter window is created, the
 | |
|                  window may be unsplit even if minimum size is non-zero.
 | |
| 
 | |
|         @see GetMinimumPaneSize()
 | |
|     */
 | |
|     void SetMinimumPaneSize(int paneSize);
 | |
| 
 | |
|     /**
 | |
|         Sets the sash gravity.
 | |
| 
 | |
|         @param gravity
 | |
|             The sash gravity. Value between 0.0 and 1.0.
 | |
| 
 | |
|         @see GetSashGravity()
 | |
|     */
 | |
|     void SetSashGravity(double gravity);
 | |
| 
 | |
|     /**
 | |
|         Sets the sash position.
 | |
| 
 | |
|         @param position
 | |
|             The sash position in pixels.
 | |
|         @param redraw
 | |
|             If @true, resizes the panes and redraws the sash and border.
 | |
| 
 | |
|         @remarks Does not currently check for an out-of-range value.
 | |
| 
 | |
|         @see GetSashPosition()
 | |
|     */
 | |
|     void SetSashPosition(int position, const bool redraw = true);
 | |
| 
 | |
|     /**
 | |
|         Sets the sash size. Normally, the sash size is determined according to the
 | |
|         metrics
 | |
|         of each platform, but the application can override this, for example to show
 | |
|         a thin sash that the user is not expected to drag. If @a size is more -1,
 | |
|         the custom sash size will be used.
 | |
|     */
 | |
|     void SetSashSize(int size);
 | |
| 
 | |
|     /**
 | |
|         Sets the split mode.
 | |
| 
 | |
|         @param mode
 | |
|             Can be wxSPLIT_VERTICAL or wxSPLIT_HORIZONTAL.
 | |
| 
 | |
|         @remarks Only sets the internal variable; does not update the display.
 | |
| 
 | |
|         @see GetSplitMode(), SplitVertically(),
 | |
|              SplitHorizontally().
 | |
|     */
 | |
|     void SetSplitMode(int mode);
 | |
| 
 | |
|     /**
 | |
|         Initializes the top and bottom panes of the splitter window.  The
 | |
|         child windows are shown if they are currently hidden.
 | |
| 
 | |
|         @param window1
 | |
|             The top pane.
 | |
|         @param window2
 | |
|             The bottom pane.
 | |
|         @param sashPosition
 | |
|             The initial position of the sash. If this value is
 | |
|             positive, it specifies the size of the upper pane. If it is negative, its
 | |
|             absolute value gives the size of the lower pane. Finally, specify 0
 | |
|         (default)
 | |
|             to choose the default position (half of the total window height).
 | |
| 
 | |
|         @returns @true if successful, @false otherwise (the window was already
 | |
|                  split).
 | |
| 
 | |
|         @remarks This should be called if you wish to initially view two panes.
 | |
|                  It can also be called at any subsequent time, but the
 | |
|                  application should check that the window is not
 | |
|                  currently split using IsSplit.
 | |
| 
 | |
|         @see SplitVertically(), IsSplit(),
 | |
|              Unsplit()
 | |
|     */
 | |
|     bool SplitHorizontally(wxWindow* window1, wxWindow* window2,
 | |
|                            int sashPosition = 0);
 | |
| 
 | |
|     /**
 | |
|         Initializes the left and right panes of the splitter window.  The
 | |
|         child windows are shown if they are currently hidden.
 | |
| 
 | |
|         @param window1
 | |
|             The left pane.
 | |
|         @param window2
 | |
|             The right pane.
 | |
|         @param sashPosition
 | |
|             The initial position of the sash. If this value is
 | |
|             positive, it specifies the size of the left pane. If it is negative, it is
 | |
|             absolute value gives the size of the right pane. Finally, specify 0
 | |
|         (default)
 | |
|             to choose the default position (half of the total window width).
 | |
| 
 | |
|         @returns @true if successful, @false otherwise (the window was already
 | |
|                  split).
 | |
| 
 | |
|         @remarks This should be called if you wish to initially view two panes.
 | |
|                  It can also be called at any subsequent time, but the
 | |
|                  application should check that the window is not
 | |
|                  currently split using IsSplit.
 | |
| 
 | |
|         @see SplitHorizontally(), IsSplit(),
 | |
|              Unsplit().
 | |
|     */
 | |
|     bool SplitVertically(wxWindow* window1, wxWindow* window2,
 | |
|                          int sashPosition = 0);
 | |
| 
 | |
|     /**
 | |
|         Unsplits the window.
 | |
| 
 | |
|         @param toRemove
 | |
|             The pane to remove, or @NULL to remove the right or bottom pane.
 | |
| 
 | |
|         @returns @true if successful, @false otherwise (the window was not split).
 | |
| 
 | |
|         @remarks This call will not actually delete the pane being removed; it
 | |
|                  calls OnUnsplit which can be overridden for the desired
 | |
|                  behaviour. By default, the pane being removed is hidden.
 | |
| 
 | |
|         @see SplitHorizontally(), SplitVertically(),
 | |
|              IsSplit(), OnUnsplit()
 | |
|     */
 | |
|     bool Unsplit(wxWindow* toRemove = NULL);
 | |
| 
 | |
|     /**
 | |
|         Causes any pending sizing of the sash and child panes to take place
 | |
|         immediately.
 | |
|         Such resizing normally takes place in idle time, in order
 | |
|         to wait for layout to be completed. However, this can cause
 | |
|         unacceptable flicker as the panes are resized after the window has been
 | |
|         shown. To work around this, you can perform window layout (for
 | |
|         example by sending a size event to the parent window), and then
 | |
|         call this function, before showing the top-level window.
 | |
|     */
 | |
|     void UpdateSize();
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|     @class wxSplitterEvent
 | |
|     @wxheader{splitter.h}
 | |
| 
 | |
|     This class represents the events generated by a splitter control. Also there is
 | |
|     only one event class, the data associated to the different events is not the
 | |
|     same and so not all accessor functions may be called for each event. The
 | |
|     documentation mentions the kind of event(s) for which the given accessor
 | |
|     function makes sense: calling it for other types of events will result
 | |
|     in assert failure (in debug mode) and will return meaningless results.
 | |
| 
 | |
|     @library{wxcore}
 | |
|     @category{events}
 | |
| 
 | |
|     @see wxSplitterWindow, @ref overview_eventhandlingoverview
 | |
| */
 | |
| class wxSplitterEvent : public wxNotifyEvent
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|         Constructor. Used internally by wxWidgets only.
 | |
|     */
 | |
|     wxSplitterEvent(wxEventType eventType = wxEVT_NULL,
 | |
|                     wxSplitterWindow* splitter = NULL);
 | |
| 
 | |
|     /**
 | |
|         Returns the new sash position.
 | |
|         May only be called while processing
 | |
|         wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
 | |
|         wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
 | |
|     */
 | |
|     int GetSashPosition() const;
 | |
| 
 | |
|     /**
 | |
|         Returns a pointer to the window being removed when a splitter window
 | |
|         is unsplit.
 | |
|         May only be called while processing
 | |
|         wxEVT_COMMAND_SPLITTER_UNSPLIT events.
 | |
|     */
 | |
|     wxWindow* GetWindowBeingRemoved() const;
 | |
| 
 | |
|     /**
 | |
|         Returns the x coordinate of the double-click point.
 | |
|         May only be called while processing
 | |
|         wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
 | |
|     */
 | |
|     int GetX() const;
 | |
| 
 | |
|     /**
 | |
|         Returns the y coordinate of the double-click point.
 | |
|         May only be called while processing
 | |
|         wxEVT_COMMAND_SPLITTER_DOUBLECLICKED events.
 | |
|     */
 | |
|     int GetY() const;
 | |
| 
 | |
|     /**
 | |
|         In the case of wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events,
 | |
|         sets the new sash position. In the case of
 | |
|         wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING events, sets the new
 | |
|         tracking bar position so visual feedback during dragging will
 | |
|         represent that change that will actually take place. Set to -1 from
 | |
|         the event handler code to prevent repositioning.
 | |
|         May only be called while processing
 | |
|         wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING and
 | |
|         wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED events.
 | |
| 
 | |
|         @param pos
 | |
|             New sash position.
 | |
|     */
 | |
|     void SetSashPosition(int pos);
 | |
| };
 | |
| 
 |