]> git.saurik.com Git - wxWidgets.git/blame - interface/list.h
add handling of wxWrapSizer flags (part of ticket 9468)
[wxWidgets.git] / interface / 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$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
23324ae1 10 @wxheader{list.h}
7c913512 11
5cb947fd 12 The wxList<T> class provides linked list functionality. It has been rewritten
23324ae1 13 to be type safe and to provide the full API of the STL std::list container and
5cb947fd 14 should be used like it. The exception is that wxList<T> actually stores
23324ae1 15 pointers and therefore its iterators return pointers and not references
7c913512 16 to the actual objets in the list (see example below) and @e value_type
5cb947fd 17 is defined as @e T*. wxList<T> destroys an object after removing it only
23324ae1 18 if wxList::DeleteContents has been called.
7c913512 19
5cb947fd 20 wxList<T> is not a real template and it requires that you declare and define
23324ae1
FM
21 each wxListT class in your program. This is done with @e WX_DECLARE_LIST
22 and @e WX_DEFINE_LIST macros (see example). We hope that we'll be able
23 to provide a proper template class providing both the STL std::list
24 and the old wxList API in the future.
7c913512 25
23324ae1
FM
26 Please refer to the STL std::list documentation for further
27 information on how to use the class. Below we documented both
7c913512 28 the supported STL and the legacy API that originated from the
23324ae1
FM
29 old wxList class and which can still be used alternatively for
30 the the same class.
7c913512
FM
31
32 Note that if you compile wxWidgets in STL mode (wxUSE_STL defined as 1)
5cb947fd 33 then wxList<T> will actually derive from 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...
77
78 node = node->GetNext();
79 }
80 @endcode
81
82
23324ae1
FM
83 @library{wxbase}
84 @category{FIXME}
7c913512 85
73473b3e 86 @see wxArray<T>, wxVector<T>
23324ae1 87*/
7c913512 88class wxList<T>
23324ae1
FM
89{
90public:
91 //@{
92 /**
93 Constructors.
94 */
73473b3e
RR
95 wxList<T>();
96 wxList<T>(size_t count, T* elements[]);
23324ae1
FM
97 //@}
98
99 /**
100 Destroys the list, but does not delete the objects stored in the list
101 unless you called DeleteContents(@true ).
102 */
73473b3e 103 ~wxList<T>();
23324ae1
FM
104
105 /**
4cc4bfaf 106 Appends the pointer to @a object to the list.
23324ae1 107 */
5cb947fd 108 wxList<T>::compatibility_iterator Append(T* object);
23324ae1
FM
109
110 /**
111 Clears the list, but does not delete the objects stored in the list
112 unless you called DeleteContents(@true ).
113 */
114 void Clear();
115
116 /**
4cc4bfaf 117 If @a destroy is @true, instructs the list to call @e delete
23324ae1
FM
118 on objects stored in the list whenever they are removed.
119 The default is @false.
120 */
121 void DeleteContents(bool destroy);
122
123 /**
7c913512 124 Deletes the given element refered to by @c iter from the list,
23324ae1
FM
125 returning @true if successful.
126 */
127 bool DeleteNode(const compatibility_iterator& iter);
128
129 /**
4cc4bfaf 130 Finds the given @a object and removes it from the list, returning
23324ae1
FM
131 @true if successful. The application must delete the actual object
132 separately.
133 */
4cc4bfaf 134 bool DeleteObject(T* object);
23324ae1
FM
135
136 /**
137 Removes element refered to be @c iter.
138 */
139 void Erase(const compatibility_iterator& iter);
140
141 /**
4cc4bfaf 142 Returns the iterator refering to @a object or @NULL if none found.
23324ae1 143 */
5cb947fd 144 wxList<T>::compatibility_iterator Find(T* object) const;
23324ae1
FM
145
146 /**
147 Returns the number of elements in the list.
148 */
328f5751 149 size_t GetCount() const;
23324ae1
FM
150
151 /**
152 Returns the first iterator in the list (@NULL if the list is empty).
153 */
5cb947fd 154 wxList<T>::compatibility_iterator GetFirst() const;
23324ae1
FM
155
156 /**
157 Returns the last iterator in the list (@NULL if the list is empty).
158 */
5cb947fd 159 wxList<T>::compatibility_iterator GetLast() const;
23324ae1
FM
160
161 /**
4cc4bfaf
FM
162 Returns the index of @a obj within the list or @c wxNOT_FOUND if
163 @a obj is not found in the list.
23324ae1 164 */
328f5751 165 int IndexOf(T* obj) const;
23324ae1
FM
166
167 //@{
168 /**
169 Inserts the object before the object refered to be @e iter.
170 */
5cb947fd
RR
171 wxList<T>::compatibility_iterator Insert(T* object);
172 wxList<T>::compatibility_iterator Insert(size_t position,
4cc4bfaf 173 T* object);
5cb947fd 174 wxList<T>::compatibility_iterator Insert(compatibility_iterator iter,
4cc4bfaf 175 T* object);
23324ae1
FM
176 //@}
177
178 /**
179 Returns @true if the list is empty, @false otherwise.
180 */
328f5751 181 bool IsEmpty() const;
23324ae1
FM
182
183 /**
184 Returns the iterator refering to the object at the given
185 @c index in the list.
186 */
5cb947fd 187 wxList<T>::compatibility_iterator Item(size_t index) const;
23324ae1
FM
188
189 /**
1f1d2182 190 @note This function is deprecated, use wxList::Find instead.
23324ae1 191 */
5cb947fd 192 wxList<T>::compatibility_iterator Member(T* object) const;
23324ae1
FM
193
194 /**
1f1d2182 195 @note This function is deprecated, use @ref wxList::itemfunc Item instead.
23324ae1
FM
196 Returns the @e nth node in the list, indexing from zero (@NULL if the list is
197 empty
198 or the nth node could not be found).
199 */
5cb947fd 200 wxList<T>::compatibility_iterator Nth(int n) const;
23324ae1
FM
201
202 /**
1f1d2182 203 @note This function is deprecated, use wxList::GetCount instead.
23324ae1
FM
204 Returns the number of elements in the list.
205 */
328f5751 206 int Number() const;
23324ae1
FM
207
208 /**
209 Allows the sorting of arbitrary lists by giving a function to compare
210 two list elements. We use the system @b qsort function for the actual
211 sorting process.
212 */
213 void Sort(wxSortCompareFunction compfunc);
214
215 //@{
216 /**
217 )
218 */
219 void assign(const_iterator first, const const_iterator& last);
7c913512 220 void assign(size_type n);
23324ae1
FM
221 //@}
222
23324ae1
FM
223 /**
224 Returns the last item of the list.
225 */
328f5751 226 reference back() const;
d38e30d1
RR
227
228 /**
229 Returns the last item of the list as a const reference.
230 */
328f5751 231 const_reference back() const;
23324ae1 232
23324ae1 233 /**
d38e30d1 234 Returns an iterator pointing to the beginning of the list.
23324ae1 235 */
328f5751 236 iterator begin() const;
d38e30d1
RR
237
238 /**
239 Returns a const iterator pointing to the beginning of the list.
240 */
328f5751 241 const_iterator begin() const;
23324ae1
FM
242
243 /**
244 Removes all items from the list.
245 */
246 void clear();
247
248 /**
249 Returns @e @true if the list is empty.
250 */
328f5751 251 bool empty() const;
23324ae1 252
23324ae1 253 /**
d38e30d1 254 Returns a const iterator pointing at the end of the list.
23324ae1 255 */
328f5751 256 const_iterator end() const;
23324ae1 257
23324ae1 258 /**
d38e30d1
RR
259 Returns a iterator pointing at the end of the list.
260 */
261 iterator end() const;
262
263 /**
264 Erases the given item
23324ae1
FM
265 */
266 iterator erase(const iterator& it);
d38e30d1
RR
267
268 /**
269 Erases the items from @e first to @e last.
270 */
7c913512
FM
271 iterator erase(const iterator& first,
272 const iterator& last);
23324ae1 273
23324ae1
FM
274 /**
275 Returns the first item in the list.
276 */
328f5751 277 reference front() const;
d38e30d1
RR
278
279 /**
280 Returns the first item in the list as a const reference.
281 */
328f5751 282 const_reference front() const;
23324ae1 283
23324ae1 284 /**
d38e30d1 285 Inserts an item at the head of the list
23324ae1
FM
286 */
287 iterator insert(const iterator& it);
d38e30d1
RR
288
289 /**
290 Inserts an item at the given position
291 */
7c913512 292 void insert(const iterator& it, size_type n);
d38e30d1
RR
293
294 /**
295 Inserts several items at the given position.
296 */
7c913512
FM
297 void insert(const iterator& it, const_iterator first,
298 const const_iterator& last);
23324ae1
FM
299
300 /**
301 Returns the largest possible size of the list.
302 */
328f5751 303 size_type max_size() const;
23324ae1
FM
304
305 /**
306 Removes the last item from the list.
307 */
308 void pop_back();
309
310 /**
311 Removes the first item from the list.
312 */
313 void pop_front();
314
315 /**
23324ae1
FM
316 Adds an item to end of the list.
317 */
318 void push_back();
319
320 /**
23324ae1
FM
321 Adds an item to the front of the list.
322 */
323 void push_front();
324
23324ae1 325 /**
d38e30d1 326 Returns a reverse iterator pointing to the beginning of the
23324ae1
FM
327 reversed list.
328 */
328f5751 329 reverse_iterator rbegin() const;
d38e30d1
RR
330
331 /**
332 Returns a const reverse iterator pointing to the beginning of the
333 reversed list.
334 */
328f5751 335 const_reverse_iterator rbegin() const;
23324ae1
FM
336
337 /**
338 Removes an item from the list.
339 */
340 void remove(const_reference v);
341
23324ae1 342 /**
d38e30d1 343 Returns a reverse iterator pointing to the end of the
23324ae1
FM
344 reversed list.
345 */
328f5751 346 reverse_iterator rend() const;
d38e30d1
RR
347
348 /**
349 Returns a const reverse iterator pointing to the end of the
350 reversed list.
351 */
328f5751 352 const_reverse_iterator rend() const;
23324ae1
FM
353
354 /**
23324ae1
FM
355 Resizes the list. If the the list is enlarges items with
356 the value @e v are appended to the list.
357 */
358 void resize(size_type n);
359
360 /**
361 Reverses the list.
362 */
363 void reverse();
364
365 /**
366 Returns the size of the list.
367 */
328f5751 368 size_type size() const;
23324ae1
FM
369};
370
371
e54c96f1 372
23324ae1
FM
373/**
374 @class wxNode
375 @wxheader{list.h}
7c913512
FM
376
377 wxNodeBase is the node structure used in linked lists (see
23324ae1
FM
378 wxList) and derived classes. You should never use wxNodeBase
379 class directly, however, because it works with untyped (@c void *) data and
380 this is unsafe. Use wxNodeBase-derived classes which are automatically defined
381 by WX_DECLARE_LIST and WX_DEFINE_LIST macros instead as described in
382 wxList documentation (see example there). Also note that
383 although there is a class called wxNode, it is defined for backwards
384 compatibility only and usage of this class is strongly deprecated.
7c913512 385
23324ae1 386 In the documentation below, the type @c T should be thought of as a
cdbcf4c2 387 "template" parameter: this is the type of data stored in the linked list or,
23324ae1
FM
388 in other words, the first argument of WX_DECLARE_LIST macro. Also, wxNode is
389 written as wxNodeT even though it isn't really a template class -- but it
390 helps to think of it as if it were.
7c913512 391
23324ae1
FM
392 @library{wxbase}
393 @category{FIXME}
7c913512 394
73473b3e 395 @see wxList<T>, wxHashTable
23324ae1 396*/
73473b3e 397class wxNode<T>
23324ae1
FM
398{
399public:
400 /**
401 Retrieves the client data pointer associated with the node.
402 */
328f5751 403 T* GetData() const;
23324ae1
FM
404
405 /**
406 Retrieves the next node or @NULL if this node is the last one.
407 */
5cb947fd 408 wxNode<T>* GetNext() const;
23324ae1
FM
409
410 /**
411 Retrieves the previous node or @NULL if this node is the first one in the list.
412 */
5cb947fd 413 wxNode<T>* GetPrevious();
23324ae1
FM
414
415 /**
416 Returns the zero-based index of this node within the list. The return value
417 will be @c wxNOT_FOUND if the node has not been added to a list yet.
418 */
419 int IndexOf();
420
421 /**
422 Sets the data associated with the node (usually the pointer will have been
423 set when the node was created).
424 */
4cc4bfaf 425 void SetData(T* data);
23324ae1 426};
e54c96f1 427