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
// 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; }
@ -62,33 +101,6 @@ public:
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
// ----

View File

@ -18,7 +18,7 @@
#if wxUSE_RADIOBOX
#include "wx/control.h"
#include "wx/ctrlsub.h"
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
// ----------------------------------------------------------------------------
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;
@ -87,6 +43,9 @@ public:
int GetNextItem(int item, wxDirection dir, long style) const;
// implement some of wxItemContainerImmutable functions
virtual int FindString(const wxString& s) const;
// deprecated functions
// --------------------

View File

@ -36,10 +36,10 @@
#endif
// ============================================================================
// implementation
// wxItemContainerImmutable implementation
// ============================================================================
wxItemContainer::~wxItemContainer()
wxItemContainerImmutable::~wxItemContainerImmutable()
{
// this destructor is required for Darwin
}
@ -48,7 +48,7 @@ wxItemContainer::~wxItemContainer()
// selection
// ----------------------------------------------------------------------------
wxString wxItemContainer::GetStringSelection() const
wxString wxItemContainerImmutable::GetStringSelection() const
{
wxString s;
int sel = GetSelection();
@ -58,7 +58,7 @@ wxString wxItemContainer::GetStringSelection() const
return s;
}
bool wxItemContainer::SetStringSelection(const wxString& s)
bool wxItemContainerImmutable::SetStringSelection(const wxString& s)
{
const int sel = FindString(s);
if ( sel == wxNOT_FOUND )
@ -69,13 +69,25 @@ bool wxItemContainer::SetStringSelection(const wxString& s)
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
}
// ----------------------------------------------------------------------------

View File

@ -38,6 +38,18 @@
// 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(),