]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/list.h
Add wxHAS_BITMAPTOGGLEBUTTON and test for it in the unit test.
[wxWidgets.git] / interface / wx / list.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: list.h
e54c96f1 3// Purpose: interface of wxList<T>
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
9/**
6a93e794
FM
10 The wxList<T> class provides linked list functionality.
11
12 This class has been rewritten to be type safe and to provide the full API of
13 the STL std::list container and should be used like it.
14 The exception is that wxList<T> actually stores pointers and therefore its
15 iterators return pointers and not references to the actual objets in the list
16 (see example below) and @e value_type is defined as @e T*.
30767dfe 17 wxList<T> destroys an object after removing it only if wxList<T>::DeleteContents
6a93e794 18 has been called.
7c913512 19
5cb947fd 20 wxList<T> is not a real template and it requires that you declare and define
30767dfe 21 each wxList<T> class in your program. This is done with @e WX_DECLARE_LIST
6a93e794 22 and @e WX_DEFINE_LIST macros (see example). We hope that we'll be able to
30767dfe 23 provide a proper template class providing both the STL @c std::list and the old
6a93e794 24 wxList API in the future.
7c913512 25
30767dfe
FM
26 Please refer to the STL @c std::list documentation (see http://www.cppreference.com/wiki/stl/list/start)
27 for further information on how to use the class.
28 Below we documented both the supported STL and the legacy API
6a93e794
FM
29 that originated from the old wxList class and which can still be used alternatively
30 for the the same class.
7c913512 31
30767dfe
FM
32 Note that if you compile wxWidgets in STL mode (@c wxUSE_STL defined as 1)
33 then wxList<T> will actually derive from @c std::list and just add a legacy
23324ae1 34 compatibility layer for the old wxList class.
7c913512 35
73473b3e
RR
36 @code
37 // this part might be in a header or source (.cpp) file
38 class MyListElement
39 {
40 ... // whatever
41 };
42
43 // this macro declares and partly implements MyList class
44 WX_DECLARE_LIST(MyListElement, MyList);
45
46 ...
47
48 // the only requirement for the rest is to be AFTER the full declaration of
49 // MyListElement (for WX_DECLARE_LIST forward declaration is enough), but
50 // usually it will be found in the source file and not in the header
51
52 #include <wx/listimpl.cpp>
53 WX_DEFINE_LIST(MyList);
54
55
56 MyList list;
57 MyListElement element;
58 list.Append(&element); // ok
59 list.Append(17); // error: incorrect type
60
61 // let's iterate over the list in STL syntax
62 MyList::iterator iter;
63 for (iter = list.begin(); iter != list.end(); ++iter)
64 {
65 MyListElement *current = *iter;
66
67 ...process the current element...
68 }
69
70 // the same with the legacy API from the old wxList class
71 MyList::compatibility_iterator node = list.GetFirst();
72 while (node)
73 {
74 MyListElement *current = node->GetData();
75
76 ...process the current element...
320ab87c 77
73473b3e
RR
78 node = node->GetNext();
79 }
80 @endcode
81
6a93e794
FM
82 For compatibility with previous versions wxList and wxStringList classes are
83 still defined, but their usage is deprecated and they will disappear in the
84 future versions completely.
85 The use of the latter is especially discouraged as it is not only unsafe but
86 is also much less efficient than wxArrayString class.
73473b3e 87
30767dfe
FM
88 @tparam T
89 The type stored in the wxList nodes.
90
23324ae1 91 @library{wxbase}
3c99e2fd 92 @category{containers}
7c913512 93
30767dfe 94 @see wxArray<T>, wxVector<T>, wxNode<T>
23324ae1 95*/
30767dfe 96template<typename T>
7c913512 97class wxList<T>
23324ae1
FM
98{
99public:
23324ae1 100 /**
c6714d38 101 Default constructor.
23324ae1 102 */
73473b3e 103 wxList<T>();
320ab87c 104
c6714d38 105 /**
4050e98d 106 Constructor which initialized the list with an array of @a count elements.
c6714d38 107 */
73473b3e 108 wxList<T>(size_t count, T* elements[]);
23324ae1
FM
109
110 /**
111 Destroys the list, but does not delete the objects stored in the list
112 unless you called DeleteContents(@true ).
113 */
73473b3e 114 ~wxList<T>();
23324ae1
FM
115
116 /**
4cc4bfaf 117 Appends the pointer to @a object to the list.
23324ae1 118 */
5cb947fd 119 wxList<T>::compatibility_iterator Append(T* object);
23324ae1
FM
120
121 /**
320ab87c 122 Clears the list.
c6714d38 123 Deletes the actual objects if DeleteContents( @true ) was called previously.
23324ae1
FM
124 */
125 void Clear();
126
127 /**
4cc4bfaf 128 If @a destroy is @true, instructs the list to call @e delete
23324ae1
FM
129 on objects stored in the list whenever they are removed.
130 The default is @false.
131 */
132 void DeleteContents(bool destroy);
133
134 /**
c6714d38
RR
135 Deletes the given element refered to by @a iter from the list
136 if @a iter is a valid iterator. Returns @true if successful.
320ab87c 137
c6714d38 138 Deletes the actual object if DeleteContents( @true ) was called previously.
23324ae1
FM
139 */
140 bool DeleteNode(const compatibility_iterator& iter);
141
142 /**
4cc4bfaf 143 Finds the given @a object and removes it from the list, returning
320ab87c
FM
144 @true if successful.
145
c6714d38 146 Deletes @a object if DeleteContents( @true ) was called previously.
23324ae1 147 */
4cc4bfaf 148 bool DeleteObject(T* object);
23324ae1
FM
149
150 /**
c6714d38 151 Removes element refered to be @a iter.
320ab87c 152
c6714d38 153 Deletes the actualy object if DeleteContents( @true ) was called previously.
23324ae1
FM
154 */
155 void Erase(const compatibility_iterator& iter);
156
157 /**
4cc4bfaf 158 Returns the iterator refering to @a object or @NULL if none found.
23324ae1 159 */
5cb947fd 160 wxList<T>::compatibility_iterator Find(T* object) const;
23324ae1
FM
161
162 /**
163 Returns the number of elements in the list.
164 */
328f5751 165 size_t GetCount() const;
23324ae1
FM
166
167 /**
168 Returns the first iterator in the list (@NULL if the list is empty).
169 */
5cb947fd 170 wxList<T>::compatibility_iterator GetFirst() const;
23324ae1
FM
171
172 /**
173 Returns the last iterator in the list (@NULL if the list is empty).
174 */
5cb947fd 175 wxList<T>::compatibility_iterator GetLast() const;
23324ae1
FM
176
177 /**
4cc4bfaf
FM
178 Returns the index of @a obj within the list or @c wxNOT_FOUND if
179 @a obj is not found in the list.
23324ae1 180 */
328f5751 181 int IndexOf(T* obj) const;
23324ae1 182
23324ae1 183 /**
c6714d38 184 Inserts @a object at the beginning of the list.
23324ae1 185 */
5cb947fd 186 wxList<T>::compatibility_iterator Insert(T* object);
c6714d38
RR
187
188 /**
189 Inserts @a object at @a position.
190 */
5cb947fd 191 wxList<T>::compatibility_iterator Insert(size_t position,
4cc4bfaf 192 T* object);
c6714d38
RR
193
194 /**
195 Inserts @a object before the object refered to be @a iter.
196 */
5cb947fd 197 wxList<T>::compatibility_iterator Insert(compatibility_iterator iter,
4cc4bfaf 198 T* object);
23324ae1
FM
199
200 /**
201 Returns @true if the list is empty, @false otherwise.
202 */
328f5751 203 bool IsEmpty() const;
23324ae1
FM
204
205 /**
206 Returns the iterator refering to the object at the given
c6714d38 207 @a index in the list.
23324ae1 208 */
5cb947fd 209 wxList<T>::compatibility_iterator Item(size_t index) const;
23324ae1
FM
210
211 /**
0f08aa44
VZ
212 Check if the object is present in the list.
213
214 @see Find()
23324ae1 215 */
0f08aa44 216 bool Member(T* object) const;
23324ae1
FM
217
218 /**
6a93e794 219 @deprecated This function is deprecated, use Item() instead.
23324ae1 220 */
5cb947fd 221 wxList<T>::compatibility_iterator Nth(int n) const;
23324ae1
FM
222
223 /**
6a93e794 224 @deprecated This function is deprecated, use wxList::GetCount instead.
23324ae1
FM
225 Returns the number of elements in the list.
226 */
328f5751 227 int Number() const;
23324ae1
FM
228
229 /**
230 Allows the sorting of arbitrary lists by giving a function to compare
231 two list elements. We use the system @b qsort function for the actual
232 sorting process.
233 */
234 void Sort(wxSortCompareFunction compfunc);
235
23324ae1 236 /**
c6714d38 237 Clears the list and item from @a first to @a last from another list to it.
23324ae1
FM
238 */
239 void assign(const_iterator first, const const_iterator& last);
c6714d38
RR
240
241 /**
242 Clears the list and adds @a n items with value @a v to it.
243 */
78e37b46 244 void assign(size_type n, const_reference v = value_type());
23324ae1 245
23324ae1
FM
246 /**
247 Returns the last item of the list.
248 */
682f6de6 249 reference back();
d38e30d1
RR
250
251 /**
252 Returns the last item of the list as a const reference.
253 */
328f5751 254 const_reference back() const;
23324ae1 255
23324ae1 256 /**
d38e30d1 257 Returns an iterator pointing to the beginning of the list.
23324ae1 258 */
682f6de6 259 iterator begin();
d38e30d1
RR
260
261 /**
262 Returns a const iterator pointing to the beginning of the list.
263 */
328f5751 264 const_iterator begin() const;
23324ae1
FM
265
266 /**
267 Removes all items from the list.
268 */
269 void clear();
270
271 /**
272 Returns @e @true if the list is empty.
273 */
328f5751 274 bool empty() const;
23324ae1 275
23324ae1 276 /**
d38e30d1 277 Returns a const iterator pointing at the end of the list.
23324ae1 278 */
328f5751 279 const_iterator end() const;
23324ae1 280
23324ae1 281 /**
d38e30d1
RR
282 Returns a iterator pointing at the end of the list.
283 */
284 iterator end() const;
285
286 /**
287 Erases the given item
23324ae1
FM
288 */
289 iterator erase(const iterator& it);
d38e30d1
RR
290
291 /**
292 Erases the items from @e first to @e last.
293 */
7c913512
FM
294 iterator erase(const iterator& first,
295 const iterator& last);
23324ae1 296
23324ae1
FM
297 /**
298 Returns the first item in the list.
299 */
328f5751 300 reference front() const;
d38e30d1
RR
301
302 /**
303 Returns the first item in the list as a const reference.
304 */
328f5751 305 const_reference front() const;
23324ae1 306
23324ae1 307 /**
d38e30d1 308 Inserts an item at the head of the list
23324ae1
FM
309 */
310 iterator insert(const iterator& it);
d38e30d1
RR
311
312 /**
313 Inserts an item at the given position
314 */
7c913512 315 void insert(const iterator& it, size_type n);
d38e30d1
RR
316
317 /**
318 Inserts several items at the given position.
319 */
7c913512
FM
320 void insert(const iterator& it, const_iterator first,
321 const const_iterator& last);
23324ae1
FM
322
323 /**
324 Returns the largest possible size of the list.
325 */
328f5751 326 size_type max_size() const;
23324ae1
FM
327
328 /**
329 Removes the last item from the list.
330 */
331 void pop_back();
332
333 /**
334 Removes the first item from the list.
335 */
336 void pop_front();
337
338 /**
23324ae1
FM
339 Adds an item to end of the list.
340 */
682f6de6 341 void push_back(const_reference v = value_type());
23324ae1
FM
342
343 /**
23324ae1
FM
344 Adds an item to the front of the list.
345 */
682f6de6 346 void push_front(const_reference v = value_type());
23324ae1 347
23324ae1 348 /**
d38e30d1 349 Returns a reverse iterator pointing to the beginning of the
23324ae1
FM
350 reversed list.
351 */
682f6de6 352 reverse_iterator rbegin();
d38e30d1
RR
353
354 /**
355 Returns a const reverse iterator pointing to the beginning of the
356 reversed list.
357 */
328f5751 358 const_reverse_iterator rbegin() const;
23324ae1
FM
359
360 /**
361 Removes an item from the list.
362 */
363 void remove(const_reference v);
364
23324ae1 365 /**
6a93e794 366 Returns a reverse iterator pointing to the end of the reversed list.
23324ae1 367 */
682f6de6 368 reverse_iterator rend();
d38e30d1
RR
369
370 /**
6a93e794 371 Returns a const reverse iterator pointing to the end of the reversed list.
d38e30d1 372 */
328f5751 373 const_reverse_iterator rend() const;
23324ae1
FM
374
375 /**
6a93e794 376 Resizes the list.
e3d1fc26
FM
377
378 If the list is longer than @a n, then items are removed until the list
379 becomes long @a n.
380 If the list is shorter than @a n items with the value @a v are appended
381 to the list until the list becomes long @a n.
23324ae1 382 */
e3d1fc26 383 void resize(size_type n, value_type v = value_type());
23324ae1
FM
384
385 /**
386 Reverses the list.
387 */
388 void reverse();
389
390 /**
391 Returns the size of the list.
392 */
328f5751 393 size_type size() const;
23324ae1
FM
394};
395
396
e54c96f1 397
23324ae1 398/**
30767dfe
FM
399 wxNode<T> is the node structure used in linked lists (see wxList) and derived
400 classes. You should never use wxNode<T> class directly, however, because it
6a93e794 401 works with untyped (@c void *) data and this is unsafe.
30767dfe 402 Use wxNode<T>-derived classes which are automatically defined by WX_DECLARE_LIST
6a93e794
FM
403 and WX_DEFINE_LIST macros instead as described in wxList documentation
404 (see example there).
405
406 Also note that although there is a class called wxNode, it is defined for backwards
23324ae1 407 compatibility only and usage of this class is strongly deprecated.
7c913512 408
23324ae1 409 In the documentation below, the type @c T should be thought of as a
cdbcf4c2 410 "template" parameter: this is the type of data stored in the linked list or,
23324ae1
FM
411 in other words, the first argument of WX_DECLARE_LIST macro. Also, wxNode is
412 written as wxNodeT even though it isn't really a template class -- but it
413 helps to think of it as if it were.
7c913512 414
30767dfe
FM
415 @tparam T
416 The type stored in the wxNode.
417
23324ae1 418 @library{wxbase}
6a93e794 419 @category{data}
7c913512 420
73473b3e 421 @see wxList<T>, wxHashTable
23324ae1 422*/
30767dfe 423template<typename T>
73473b3e 424class wxNode<T>
23324ae1
FM
425{
426public:
427 /**
428 Retrieves the client data pointer associated with the node.
429 */
328f5751 430 T* GetData() const;
23324ae1
FM
431
432 /**
433 Retrieves the next node or @NULL if this node is the last one.
434 */
5cb947fd 435 wxNode<T>* GetNext() const;
23324ae1
FM
436
437 /**
438 Retrieves the previous node or @NULL if this node is the first one in the list.
439 */
5cb947fd 440 wxNode<T>* GetPrevious();
23324ae1
FM
441
442 /**
443 Returns the zero-based index of this node within the list. The return value
444 will be @c wxNOT_FOUND if the node has not been added to a list yet.
445 */
446 int IndexOf();
447
448 /**
449 Sets the data associated with the node (usually the pointer will have been
450 set when the node was created).
451 */
4cc4bfaf 452 void SetData(T* data);
23324ae1 453};
e54c96f1 454