don't duplicate wxItemContainer methods in wxRadioBoxBase, instead extract the common intersection to a new wxItemContainerImmutable class and derive wxRadioBoxBase from it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32008 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2005-02-13 19:01:17 +00:00
parent e9923becbe
commit 8ba7c77150
4 changed files with 78 additions and 83 deletions

View File

@ -24,11 +24,50 @@
// wxItemContainer defines an interface which is implemented by all controls // wxItemContainer defines an interface which is implemented by all controls
// which have string subitems each of which may be selected. // 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 // Examples: wxListBox, wxCheckListBox, wxChoice and wxComboBox (which
// implements an extended interface deriving from this one) // 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: public:
wxItemContainer() { m_clientDataItemsType = wxClientData_None; } wxItemContainer() { m_clientDataItemsType = wxClientData_None; }
@ -62,33 +101,6 @@ public:
virtual void Clear() = 0; virtual void Clear() = 0;
virtual void Delete(int n) = 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 // misc
// ---- // ----

View File

@ -18,7 +18,7 @@
#if wxUSE_RADIOBOX #if wxUSE_RADIOBOX
#include "wx/control.h" #include "wx/ctrlsub.h"
extern WXDLLEXPORT_DATA(const wxChar*) wxRadioBoxNameStr; extern WXDLLEXPORT_DATA(const wxChar*) wxRadioBoxNameStr;
@ -28,53 +28,9 @@ extern WXDLLEXPORT_DATA(const wxChar*) wxRadioBoxNameStr;
// example, it is a wxStaticBox in wxUniv and wxMSW but not in other ports // example, it is a wxStaticBox in wxUniv and wxMSW but not in other ports
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
class WXDLLEXPORT wxRadioBoxBase class WXDLLEXPORT wxRadioBoxBase : public wxItemContainerImmutable
{ {
public: 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 // change the individual radio button state
virtual void Enable(int n, bool enable = true) = 0; virtual void Enable(int n, bool enable = true) = 0;
virtual void Show(int n, bool show = true) = 0; virtual void Show(int n, bool show = true) = 0;
@ -87,6 +43,9 @@ public:
int GetNextItem(int item, wxDirection dir, long style) const; int GetNextItem(int item, wxDirection dir, long style) const;
// implement some of wxItemContainerImmutable functions
virtual int FindString(const wxString& s) const;
// deprecated functions // deprecated functions
// -------------------- // --------------------

View File

@ -36,10 +36,10 @@
#endif #endif
// ============================================================================ // ============================================================================
// implementation // wxItemContainerImmutable implementation
// ============================================================================ // ============================================================================
wxItemContainer::~wxItemContainer() wxItemContainerImmutable::~wxItemContainerImmutable()
{ {
// this destructor is required for Darwin // this destructor is required for Darwin
} }
@ -48,7 +48,7 @@ wxItemContainer::~wxItemContainer()
// selection // selection
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxString wxItemContainer::GetStringSelection() const wxString wxItemContainerImmutable::GetStringSelection() const
{ {
wxString s; wxString s;
int sel = GetSelection(); int sel = GetSelection();
@ -58,7 +58,7 @@ wxString wxItemContainer::GetStringSelection() const
return s; return s;
} }
bool wxItemContainer::SetStringSelection(const wxString& s) bool wxItemContainerImmutable::SetStringSelection(const wxString& s)
{ {
const int sel = FindString(s); const int sel = FindString(s);
if ( sel == wxNOT_FOUND ) if ( sel == wxNOT_FOUND )
@ -69,13 +69,25 @@ bool wxItemContainer::SetStringSelection(const wxString& s)
return true; return true;
} }
wxArrayString wxItemContainer::GetStrings() const wxArrayString wxItemContainerImmutable::GetStrings() const
{ {
wxArrayString result ; wxArrayString result;
size_t count = GetCount() ;
for ( size_t n = 0 ; n < count ; n++ ) const size_t count = GetCount();
result.Alloc(count);
for ( size_t n = 0; n < count; n++ )
result.Add(GetString(n)); result.Add(GetString(n));
return result ;
return result;
}
// ============================================================================
// wxItemContainer implementation
// ============================================================================
wxItemContainer::~wxItemContainer()
{
// this destructor is required for Darwin
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -38,6 +38,18 @@
// implementation // 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 wxRadioBoxBase::GetNextItem(int item, wxDirection dir, long style) const
{ {
int count = GetCount(), int count = GetCount(),