]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/ctrlsub.h
Add a link to Microsoft guidelines from wxICON_QUESTION documentation.
[wxWidgets.git] / interface / wx / ctrlsub.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: ctrlsub.h
e54c96f1 3// Purpose: interface of wxControlWithItems
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
bf84f3e2 9
23324ae1 10/**
dc215c81 11 @class wxItemContainerImmutable
7c913512 12
bf84f3e2
VS
13 wxItemContainer defines an interface which is implemented by all controls
14 which have string subitems each of which may be selected.
7c913512 15
bf84f3e2
VS
16 It is decomposed in wxItemContainerImmutable which omits all methods
17 adding/removing items and is used by wxRadioBox and wxItemContainer itself.
7c913512 18
bf84f3e2
VS
19 Note that this is not a control, it's a mixin interface that classes
20 have to derive from in addition to wxControl or wxWindow.
21
22 Examples: wxListBox, wxCheckListBox, wxChoice and wxComboBox (which
23 implements an extended interface deriving from this one)
7c913512 24
23324ae1 25 @library{wxcore}
bf84f3e2 26 @category{ctrl}
7c913512 27
bf84f3e2 28 @see wxControlWithItems, wxItemContainer
23324ae1 29*/
bf84f3e2 30class wxItemContainerImmutable
23324ae1
FM
31{
32public:
bf84f3e2
VS
33 /// Constructor
34 wxItemContainerImmutable();
35
23324ae1 36 //@{
bf84f3e2 37
23324ae1 38 /**
bf84f3e2
VS
39 Returns the number of items in the control.
40
41 @see IsEmpty()
42 */
382f12e4 43 virtual unsigned int GetCount() const = 0;
bf84f3e2
VS
44
45 /**
46 Returns @true if the control is empty or @false if it has some items.
47
48 @see GetCount()
49 */
50 bool IsEmpty() const;
51
bf84f3e2
VS
52 /**
53 Returns the label of the item with the given index.
3c4f71cc 54
7c913512 55 @param n
bf84f3e2 56 The zero-based index.
3c4f71cc 57
d29a9a8a
BP
58 @return The label of the item or an empty string if the position was
59 invalid.
23324ae1 60 */
382f12e4 61 virtual wxString GetString(unsigned int n) const = 0;
23324ae1
FM
62
63 /**
bf84f3e2 64 Returns the array of the labels of all items in the control.
23324ae1 65 */
bf84f3e2 66 wxArrayString GetStrings() const;
23324ae1
FM
67
68 /**
bf84f3e2 69 Sets the label for the given item.
3c4f71cc 70
7c913512 71 @param n
4cc4bfaf 72 The zero-based item index.
bf84f3e2
VS
73 @param string
74 The label to set.
23324ae1 75 */
382f12e4 76 virtual void SetString(unsigned int n, const wxString& string) = 0;
23324ae1
FM
77
78 /**
79 Finds an item whose label matches the given string.
3c4f71cc 80
7c913512 81 @param string
4cc4bfaf 82 String to find.
7c913512 83 @param caseSensitive
4cc4bfaf 84 Whether search is case sensitive (default is not).
3c4f71cc 85
d29a9a8a
BP
86 @return The zero-based position of the item, or wxNOT_FOUND if the
87 string was not found.
23324ae1 88 */
76e9224e 89 virtual int FindString(const wxString& string, bool caseSensitive = false) const;
3c4f71cc 90
bf84f3e2 91 //@}
3c4f71cc 92
dc215c81 93 /// @name Selection
bf84f3e2 94 //@{
23324ae1
FM
95
96 /**
bf84f3e2
VS
97 Sets the selection to the given item @a n or removes the selection
98 entirely if @a n == @c wxNOT_FOUND.
3c4f71cc 99
bf84f3e2
VS
100 Note that this does not cause any command events to be emitted nor does
101 it deselect any other items in the controls which support multiple
102 selections.
23324ae1 103
bf84f3e2
VS
104 @param n
105 The string position to select, starting from zero.
3c4f71cc 106
bf84f3e2 107 @see SetString(), SetStringSelection()
23324ae1 108 */
382f12e4 109 virtual void SetSelection(int n) = 0;
23324ae1
FM
110
111 /**
112 Returns the index of the selected item or @c wxNOT_FOUND if no item is
113 selected.
3c4f71cc 114
d29a9a8a 115 @return The position of the current selection.
3c4f71cc 116
23324ae1 117 @remarks This method can be used with single selection list boxes only,
bf84f3e2 118 you should use wxListBox::GetSelections() for the list
4cc4bfaf 119 boxes with wxLB_MULTIPLE style.
3c4f71cc 120
4cc4bfaf 121 @see SetSelection(), GetStringSelection()
23324ae1 122 */
382f12e4 123 virtual int GetSelection() const = 0;
23324ae1
FM
124
125 /**
bf84f3e2
VS
126 Selects the item with the specified string in the control. This doesn't
127 cause any command events to be emitted.
3c4f71cc 128
bf84f3e2
VS
129 @param string
130 The string to select.
3c4f71cc 131
d29a9a8a
BP
132 @return @true if the specified string has been selected, @false if it
133 wasn't found in the control.
23324ae1 134 */
bf84f3e2 135 bool SetStringSelection(const wxString& string);
23324ae1
FM
136
137 /**
138 Returns the label of the selected item or an empty string if no item is
139 selected.
3c4f71cc 140
4cc4bfaf 141 @see GetSelection()
23324ae1 142 */
bf84f3e2 143 virtual wxString GetStringSelection() const;
23324ae1
FM
144
145 /**
bf84f3e2
VS
146 This is the same as SetSelection() and exists only because it is
147 slightly more natural for controls which support multiple selection.
23324ae1 148 */
bf84f3e2
VS
149 void Select(int n);
150
151 //@}
152};
153
154
155/**
dc215c81 156 @class wxItemContainer
bf84f3e2
VS
157
158 This class is an abstract base class for some wxWidgets controls which
159 contain several items such as wxListBox, wxCheckListBox, wxComboBox or
160 wxChoice. It defines an interface which is implemented by all controls
161 which have string subitems each of which may be selected.
23324ae1 162
bf84f3e2
VS
163 wxItemContainer extends wxItemContainerImmutable interface with methods
164 for adding/removing items.
165
166 It defines the methods for accessing the controls items and although each
167 of the derived classes implements them differently, they still all conform
168 to the same interface.
169
170 The items in a wxItemContainer have (non-empty) string labels and,
171 optionally, client data associated with them. Client data may be of two
172 different kinds: either simple untyped (@c void *) pointers which are
173 simply stored by the control but not used in any way by it, or typed
174 pointers (wxClientData*) which are owned by the control meaning that the
175 typed client data (and only it) will be deleted when an item is deleted
dc215c81
BP
176 using Delete() or the entire control is cleared using Clear(), which also
177 happens when it is destroyed.
bf84f3e2
VS
178
179 Finally note that in the same control all items must have client data of
180 the same type (typed or untyped), if any. This type is determined by the
dc215c81
BP
181 first call to Append() (the version with client data pointer) or
182 SetClientData().
bf84f3e2
VS
183
184 Note that this is not a control, it's a mixin interface that classes
185 have to derive from in addition to wxControl or wxWindow. Convenience
186 class wxControlWithItems is provided for this purpose.
187
188 @library{wxcore}
189 @category{ctrl}
190
191 @see wxControlWithItems, wxItemContainerImmutable
192*/
193class wxItemContainer : public wxItemContainerImmutable
194{
195public:
23324ae1 196 //@{
bf84f3e2 197
23324ae1 198 /**
bf84f3e2
VS
199 Appends item into the control.
200
201 @param item
202 String to add.
203
d29a9a8a
BP
204 @return The return value is the index of the newly inserted item.
205 Note that this may be different from the last one if the
206 control is sorted (e.g. has @c wxLB_SORT or @c wxCB_SORT
207 style).
bf84f3e2
VS
208 */
209 int Append(const wxString& item);
210
211 /**
212 Appends item into the control.
3c4f71cc 213
7c913512 214 @param item
4cc4bfaf 215 String to add.
7c913512 216 @param clientData
bf84f3e2 217 Pointer to client data to associate with the new item.
3c4f71cc 218
d29a9a8a
BP
219 @return The return value is the index of the newly inserted item.
220 Note that this may be different from the last one if the
221 control is sorted (e.g. has @c wxLB_SORT or @c wxCB_SORT
222 style).
23324ae1 223 */
bf84f3e2
VS
224 int Append(const wxString& item, void* clientData);
225
226 /**
227 Appends item into the control.
228
229 @param item
230 String to add.
231 @param clientData
232 Pointer to client data to associate with the new item.
233
d29a9a8a
BP
234 @return The return value is the index of the newly inserted item.
235 Note that this may be different from the last one if the
236 control is sorted (e.g. has @c wxLB_SORT or @c wxCB_SORT
237 style).
bf84f3e2
VS
238 */
239 int Append(const wxString& item, wxClientData* clientData);
240
241 /**
242 Appends several items at once into the control.
243
244 Notice that calling this method is usually much faster than appending
245 them one by one if you need to add a lot of items.
246
247 @param items
248 Array of strings to insert.
249 */
882678eb 250 int Append(const wxArrayString& items);
bf84f3e2
VS
251
252 /**
253 Appends several items at once into the control.
254
255 Notice that calling this method is usually much faster than appending
256 them one by one if you need to add a lot of items.
257
258 @param items
259 Array of strings to insert.
260 @param clientData
261 Array of client data pointers of the same size as @a items to
262 associate with the new items.
263 */
882678eb 264 int Append(const wxArrayString& items, void **clientData);
bf84f3e2
VS
265
266 /**
267 Appends several items at once into the control.
268
269 Notice that calling this method is usually much faster than appending
270 them one by one if you need to add a lot of items.
271
272 @param items
273 Array of strings to insert.
274 @param clientData
275 Array of client data pointers of the same size as @a items to
276 associate with the new items.
277 */
882678eb 278 int Append(const wxArrayString& items, wxClientData **clientData);
bf84f3e2
VS
279
280 /**
281 Appends several items at once into the control.
282
283 Notice that calling this method is usually much faster than appending
284 them one by one if you need to add a lot of items.
285
286 @param n
287 Number of items in the @a items array.
288 @param items
289 Array of strings of size @a n.
290 */
882678eb 291 int Append(unsigned int n, const wxString* items);
bf84f3e2
VS
292
293 /**
294 Appends several items at once into the control.
295
296 Notice that calling this method is usually much faster than appending
297 them one by one if you need to add a lot of items.
298
299 @param n
300 Number of items in the @a items array.
301 @param items
302 Array of strings of size @a n.
303 @param clientData
304 Array of client data pointers of size @a n to associate with the
305 new items.
306 */
882678eb
FM
307 int Append(unsigned int n, const wxString* items,
308 void** clientData);
bf84f3e2
VS
309
310 /**
311 Appends several items at once into the control.
312
313 Notice that calling this method is usually much faster than appending
314 them one by one if you need to add a lot of items.
315
316 @param n
317 Number of items in the @a items array.
318 @param items
319 Array of strings of size @a n.
320 @param clientData
321 Array of client data pointers of size @a n to associate with the
322 new items.
323 */
882678eb 324 int Append(unsigned int n, const wxString* items,
4cc4bfaf 325 wxClientData** clientData);
23324ae1
FM
326 //@}
327
328 /**
bf84f3e2
VS
329 Removes all items from the control.
330 Clear() also deletes the client data of the existing items if it is
331 owned by the control.
23324ae1 332 */
bf84f3e2 333 void Clear();
23324ae1
FM
334
335 /**
bf84f3e2
VS
336 Deletes an item from the control.
337
338 The client data associated with the item will be also deleted if it is
339 owned by the control. Note that it is an error (signalled by an assert
340 failure in debug builds) to remove an item with the index negative or
341 greater or equal than the number of items in the control.
342
343 @param n
344 The zero-based item index.
345
346 @see Clear()
23324ae1 347 */
bf84f3e2 348 void Delete(unsigned int n);
23324ae1 349
9c99919a 350
ab989357
VZ
351 /**
352 Returns the client object associated with the given item and transfers
353 its ownership to the caller.
354
355 This method, unlike GetClientObject(), expects the caller to delete the
356 returned pointer. It also replaces the internally stored pointer with
357 @NULL, i.e. completely detaches the client object pointer from the
358 control.
359
360 It's an error to call this method unless HasClientObjectData() returns
361 @true.
362
363 @param n
364 The zero-based item index.
365 @return The associated client object pointer to be deleted by caller or
366 @NULL.
367
368 @since 2.9.2
369 */
370 wxClientData *DetachClientObject(unsigned int n);
371
9c99919a
RR
372 /**
373 Returns true, if either untyped data (@c void*) or object data (wxClientData*)
374 is associated with the items of the control.
375 */
376 bool HasClientData() const;
ab989357 377
9c99919a 378 /**
ab989357
VZ
379 Returns true, if object data is associated with the items of the
380 control.
381
382 Object data pointers have the type @c wxClientData* instead of @c void*
383 and, importantly, are owned by the control, i.e. will be deleted by it,
384 unlike their untyped counterparts.
9c99919a
RR
385 */
386 bool HasClientObjectData() const;
387
388 /**
ab989357 389 Returns true, if untyped data (@c void*)
9c99919a
RR
390 is associated with the items of the control.
391 */
392 bool HasClientUntypedData() const;
393
394
23324ae1 395 //@{
bf84f3e2 396
23324ae1 397 /**
bf84f3e2
VS
398 Returns a pointer to the client data associated with the given item (if
399 any). It is an error to call this function for a control which doesn't
400 have untyped client data at all although it is OK to call it even if
401 the given item doesn't have any client data associated with it (but
402 other items do).
3c4f71cc 403
7c913512 404 @param n
bf84f3e2
VS
405 The zero-based position of the item.
406
d29a9a8a 407 @return A pointer to the client data, or @NULL if not present.
23324ae1 408 */
bf84f3e2
VS
409 void* GetClientData(unsigned int n) const;
410
411 /**
412 Returns a pointer to the client data associated with the given item (if
413 any). It is an error to call this function for a control which doesn't
414 have typed client data at all although it is OK to call it even if the
415 given item doesn't have any client data associated with it (but other
416 items do).
417
ab989357
VZ
418 Notice that the returned pointer is still owned by the control and will
419 be deleted by it, use DetachClientObject() if you want to remove the
420 pointer from the control.
421
bf84f3e2
VS
422 @param n
423 The zero-based position of the item.
424
d29a9a8a 425 @return A pointer to the client data, or @NULL if not present.
bf84f3e2
VS
426 */
427 wxClientData* GetClientObject(unsigned int n) const;
23324ae1
FM
428
429 /**
bf84f3e2
VS
430 Associates the given untyped client data pointer with the given item.
431 Note that it is an error to call this function if any typed client data
432 pointers had been associated with the control items before.
3c4f71cc 433
7c913512 434 @param n
4cc4bfaf 435 The zero-based item index.
7c913512 436 @param data
4cc4bfaf 437 The client data to associate with the item.
23324ae1 438 */
4cc4bfaf 439 void SetClientData(unsigned int n, void* data);
23324ae1
FM
440
441 /**
442 Associates the given typed client data pointer with the given item: the
bf84f3e2
VS
443 @a data object will be deleted when the item is deleted (either
444 explicitly by using Delete() or implicitly when the control itself is
445 destroyed). Note that it is an error to call this function if any
446 untyped client data pointers had been associated with the control items
447 before.
3c4f71cc 448
7c913512 449 @param n
4cc4bfaf 450 The zero-based item index.
7c913512 451 @param data
4cc4bfaf 452 The client data to associate with the item.
23324ae1 453 */
4cc4bfaf 454 void SetClientObject(unsigned int n, wxClientData* data);
23324ae1 455
bf84f3e2
VS
456 //@}
457
458 //@{
459
460 /**
461 Inserts item into the control.
462
463 @param item
464 String to add.
465 @param pos
466 Position to insert item before, zero based.
467
d29a9a8a
BP
468 @return The return value is the index of the newly inserted item.
469 If the insertion failed for some reason, -1 is returned.
bf84f3e2
VS
470 */
471 int Insert(const wxString& item, unsigned int pos);
472
473 /**
474 Inserts item into the control.
475
476 @param item
477 String to add.
478 @param pos
479 Position to insert item before, zero based.
480 @param clientData
481 Pointer to client data to associate with the new item.
482
d29a9a8a
BP
483 @return The return value is the index of the newly inserted item.
484 If the insertion failed for some reason, -1 is returned.
bf84f3e2
VS
485 */
486 int Insert(const wxString& item, unsigned int pos, void* clientData);
487
488 /**
489 Inserts item into the control.
490
491 @param item
492 String to add.
493 @param pos
494 Position to insert item before, zero based.
495 @param clientData
496 Pointer to client data to associate with the new item.
497
d29a9a8a
BP
498 @return The return value is the index of the newly inserted item.
499 If the insertion failed for some reason, -1 is returned.
bf84f3e2
VS
500 */
501 int Insert(const wxString& item, unsigned int pos,
502 wxClientData* clientData);
503
504 /**
505 Inserts several items at once into the control.
506
507 Notice that calling this method is usually much faster than inserting
508 them one by one if you need to insert a lot of items.
509
510 @param items
511 Array of strings to insert.
512 @param pos
513 Position to insert the items before, zero based.
514 */
882678eb 515 int Insert(const wxArrayString& items, unsigned int pos);
bf84f3e2
VS
516
517 /**
518 Inserts several items at once into the control.
519
520 Notice that calling this method is usually much faster than inserting
521 them one by one if you need to insert a lot of items.
522
523 @param items
524 Array of strings to insert.
525 @param pos
526 Position to insert the items before, zero based.
527 @param clientData
528 Array of client data pointers of the same size as @a items to
529 associate with the new items.
530 */
882678eb 531 int Insert(const wxArrayString& items, unsigned int pos,
bf84f3e2
VS
532 void **clientData);
533
23324ae1 534 /**
bf84f3e2
VS
535 Inserts several items at once into the control.
536
537 Notice that calling this method is usually much faster than inserting
538 them one by one if you need to insert a lot of items.
539
540 @param items
541 Array of strings to insert.
542 @param pos
543 Position to insert the items before, zero based.
544 @param clientData
545 Array of client data pointers of the same size as @a items to
546 associate with the new items.
547 */
882678eb 548 int Insert(const wxArrayString& items, unsigned int pos,
bf84f3e2
VS
549 wxClientData **clientData);
550
551 /**
552 Inserts several items at once into the control.
553
554 Notice that calling this method is usually much faster than inserting
555 them one by one if you need to insert a lot of items.
3c4f71cc 556
7c913512 557 @param n
bf84f3e2
VS
558 Number of items in the @a items array.
559 @param items
560 Array of strings of size @a n.
561 @param pos
562 Position to insert the items before, zero based.
563 */
882678eb 564 int Insert(unsigned int n, const wxString* items,
bf84f3e2 565 unsigned int pos);
3c4f71cc 566
bf84f3e2
VS
567 /**
568 Inserts several items at once into the control.
569
570 Notice that calling this method is usually much faster than inserting
571 them one by one if you need to insert a lot of items.
572
573 @param n
574 Number of items in the @a items array.
575 @param items
576 Array of strings of size @a n.
577 @param pos
578 Position to insert the new items before, zero based.
579 @param clientData
580 Array of client data pointers of size @a n to associate with the
581 new items.
23324ae1 582 */
882678eb 583 int Insert(unsigned int n, const wxString* items,
bf84f3e2
VS
584 unsigned int pos,
585 void** clientData);
23324ae1
FM
586
587 /**
bf84f3e2
VS
588 Inserts several items at once into the control.
589
590 Notice that calling this method is usually much faster than inserting
591 them one by one if you need to insert a lot of items.
3c4f71cc 592
7c913512 593 @param n
bf84f3e2
VS
594 Number of items in the @a items array.
595 @param items
596 Array of strings of size @a n.
597 @param pos
598 Position to insert the new items before, zero based.
599 @param clientData
600 Array of client data pointers of size @a n to associate with the
601 new items.
23324ae1 602 */
882678eb 603 int Insert(unsigned int n, const wxString* items,
bf84f3e2
VS
604 unsigned int pos,
605 wxClientData** clientData);
606 //@}
23324ae1 607
bf84f3e2 608 //@{
23324ae1 609 /**
bf84f3e2 610 Replaces the current control contents with the given items.
3c4f71cc 611
bf84f3e2
VS
612 Notice that calling this method is usually much faster than appending
613 them one by one if you need to add a lot of items.
3c4f71cc 614
bf84f3e2
VS
615 @param items
616 Array of strings to insert.
23324ae1 617 */
bf84f3e2
VS
618 void Set(const wxArrayString& items);
619
620 /**
621 Replaces the current control contents with the given items.
622
623 Notice that calling this method is usually much faster than appending
624 them one by one if you need to add a lot of items.
625
626 @param items
627 Array of strings to insert.
628 @param clientData
629 Array of client data pointers of the same size as @a items to
630 associate with the new items.
631 */
632 void Set(const wxArrayString& items, void **clientData);
633
634 /**
635 Replaces the current control contents with the given items.
636
637 Notice that calling this method is usually much faster than appending
638 them one by one if you need to add a lot of items.
639
640 @param items
641 Array of strings to insert.
642 @param clientData
643 Array of client data pointers of the same size as @a items to
644 associate with the new items.
645 */
646 void Set(const wxArrayString& items, wxClientData **clientData);
647
648 /**
649 Replaces the current control contents with the given items.
650
651 Notice that calling this method is usually much faster than appending
652 them one by one if you need to add a lot of items.
653
654 @param n
655 Number of items in the @a items array.
656 @param items
657 Array of strings of size @a n.
658 */
659 void Set(unsigned int n, const wxString* items);
660
661 /**
662 Replaces the current control contents with the given items.
663
664 Notice that calling this method is usually much faster than appending
665 them one by one if you need to add a lot of items.
666
667 @param n
668 Number of items in the @a items array.
669 @param items
670 Array of strings of size @a n.
671 @param clientData
672 Array of client data pointers of size @a n to associate with the
673 new items.
674 */
675 void Set(unsigned int n, const wxString* items, void** clientData);
676
677 /**
678 Replaces the current control contents with the given items.
679
680 Notice that calling this method is usually much faster than appending
681 them one by one if you need to add a lot of items.
682
683 @param n
684 Number of items in the @a items array.
685 @param items
686 Array of strings of size @a n.
687 @param clientData
688 Array of client data pointers of size @a n to associate with the
689 new items.
690 */
691 void Set(unsigned int n, const wxString* items, wxClientData** clientData);
692 //@}
693};
694
695
696/**
697 @class wxControlWithItems
bf84f3e2
VS
698
699 This is convenience class that derives from both wxControl and
700 wxItemContainer. It is used as basis for some wxWidgets controls
701 (wxChoice and wxListBox).
702
703 @library{wxcore}
704 @category{ctrl}
705
706 @see wxItemContainer, wxItemContainerImmutable
707*/
708class wxControlWithItems : public wxControl, public wxItemContainer
709{
23324ae1 710};
e54c96f1 711