X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6d0ce565ff6a0db2e7c6e3240ef4cf6fe7950a35..ca77701441e39245dcbfce903049e76f166979e5:/include/wx/univ/combobox.h diff --git a/include/wx/univ/combobox.h b/include/wx/univ/combobox.h index f76985d6a6..ac63fd63c3 100644 --- a/include/wx/univ/combobox.h +++ b/include/wx/univ/combobox.h @@ -15,23 +15,27 @@ #include "wx/combo.h" -class WXDLLEXPORT wxListBox; +class WXDLLIMPEXP_FWD_CORE wxListBox; // ---------------------------------------------------------------------------- // NB: some actions supported by this control are in wx/generic/combo.h // ---------------------------------------------------------------------------- // choose the next/prev/specified (by numArg) item -#define wxACTION_COMBOBOX_SELECT_NEXT _T("next") -#define wxACTION_COMBOBOX_SELECT_PREV _T("prev") -#define wxACTION_COMBOBOX_SELECT _T("select") +#define wxACTION_COMBOBOX_SELECT_NEXT wxT("next") +#define wxACTION_COMBOBOX_SELECT_PREV wxT("prev") +#define wxACTION_COMBOBOX_SELECT wxT("select") // ---------------------------------------------------------------------------- // wxComboBox: a combination of text control and a listbox // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxComboBox : public wxComboControl, public wxComboBoxBase +// NB: Normally we'd like wxComboBox to inherit from wxComboBoxBase, but here +// we can't really do that since both wxComboBoxBase and wxComboCtrl inherit +// from wxTextCtrl. +class WXDLLIMPEXP_CORE wxComboBox : + public wxWindowWithItems { public: // ctors and such @@ -91,8 +95,9 @@ public: // implement the combobox interface // wxTextCtrl methods - virtual wxString GetValue() const; + virtual wxString GetValue() const { return DoGetValue(); } virtual void SetValue(const wxString& value); + virtual void WriteText(const wxString& value); virtual void Copy(); virtual void Cut(); virtual void Paste(); @@ -103,6 +108,7 @@ public: virtual void Replace(long from, long to, const wxString& value); virtual void Remove(long from, long to); virtual void SetSelection(long from, long to); + virtual void GetSelection(long *from, long *to) const; virtual void SetEditable(bool editable); virtual bool IsEditable() const; @@ -116,33 +122,57 @@ public: virtual bool CanUndo() const; virtual bool CanRedo() const; + // override these methods to disambiguate between two base classes versions + virtual void Clear() + { + wxComboCtrl::Clear(); + wxItemContainer::Clear(); + } + + // See wxComboBoxBase discussion of IsEmpty(). + bool IsListEmpty() const { return wxItemContainer::IsEmpty(); } + bool IsTextEmpty() const { return wxTextEntry::IsEmpty(); } + // wxControlWithItems methods - virtual void Clear(); - virtual void Delete(unsigned int n); + virtual void DoClear(); + virtual void DoDeleteOneItem(unsigned int n); virtual unsigned int GetCount() const; virtual wxString GetString(unsigned int n) const; virtual void SetString(unsigned int n, const wxString& s); virtual int FindString(const wxString& s, bool bCase = false) const; virtual void SetSelection(int n); virtual int GetSelection() const; - - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST + virtual wxString GetStringSelection() const; // we have our own input handler and our own actions - // (but wxComboControl already handled Popup/Dismiss) + // (but wxComboCtrl already handled Popup/Dismiss) /* virtual bool PerformAction(const wxControlAction& action, long numArg = 0l, const wxString& strArg = wxEmptyString); */ + static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); + virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) + { + return GetStdInputHandler(handlerDef); + } + + // we delegate our client data handling to wxListBox which we use for the + // items, so override this and other methods dealing with the client data + virtual wxClientDataType GetClientDataType() const; + virtual void SetClientDataType(wxClientDataType clientDataItemsType); + protected: - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); + virtual wxString DoGetValue() const; + + virtual int DoInsertItems(const wxArrayStringsAdapter& items, + unsigned int pos, + void **clientData, wxClientDataType type); + virtual void DoSetItemClientData(unsigned int n, void* clientData); virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; + // common part of all ctors void Init(); @@ -151,6 +181,9 @@ protected: wxListBox *GetLBox() const { return m_lbox; } private: + // implement wxTextEntry pure virtual method + virtual wxWindow *GetEditableWindow() { return this; } + // the popup listbox wxListBox *m_lbox; @@ -158,20 +191,4 @@ private: DECLARE_DYNAMIC_CLASS(wxComboBox) }; - -// ---------------------------------------------------------------------------- -// wxStdComboBoxInputHandler: allows the user to open/close the combo from kbd -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStdComboBoxInputHandler : public wxStdInputHandler -{ -public: - wxStdComboBoxInputHandler(wxInputHandler *inphand); - - virtual bool HandleKey(wxInputConsumer *consumer, - const wxKeyEvent& event, - bool pressed); -}; - - #endif // _WX_UNIV_COMBOBOX_H_