// Created: 14/10/06
// RCS-ID: $Id$
// Copyright: (c) Francesco Montorsi
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
#include "wx/clrpicker.h"
#include "wx/filepicker.h"
#include "wx/fontpicker.h"
+#include "wx/aboutdlg.h"
+
+#ifndef __WXMSW__
+ #include "../sample.xpm"
+#endif
// ----------------------------------------------------------------------------
// constants
// ID for the menu commands
enum
{
- PANE_COLLAPSE,
+ PANE_COLLAPSE = 100,
PANE_EXPAND,
PANE_SETLABEL,
PANE_SHOWDLG,
- PANE_QUIT = wxID_EXIT
+ PANE_ABOUT = wxID_ABOUT,
+ PANE_QUIT = wxID_EXIT,
+
+ PANE_BUTTON,
+ PANE_TEXTCTRL
};
virtual bool OnInit();
- DECLARE_NO_COPY_CLASS(MyApp)
+ wxDECLARE_NO_COPY_CLASS(MyApp);
};
class MyFrame: public wxFrame
void OnSetLabel(wxCommandEvent& event);
void OnShowDialog(wxCommandEvent& event);
void Quit(wxCommandEvent& event);
+ void OnAbout(wxCommandEvent& event);
- // Menu command update functions
- void UpdateUI(wxUpdateUIEvent& event);
+ // UI update handlers
+ void OnCollapseUpdateUI(wxUpdateUIEvent& event);
+ void OnExpandUpdateUI(wxUpdateUIEvent& event);
private:
wxCollapsiblePane *m_collPane;
+ wxBoxSizer *m_paneSizer;
DECLARE_EVENT_TABLE()
- DECLARE_NO_COPY_CLASS(MyFrame)
+ wxDECLARE_NO_COPY_CLASS(MyFrame);
};
class MyDialog : public wxDialog
public:
MyDialog(wxFrame *parent);
void OnToggleStatus(wxCommandEvent& WXUNUSED(ev));
+ void OnAlignButton(wxCommandEvent& WXUNUSED(ev));
+ void OnPaneChanged(wxCollapsiblePaneEvent& event);
private:
wxCollapsiblePane *m_collPane;
+ wxGridSizer *m_paneSizer;
DECLARE_EVENT_TABLE()
- DECLARE_NO_COPY_CLASS(MyDialog)
+ wxDECLARE_NO_COPY_CLASS(MyDialog);
};
bool MyApp::OnInit()
{
+ if ( !wxApp::OnInit() )
+ return false;
+
// create and show the main frame
MyFrame* frame = new MyFrame;
EVT_MENU(PANE_EXPAND, MyFrame::OnExpand)
EVT_MENU(PANE_SETLABEL, MyFrame::OnSetLabel)
EVT_MENU(PANE_SHOWDLG, MyFrame::OnShowDialog)
+ EVT_MENU(PANE_ABOUT, MyFrame::OnAbout)
EVT_MENU(PANE_QUIT, MyFrame::Quit)
- EVT_UPDATE_UI(wxID_ANY, MyFrame::UpdateUI)
+ EVT_UPDATE_UI(PANE_COLLAPSE, MyFrame::OnCollapseUpdateUI)
+ EVT_UPDATE_UI(PANE_EXPAND, MyFrame::OnExpandUpdateUI)
END_EVENT_TABLE()
// My frame constructor
MyFrame::MyFrame()
- : wxFrame(NULL, wxID_ANY, _T("wxCollapsiblePane sample"),
+ : wxFrame(NULL, wxID_ANY, wxT("wxCollapsiblePane sample"),
wxDefaultPosition, wxSize(420, 300),
wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
{
+ SetIcon(wxICON(sample));
+
#if wxUSE_STATUSBAR
CreateStatusBar(2);
#endif // wxUSE_STATUSBAR
// Make a menubar
wxMenu *paneMenu = new wxMenu;
- paneMenu->Append(PANE_COLLAPSE, _T("Collapse\tCtrl-C"));
- paneMenu->Append(PANE_EXPAND, _T("Expand\tCtrl-E"));
+ paneMenu->Append(PANE_COLLAPSE, wxT("Collapse\tCtrl-C"));
+ paneMenu->Append(PANE_EXPAND, wxT("Expand\tCtrl-E"));
paneMenu->AppendSeparator();
- paneMenu->Append(PANE_SETLABEL, _T("Set label...\tCtrl-S"));
+ paneMenu->Append(PANE_SETLABEL, wxT("Set label...\tCtrl-L"));
paneMenu->AppendSeparator();
- paneMenu->Append(PANE_SHOWDLG, _T("Show dialog...\tCtrl-S"));
+ paneMenu->Append(PANE_SHOWDLG, wxT("Show dialog...\tCtrl-S"));
paneMenu->AppendSeparator();
paneMenu->Append(PANE_QUIT);
+ wxMenu *helpMenu = new wxMenu;
+ helpMenu->Append(PANE_ABOUT);
+
wxMenuBar *menuBar = new wxMenuBar;
- menuBar->Append(paneMenu, _T("&Pane"));
+ menuBar->Append(paneMenu, wxT("&Pane"));
+ menuBar->Append(helpMenu, wxT("&Help"));
SetMenuBar(menuBar);
m_collPane = new wxCollapsiblePane(this, -1, wxT("test!"));
wxWindow *win = m_collPane->GetPane();
- new wxStaticText(win, -1, wxT("Static control with absolute coords"), wxPoint(10,2));
- new wxStaticText(win, -1, wxT("Yet another one!"), wxPoint(30, 30));
- new wxTextCtrl(win, -1, wxT("You can place anything you like inside a wxCollapsiblePane"),
- wxPoint(5, 60), wxSize(300, -1));
+ m_paneSizer = new wxBoxSizer( wxHORIZONTAL );
+ wxBoxSizer* paneSubSizer = new wxBoxSizer( wxVERTICAL );
+ m_paneSizer->AddSpacer( 20 );
+ m_paneSizer->Add( paneSubSizer, 1 );
+
+ paneSubSizer->Add( new wxStaticText(win, -1, wxT("Static text") ), 0, wxALIGN_LEFT | wxALL, 3 );
+ paneSubSizer->Add( new wxStaticText(win, -1, wxT("Yet another one!") ), 0, wxALIGN_LEFT | wxALL, 3 );
+ paneSubSizer->Add( new wxTextCtrl(win, PANE_TEXTCTRL, wxT("Text control"), wxDefaultPosition, wxSize(80,-1) ), 0, wxALIGN_LEFT | wxALL, 3 );
+ paneSubSizer->Add( new wxButton(win, PANE_BUTTON, wxT("Press to align right") ), 0, wxALIGN_LEFT | wxALL, 3 );
+
+ win->SetSizer( m_paneSizer );
}
MyFrame::~MyFrame()
void MyFrame::OnSetLabel(wxCommandEvent& WXUNUSED(event) )
{
- wxString text = wxGetTextFromUser(wxT("Input the new label"));
+ wxString text = wxGetTextFromUser
+ (
+ wxT("Enter new label"),
+ wxGetTextFromUserPromptStr,
+ m_collPane->GetLabel()
+ );
m_collPane->SetLabel(text);
}
dlg.ShowModal();
}
-void MyFrame::UpdateUI(wxUpdateUIEvent& event)
+void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
+{
+ wxAboutDialogInfo info;
+ info.SetName(_("wxCollapsiblePane sample"));
+ info.SetDescription(_("This sample program demonstrates usage of wxCollapsiblePane"));
+ info.SetCopyright(wxT("(C) 2006 Francesco Montorsi <frm@users.sourceforge.net>"));
+
+ wxAboutBox(info);
+}
+
+void MyFrame::OnCollapseUpdateUI(wxUpdateUIEvent& event)
+{
+ event.Enable(!m_collPane->IsCollapsed());
+}
+
+void MyFrame::OnExpandUpdateUI(wxUpdateUIEvent& event)
{
- GetMenuBar()->Enable(PANE_COLLAPSE, !m_collPane->IsCollapsed());
- GetMenuBar()->Enable(PANE_EXPAND, m_collPane->IsCollapsed());
+ event.Enable(m_collPane->IsCollapsed());
}
+
// ----------------------------------------------------------------------------
// MyDialog
// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(MyDialog, wxDialog)
EVT_BUTTON(PANEDLG_TOGGLESTATUS_BTN, MyDialog::OnToggleStatus)
+ EVT_COLLAPSIBLEPANE_CHANGED(wxID_ANY, MyDialog::OnPaneChanged)
+ EVT_BUTTON(PANE_BUTTON, MyDialog::OnAlignButton)
END_EVENT_TABLE()
MyDialog::MyDialog(wxFrame *parent)
wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE )
{
wxSizer *sz = new wxBoxSizer(wxVERTICAL);
- sz->Add(new wxStaticText(this, -1,
+ sz->Add(new wxStaticText(this, -1,
wxT("This dialog allows you to test the wxCollapsiblePane control")),
0, wxALL, 5);
- sz->Add(new wxButton(this, PANEDLG_TOGGLESTATUS_BTN, wxT("Change status")),
+ sz->Add(new wxButton(this, PANEDLG_TOGGLESTATUS_BTN, wxT("Change status")),
1, wxGROW|wxALL, 5);
-
+
m_collPane = new wxCollapsiblePane(this, -1, wxT("Click here for a surprise"));
- sz->Add(m_collPane, 1, wxGROW|wxALL, 5);
+ sz->Add(m_collPane, 0, wxGROW|wxALL, 5);
sz->Add(new wxTextCtrl(this, -1, wxT("just a test")), 0, wxGROW|wxALL, 5);
sz->AddSpacer(10);
sz->Add(new wxButton(this, wxID_OK), 0, wxALIGN_RIGHT|wxALL, 5);
// now add test controls in the collapsible pane
wxWindow *win = m_collPane->GetPane();
- wxSizer *paneSz = new wxGridSizer(2, 2, 5, 5);
- paneSz->Add(new wxColourPickerCtrl(win, -1), 1, wxGROW|wxALL, 2);
- paneSz->Add(new wxFontPickerCtrl(win, -1), 1, wxGROW|wxALL, 2);
- paneSz->Add(new wxFilePickerCtrl(win, -1), 1, wxALL|wxALIGN_CENTER, 2);
- paneSz->Add(new wxDirPickerCtrl(win, -1), 1, wxALL|wxALIGN_CENTER, 2);
- win->SetSizer(paneSz);
- paneSz->SetSizeHints(win);
+ m_paneSizer = new wxGridSizer(4, 1, 5, 5);
+
+ m_paneSizer->Add( new wxStaticText(win, -1, wxT("Static text") ), 0, wxALIGN_LEFT );
+ m_paneSizer->Add( new wxStaticText(win, -1, wxT("Yet another one!") ), 0, wxALIGN_LEFT );
+ m_paneSizer->Add( new wxTextCtrl(win, PANE_TEXTCTRL, wxT("Text control"), wxDefaultPosition, wxSize(80,-1) ), 0, wxALIGN_LEFT );
+ m_paneSizer->Add( new wxButton(win, PANE_BUTTON, wxT("Press to align right") ), 0, wxALIGN_LEFT );
+ win->SetSizer( m_paneSizer );
+
+ win->SetSizer( m_paneSizer );
+ m_paneSizer->SetSizeHints(win);
SetSizer(sz);
sz->SetSizeHints(this);
m_collPane->Collapse(!m_collPane->IsCollapsed());
}
+void MyDialog::OnAlignButton(wxCommandEvent& WXUNUSED(ev))
+{
+ wxSizerItem *item = m_paneSizer->GetItem( FindWindow(PANE_TEXTCTRL), true );
+ item->SetFlag( wxALIGN_RIGHT );
+
+ Layout();
+}
+
+void MyDialog::OnPaneChanged(wxCollapsiblePaneEvent& event)
+{
+ wxLogMessage(wxT("The pane has just been %s by the user"),
+ event.GetCollapsed() ? wxT("collapsed") : wxT("expanded"));
+}
+