// Modified by:
// Created: 22.10.99
// RCS-ID: $Id$
-// Copyright: (c) wxWindows team
+// Copyright: (c) wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#pragma interface "controlwithitems.h"
#endif
+#include "wx/defs.h"
+
#if wxUSE_CONTROLS
#include "wx/control.h" // base class
// 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); }
+
+
+protected:
+
+ // check that the index is valid
+ inline bool IsValid(int n) const { return n >= 0 && n < GetCount(); }
+};
+
+class WXDLLEXPORT wxItemContainer : public wxItemContainerImmutable
{
public:
wxItemContainer() { m_clientDataItemsType = wxClientData_None; }
// only for rtti needs (separate name)
void AppendString( const wxString& item)
- { Append( item ) ; }
+ { Append( item ); }
// append several items at once to the control
void Append(const wxArrayString& strings);
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 Select(int n) = 0;
- virtual int GetSelection() const = 0;
-
- wxString GetStringSelection() const;
-
// misc
// ----
#if WXWIN_COMPATIBILITY_2_2
// compatibility - these functions are deprecated, use the new ones
// instead
- int Number() const { return GetCount(); }
+ wxDEPRECATED( int Number() const );
#endif // WXWIN_COMPATIBILITY_2_2
protected:
// this
wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
+ // usually the controls like list/combo boxes have their own background
+ // colour
+ virtual bool ShouldInheritColours() const { return false; }
+
+protected:
+ // we can't compute our best size before the items are added to the control
+ // which is done after calling SetInitialBestSize() (it is called from the
+ // base class ctor and the items are added in the derived class ctor), so
+ // don't do anything at all here as our size will be changed later anyhow
+ //
+ // of course, all derived classes *must* call SetBestSize() from their
+ // ctors for this to work!
+ virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) { }
+
private:
DECLARE_NO_COPY_CLASS(wxControlWithItems)
};
+
+// ----------------------------------------------------------------------------
+// inline functions
+// ----------------------------------------------------------------------------
+
+#if WXWIN_COMPATIBILITY_2_2
+
+inline int wxItemContainer::Number() const
+{
+ return GetCount();
+}
+
+#endif // WXWIN_COMPATIBILITY_2_2
+
#endif // wxUSE_CONTROLS
#endif // _WX_CTRLSUB_H_BASE_