// wxItemContainer defines an interface which is implemented by all controls
// which have string subitems each of which may be selected.
//
+// It is decomposed in wxItemContainerImmutable which omits all methods
+// adding/removing items and is used by wxRadioBox and wxItemContainer itself.
+//
// Examples: wxListBox, wxCheckListBox, wxChoice and wxComboBox (which
// implements an extended interface deriving from this one)
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxItemContainer
+class WXDLLEXPORT wxItemContainerImmutable
+{
+public:
+ wxItemContainerImmutable() { }
+ virtual ~wxItemContainerImmutable();
+
+ // accessing strings
+ // -----------------
+
+ virtual int GetCount() const = 0;
+ bool IsEmpty() const { return GetCount() == 0; }
+
+ virtual wxString GetString(int n) const = 0;
+ wxArrayString GetStrings() const;
+ virtual void SetString(int n, const wxString& s) = 0;
+ virtual int FindString(const wxString& s) const = 0;
+
+
+ // selection
+ // ---------
+
+ virtual void SetSelection(int n) = 0;
+ virtual int GetSelection() const = 0;
+
+ // set selection to the specified string, return false if not found
+ bool SetStringSelection(const wxString& s);
+
+ // return the selected string or empty string if none
+ wxString GetStringSelection() const;
+
+ // this is the same as SetSelection( for single-selection controls but
+ // reads better for multi-selection ones
+ void Select(int n) { SetSelection(n); }
+
+};
+
+class WXDLLEXPORT wxItemContainer : public wxItemContainerImmutable
{
public:
wxItemContainer() { m_clientDataItemsType = wxClientData_None; }
virtual void Clear() = 0;
virtual void Delete(int n) = 0;
- // accessing strings
- // -----------------
-
- virtual int GetCount() const = 0;
- bool IsEmpty() const { return GetCount() == 0; }
-
- virtual wxString GetString(int n) const = 0;
- wxArrayString GetStrings() const;
- virtual void SetString(int n, const wxString& s) = 0;
- virtual int FindString(const wxString& s) const = 0;
-
- // selection
- // ---------
-
- virtual void SetSelection(int n) = 0;
- virtual int GetSelection() const = 0;
-
- // set selection to the specified string, return false if not found
- bool SetStringSelection(const wxString& s);
-
- // return the selected string or empty string if none
- wxString GetStringSelection() const;
-
- // this is the same as SetSelection( for single-selection controls but
- // reads better for multi-selection ones
- void Select(int n) { SetSelection(n); }
-
// misc
// ----
#if wxUSE_RADIOBOX
-#include "wx/control.h"
+#include "wx/ctrlsub.h"
extern WXDLLEXPORT_DATA(const wxChar*) wxRadioBoxNameStr;
// example, it is a wxStaticBox in wxUniv and wxMSW but not in other ports
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxRadioBoxBase
+class WXDLLEXPORT wxRadioBoxBase : public wxItemContainerImmutable
{
public:
- // selection
- virtual void SetSelection(int n) = 0;
- virtual int GetSelection() const = 0;
-
- virtual wxString GetStringSelection() const
- {
- wxString s;
- int sel = GetSelection();
- if ( sel != wxNOT_FOUND )
- s = GetString(sel);
-
- return s;
- }
-
- virtual bool SetStringSelection(const wxString& s)
- {
- int sel = FindString(s);
- if ( sel != wxNOT_FOUND )
- {
- SetSelection(sel);
-
- return true;
- }
-
- return false;
- }
-
- // string access
- virtual int GetCount() const = 0;
- virtual int FindString(const wxString& s) const
- {
- int count = GetCount();
- for ( int n = 0; n < count; n++ )
- {
- if ( GetString(n) == s )
- return n;
- }
-
- return wxNOT_FOUND;
- }
-
- virtual wxString GetString(int n) const = 0;
- virtual void SetString(int n, const wxString& label) = 0;
-
// change the individual radio button state
virtual void Enable(int n, bool enable = true) = 0;
virtual void Show(int n, bool show = true) = 0;
int GetNextItem(int item, wxDirection dir, long style) const;
+ // implement some of wxItemContainerImmutable functions
+ virtual int FindString(const wxString& s) const;
+
// deprecated functions
// --------------------
#endif
// ============================================================================
-// implementation
+// wxItemContainerImmutable implementation
// ============================================================================
-wxItemContainer::~wxItemContainer()
+wxItemContainerImmutable::~wxItemContainerImmutable()
{
// this destructor is required for Darwin
}
// selection
// ----------------------------------------------------------------------------
-wxString wxItemContainer::GetStringSelection() const
+wxString wxItemContainerImmutable::GetStringSelection() const
{
wxString s;
int sel = GetSelection();
return s;
}
-bool wxItemContainer::SetStringSelection(const wxString& s)
+bool wxItemContainerImmutable::SetStringSelection(const wxString& s)
{
const int sel = FindString(s);
if ( sel == wxNOT_FOUND )
return true;
}
-wxArrayString wxItemContainer::GetStrings() const
+wxArrayString wxItemContainerImmutable::GetStrings() const
{
- wxArrayString result ;
- size_t count = GetCount() ;
- for ( size_t n = 0 ; n < count ; n++ )
+ wxArrayString result;
+
+ const size_t count = GetCount();
+ result.Alloc(count);
+ for ( size_t n = 0; n < count; n++ )
result.Add(GetString(n));
- return result ;
+
+ return result;
+}
+
+// ============================================================================
+// wxItemContainer implementation
+// ============================================================================
+
+wxItemContainer::~wxItemContainer()
+{
+ // this destructor is required for Darwin
}
// ----------------------------------------------------------------------------
// implementation
// ============================================================================
+int wxRadioBoxBase::FindString(const wxString& s) const
+{
+ int count = GetCount();
+ for ( int n = 0; n < count; n++ )
+ {
+ if ( GetString(n) == s )
+ return n;
+ }
+
+ return wxNOT_FOUND;
+}
+
int wxRadioBoxBase::GetNextItem(int item, wxDirection dir, long style) const
{
int count = GetCount(),