]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxRadioBox::IsItemEnabled/Shown() (for MSW only for now, other platforms to...
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 29 Nov 2005 19:26:38 +0000 (19:26 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 29 Nov 2005 19:26:38 +0000 (19:26 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36288 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/radiobox.tex
include/wx/msw/radiobox.h
include/wx/radiobox.h
samples/widgets/radiobox.cpp
src/msw/radiobox.cpp

index 03bee532e7f1dd1c243d968bd8f591e584aa00ce..f4016689ec6f63f45f56c640985e5b4fc0d15892 100644 (file)
@@ -37,6 +37,7 @@ All (GUI):
 - Access to titles through Get/SetTitle is available now only for top level
   windows (wxDialog, wxFrame).
 - Fixed memory leak of pending events in wxEvtHandler
+- Added wxRadioBox::IsItemEnabled/Shown()
 
 wxMSW:
 
index 97b58b93dae4e29a62ba5035e6e074371289e6a3..9ac9d109b4ea1b439913d473016eca47e0466b36 100644 (file)
@@ -55,6 +55,7 @@ when a radiobutton is clicked.}
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
+
 \membersection{wxRadioBox::wxRadioBox}\label{wxradioboxctor}
 
 \func{}{wxRadioBox}{\void}
@@ -113,12 +114,14 @@ a list of strings.}
 \perlnote{In wxPerl there is just an array reference in place of {\tt n}
 and {\tt choices}.}
 
+
 \membersection{wxRadioBox::\destruct{wxRadioBox}}\label{wxradioboxdtor}
 
 \func{}{\destruct{wxRadioBox}}{\void}
 
 Destructor, destroying the radiobox item.
 
+
 \membersection{wxRadioBox::Create}\label{wxradioboxcreate}
 
 \func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxString\& }{label},\rtfsp
@@ -138,6 +141,7 @@ Destructor, destroying the radiobox item.
 Creates the radiobox for two-step construction. See \helpref{wxRadioBox::wxRadioBox}{wxradioboxctor}\rtfsp
 for further details.
 
+
 \membersection{wxRadioBox::Enable}\label{wxradioboxenable}
 
 \func{virtual bool}{Enable}{\param{bool}{ enable = {\tt true}}}
@@ -168,6 +172,7 @@ individual button in the radiobox.}
 \helpref{wxWindow::Enable}{wxwindowenable}
 
 
+
 \membersection{wxRadioBox::FindString}\label{wxradioboxfindstring}
 
 \constfunc{int}{FindString}{\param{const wxString\& }{string}}
@@ -179,12 +184,14 @@ Finds a button matching the given string, returning the position if found, or
 
 \docparam{string}{The string to find.}
 
+
 \membersection{wxRadioBox::GetCount}\label{wxradioboxgetcount}
 
 \constfunc{int}{GetCount}{\void}
 
 Returns the number of items in the radiobox.
 
+
 \membersection{wxRadioBox::GetLabel}\label{wxradioboxgetlabel}
 
 \constfunc{wxString}{GetLabel}{\void}
@@ -214,12 +221,14 @@ implements the following methods:\par
 
 Returns the zero-based position of the selected button.
 
+
 \membersection{wxRadioBox::GetStringSelection}\label{wxradioboxgetstringselection}
 
 \constfunc{wxString}{GetStringSelection}{\void}
 
 Returns the selected string.
 
+
 \membersection{wxRadioBox::GetString}\label{wxradioboxgetstring}
 
 \constfunc{wxString}{GetString}{\param{int}{ n}}
@@ -230,6 +239,32 @@ Returns the label for the button at the given position.
 
 \docparam{n}{The zero-based button position.}
 
+
+\membersection{wxRadioBox::IsItemEnabled}\label{wxradioboxisitemenabled}
+
+\constfunc{bool}{IsItemEnabled}{\void}
+
+Returns \true if the item is enabled or \false if it was disabled using 
+\helpref{Enable(n, false)}{wxradioboxenable}.
+
+{\bf Platform note:} Currently only implemented in wxMSW and always returns
+\true in the other ports.
+
+
+\membersection{wxRadioBox::IsItemShown}\label{wxradioboxisitemshown}
+
+\constfunc{bool}{IsItemShown}{\void}
+
+Returns \true if the item is currently shown or \false if it was hidden using 
+\helpref{Show(n, false)}{wxradioboxshow}.
+
+Note that this function returns \true for an item which hadn't been hidden even
+if the entire radiobox is not currently shown.
+
+{\bf Platform note:} Currently only implemented in wxMSW and always returns
+\true in the other ports.
+
+
 \membersection{wxRadioBox::Number}\label{wxradioboxnumber}
 
 \constfunc{int}{Number}{\void}
@@ -242,6 +277,7 @@ future versions.
 
 Returns the number of buttons in the radiobox.
 
+
 \membersection{wxRadioBox::SetLabel}\label{wxradioboxsetlabel}
 
 \func{void}{SetLabel}{\param{const wxString\&}{ label}}
@@ -263,6 +299,7 @@ implements the following methods:\par
 \end{twocollist}}
 }
 
+
 \membersection{wxRadioBox::SetSelection}\label{wxradioboxsetselection}
 
 \func{void}{SetSelection}{\param{int}{ n}}
@@ -274,6 +311,7 @@ a wxEVT\_COMMAND\_RADIOBOX\_SELECTED event to get emitted.
 
 \docparam{n}{The zero-based button position.}
 
+
 \membersection{wxRadioBox::SetStringSelection}\label{wxradioboxsetstringselection}
 
 \func{void}{SetStringSelection}{\param{const wxString\& }{string}}
@@ -285,6 +323,7 @@ a wxEVT\_COMMAND\_RADIOBOX\_SELECTED event to get emitted.
 
 \docparam{string}{The label of the button to select.}
 
+
 \membersection{wxRadioBox::Show}\label{wxradioboxshow}
 
 \func{virtual bool}{Show}{\param{const bool}{ show = {\tt true}}}
index b8ecc5d72bc3f921f0db5c2594234964878e5b6f..e75b32dc3113f7c6a9fa600941cea3e99a3bd174 100644 (file)
@@ -90,6 +90,8 @@ public:
     virtual void SetString(int n, const wxString& label);
     virtual bool Enable(int n, bool enable = true);
     virtual bool Show(int n, bool show = true);
+    virtual bool IsItemEnabled(int n) const;
+    virtual bool IsItemShown(int n) const;
     virtual int GetColumnCount() const { return GetNumHor(); }
     virtual int GetRowCount() const { return GetNumVer(); }
 
index 9014e239a43a14ac2a1cc95c6970de8cbc7cec7b..61a4aacc936593f67a5835af189c11678f0a752d 100644 (file)
@@ -27,10 +27,15 @@ extern WXDLLEXPORT_DATA(const wxChar*) wxRadioBoxNameStr;
 class WXDLLEXPORT wxRadioBoxBase : public wxItemContainerImmutable
 {
 public:
-    // change the individual radio button state
+    // change/query the individual radio button state
     virtual bool Enable(int n, bool enable = true) = 0;
     virtual bool Show(int n, bool show = true) = 0;
 
+    // NB: these functions are stubbed here for now but should become pure
+    //     virtual once all ports implement them
+    virtual bool IsItemEnabled(int WXUNUSED(n)) const { return true; }
+    virtual bool IsItemShown(int WXUNUSED(n)) const { return true; }
+
     // layout parameters
     virtual int GetColumnCount() const = 0;
     virtual int GetRowCount() const = 0;
@@ -38,6 +43,7 @@ public:
     // return the item above/below/to the left/right of the given one
     int GetNextItem(int item, wxDirection dir, long style) const;
 
+
     // deprecated functions
     // --------------------
 
index e72f49f06c305dbbdbde5333afc37508c63a7977..ddb845608486bfd1679d0b07acd59639426310a2 100644 (file)
@@ -56,8 +56,8 @@ enum
     RadioPage_Selection,
     RadioPage_Label,
     RadioPage_LabelBtn,
-    RadioPage_Enable2nd,
-    RadioPage_Show2nd,
+    RadioPage_EnableItem,
+    RadioPage_ShowItem,
     RadioPage_Radio
 };
 
@@ -73,6 +73,9 @@ enum
 static const unsigned int DEFAULT_NUM_ENTRIES = 12;
 static const unsigned int DEFAULT_MAJOR_DIM = 3;
 
+// this item is enabled/disabled shown/hidden by the test checkboxes
+static const int TEST_BUTTON = 1;
+
 // ----------------------------------------------------------------------------
 // RadioWidgetsPage
 // ----------------------------------------------------------------------------
@@ -96,9 +99,14 @@ protected:
     void OnButtonSelection(wxCommandEvent& event);
     void OnButtonSetLabel(wxCommandEvent& event);
 
+    void OnEnableItem(wxCommandEvent& event);
+    void OnShowItem(wxCommandEvent& event);
+
     void OnUpdateUIReset(wxUpdateUIEvent& event);
     void OnUpdateUIUpdate(wxUpdateUIEvent& event);
     void OnUpdateUISelection(wxUpdateUIEvent& event);
+    void OnUpdateUIEnableItem(wxUpdateUIEvent& event);
+    void OnUpdateUIShowItem(wxUpdateUIEvent& event);
 
     // reset the wxRadioBox parameters
     void Reset();
@@ -111,8 +119,8 @@ protected:
 
     // the check/radio boxes for styles
     wxCheckBox *m_chkVert;
-    wxCheckBox *m_2ndEnabled;
-    wxCheckBox *m_2ndShown;
+    wxCheckBox *m_chkEnableItem;
+    wxCheckBox *m_chkShowItem;
     wxRadioBox *m_radioDir;
 
     // the gauge itself and the sizer it is in
@@ -150,6 +158,12 @@ BEGIN_EVENT_TABLE(RadioWidgetsPage, WidgetsPage)
 
     EVT_RADIOBOX(RadioPage_Radio, RadioWidgetsPage::OnRadioBox)
 
+    EVT_CHECKBOX(RadioPage_EnableItem, RadioWidgetsPage::OnEnableItem)
+    EVT_CHECKBOX(RadioPage_ShowItem, RadioWidgetsPage::OnShowItem)
+
+    EVT_UPDATE_UI(RadioPage_EnableItem, RadioWidgetsPage::OnUpdateUIEnableItem)
+    EVT_UPDATE_UI(RadioPage_ShowItem, RadioWidgetsPage::OnUpdateUIShowItem)
+
     EVT_CHECKBOX(wxID_ANY, RadioWidgetsPage::OnCheckOrRadioBox)
     EVT_RADIOBOX(wxID_ANY, RadioWidgetsPage::OnCheckOrRadioBox)
 END_EVENT_TABLE()
@@ -168,8 +182,8 @@ RadioWidgetsPage::RadioWidgetsPage(wxBookCtrlBase *book,
 
     // init everything
     m_chkVert = (wxCheckBox *)NULL;
-    m_2ndEnabled = (wxCheckBox *)NULL;
-    m_2ndShown = (wxCheckBox *)NULL;
+    m_chkEnableItem = (wxCheckBox *)NULL;
+    m_chkShowItem = (wxCheckBox *)NULL;
 
     m_textNumBtns =
     m_textLabelBtns =
@@ -253,8 +267,12 @@ RadioWidgetsPage::RadioWidgetsPage(wxBookCtrlBase *book,
                                             &m_textLabelBtns);
     sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 
-    m_2ndEnabled = CreateCheckBoxAndAddToSizer(sizerMiddle, _T("2nd item enabled"));
-    m_2ndShown = CreateCheckBoxAndAddToSizer(sizerMiddle, _T("2nd item shown"));
+    m_chkEnableItem = CreateCheckBoxAndAddToSizer(sizerMiddle,
+                                                  _T("Disable &2nd item"),
+                                                  RadioPage_EnableItem);
+    m_chkShowItem = CreateCheckBoxAndAddToSizer(sizerMiddle,
+                                                _T("Hide 2nd &item"),
+                                                RadioPage_ShowItem);
 
     // right pane
     wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
@@ -287,8 +305,8 @@ void RadioWidgetsPage::Reset()
     m_textLabelBtns->SetValue(_T("item"));
 
     m_chkVert->SetValue(false);
-    m_2ndEnabled->SetValue(true);
-    m_2ndShown->SetValue(true);
+    m_chkEnableItem->SetValue(true);
+    m_chkShowItem->SetValue(true);
     m_radioDir->SetSelection(RadioDir_Default);
 }
 
@@ -375,8 +393,8 @@ void RadioWidgetsPage::CreateRadio()
     m_sizerRadio->Add(m_radio, 1, wxGROW);
     m_sizerRadio->Layout();
 
-    m_radio->Enable( 1 , m_2ndEnabled->GetValue() );
-    m_radio->Show( 1 , m_2ndShown->GetValue() );
+    m_chkEnableItem->SetValue(true);
+    m_chkEnableItem->SetValue(true);
 }
 
 // ----------------------------------------------------------------------------
@@ -433,6 +451,16 @@ void RadioWidgetsPage::OnButtonSelection(wxCommandEvent& WXUNUSED(event))
     }
 }
 
+void RadioWidgetsPage::OnEnableItem(wxCommandEvent& event)
+{
+    m_radio->Enable(TEST_BUTTON, event.IsChecked());
+}
+
+void RadioWidgetsPage::OnShowItem(wxCommandEvent& event)
+{
+    m_radio->Show(TEST_BUTTON, event.IsChecked());
+}
+
 void RadioWidgetsPage::OnUpdateUIUpdate(wxUpdateUIEvent& event)
 {
     unsigned long n;
@@ -471,4 +499,16 @@ void RadioWidgetsPage::OnUpdateUIReset(wxUpdateUIEvent& event)
     event.Enable(enable);
 }
 
+void RadioWidgetsPage::OnUpdateUIEnableItem(wxUpdateUIEvent& event)
+{
+    event.SetText(m_radio->IsItemEnabled(TEST_BUTTON) ? _T("Disable &2nd item")
+                                                      : _T("Enable &2nd item"));
+}
+
+void RadioWidgetsPage::OnUpdateUIShowItem(wxUpdateUIEvent& event)
+{
+    event.SetText(m_radio->IsItemShown(TEST_BUTTON) ? _T("Hide 2nd &item")
+                                                    : _T("Show 2nd &item"));
+}
+
 #endif // wxUSE_RADIOBOX
index baeb42a491ef70caf8e032e2064e97e53b917f9e..5ee58e43657b4077cef462e2441e10f2108c2ee9 100644 (file)
@@ -410,7 +410,15 @@ bool wxRadioBox::Enable(int item, bool enable)
 
     BOOL ret = ::EnableWindow((*m_radioButtons)[item], enable);
 
-    return (ret == 0) == enable;
+    return (ret == 0) != enable;
+}
+
+bool wxRadioBox::IsItemEnabled(int item) const
+{
+    wxCHECK_MSG( IsValid(item), false,
+                 wxT("invalid item in wxRadioBox::Enable()") );
+
+    return ::IsWindowEnabled((*m_radioButtons)[item]) != 0;
 }
 
 // Show a specific button
@@ -421,12 +429,27 @@ bool wxRadioBox::Show(int item, bool show)
 
     BOOL ret = ::ShowWindow((*m_radioButtons)[item], show ? SW_SHOW : SW_HIDE);
 
-    bool changed = (ret != 0) == show;
-    if( changed )
+    bool changed = (ret != 0) != show;
+    if ( changed )
+    {
         InvalidateBestSize();
+    }
+
     return changed;
 }
 
+bool wxRadioBox::IsItemShown(int item) const
+{
+    wxCHECK_MSG( IsValid(item), false,
+                 wxT("invalid item in wxRadioBox::Enable()") );
+
+    // don't use IsWindowVisible() here because it would return false if the
+    // radiobox itself is hidden while we want to only return false if this
+    // button specifically is hidden
+    return (::GetWindowLong((*m_radioButtons)[item],
+                            GWL_STYLE) & WS_VISIBLE) != 0;
+}
+
 WX_FORWARD_STD_METHODS_TO_SUBWINDOWS(wxRadioBox, wxStaticBox, m_radioButtons)
 
 // ----------------------------------------------------------------------------