]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/checkbox.cpp
added 3-state checkboxes (patch 813790)
[wxWidgets.git] / samples / widgets / checkbox.cpp
diff --git a/samples/widgets/checkbox.cpp b/samples/widgets/checkbox.cpp
new file mode 100644 (file)
index 0000000..8b24262
--- /dev/null
@@ -0,0 +1,160 @@
+/////////////////////////////////////////////////////////////////////////////
+// Program:     wxWindows Widgets Sample
+// Name:        checkbox.cpp
+// Purpose:     Part of the widgets sample showing wxCheckBox
+// Author:      Dimitri Schoolwerth
+// Created:     27 Sep 2003
+// Id:          $Id$
+// Copyright:   (c) 2003 wxWindows team
+// License:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers
+#ifndef WX_PRECOMP
+    #include "wx/app.h"
+    #include "wx/log.h"
+
+    #include "wx/button.h"
+    #include "wx/checkbox.h"
+
+    #include "wx/sizer.h"
+
+#endif
+
+#include "widgets.h"
+
+#include "icons/checkbox.xpm"
+
+// ----------------------------------------------------------------------------
+// CheckBoxWidgetsPage
+// ----------------------------------------------------------------------------
+
+class CheckBoxWidgetsPage : public WidgetsPage
+{
+public:
+    CheckBoxWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
+    virtual ~CheckBoxWidgetsPage();
+
+protected:
+    // event handlers
+    void OnCheckBox(wxCommandEvent& event);
+
+    void OnButton(wxCommandEvent& event);
+
+    // the controls
+    // ------------
+
+    wxCheckBox *m_chk2States,
+               *m_chk3States,
+               *m_chk3StatesAllows3rdStateForUser;
+
+    wxButton *m_button;
+
+private:
+    DECLARE_EVENT_TABLE()
+    DECLARE_WIDGETS_PAGE(CheckBoxWidgetsPage)
+};
+
+// ----------------------------------------------------------------------------
+// event tables
+// ----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(CheckBoxWidgetsPage, WidgetsPage)
+    EVT_CHECKBOX(wxID_ANY, CheckBoxWidgetsPage::OnCheckBox)
+    EVT_BUTTON(wxID_ANY, CheckBoxWidgetsPage::OnButton)
+END_EVENT_TABLE()
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+IMPLEMENT_WIDGETS_PAGE(CheckBoxWidgetsPage, wxT("CheckBox"));
+
+CheckBoxWidgetsPage::CheckBoxWidgetsPage(wxNotebook *notebook,
+                                       wxImageList *imaglist)
+                  : WidgetsPage(notebook)
+{
+    imaglist->Add(wxBitmap(checkbox_xpm));
+
+    m_chk2States = new wxCheckBox( this, wxID_ANY,
+        wxT("I'm a standard 2-state checkbox") );
+    m_chk3States = new wxCheckBox( this, wxID_ANY,
+        wxT("I'm a 3-state checkbox that disallows setting the undetermined")
+        wxT(" state by the user" ),
+        wxDefaultPosition, wxDefaultSize, wxCHK_3STATE);
+    m_button = new wxButton( this, wxID_ANY, wxT("&Programmatically set this")
+        wxT(" checkbox to undetermined state") );
+
+    m_chk3StatesAllows3rdStateForUser = new wxCheckBox(this, wxID_ANY,
+        wxT("I'm a 3-state checkbox that allows setting the 3rd state by the user"),
+        wxDefaultPosition, wxDefaultSize, wxCHK_3STATE
+        | wxCHK_ALLOW_3RD_STATE_FOR_USER);
+
+    wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
+
+    sizerTop->Add(0, 0, 1, wxEXPAND);
+    sizerTop->Add(m_chk2States, 0, wxEXPAND);
+    sizerTop->Add(0, 0, 1, wxEXPAND);
+    wxSizer *sizerCheckBoxAndButton = new wxBoxSizer(wxHORIZONTAL);
+    {
+        wxSizer *szr = sizerCheckBoxAndButton;
+        szr->Add(m_chk3States, 0, wxEXPAND);
+        szr->Add(0, 0, 1, wxEXPAND);
+        szr->Add(m_button, 0, wxEXPAND);
+
+        sizerTop->Add(szr, 0, wxEXPAND);
+    }
+
+    sizerTop->Add(0, 0, 1, wxEXPAND);
+    sizerTop->Add(m_chk3StatesAllows3rdStateForUser, 0, wxEXPAND);
+    sizerTop->Add(0, 0, 1, wxEXPAND);
+
+    SetSizer(sizerTop);
+
+    sizerTop->Fit(this);
+}
+
+CheckBoxWidgetsPage::~CheckBoxWidgetsPage()
+{
+}
+
+// ----------------------------------------------------------------------------
+// event handlers
+// ----------------------------------------------------------------------------
+
+void CheckBoxWidgetsPage::OnCheckBox(wxCommandEvent& event)
+{
+    static const wxString stateNames[] =
+    {
+        wxT("unchecked"),
+        wxT("checked"),
+        wxT("undetermined/mixed"),
+    };
+    wxCheckBoxState state = (wxCheckBoxState) event.GetInt();
+
+    wxCHECK_RET( (state >= 0) && (state < WXSIZEOF(stateNames)),
+        "event.GetInt() returned an invalid wxCheckBoxState" );
+
+    wxLogMessage(wxT("Checkbox now set to state: %s"),
+        stateNames[state].c_str());
+}
+
+void CheckBoxWidgetsPage::OnButton(wxCommandEvent& WXUNUSED(event))
+{
+    m_chk3States->Set3StateValue(wxCHK_UNDETERMINED);
+}