X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/40b26d752de12e3e9f03172049c441de1a5e0276..e2bc1d69812f8fc3f6ae24508a9d007ad5d00ede:/include/wx/odcombo.h diff --git a/include/wx/odcombo.h b/include/wx/odcombo.h index bb67677acf..c187957c31 100644 --- a/include/wx/odcombo.h +++ b/include/wx/odcombo.h @@ -19,6 +19,7 @@ #include "wx/combo.h" #include "wx/ctrlsub.h" #include "wx/vlbox.h" +#include "wx/timer.h" // @@ -110,7 +111,7 @@ public: protected: // Called by OnComboDoubleClick and OnComboKeyEvent - bool HandleKey( int keycode, bool saturate ); + bool HandleKey( int keycode, bool saturate, wxChar unicode = 0 ); // sends combobox select event from the parent combo control void SendComboBoxEvent( int selection ); @@ -118,8 +119,12 @@ protected: // gets value, sends event and dismisses void DismissWithEvent(); - // Re-calculates width for given item - void CheckWidth( int pos ); + // OnMeasureItemWidth will be called on next GetAdjustedSize. + void ItemWidthChanged(unsigned int item) + { + m_widths[item] = -1; + m_widthsDirty = true; + } // Callbacks for drawing and measuring items. Override in a derived class for // owner-drawnness. Font, background and text colour have been prepared according @@ -153,26 +158,57 @@ protected: void OnKey(wxKeyEvent& event); void OnLeftClick(wxMouseEvent& event); + // Return the widest item width (recalculating it if necessary) + int GetWidestItemWidth() { CalcWidths(); return m_widestWidth; } + + // Return the index of the widest item (recalculating it if necessary) + int GetWidestItem() { CalcWidths(); return m_widestItem; } + + // Stop partial completion (when some other event occurs) + void StopPartialCompletion(); + wxArrayString m_strings; wxArrayPtrVoid m_clientDatas; - wxArrayInt m_widths; // cached line widths 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 - int m_avgCharWidth; - int m_baseImageWidth; // how much per item drawn in addition to text int m_itemHeight; // default item height (calculate from font size // and used in the absence of callback) wxClientDataType m_clientDataItemsType; private: + // Cached item widths (in pixels). + wxArrayInt m_widths; + + // Width of currently widest item. + int m_widestWidth; + + // Index of currently widest item. + int m_widestItem; + + // Measure some items in next GetAdjustedSize? + bool m_widthsDirty; + + // Find widest item in next GetAdjustedSize? + bool m_findWidest; + // has the mouse been released on this control? - bool m_clicked; + bool m_clicked; + + // Recalculate widths if they are dirty + void CalcWidths(); + + // Partial completion string + wxString m_partialCompletionString; + +#if wxUSE_TIMER + // Partial completion timer + wxTimer m_partialCompletionTimer; +#endif // wxUSE_TIMER DECLARE_EVENT_TABLE() }; @@ -254,8 +290,11 @@ public: virtual ~wxOwnerDrawnComboBox(); - // NULL popup can be used to indicate default interface - virtual void SetPopupControl( wxComboPopup* popup ); + // Prevent app from using wxComboPopup + void SetPopupControl(wxVListBoxComboPopup* popup) + { + DoSetPopupControl(popup); + } // wxControlWithItems methods virtual void Clear(); @@ -275,6 +314,12 @@ public: wxComboCtrl::SetSelection(from,to); } + // Return the widest item width (recalculating it if necessary) + virtual int GetWidestItemWidth() { EnsurePopupControl(); return GetVListBoxComboPopup()->GetWidestItemWidth(); } + + // Return the index of the widest item (recalculating it if necessary) + virtual int GetWidestItem() { EnsurePopupControl(); return GetVListBoxComboPopup()->GetWidestItem(); } + wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST protected: @@ -296,9 +341,17 @@ protected: // 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(); + wxVListBoxComboPopup* GetVListBoxComboPopup() const + { + return (wxVListBoxComboPopup*) m_popupInterface; + } + virtual int DoAppend(const wxString& item); virtual int DoInsert(const wxString& item, unsigned int pos); virtual void DoSetItemClientData(unsigned int n, void* clientData); @@ -306,9 +359,6 @@ protected: virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - // 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;