X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/788722ac5ca55bd3c0d1f9bd2d598f90b3b02071..9918d4d5c1604d8bdd6cd04a3b163ae64eb9d447:/include/wx/list.h diff --git a/include/wx/list.h b/include/wx/list.h index 283c4586be..79a809ed59 100644 --- a/include/wx/list.h +++ b/include/wx/list.h @@ -64,7 +64,10 @@ enum wxKeyType // type of compare function for list sort operation (as in 'qsort'): it should // return a negative value, 0 or positive value if the first element is less // than, equal or greater than the second +extern "C" +{ typedef int (* LINKAGEMODE wxSortCompareFunction)(const void *elem1, const void *elem2); +} // typedef int (* LINKAGEMODE wxListIterateFunction)(void *current); @@ -89,14 +92,14 @@ class WXDLLEXPORT wxListKey { public: // implicit ctors - wxListKey() - { m_keyType = wxKEY_NONE; } - wxListKey(long i) - { m_keyType = wxKEY_INTEGER; m_key.integer = i; } - wxListKey(const wxChar *s) - { m_keyType = wxKEY_STRING; m_key.string = wxStrdup(s); } - wxListKey(const wxString& s) - { m_keyType = wxKEY_STRING; m_key.string = wxStrdup(s.c_str()); } + wxListKey() : m_keyType(wxKEY_NONE) + { } + wxListKey(long i) : m_keyType(wxKEY_INTEGER) + { m_key.integer = i; } + wxListKey(const wxChar *s) : m_keyType(wxKEY_STRING) + { m_key.string = wxStrdup(s); } + wxListKey(const wxString& s) : m_keyType(wxKEY_STRING) + { m_key.string = wxStrdup(s.c_str()); } // accessors wxKeyType GetKeyType() const { return m_keyType; } @@ -128,6 +131,8 @@ private: WXDLLEXPORT_DATA(extern wxListKey) wxDefaultListKey; +class WXDLLEXPORT wxListBase; + class WXDLLEXPORT wxNodeBase { friend class wxListBase; @@ -178,11 +183,14 @@ private: *m_previous; wxListBase *m_list; // list we belong to + + DECLARE_NO_COPY_CLASS(wxNodeBase) }; // ----------------------------------------------------------------------------- // a double-linked list class // ----------------------------------------------------------------------------- + class WXDLLEXPORT wxListBase : public wxObject { friend class wxNodeBase; // should be able to call DetachNode() @@ -192,7 +200,8 @@ private: void Init(wxKeyType keyType = wxKEY_NONE); // Must be declared before it's used (for VC++ 1.5) public: // default ctor & dtor - wxListBase(wxKeyType keyType = wxKEY_NONE) { Init(keyType); } + wxListBase(wxKeyType keyType = wxKEY_NONE) + { Init(keyType); } virtual ~wxListBase(); // accessors @@ -249,7 +258,7 @@ public: protected: // copy ctor and assignment operator - wxListBase(const wxListBase& list) + wxListBase(const wxListBase& list) : wxObject() { Init(); DoCopy(list); } wxListBase& operator=(const wxListBase& list) { Clear(); DoCopy(list); return *this; } @@ -267,6 +276,9 @@ protected: // operations // append to end of list + wxNodeBase *Prepend(void *object) + { return (wxNodeBase *)wxListBase::Insert(object); } + // append to beginning of list wxNodeBase *Append(void *object); // insert a new item at the beginning of the list wxNodeBase *Insert(void *object) { return Insert( (wxNodeBase*)NULL, object); } @@ -390,7 +402,7 @@ private: : wxListBase(count, (void **)elements) { } \ \ name& operator=(const name& list) \ - { return (name&)wxListBase::operator=(list); } \ + { (void) wxListBase::operator=(list); return *this; } \ \ nodetype *GetFirst() const \ { return (nodetype *)wxListBase::GetFirst(); } \ @@ -440,7 +452,7 @@ private: { wxListBase::Sort((wxSortCompareFunction)func); } \ \ protected: \ - wxNodeBase *CreateNode(wxNodeBase *prev, wxNodeBase *next, \ + virtual wxNodeBase *CreateNode(wxNodeBase *prev, wxNodeBase *next, \ void *data, \ const wxListKey& key = wxDefaultListKey) \ { \ @@ -461,10 +473,18 @@ private: typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ WX_DECLARE_LIST_2(elementtype, listname, wx##listname##Node, class WXDLLEXPORT) +#define WX_DECLARE_USER_EXPORTED_LIST(elementtype, listname, usergoo) \ + typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ + WX_DECLARE_LIST_2(elementtype, listname, wx##listname##Node, class usergoo) + // this macro must be inserted in your program after // #include #define WX_DEFINE_LIST(name) "don't forget to include listimpl.cpp!" +#define WX_DEFINE_EXPORTED_LIST(name) WX_DEFINE_LIST(name) +#define WX_DEFINE_USER_EXPORTED_LIST(name) WX_DEFINE_LIST(name) + + // ============================================================================= // now we can define classes 100% compatible with the old ones // ============================================================================= @@ -485,17 +505,19 @@ class WXDLLEXPORT wxList : public wxObjectList { public: wxList(int key_type = wxKEY_NONE) : wxObjectList((wxKeyType)key_type) { } -#ifdef __WXMAC_X__ - ~wxList() {} // Added min for Mac X -#endif + // this destructor is required for Darwin + ~wxList() { } wxList& operator=(const wxList& list) - { return (wxList&)wxListBase::operator=(list); } + { (void) wxListBase::operator=(list); return *this; } // compatibility methods void Sort(wxSortCompareFunction compfunc) { wxListBase::Sort(compfunc); } wxNode *Member(wxObject *object) const { return (wxNode *)Find(object); } + +private: + DECLARE_DYNAMIC_CLASS(wxList) }; // ----------------------------------------------------------------------------- @@ -514,7 +536,7 @@ public: // copying the string list: the strings are copied, too (extremely // inefficient!) - wxStringList(const wxStringList& other) { DeleteContents(TRUE); DoCopy(other); } + wxStringList(const wxStringList& other) : wxStringListBase() { DeleteContents(TRUE); DoCopy(other); } wxStringList& operator=(const wxStringList& other) { Clear(); DoCopy(other); return *this; } @@ -522,6 +544,10 @@ public: // makes a copy of the string wxNode *Add(const wxChar *s) { return (wxNode *)wxStringListBase::Append(copystring(s)); } + + // Append to beginning of list + wxNode *Prepend(const wxChar *s) + { return (wxNode *)wxStringListBase::Insert(copystring(s)); } bool Delete(const wxChar *s); @@ -533,6 +559,8 @@ public: private: void DoCopy(const wxStringList&); // common part of copy ctor and operator= + + DECLARE_DYNAMIC_CLASS(wxStringList) }; #endif // wxLIST_COMPATIBILITY