X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a340b80d8a692f5308d26c1c1b95fd689a1d7eb3..1ebd017e14fe820f790487702bf493fb0e772429:/include/wx/odcombo.h?ds=sidebyside diff --git a/include/wx/odcombo.h b/include/wx/odcombo.h index 33d7025e55..0b578c6580 100644 --- a/include/wx/odcombo.h +++ b/include/wx/odcombo.h @@ -14,7 +14,7 @@ #include "wx/defs.h" -#if wxUSE_OWNERDRAWNCOMBOBOX +#if wxUSE_ODCOMBOBOX #include "wx/combo.h" #include "wx/ctrlsub.h" @@ -37,13 +37,13 @@ enum // -// Callback flags +// Callback flags (see wxOwnerDrawnComboBox::OnDrawItem) // enum { // when set, we are painting the selected item in control, // not in the popup - wxCC_PAINTING_CONTROL = 0x0001 + wxODCB_PAINTING_CONTROL = 0x0001 }; @@ -52,23 +52,25 @@ enum // // Notes: // wxOwnerDrawnComboBox uses this as its popup. However, it always derives -// from native wxComboControl. If you need to use this popup with +// from native wxComboCtrl. If you need to use this popup with // wxGenericComboControl, then remember that vast majority of item manipulation // functionality is implemented in the wxVListBoxComboPopup class itself. // // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxVListBoxComboPopup : public wxVListBox, public wxComboPopup +class WXDLLIMPEXP_ADV wxVListBoxComboPopup : public wxVListBox, + public wxComboPopup { friend class wxOwnerDrawnComboBox; public: - // ctor and dtor - wxVListBoxComboPopup(wxComboControlBase* combo); + // init and dtor + wxVListBoxComboPopup() : wxVListBox(), wxComboPopup() { } virtual ~wxVListBoxComboPopup(); // required virtuals + virtual void Init(); virtual bool Create(wxWindow* parent); virtual wxWindow *GetControl() { return this; } virtual void SetStringValue( const wxString& value ); @@ -93,9 +95,11 @@ public: void SetString( int item, const wxString& str ); wxString GetString( int item ) const; unsigned int GetCount() const; - int FindString(const wxString& s) const; + int FindString(const wxString& s, bool bCase = false) const; + int GetSelection() const; - void Populate( int n, const wxString choices[] ); + //void Populate( int n, const wxString choices[] ); + void Populate( const wxArrayString& choices ); void ClearClientDatas(); // helpers @@ -109,14 +113,37 @@ protected: bool HandleKey( int keycode, bool saturate ); // sends combobox select event from the parent combo control - void SendComboBoxEvent(); + void SendComboBoxEvent( int selection ); + + // gets value, sends event and dismisses + void DismissWithEvent(); // Re-calculates width for given item void CheckWidth( int pos ); - // wxVListBox implementation + // Callbacks for drawing and measuring items. Override in a derived class for + // owner-drawnness. Font, background and text colour have been prepared according + // to selection, focus and such. + // + // item: item index to be drawn, may be wxNOT_FOUND when painting combo control itself + // and there is no valid selection + // flags: wxODCB_PAINTING_CONTROL is set if painting to combo control instead of list + // NOTE: If wxVListBoxComboPopup is used with wxComboCtrl class not derived from + // wxOwnerDrawnComboBox, this method must be overridden. + virtual void OnDrawItem( wxDC& dc, const wxRect& rect, int item, int flags ) const; + + // This is same as in wxVListBox + virtual wxCoord OnMeasureItem( size_t item ) const; + + // Return item width, or -1 for calculating from text extent (default) + virtual wxCoord OnMeasureItemWidth( size_t item ) const; + + // Draw item and combo control background. Flags are same as with OnDrawItem. + // NB: Can't use name OnDrawBackground because of virtual function hiding warnings. + virtual void OnDrawBg(wxDC& dc, const wxRect& rect, int item, int flags) const; + + // Additional wxVListBox implementation (no need to override in derived classes) virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const; - virtual wxCoord OnMeasureItem(size_t n) const; void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const; // filter mouse move events happening outside the list box @@ -130,8 +157,9 @@ protected: wxArrayPtrVoid m_clientDatas; wxArrayInt m_widths; // cached line widths - wxFont m_font; + wxFont m_useFont; + //wxString m_stringValue; // displayed text (may be different than m_strings[m_value]) int m_value; // selection int m_itemHover; // on which item the cursor is int m_widestWidth; // width of widest item thus far @@ -153,17 +181,18 @@ private: // ---------------------------------------------------------------------------- // wxOwnerDrawnComboBox: a generic wxComboBox that allows custom paint items // in addition to many other types of customization already allowed by -// the wxComboControl. +// the wxComboCtrl. // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxOwnerDrawnComboBox : public wxComboControl, public wxItemContainer +class WXDLLIMPEXP_ADV wxOwnerDrawnComboBox : public wxComboCtrl, + public wxItemContainer { - friend class wxComboPopupWindow; - friend class wxComboControlBase; + //friend class wxComboPopupWindow; + friend class wxVListBoxComboPopup; public: // ctors and such - wxOwnerDrawnComboBox() : wxComboControl() { Init(); } + wxOwnerDrawnComboBox() : wxComboCtrl() { Init(); } wxOwnerDrawnComboBox(wxWindow *parent, wxWindowID id, @@ -175,7 +204,7 @@ public: long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr) - : wxComboControl() + : wxComboCtrl() { Init(); @@ -198,17 +227,17 @@ public: const wxPoint& pos, const wxSize& size, const wxArrayString& choices, - long style = 0, + long style, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr); bool Create(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, - const wxString choices[] = (const wxString *) NULL, + const wxString& value, + const wxPoint& pos, + const wxSize& size, + int n, + const wxString choices[], long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr); @@ -225,21 +254,54 @@ public: virtual ~wxOwnerDrawnComboBox(); + // Prevent app from using wxComboPopup + void SetPopupControl(wxVListBoxComboPopup* popup) + { + DoSetPopupControl(popup); + } + // wxControlWithItems methods virtual void Clear(); virtual void Delete(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) const; + virtual int FindString(const wxString& s, bool bCase = false) const; virtual void Select(int n); virtual int GetSelection() const; - void SetSelection(int n) { Select(n); } + virtual void SetSelection(int n) { Select(n); } + + + // Prevent a method from being hidden + virtual void SetSelection(long from, long to) + { + wxComboCtrl::SetSelection(from,to); + } wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST protected: + // Callback for drawing. Font, background and text colour have been + // prepared according to selection, focus and such. + // item: item index to be drawn, may be wxNOT_FOUND when painting combo control itself + // and there is no valid selection + // flags: wxODCB_PAINTING_CONTROL is set if painting to combo control instead of list + virtual void OnDrawItem( wxDC& dc, const wxRect& rect, int item, int flags ) const; + + // Callback for item height, or -1 for default + virtual wxCoord OnMeasureItem( size_t item ) const; + + // Callback for item width, or -1 for default/undetermined + virtual wxCoord OnMeasureItemWidth( size_t item ) const; + + // Callback for background drawing. Flags are same as with + // OnDrawItem. + virtual void OnDrawBackground( wxDC& dc, const wxRect& rect, int item, int flags ) const; + + // NULL popup can be used to indicate default interface + virtual void DoSetPopupControl(wxComboPopup* popup); + // clears all allocated client datas void ClearClientDatas(); @@ -253,6 +315,11 @@ protected: // overload m_popupInterface member so we can access specific popup interface easier wxVListBoxComboPopup* m_popupInterface; + // temporary storage for the initial choices + //const wxString* m_baseChoices; + //int m_baseChoicesCount; + wxArrayString m_initChs; + private: void Init(); @@ -262,6 +329,7 @@ private: }; -#endif // wxUSE_OWNERDRAWNCOMBOBOX +#endif // wxUSE_ODCOMBOBOX + #endif // _WX_ODCOMBO_H_