- 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:
 
 
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
+
 \membersection{wxRadioBox::wxRadioBox}\label{wxradioboxctor}
 
 \func{}{wxRadioBox}{\void}
 \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
 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}}}
 \helpref{wxWindow::Enable}{wxwindowenable}
 
 
+
 \membersection{wxRadioBox::FindString}\label{wxradioboxfindstring}
 
 \constfunc{int}{FindString}{\param{const wxString\& }{string}}
 
 \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}
 
 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}}
 
 \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}
 
 Returns the number of buttons in the radiobox.
 
+
 \membersection{wxRadioBox::SetLabel}\label{wxradioboxsetlabel}
 
 \func{void}{SetLabel}{\param{const wxString\&}{ label}}
 \end{twocollist}}
 }
 
+
 \membersection{wxRadioBox::SetSelection}\label{wxradioboxsetselection}
 
 \func{void}{SetSelection}{\param{int}{ n}}
 
 \docparam{n}{The zero-based button position.}
 
+
 \membersection{wxRadioBox::SetStringSelection}\label{wxradioboxsetstringselection}
 
 \func{void}{SetStringSelection}{\param{const wxString\& }{string}}
 
 \docparam{string}{The label of the button to select.}
 
+
 \membersection{wxRadioBox::Show}\label{wxradioboxshow}
 
 \func{virtual bool}{Show}{\param{const bool}{ show = {\tt true}}}
 
     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(); }
 
 
 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;
     // return the item above/below/to the left/right of the given one
     int GetNextItem(int item, wxDirection dir, long style) const;
 
+
     // deprecated functions
     // --------------------
 
 
     RadioPage_Selection,
     RadioPage_Label,
     RadioPage_LabelBtn,
-    RadioPage_Enable2nd,
-    RadioPage_Show2nd,
+    RadioPage_EnableItem,
+    RadioPage_ShowItem,
     RadioPage_Radio
 };
 
 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
 // ----------------------------------------------------------------------------
     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();
 
     // 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
 
     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()
 
     // 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 =
                                             &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);
     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);
 }
 
     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);
 }
 
 // ----------------------------------------------------------------------------
     }
 }
 
+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;
     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
 
 
     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
 
     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)
 
 // ----------------------------------------------------------------------------