]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxSplitterWindow::SetSashInvisible() and IsSashInvisible().
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 8 Mar 2012 13:23:39 +0000 (13:23 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 8 Mar 2012 13:23:39 +0000 (13:23 +0000)
Also fix handling of wxSP_NOSASH.

Closes #14074.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70840 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/generic/splitter.h
interface/wx/splitter.h
samples/splitter/splitter.cpp
src/generic/splitter.cpp

index 37d089fc32e4186eb480f386b15683d76348d9f2..ceb551bb946fe3ea58fbdf029707cb3d501fd436 100644 (file)
@@ -492,6 +492,7 @@ All (GUI):
 - Fix setting of the frame icon when using non-standard icon sizes (vid).
 - Implement wxDV_ROW_LINES in generic wxDataViewCtrl (RedCAT).
 - Added EVT_AUI_PANE_ACTIVATED event (Ronny Krüger).
+- Added wxSplitterWindow::SetSashInvisible() (Armel Asselin).
 
 
 GTK:
index d334922dd2b69f723c92eb5c2733614328adbf03..f916423a2a4f5991f16342a79613983451bdee4f 100644 (file)
@@ -136,8 +136,14 @@ public:
     // Sets the border size
     void SetBorderSize(int WXUNUSED(width)) { }
 
-    // Gets the sash size
+    // Hide or show the sash and test whether it's currently hidden.
+    void SetSashInvisible(bool invisible = true);
+    bool IsSashInvisible() const { return HasFlag(wxSP_NOSASH); }
+
+    // Gets the current sash size which may be 0 if it's hidden and the default
+    // sash size.
     int GetSashSize() const;
+    int GetDefaultSashSize() const;
 
     // Gets the border size
     int GetBorderSize() const;
index 864c2135af81b24f49ab3577f496dbccaaaa7991..0338f0a4ffd7234131232bba11a31f1645d81fcf 100644 (file)
@@ -163,16 +163,25 @@ public:
     int GetSashPosition() const;
 
     /**
-        Returns the sash size in pixels.
+        Returns the default sash size in pixels or 0 if it is invisible.
+
+        @see GetDefaultSashSize(), IsSashInvisible()
+     */
+    int GetSashSize() const;
+
+    /**
+        Returns the default sash size in pixels.
 
         The size of the sash is its width for a vertically split window and its
         height for a horizontally split one. Its other direction is the same as
         the client size of the window in the corresponding direction.
 
-        The sash size is platform-dependent because it conforms to the current
-        platform look-and-feel and cannot be changed.
+        The default sash size is platform-dependent because it conforms to the
+        current platform look-and-feel and cannot be changed.
+
+        @since 2.9.4
      */
-    int GetSashSize() const;
+    int GetDefaultSashSize() const;
 
     /**
         Gets the split mode.
@@ -205,6 +214,17 @@ public:
     */
     void Initialize(wxWindow* window);
 
+    /**
+        Returns @true if the sash is invisible even when the window is split, @false otherwise.
+
+        @remark This is a shortcut for HasFlag(wxSP_NOSASH)
+
+        @see SetSashInvisible()
+
+        @since 2.9.4
+    */
+    bool IsSashInvisible() const;
+
     /**
         Returns @true if the window is split, @false otherwise.
     */
@@ -335,6 +355,25 @@ public:
     */
     void SetSplitMode(int mode);
 
+    /**
+        Sets whether the sash should be invisible, even when the window is
+        split.
+
+        When the sash is invisible, it doesn't appear on the screen at all and,
+        in particular, doesn't allow the user to resize the windows.
+
+        @remarks Only sets the internal variable; does not update the display.
+
+        @param invisible
+            If @true, the sash is always invisible, else it is shown when the
+            window is split.
+
+        @see IsSashInvisible()
+
+        @since 2.9.4
+    */
+    void SetSashInvisible(bool invisible=true);
+
     /**
         Initializes the top and bottom panes of the splitter window.
         The child windows are shown if they are currently hidden.
index 1884138e60a5a9e039bebd2963d29836007f65a6..438d2cb0da9fbb3730b3e2eb9b9edf648a831c3e 100644 (file)
@@ -60,7 +60,8 @@ enum
     SPLIT_SETPOSITION,
     SPLIT_SETMINSIZE,
     SPLIT_SETGRAVITY,
-    SPLIT_REPLACE
+    SPLIT_REPLACE,
+    SPLIT_INVISIBLE
 };
 
 // ----------------------------------------------------------------------------
@@ -99,6 +100,7 @@ public:
     void OnSetMinSize(wxCommandEvent& event);
     void OnSetGravity(wxCommandEvent& event);
     void OnReplace(wxCommandEvent &event);
+    void OnToggleInvisible(wxCommandEvent &event);
 
     void OnQuit(wxCommandEvent& event);
 
@@ -106,6 +108,7 @@ public:
     void OnUpdateUIHorizontal(wxUpdateUIEvent& event);
     void OnUpdateUIVertical(wxUpdateUIEvent& event);
     void OnUpdateUIUnsplit(wxUpdateUIEvent& event);
+    void OnUpdateUIInvisible(wxUpdateUIEvent& event);
 
 private:
     wxScrolledWindow *m_left, *m_right;
@@ -187,12 +190,14 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(SPLIT_SETMINSIZE, MyFrame::OnSetMinSize)
     EVT_MENU(SPLIT_SETGRAVITY, MyFrame::OnSetGravity)
     EVT_MENU(SPLIT_REPLACE, MyFrame::OnReplace)
+    EVT_MENU(SPLIT_INVISIBLE, MyFrame::OnToggleInvisible)
 
     EVT_MENU(SPLIT_QUIT, MyFrame::OnQuit)
 
     EVT_UPDATE_UI(SPLIT_VERTICAL, MyFrame::OnUpdateUIVertical)
     EVT_UPDATE_UI(SPLIT_HORIZONTAL, MyFrame::OnUpdateUIHorizontal)
     EVT_UPDATE_UI(SPLIT_UNSPLIT, MyFrame::OnUpdateUIUnsplit)
+    EVT_UPDATE_UI(SPLIT_INVISIBLE, MyFrame::OnUpdateUIInvisible)
 END_EVENT_TABLE()
 
 // My frame constructor
@@ -218,6 +223,9 @@ MyFrame::MyFrame()
     splitMenu->Append(SPLIT_UNSPLIT,
                       wxT("&Unsplit\tCtrl-U"),
                       wxT("Unsplit"));
+    splitMenu->AppendCheckItem(SPLIT_INVISIBLE,
+                      wxT("Toggle sash &invisibility\tCtrl-I"),
+                      wxT("Toggle sash invisibility"));
     splitMenu->AppendSeparator();
 
     splitMenu->AppendCheckItem(SPLIT_LIVE,
@@ -436,6 +444,12 @@ void MyFrame::OnReplace(wxCommandEvent& WXUNUSED(event) )
     }
 }
 
+void MyFrame::OnToggleInvisible(wxCommandEvent& WXUNUSED(event) )
+{
+    m_splitter->SetSashInvisible(!m_splitter->IsSashInvisible());
+    m_splitter->SizeWindows();
+}
+
 // Update UI handlers
 
 void MyFrame::OnUpdateUIHorizontal(wxUpdateUIEvent& event)
@@ -453,6 +467,11 @@ void MyFrame::OnUpdateUIUnsplit(wxUpdateUIEvent& event)
     event.Enable( m_splitter->IsSplit() );
 }
 
+void MyFrame::OnUpdateUIInvisible(wxUpdateUIEvent& event)
+{
+    event.Check( m_splitter->IsSashInvisible() );
+}
+
 // ----------------------------------------------------------------------------
 // MySplitterWindow
 // ----------------------------------------------------------------------------
index dee38940afa59a628e0a1f3a121fc6f23b55e712..77b246750c3643997b0c2d16a34f3586e0c1b478 100644 (file)
@@ -496,7 +496,18 @@ bool wxSplitterWindow::SashHitTest(int x, int y, int tolerance)
     return z >=  hitMin && z <= hitMax;
 }
 
+void wxSplitterWindow::SetSashInvisible(bool invisible)
+{
+    if ( IsSashInvisible() != invisible )
+        ToggleWindowStyle(wxSP_NOSASH);
+}
+
 int wxSplitterWindow::GetSashSize() const
+{
+    return IsSashInvisible() ? 0 : GetDefaultSashSize();
+}
+
+int wxSplitterWindow::GetDefaultSashSize() const
 {
     return wxRendererNative::Get().GetSplitterParams(this).widthSash;
 }
@@ -522,7 +533,7 @@ void wxSplitterWindow::DrawSash(wxDC& dc)
         return;
 
     // nor if we're configured to not show it
-    if ( HasFlag(wxSP_NOSASH) )
+    if ( IsSashInvisible() )
         return;
 
     wxRendererNative::Get().DrawSplitterSash