From 8ba7c77150d74a5385f2385e5448ca491263179f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 13 Feb 2005 19:01:17 +0000 Subject: [PATCH] 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 --- include/wx/ctrlsub.h | 68 ++++++++++++++++++++++++----------------- include/wx/radiobox.h | 51 +++---------------------------- src/common/ctrlsub.cpp | 30 ++++++++++++------ src/common/radiocmn.cpp | 12 ++++++++ 4 files changed, 78 insertions(+), 83 deletions(-) diff --git a/include/wx/ctrlsub.h b/include/wx/ctrlsub.h index bf708afc7c..1736c324e6 100644 --- a/include/wx/ctrlsub.h +++ b/include/wx/ctrlsub.h @@ -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 // ---- diff --git a/include/wx/radiobox.h b/include/wx/radiobox.h index 3cf0635cfe..3a366c9943 100644 --- a/include/wx/radiobox.h +++ b/include/wx/radiobox.h @@ -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 // -------------------- diff --git a/src/common/ctrlsub.cpp b/src/common/ctrlsub.cpp index 4d0a062267..36bf79cec9 100644 --- a/src/common/ctrlsub.cpp +++ b/src/common/ctrlsub.cpp @@ -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 } // ---------------------------------------------------------------------------- diff --git a/src/common/radiocmn.cpp b/src/common/radiocmn.cpp index bf88463af5..47f15e5b2c 100644 --- a/src/common/radiocmn.cpp +++ b/src/common/radiocmn.cpp @@ -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(), -- 2.45.2