// Modified by:
// Created: 26.07.99
// RCS-ID: $Id$
-// Copyright: (c) wxWindows team
+// Copyright: (c) wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
- #pragma interface "choiccmn.h"
-#endif
+#include "wx/defs.h"
+
+#if wxUSE_CHOICE
-#include "wx/control.h" // the base class
+#include "wx/ctrlsub.h" // the base class
// ----------------------------------------------------------------------------
// global data
// ----------------------------------------------------------------------------
-WXDLLEXPORT_DATA(extern const wxChar*) wxChoiceNameStr;
+extern WXDLLIMPEXP_DATA_CORE(const char) wxChoiceNameStr[];
// ----------------------------------------------------------------------------
// wxChoice allows to select one of a non-modifiable list of strings
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxChoiceBase : public wxControl
+class WXDLLIMPEXP_CORE wxChoiceBase : public wxControlWithItems
{
public:
- // ctor
- wxChoiceBase() { m_clientDataItemsType = ClientData_None; }
-
- // add a new item to the list
- // no client data
- void Append(const wxString& item) { DoAppend(item); }
- // with client data which belongs to the caller
- void Append(const wxString &item, void* clientData)
- { DoAppend(item); SetClientData(GetCount() - 1, clientData); }
- // with client data which will be deleted by the control
- void Append(const wxString &item, wxClientData* clientData)
- { DoAppend(item); SetClientObject(GetCount() - 1, clientData); }
-
- // delete items from the list
- // one item
- virtual void Delete(int n) = 0;
- // all of them
- virtual void Clear() = 0;
-
- // selection (at most one item may be selected in wxChoice)
- // get the index of currently selected item or -1
- virtual int GetSelection() const = 0;
- // get the text of the currently selected item or empty string
- virtual wxString GetStringSelection() const;
-
- // set selectionto current item
- virtual void SetSelection(int n) = 0;
- // set selection to the current item, returns TRUE if ok
- virtual bool SetStringSelection(const wxString& sel);
-
- // accessors to the list of strings
- // get the number of items in the list of strings
- virtual int GetCount() const = 0;
-
- // find string in the list, return wxNOT_FOUND if not found
- virtual int FindString(const wxString& s) const = 0;
- // get the string with the specified index
- virtual wxString GetString(int n) const = 0;
-
- // set/get the number of columns in the control (as they're not supporte on
+ wxChoiceBase() { }
+ virtual ~wxChoiceBase();
+
+ // all generic methods are in wxControlWithItems
+
+ // get the current selection: this can only be different from the normal
+ // selection if the popup items list is currently opened and the user
+ // selected some item in it but didn't close the list yet; otherwise (and
+ // currently always on platforms other than MSW) this is the same as
+ // GetSelection()
+ virtual int GetCurrentSelection() const { return GetSelection(); }
+
+ // set/get the number of columns in the control (as they're not supported on
// most platforms, they do nothing by default)
virtual void SetColumns(int WXUNUSED(n) = 1 ) { }
virtual int GetColumns() const { return 1 ; }
- // client data
- // untyped (isn't deleted by the control)
- void SetClientData( int n, void* clientData );
- void* GetClientData( int n ) const;
- // typed (is owned and deleted by the control)
- void SetClientObject( int n, wxClientData* clientData );
- wxClientData* GetClientObject( int n ) const;
+ // emulate selecting the item event.GetInt()
+ void Command(wxCommandEvent& event);
- // emulate selecting the item event.GetInt() from the control
- virtual void Command(wxCommandEvent &event);
+ // override wxItemContainer::IsSorted
+ virtual bool IsSorted() const { return HasFlag(wxCB_SORT); }
- // deprecated functions, heer for backwards compatibility only
- int Number() const { return GetCount(); }
+protected:
+ // The generic implementation doesn't determine the height correctly and
+ // doesn't account for the width of the arrow but does take into account
+ // the string widths, so the derived classes should override it and set the
+ // height and add the arrow width to the size returned by this version.
+ virtual wxSize DoGetBestSize() const;
private:
- // pure virtuals to implement in the derived classes
- virtual void DoAppend(const wxString& item) = 0;
-
- virtual void DoSetClientData( int n, void* clientData ) = 0;
- virtual void* DoGetClientData( int n ) const = 0;
- virtual void DoSetClientObject( int n, wxClientData* clientData ) = 0;
- virtual wxClientData* DoGetClientObject( int n ) const = 0;
-
- // the type of the client data for the items
- wxClientDataType m_clientDataItemsType;
+ wxDECLARE_NO_COPY_CLASS(wxChoiceBase);
};
// ----------------------------------------------------------------------------
// include the platform-dependent class definition
// ----------------------------------------------------------------------------
-#if defined(__WXMSW__)
+#if defined(__WXUNIVERSAL__)
+ #include "wx/univ/choice.h"
+#elif defined(__SMARTPHONE__) && defined(__WXWINCE__)
+ #include "wx/msw/wince/choicece.h"
+#elif defined(__WXMSW__)
#include "wx/msw/choice.h"
#elif defined(__WXMOTIF__)
#include "wx/motif/choice.h"
-#elif defined(__WXGTK__)
+#elif defined(__WXGTK20__)
#include "wx/gtk/choice.h"
-#elif defined(__WXQT__)
- #include "wx/qt/choice.h"
+#elif defined(__WXGTK__)
+ #include "wx/gtk1/choice.h"
#elif defined(__WXMAC__)
- #include "wx/mac/choice.h"
+ #include "wx/osx/choice.h"
+#elif defined(__WXCOCOA__)
+ #include "wx/cocoa/choice.h"
#elif defined(__WXPM__)
#include "wx/os2/choice.h"
-#elif defined(__WXSTUBS__)
- #include "wx/stubs/choice.h"
#endif
-#endif
- // _WX_CHOICE_H_BASE_
+#endif // wxUSE_CHOICE
+
+#endif // _WX_CHOICE_H_BASE_