X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0b9ab0bd824b6b9c93849928d67de1ec71e7c167..5d8f5f875eaf8b32dee93acec5664b4fc9c93ff7:/include/wx/list.h?ds=sidebyside diff --git a/include/wx/list.h b/include/wx/list.h index 00d6126db2..42fd54b6ad 100644 --- a/include/wx/list.h +++ b/include/wx/list.h @@ -6,7 +6,7 @@ // Created: 29/01/98 // RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// /* @@ -25,7 +25,7 @@ #ifndef _WX_LISTH__ #define _WX_LISTH__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "list.h" #endif @@ -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; @@ -150,10 +155,10 @@ public: void SetKeyInteger(long i) { m_key.integer = i; } #ifdef wxLIST_COMPATIBILITY - // compatibility methods - wxNode *Next() const { return (wxNode *)GetNext(); } - wxNode *Previous() const { return (wxNode *)GetPrevious(); } - wxObject *Data() const { return (wxObject *)GetData(); } + // compatibility methods, use Get* instead. + wxDEPRECATED( wxNode *Next() const ); + wxDEPRECATED( wxNode *Previous() const ); + wxDEPRECATED( wxObject *Data() const ); #endif // wxLIST_COMPATIBILITY protected: @@ -178,27 +183,36 @@ private: *m_previous; wxListBase *m_list; // list we belong to + + DECLARE_NO_COPY_CLASS(wxNodeBase) }; // ----------------------------------------------------------------------------- // a double-linked list class // ----------------------------------------------------------------------------- + +class wxList; + class WXDLLEXPORT wxListBase : public wxObject { -friend class wxNodeBase; // should be able to call DetachNode() +friend class WXDLLEXPORT wxNodeBase; // should be able to call DetachNode() friend class wxHashTableBase; // should be able to call untyped Find() private: // common part of all ctors 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 // count of items in the list size_t GetCount() const { return m_count; } + // return TRUE if this list is empty + bool IsEmpty() const { return m_count == 0; } + // operations // delete all nodes @@ -220,10 +234,14 @@ public: { wxASSERT( m_count==0 ); m_keyType = keyType; } #ifdef wxLIST_COMPATIBILITY - int Number() const { return GetCount(); } - wxNode *First() const { return (wxNode *)GetFirst(); } - wxNode *Last() const { return (wxNode *)GetLast(); } - wxNode *Nth(size_t index) const { return (wxNode *)Item(index); } + // compatibility methods from old wxList + wxDEPRECATED( int Number() const ); // use GetCount instead. + wxDEPRECATED( wxNode *First() const ); // use GetFirst + wxDEPRECATED( wxNode *Last() const ); // use GetLast + wxDEPRECATED( wxNode *Nth(size_t n) const ); // use Item + + // kludge for typesafe list migration in core classes. + wxDEPRECATED( operator wxList&() const ); #endif // wxLIST_COMPATIBILITY protected: @@ -262,11 +280,18 @@ protected: wxNodeBase *Item(size_t index) const; // get the list item's data - void *operator[](size_t index) const - { wxNodeBase *node = Item(index); return node ? node->GetData() : (wxNodeBase*)NULL; } + void *operator[](size_t n) const + { + wxNodeBase *node = Item(n); + + return node ? node->GetData() : (wxNodeBase *)NULL; + } // 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 +415,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 +465,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) \ { \ @@ -483,6 +508,9 @@ private: #ifdef wxLIST_COMPATIBILITY +// define this to make a lot of noise about use of the old wxList classes. +//#define wxWARN_COMPAT_LIST_USE + // ----------------------------------------------------------------------------- // wxList compatibility class: in fact, it's a list of wxObjects // ----------------------------------------------------------------------------- @@ -492,18 +520,25 @@ WX_DECLARE_LIST_2(wxObject, wxObjectList, wxObjectListNode, class WXDLLEXPORT); class WXDLLEXPORT wxList : public wxObjectList { public: - wxList(int key_type = wxKEY_NONE) : wxObjectList((wxKeyType)key_type) { } -#ifdef __DARWIN__ - ~wxList() { } +#ifdef wxWARN_COMPAT_LIST_USE + wxDEPRECATED( wxList(int key_type = wxKEY_NONE) ); +#else + wxList(int key_type = wxKEY_NONE); #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) }; // ----------------------------------------------------------------------------- @@ -517,8 +552,13 @@ class WXDLLEXPORT wxStringList : public wxStringListBase public: // ctors and such // default - wxStringList() { DeleteContents(TRUE); } +#ifdef wxWARN_COMPAT_LIST_USE + wxDEPRECATED( wxStringList() ); + wxDEPRECATED( wxStringList(const wxChar *first ...) ); +#else + wxStringList(); wxStringList(const wxChar *first ...); +#endif // copying the string list: the strings are copied, too (extremely // inefficient!) @@ -530,6 +570,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); @@ -541,6 +585,8 @@ public: private: void DoCopy(const wxStringList&); // common part of copy ctor and operator= + + DECLARE_DYNAMIC_CLASS(wxStringList) }; #endif // wxLIST_COMPATIBILITY