X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ed39ff57b30a70a2395e07887a70bc01e7a3b7ec..5bc97d1b81910a82e249f6227798b42089149f94:/include/wx/univ/listbox.h diff --git a/include/wx/univ/listbox.h b/include/wx/univ/listbox.h index 01ad0a276c..07bbd27a55 100644 --- a/include/wx/univ/listbox.h +++ b/include/wx/univ/listbox.h @@ -12,12 +12,13 @@ #ifndef _WX_UNIV_LISTBOX_H_ #define _WX_UNIV_LISTBOX_H_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "univlistbox.h" #endif #include "wx/scrolwin.h" // for wxScrollHelper #include "wx/dynarray.h" +#include "wx/arrstr.h" // ---------------------------------------------------------------------------- // the actions supported by this control @@ -85,11 +86,11 @@ public: virtual void Clear(); virtual void Delete(int n); - virtual int GetCount() const { return (int)m_strings.GetCount(); } - virtual wxString GetString(int n) const { return m_strings[n]; } + virtual int GetCount() const { return (int)m_strings->GetCount(); } + virtual wxString GetString(int n) const { return (*m_strings)[n]; } virtual void SetString(int n, const wxString& s); virtual int FindString(const wxString& s) const - { return m_strings.Index(s); } + { return IsSorted() ? m_stringsSorted->Index(s) : m_strings->Index(s); } virtual bool IsSelected(int n) const { return m_selections.Index(n) != wxNOT_FOUND; } @@ -169,6 +170,8 @@ public: // let wxColourScheme choose the right colours for us virtual bool IsContainerWindow() const { return TRUE; } + // idle processing + virtual void OnInternalIdle(); protected: // geometry virtual wxSize DoGetBestClientSize() const; @@ -183,7 +186,6 @@ protected: void Init(); // event handlers - void OnIdle(wxIdleEvent& event); void OnSize(wxSizeEvent& event); // common part of Clear() and DoSetItems(): clears everything @@ -222,8 +224,14 @@ protected: void UpdateItems(); // the array containing all items (it is sorted if the listbox has - // wxLB_SORT style) - wxArrayString m_strings; + // wxLB_SORT style). Note the evil trick: the pointers share the + // same location, hence we use m_strings when we don't care if the + // array is sorted or not, m_stringsSorted when we do + union + { + wxArrayString* m_strings; + wxSortedArrayString* m_stringsSorted; + }; // this array contains the indices of the selected items (for the single // selection listboxes only the first element of it is used and contains