]>
git.saurik.com Git - wxWidgets.git/blob - samples/splitter/test.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: m_splitter.cpp
3 // Purpose: wxSplitterWindow sample
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
23 #include "wx/splitter.h"
29 class MyApp
: public wxApp
35 class MySplitterWindow
: public wxSplitterWindow
38 MySplitterWindow(wxFrame
*parent
, wxWindowID id
) : wxSplitterWindow(parent
, id
)
43 virtual bool OnSashPositionChange(int newSashPosition
)
45 if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition
) )
49 str
.Printf("Sash position = %d", newSashPosition
);
50 m_frame
->SetStatusText(str
);
59 class MyFrame
: public wxFrame
62 MyFrame(wxFrame
* frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
);
66 void SplitHorizontal(wxCommandEvent
& event
);
67 void SplitVertical(wxCommandEvent
& event
);
68 void Unsplit(wxCommandEvent
& event
);
69 void SetMinSize(wxCommandEvent
& event
);
70 void Quit(wxCommandEvent
& event
);
72 // Menu command update functions
73 void UpdateUIHorizontal(wxUpdateUIEvent
& event
);
74 void UpdateUIVertical(wxUpdateUIEvent
& event
);
75 void UpdateUIUnsplit(wxUpdateUIEvent
& event
);
78 void UpdatePosition();
82 MyCanvas
* m_leftCanvas
;
83 MyCanvas
* m_rightCanvas
;
84 MySplitterWindow
* m_splitter
;
89 class MyCanvas
: public wxScrolledWindow
92 MyCanvas(wxWindow
* parent
, wxWindowID id
, int x
, int y
, int w
, int h
);
95 virtual void OnDraw(wxDC
& dc
);
100 BEGIN_EVENT_TABLE(MyCanvas
, wxScrolledWindow
)
103 // ID for the menu commands
114 #define SPLITTER_WINDOW 100
115 #define SPLITTER_FRAME 101
121 bool MyApp::OnInit(void)
123 MyFrame
* frame
= new MyFrame((wxFrame
*) NULL
, "wxSplitterWindow Example",
124 wxPoint(50, 50), wxSize(420, 300));
134 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
135 EVT_MENU(SPLIT_VERTICAL
, MyFrame::SplitVertical
)
136 EVT_MENU(SPLIT_HORIZONTAL
, MyFrame::SplitHorizontal
)
137 EVT_MENU(SPLIT_UNSPLIT
, MyFrame::Unsplit
)
138 EVT_MENU(SPLIT_QUIT
, MyFrame::Quit
)
139 EVT_MENU(SPLIT_SETMINSIZE
, MyFrame::SetMinSize
)
141 EVT_UPDATE_UI(SPLIT_VERTICAL
, MyFrame::UpdateUIVertical
)
142 EVT_UPDATE_UI(SPLIT_HORIZONTAL
, MyFrame::UpdateUIHorizontal
)
143 EVT_UPDATE_UI(SPLIT_UNSPLIT
, MyFrame::UpdateUIUnsplit
)
146 // My frame constructor
147 MyFrame::MyFrame(wxFrame
* frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
):
148 wxFrame(frame
, SPLITTER_FRAME
, title
, pos
, size
)
153 fileMenu
= new wxMenu
;
154 fileMenu
->Append(SPLIT_VERTICAL
, "Split &Vertically", "Split vertically");
155 fileMenu
->Append(SPLIT_HORIZONTAL
, "Split &Horizontally", "Split horizontally");
156 fileMenu
->Append(SPLIT_UNSPLIT
, "&Unsplit", "Unsplit");
157 fileMenu
->AppendSeparator();
158 fileMenu
->Append(SPLIT_SETMINSIZE
, "Set &min size", "Set minimum pane size");
159 fileMenu
->AppendSeparator();
160 fileMenu
->Append(SPLIT_QUIT
, "E&xit", "Exit");
162 menuBar
= new wxMenuBar
;
163 menuBar
->Append(fileMenu
, "&File");
167 m_splitter
= new MySplitterWindow(this, SPLITTER_WINDOW
);
169 m_leftCanvas
= new MyCanvas(m_splitter
, CANVAS1
, 0, 0, 400, 400);
170 m_leftCanvas
->SetBackgroundColour(*wxRED
);
171 m_leftCanvas
->SetScrollbars(20, 20, 50, 50);
173 m_rightCanvas
= new MyCanvas(m_splitter
, CANVAS2
, 0, 0, 400, 400);
174 m_rightCanvas
->SetBackgroundColour(*wxCYAN
);
175 m_rightCanvas
->SetScrollbars(20, 20, 50, 50);
176 m_rightCanvas
->Show(FALSE
);
178 m_splitter
->Initialize(m_leftCanvas
);
179 SetStatusText("Min pane size = 0", 1);
186 void MyFrame::Quit(wxCommandEvent
& WXUNUSED(event
) )
191 void MyFrame::SplitHorizontal(wxCommandEvent
& WXUNUSED(event
) )
193 if ( m_splitter
->IsSplit() )
194 m_splitter
->Unsplit();
195 m_leftCanvas
->Show(TRUE
);
196 m_rightCanvas
->Show(TRUE
);
197 m_splitter
->SplitHorizontally( m_leftCanvas
, m_rightCanvas
);
201 void MyFrame::SplitVertical(wxCommandEvent
& WXUNUSED(event
) )
203 if ( m_splitter
->IsSplit() )
204 m_splitter
->Unsplit();
205 m_leftCanvas
->Show(TRUE
);
206 m_rightCanvas
->Show(TRUE
);
207 m_splitter
->SplitVertically( m_leftCanvas
, m_rightCanvas
);
211 void MyFrame::Unsplit(wxCommandEvent
& WXUNUSED(event
) )
213 if ( m_splitter
->IsSplit() )
214 m_splitter
->Unsplit();
215 SetStatusText("No splitter");
218 void MyFrame::SetMinSize(wxCommandEvent
& WXUNUSED(event
) )
221 str
.Printf("%d", m_splitter
->GetMinimumPaneSize());
222 str
= wxGetTextFromUser("Enter minimal size for panes:", "", str
, this);
226 int minsize
= atoi(str
);
227 m_splitter
->SetMinimumPaneSize(minsize
);
228 str
.Printf("Min pane size = %d", minsize
);
229 SetStatusText(str
, 1);
232 void MyFrame::UpdateUIHorizontal(wxUpdateUIEvent
& event
)
234 event
.Enable( ( (!m_splitter
->IsSplit()) || (m_splitter
->GetSplitMode() != wxSPLIT_HORIZONTAL
) ) );
237 void MyFrame::UpdateUIVertical(wxUpdateUIEvent
& event
)
239 event
.Enable( ( (!m_splitter
->IsSplit()) || (m_splitter
->GetSplitMode() != wxSPLIT_VERTICAL
) ) );
242 void MyFrame::UpdateUIUnsplit(wxUpdateUIEvent
& event
)
244 event
.Enable( m_splitter
->IsSplit() );
247 void MyFrame::UpdatePosition()
250 str
.Printf("Sash position = %d", m_splitter
->GetSashPosition());
254 MyCanvas::MyCanvas(wxWindow
* parent
, wxWindowID id
, int x
, int y
, int w
, int h
) :
255 wxScrolledWindow(parent
, id
, wxPoint(x
, y
), wxSize(w
, h
))
259 MyCanvas::~MyCanvas()
263 void MyCanvas::OnDraw(wxDC
& dc
)
265 dc
.SetPen(*wxBLACK_PEN
);
266 dc
.DrawLine(0, 0, 100, 100);
268 dc
.SetBackgroundMode(wxTRANSPARENT
);
269 dc
.DrawText("Testing", 50, 50);
271 dc
.SetPen(*wxRED_PEN
);
272 dc
.SetBrush(*wxGREEN_BRUSH
);
273 dc
.DrawRectangle(120, 120, 100, 80);