]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/collpane/collpane.cpp
Fix a crash in wxExecute() in wxMSW too.
[wxWidgets.git] / samples / collpane / collpane.cpp
index f693d52d71904c798d60ff850fb6727a951666d0..27cccb9f7714f0a4f21def127259eb886e9cbdc8 100644 (file)
@@ -6,7 +6,7 @@
 // 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 wxHAS_IMAGES_IN_RESOURCES
+    #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
 };
 
 
@@ -69,7 +78,7 @@ public:
 
     virtual bool OnInit();
 
-    DECLARE_NO_COPY_CLASS(MyApp)
+    wxDECLARE_NO_COPY_CLASS(MyApp);
 };
 
 class MyFrame: public wxFrame
@@ -84,15 +93,18 @@ public:
     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
@@ -100,12 +112,15 @@ 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);
 };
 
 
@@ -122,6 +137,9 @@ IMPLEMENT_APP(MyApp)
 
 bool MyApp::OnInit()
 {
+    if ( !wxApp::OnInit() )
+        return false;
+
     // create and show the main frame
     MyFrame* frame = new MyFrame;
 
@@ -139,43 +157,58 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     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()
@@ -201,7 +234,12 @@ void MyFrame::OnExpand(wxCommandEvent& WXUNUSED(event) )
 
 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);
 }
 
@@ -211,12 +249,27 @@ void MyFrame::OnShowDialog(wxCommandEvent& WXUNUSED(event) )
     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
 // ----------------------------------------------------------------------------
@@ -228,6 +281,8 @@ enum
 
 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)
@@ -236,27 +291,30 @@ 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);
@@ -267,3 +325,17 @@ void MyDialog::OnToggleStatus(wxCommandEvent& WXUNUSED(ev))
     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"));
+}
+