- 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:
// 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;
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.
*/
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.
*/
*/
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.
SPLIT_SETPOSITION,
SPLIT_SETMINSIZE,
SPLIT_SETGRAVITY,
- SPLIT_REPLACE
+ SPLIT_REPLACE,
+ SPLIT_INVISIBLE
};
// ----------------------------------------------------------------------------
void OnSetMinSize(wxCommandEvent& event);
void OnSetGravity(wxCommandEvent& event);
void OnReplace(wxCommandEvent &event);
+ void OnToggleInvisible(wxCommandEvent &event);
void OnQuit(wxCommandEvent& event);
void OnUpdateUIHorizontal(wxUpdateUIEvent& event);
void OnUpdateUIVertical(wxUpdateUIEvent& event);
void OnUpdateUIUnsplit(wxUpdateUIEvent& event);
+ void OnUpdateUIInvisible(wxUpdateUIEvent& event);
private:
wxScrolledWindow *m_left, *m_right;
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
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,
}
}
+void MyFrame::OnToggleInvisible(wxCommandEvent& WXUNUSED(event) )
+{
+ m_splitter->SetSashInvisible(!m_splitter->IsSashInvisible());
+ m_splitter->SizeWindows();
+}
+
// Update UI handlers
void MyFrame::OnUpdateUIHorizontal(wxUpdateUIEvent& event)
event.Enable( m_splitter->IsSplit() );
}
+void MyFrame::OnUpdateUIInvisible(wxUpdateUIEvent& event)
+{
+ event.Check( m_splitter->IsSashInvisible() );
+}
+
// ----------------------------------------------------------------------------
// MySplitterWindow
// ----------------------------------------------------------------------------
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;
}
return;
// nor if we're configured to not show it
- if ( HasFlag(wxSP_NOSASH) )
+ if ( IsSashInvisible() )
return;
wxRendererNative::Get().DrawSplitterSash