1///////////////////////////////////////////////////////////////////////////// 2// Name: foldpanelbartest.cpp 3// Purpose: 4// Author: Jorgen Bodde 5// Modified by: ABX - 19/12/2004 : possibility of horizontal orientation 6// : wxWidgets coding standards 7// Created: 18/06/2004 8// RCS-ID: $Id: foldpanelbartest.cpp 33159 2005-03-29 18:03:57Z ABX $ 9// Copyright: (c) Jorgen Bodde 10// Licence: wxWindows licence 11///////////////////////////////////////////////////////////////////////////// 12 13#include "wx/wxprec.h" 14 15#ifdef __BORLANDC__ 16 #pragma hdrstop 17#endif 18 19#ifndef WX_PRECOMP 20 #include "wx/wx.h" 21#endif 22 23#include "wx/foldbar/foldpanelbar.h" 24#include "foldtestpanel.h" 25 26// ---------------------------------------------------------------------------- 27// resources 28// ---------------------------------------------------------------------------- 29 30// the application icon (under Windows and OS/2 it is in resources) 31#include "sample.xpm" 32 33// ---------------------------------------------------------------------------- 34// MyApp Class 35// ---------------------------------------------------------------------------- 36 37class MyApp : public wxApp 38{ 39public: 40 virtual bool OnInit(); 41}; 42 43// ---------------------------------------------------------------------------- 44// MyAppFrame Class 45// ---------------------------------------------------------------------------- 46 47class MyAppFrame : public wxFrame 48{ 49public: 50 MyAppFrame(const wxString& title, 51 const wxPoint& pos = wxDefaultPosition, 52 const wxSize& size = wxDefaultSize, 53 long style = wxDEFAULT_FRAME_STYLE); 54 55private: 56 void OnQuit(wxCommandEvent& event); 57 void OnAbout(wxCommandEvent& event); 58 void OnOrientation(wxCommandEvent& event); 59 60 // extra handlers for the bar, to show how it works 61 62 void OnCollapseMe(wxCommandEvent &event); 63 void OnExpandMe(wxCommandEvent &event); 64 65private: 66 wxMenuBar *CreateMenuBar(); 67 void CreateFoldBar(bool vertical = true); 68 wxFoldPanelBar *m_pnl; 69 70private: 71 DECLARE_EVENT_TABLE() 72}; 73 74// ---------------------------------------------------------------------------- 75// constants 76// ---------------------------------------------------------------------------- 77 78enum 79{ 80 // menu items 81 FoldPanelBarTest_Quit = wxID_EXIT, 82 FoldPanelBarTest_About = wxID_ABOUT, 83 ID_COLLAPSEME = wxID_HIGHEST, 84 ID_EXPANDME, 85 FoldPanelBarTest_Horizontal, 86 FoldPanelBarTest_Vertical 87}; 88 89// ---------------------------------------------------------------------------- 90// event tables and other macros for wxWidgets 91// ---------------------------------------------------------------------------- 92 93BEGIN_EVENT_TABLE(MyAppFrame, wxFrame) 94 EVT_MENU(FoldPanelBarTest_Quit, MyAppFrame::OnQuit) 95 EVT_MENU(FoldPanelBarTest_About, MyAppFrame::OnAbout) 96 EVT_MENU(FoldPanelBarTest_Horizontal, MyAppFrame::OnOrientation) 97 EVT_MENU(FoldPanelBarTest_Vertical, MyAppFrame::OnOrientation) 98 EVT_BUTTON(ID_COLLAPSEME, MyAppFrame::OnCollapseMe) 99 EVT_BUTTON(ID_EXPANDME, MyAppFrame::OnExpandMe) 100END_EVENT_TABLE() 101 102IMPLEMENT_APP(MyApp) 103 104// ============================================================================ 105// implementation 106// ============================================================================ 107 108// ---------------------------------------------------------------------------- 109// MyApp Implementation 110// ---------------------------------------------------------------------------- 111 112bool MyApp::OnInit() 113{ 114 MyAppFrame *frame = new MyAppFrame(_T("FoldPanelBarTest wxWidgets Test Application")); 115 116 SetTopWindow(frame); 117 118 frame->Show(true); 119 return true; 120} 121 122// ---------------------------------------------------------------------------- 123// MyAppFrame Implementation 124// ---------------------------------------------------------------------------- 125 126MyAppFrame::MyAppFrame(const wxString& title, const wxPoint& pos, const wxSize& size, long style) 127 : wxFrame(NULL, wxID_ANY, title, pos, size, style), m_pnl(NULL) 128{ 129 SetIcon(wxIcon(sample_xpm)); 130 131 SetMenuBar(CreateMenuBar()); 132 133 CreateFoldBar(); 134 135 CreateStatusBar(2); 136 SetStatusText(_T("Welcome to wxWidgets!")); 137} 138 139wxMenuBar *MyAppFrame::CreateMenuBar() 140{ 141 wxMenu *menuFile = new wxMenu; 142 menuFile->Append(FoldPanelBarTest_Horizontal, _T("&Horizontal\tAlt-H")); 143 menuFile->Append(FoldPanelBarTest_Vertical, _T("&Vertical\tAlt-V")); 144 menuFile->AppendSeparator(); 145 menuFile->Append(FoldPanelBarTest_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); 146 147 wxMenu *helpMenu = new wxMenu; 148 helpMenu->Append(FoldPanelBarTest_About, _T("&About...\tF1"), _T("Show about dialog")); 149 150 wxMenuBar *value = new wxMenuBar(); 151 value->Append(menuFile, _T("&File")); 152 value->Append(helpMenu, _T("&Help")); 153 154 return value; 155} 156 157void MyAppFrame::CreateFoldBar(bool vertical) 158{ 159 if (vertical) 160 SetSize(200,500); 161 else 162 SetSize(900,200); 163 164 wxFoldPanelBar *bar = new wxFoldPanelBar(this, 165 wxID_ANY, 166 wxDefaultPosition, 167 wxDefaultSize, 168 wxFPB_DEFAULT_STYLE | ( vertical ? wxFPB_VERTICAL : wxFPB_HORIZONTAL ) , 169 wxFPB_COLLAPSE_TO_BOTTOM); 170 171 wxFoldPanel item = bar->AddFoldPanel(_T("Test me"), false); 172 bar->AddFoldPanelWindow(item, new wxButton(item.GetParent(), ID_COLLAPSEME, _T("Collapse Me"))); 173 174 item = bar->AddFoldPanel(_T("Test me too!"), true); 175 bar->AddFoldPanelWindow(item, new wxButton(item.GetParent(), ID_EXPANDME, _T("Expand first one"))); 176 bar->AddFoldPanelSeperator(item); 177 bar->AddFoldPanelWindow(item, new FoldTestPanel(item.GetParent(), wxID_ANY)); 178 179 bar->AddFoldPanelSeperator(item); 180 181 bar->AddFoldPanelWindow(item, new wxTextCtrl(item.GetParent(), wxID_ANY, _T("Comment")), wxFPB_ALIGN_WIDTH, wxFPB_DEFAULT_SPACING, 20); 182 183 item = bar->AddFoldPanel(_T("Some opinions ..."), false); 184 bar->AddFoldPanelWindow(item, new wxCheckBox(item.GetParent(), wxID_ANY, _T("I like this"))); 185 if( vertical) 186 { 187 // do not add this for horizontal for better presentation 188 bar->AddFoldPanelWindow(item, new wxCheckBox(item.GetParent(), wxID_ANY, _T("And also this"))); 189 bar->AddFoldPanelWindow(item, new wxCheckBox(item.GetParent(), wxID_ANY, _T("And gimme this too"))); 190 } 191 192 bar->AddFoldPanelSeperator(item); 193 194 bar->AddFoldPanelWindow(item, new wxCheckBox(item.GetParent(), wxID_ANY, _T("Check this too if you like"))); 195 if( vertical) 196 { 197 // do not add this for horizontal for better presentation 198 bar->AddFoldPanelWindow(item, new wxCheckBox(item.GetParent(), wxID_ANY, _T("What about this"))); 199 } 200 201 item = bar->AddFoldPanel(_T("Choose one ..."), false); 202 bar->AddFoldPanelWindow(item, new wxStaticText(item.GetParent(), wxID_ANY, _T("Enter your comment"))); 203 bar->AddFoldPanelWindow(item, new wxTextCtrl(item.GetParent(), wxID_ANY, _T("Comment")), wxFPB_ALIGN_WIDTH, wxFPB_DEFAULT_SPACING, 20); 204 205 if (m_pnl) m_pnl->Destroy(); 206 207 m_pnl = bar; 208 209 wxSize size = GetClientSize(); 210 m_pnl->SetSize( 0, 0, size.GetWidth(), size.GetHeight() ); 211} 212 213void MyAppFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) 214{ 215 // true is to force the frame to close 216 Close(true); 217} 218 219void MyAppFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) 220{ 221 wxString msg; 222 msg.Printf( _T("This is the About dialog of the FoldPanelBarTest application.\n") 223 _T("Welcome to %s"), wxVERSION_STRING); 224 225 wxMessageBox(msg, _T("About FoldPanelBarTest"), wxOK | wxICON_INFORMATION, this); 226} 227 228void MyAppFrame::OnOrientation(wxCommandEvent& event) 229{ 230 CreateFoldBar(event.GetId()==FoldPanelBarTest_Vertical); 231} 232 233void MyAppFrame::OnCollapseMe(wxCommandEvent &WXUNUSED(event)) 234{ 235 wxFoldPanel item = m_pnl->Item(0); 236 m_pnl->Collapse(item); 237} 238 239void MyAppFrame::OnExpandMe(wxCommandEvent &WXUNUSED(event)) 240{ 241 m_pnl->Expand(m_pnl->Item(0)); 242 m_pnl->Collapse(m_pnl->Item(1)); 243} 244