// Author: Julian Smart
// Modified by:
// Created: 04/01/98
-// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/splitter.h"
#include "wx/dcmirror.h"
-#ifndef __WXMSW__
+#ifndef wxHAS_IMAGES_IN_RESOURCES
#include "../sample.xpm"
#endif
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;
+ wxWindow *m_left, *m_right;
wxSplitterWindow* m_splitter;
wxWindow *m_replacewindow;
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,
menuBar->Check(SPLIT_LIVE, true);
m_splitter = new MySplitterWindow(this);
+ // If you use non-zero gravity you must initialize the splitter with its
+ // correct initial size, otherwise it will change the sash position by a
+ // huge amount when it's resized from its initial default size to its real
+ // size when the frame lays it out. This wouldn't be necessary if default
+ // zero gravity were used (although it would do no harm neither).
+ m_splitter->SetSize(GetClientSize());
m_splitter->SetSashGravity(1.0);
#if 1
m_left = new MyCanvas(m_splitter, true);
m_left->SetBackgroundColour(*wxRED);
- m_left->SetScrollbars(20, 20, 5, 5);
m_left->SetCursor(wxCursor(wxCURSOR_MAGNIFIER));
m_right = new MyCanvas(m_splitter, false);
m_right->SetBackgroundColour(*wxCYAN);
- m_right->SetScrollbars(20, 20, 5, 5);
#else // for testing kbd navigation inside the splitter
m_left = new wxTextCtrl(m_splitter, wxID_ANY, wxT("first text"));
m_right = new wxTextCtrl(m_splitter, wxID_ANY, wxT("second text"));
}
}
+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
// ----------------------------------------------------------------------------
wxHSCROLL | wxVSCROLL | wxNO_FULL_REPAINT_ON_RESIZE)
{
m_mirror = mirror;
+ SetScrollbars(20, 20, 5, 5);
}
void MyCanvas::OnDraw(wxDC& dcOrig)