| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: ctrlsub.h
- // Purpose: interface of wxControlWithItems
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxItemContainerImmutable
- wxItemContainer defines an interface which is implemented by all controls
- which have string subitems each of which may be selected.
- It is decomposed in wxItemContainerImmutable which omits all methods
- adding/removing items and is used by wxRadioBox and wxItemContainer itself.
- Note that this is not a control, it's a mixin interface that classes
- have to derive from in addition to wxControl or wxWindow.
- Examples: wxListBox, wxCheckListBox, wxChoice and wxComboBox (which
- implements an extended interface deriving from this one)
- @library{wxcore}
- @category{ctrl}
- @see wxControlWithItems, wxItemContainer
- */
- class wxItemContainerImmutable
- {
- public:
- /// Constructor
- wxItemContainerImmutable();
- //@{
- /**
- Returns the number of items in the control.
- @see IsEmpty()
- */
- virtual unsigned int GetCount() const = 0;
- /**
- Returns @true if the control is empty or @false if it has some items.
- @see GetCount()
- */
- bool IsEmpty() const;
- /**
- Returns the label of the item with the given index.
- @param n
- The zero-based index.
- @return The label of the item or an empty string if the position was
- invalid.
- */
- virtual wxString GetString(unsigned int n) const = 0;
- /**
- Returns the array of the labels of all items in the control.
- */
- wxArrayString GetStrings() const;
- /**
- Sets the label for the given item.
- @param n
- The zero-based item index.
- @param string
- The label to set.
- */
- virtual void SetString(unsigned int n, const wxString& string) = 0;
- /**
- Finds an item whose label matches the given string.
- @param string
- String to find.
- @param caseSensitive
- Whether search is case sensitive (default is not).
- @return The zero-based position of the item, or wxNOT_FOUND if the
- string was not found.
- */
- virtual int FindString(const wxString& string, bool caseSensitive = false) const;
- //@}
- /// @name Selection
- //@{
- /**
- Sets the selection to the given item @a n or removes the selection
- entirely if @a n == @c wxNOT_FOUND.
- Note that this does not cause any command events to be emitted nor does
- it deselect any other items in the controls which support multiple
- selections.
- @param n
- The string position to select, starting from zero.
- @see SetString(), SetStringSelection()
- */
- virtual void SetSelection(int n) = 0;
- /**
- Returns the index of the selected item or @c wxNOT_FOUND if no item is
- selected.
- @return The position of the current selection.
- @remarks This method can be used with single selection list boxes only,
- you should use wxListBox::GetSelections() for the list
- boxes with wxLB_MULTIPLE style.
- @see SetSelection(), GetStringSelection()
- */
- virtual int GetSelection() const = 0;
- /**
- Selects the item with the specified string in the control.
- This method doesn't cause any command events to be emitted.
- Notice that this method is case-insensitive, i.e. the string is
- compared with all the elements of the control case-insensitively and
- the first matching entry is selected, even if it doesn't have exactly
- the same case as this string and there is an exact match afterwards.
- @param string
- The string to select.
- @return @true if the specified string has been selected, @false if it
- wasn't found in the control.
- */
- bool SetStringSelection(const wxString& string);
- /**
- Returns the label of the selected item or an empty string if no item is
- selected.
- @see GetSelection()
- */
- virtual wxString GetStringSelection() const;
- /**
- This is the same as SetSelection() and exists only because it is
- slightly more natural for controls which support multiple selection.
- */
- void Select(int n);
- //@}
- };
- /**
- @class wxItemContainer
- This class is an abstract base class for some wxWidgets controls which
- contain several items such as wxListBox, wxCheckListBox, wxComboBox or
- wxChoice. It defines an interface which is implemented by all controls
- which have string subitems each of which may be selected.
- wxItemContainer extends wxItemContainerImmutable interface with methods
- for adding/removing items.
- It defines the methods for accessing the controls items and although each
- of the derived classes implements them differently, they still all conform
- to the same interface.
- The items in a wxItemContainer have (non-empty) string labels and,
- optionally, client data associated with them. Client data may be of two
- different kinds: either simple untyped (@c void *) pointers which are
- simply stored by the control but not used in any way by it, or typed
- pointers (wxClientData*) which are owned by the control meaning that the
- typed client data (and only it) will be deleted when an item is deleted
- using Delete() or the entire control is cleared using Clear(), which also
- happens when it is destroyed.
- Finally note that in the same control all items must have client data of
- the same type (typed or untyped), if any. This type is determined by the
- first call to Append() (the version with client data pointer) or
- SetClientData().
- Note that this is not a control, it's a mixin interface that classes
- have to derive from in addition to wxControl or wxWindow. Convenience
- class wxControlWithItems is provided for this purpose.
- @library{wxcore}
- @category{ctrl}
- @see wxControlWithItems, wxItemContainerImmutable
- */
- class wxItemContainer : public wxItemContainerImmutable
- {
- public:
- //@{
- /**
- Appends item into the control.
- @param item
- String to add.
- @return The return value is the index of the newly inserted item.
- Note that this may be different from the last one if the
- control is sorted (e.g. has @c wxLB_SORT or @c wxCB_SORT
- style).
- */
- int Append(const wxString& item);
- /**
- Appends item into the control.
- @param item
- String to add.
- @param clientData
- Pointer to client data to associate with the new item.
- @return The return value is the index of the newly inserted item.
- Note that this may be different from the last one if the
- control is sorted (e.g. has @c wxLB_SORT or @c wxCB_SORT
- style).
- */
- int Append(const wxString& item, void* clientData);
- /**
- Appends item into the control.
- @param item
- String to add.
- @param clientData
- Pointer to client data to associate with the new item.
- @return The return value is the index of the newly inserted item.
- Note that this may be different from the last one if the
- control is sorted (e.g. has @c wxLB_SORT or @c wxCB_SORT
- style).
- */
- int Append(const wxString& item, wxClientData* clientData);
- /**
- Appends several items at once into the control.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param items
- Array of strings to insert.
- */
- int Append(const wxArrayString& items);
- /**
- Appends several items at once into the control.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param items
- Array of strings to insert.
- @param clientData
- Array of client data pointers of the same size as @a items to
- associate with the new items.
- */
- int Append(const wxArrayString& items, void **clientData);
- /**
- Appends several items at once into the control.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param items
- Array of strings to insert.
- @param clientData
- Array of client data pointers of the same size as @a items to
- associate with the new items.
- */
- int Append(const wxArrayString& items, wxClientData **clientData);
- /**
- Appends several items at once into the control.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- */
- int Append(unsigned int n, const wxString* items);
- /**
- Appends several items at once into the control.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param clientData
- Array of client data pointers of size @a n to associate with the
- new items.
- */
- int Append(unsigned int n, const wxString* items,
- void** clientData);
- /**
- Appends several items at once into the control.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param clientData
- Array of client data pointers of size @a n to associate with the
- new items.
- */
- int Append(unsigned int n, const wxString* items,
- wxClientData** clientData);
- //@}
- /**
- Removes all items from the control.
- Clear() also deletes the client data of the existing items if it is
- owned by the control.
- */
- void Clear();
- /**
- Deletes an item from the control.
- The client data associated with the item will be also deleted if it is
- owned by the control. Note that it is an error (signalled by an assert
- failure in debug builds) to remove an item with the index negative or
- greater or equal than the number of items in the control.
- @param n
- The zero-based item index.
- @see Clear()
- */
- void Delete(unsigned int n);
- /**
- Returns the client object associated with the given item and transfers
- its ownership to the caller.
- This method, unlike GetClientObject(), expects the caller to delete the
- returned pointer. It also replaces the internally stored pointer with
- @NULL, i.e. completely detaches the client object pointer from the
- control.
- It's an error to call this method unless HasClientObjectData() returns
- @true.
- @param n
- The zero-based item index.
- @return The associated client object pointer to be deleted by caller or
- @NULL.
- @since 2.9.2
- */
- wxClientData *DetachClientObject(unsigned int n);
- /**
- Returns true, if either untyped data (@c void*) or object data (wxClientData*)
- is associated with the items of the control.
- */
- bool HasClientData() const;
- /**
- Returns true, if object data is associated with the items of the
- control.
- Object data pointers have the type @c wxClientData* instead of @c void*
- and, importantly, are owned by the control, i.e. will be deleted by it,
- unlike their untyped counterparts.
- */
- bool HasClientObjectData() const;
- /**
- Returns true, if untyped data (@c void*)
- is associated with the items of the control.
- */
- bool HasClientUntypedData() const;
- //@{
- /**
- Returns a pointer to the client data associated with the given item (if
- any). It is an error to call this function for a control which doesn't
- have untyped client data at all although it is OK to call it even if
- the given item doesn't have any client data associated with it (but
- other items do).
- @param n
- The zero-based position of the item.
- @return A pointer to the client data, or @NULL if not present.
- */
- void* GetClientData(unsigned int n) const;
- /**
- Returns a pointer to the client data associated with the given item (if
- any). It is an error to call this function for a control which doesn't
- have typed client data at all although it is OK to call it even if the
- given item doesn't have any client data associated with it (but other
- items do).
- Notice that the returned pointer is still owned by the control and will
- be deleted by it, use DetachClientObject() if you want to remove the
- pointer from the control.
- @param n
- The zero-based position of the item.
- @return A pointer to the client data, or @NULL if not present.
- */
- wxClientData* GetClientObject(unsigned int n) const;
- /**
- Associates the given untyped client data pointer with the given item.
- Note that it is an error to call this function if any typed client data
- pointers had been associated with the control items before.
- @param n
- The zero-based item index.
- @param data
- The client data to associate with the item.
- */
- void SetClientData(unsigned int n, void* data);
- /**
- Associates the given typed client data pointer with the given item: the
- @a data object will be deleted when the item is deleted (either
- explicitly by using Delete() or implicitly when the control itself is
- destroyed). Note that it is an error to call this function if any
- untyped client data pointers had been associated with the control items
- before.
- @param n
- The zero-based item index.
- @param data
- The client data to associate with the item.
- */
- void SetClientObject(unsigned int n, wxClientData* data);
- //@}
- //@{
- /**
- Inserts item into the control.
- @param item
- String to add.
- @param pos
- Position to insert item before, zero based.
- @return The return value is the index of the newly inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(const wxString& item, unsigned int pos);
- /**
- Inserts item into the control.
- @param item
- String to add.
- @param pos
- Position to insert item before, zero based.
- @param clientData
- Pointer to client data to associate with the new item.
- @return The return value is the index of the newly inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(const wxString& item, unsigned int pos, void* clientData);
- /**
- Inserts item into the control.
- @param item
- String to add.
- @param pos
- Position to insert item before, zero based.
- @param clientData
- Pointer to client data to associate with the new item.
- @return The return value is the index of the newly inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(const wxString& item, unsigned int pos,
- wxClientData* clientData);
- /**
- Inserts several items at once into the control.
- Notice that calling this method is usually much faster than inserting
- them one by one if you need to insert a lot of items.
- @param items
- Array of strings to insert.
- @param pos
- Position to insert the items before, zero based.
- @return The return value is the index of the last inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(const wxArrayString& items, unsigned int pos);
- /**
- Inserts several items at once into the control.
- Notice that calling this method is usually much faster than inserting
- them one by one if you need to insert a lot of items.
- @param items
- Array of strings to insert.
- @param pos
- Position to insert the items before, zero based.
- @param clientData
- Array of client data pointers of the same size as @a items to
- associate with the new items.
- @return The return value is the index of the last inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(const wxArrayString& items, unsigned int pos,
- void **clientData);
- /**
- Inserts several items at once into the control.
- Notice that calling this method is usually much faster than inserting
- them one by one if you need to insert a lot of items.
- @param items
- Array of strings to insert.
- @param pos
- Position to insert the items before, zero based.
- @param clientData
- Array of client data pointers of the same size as @a items to
- associate with the new items.
- @return The return value is the index of the last inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(const wxArrayString& items, unsigned int pos,
- wxClientData **clientData);
- /**
- Inserts several items at once into the control.
- Notice that calling this method is usually much faster than inserting
- them one by one if you need to insert a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param pos
- Position to insert the items before, zero based.
- @return The return value is the index of the last inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(unsigned int n, const wxString* items,
- unsigned int pos);
- /**
- Inserts several items at once into the control.
- Notice that calling this method is usually much faster than inserting
- them one by one if you need to insert a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param pos
- Position to insert the new items before, zero based.
- @param clientData
- Array of client data pointers of size @a n to associate with the
- new items.
- @return The return value is the index of the last inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(unsigned int n, const wxString* items,
- unsigned int pos,
- void** clientData);
- /**
- Inserts several items at once into the control.
- Notice that calling this method is usually much faster than inserting
- them one by one if you need to insert a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param pos
- Position to insert the new items before, zero based.
- @param clientData
- Array of client data pointers of size @a n to associate with the
- new items.
- @return The return value is the index of the last inserted item.
- If the insertion failed for some reason, -1 is returned.
- */
- int Insert(unsigned int n, const wxString* items,
- unsigned int pos,
- wxClientData** clientData);
- //@}
- //@{
- /**
- Replaces the current control contents with the given items.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param items
- Array of strings to insert.
- */
- void Set(const wxArrayString& items);
- /**
- Replaces the current control contents with the given items.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param items
- Array of strings to insert.
- @param clientData
- Array of client data pointers of the same size as @a items to
- associate with the new items.
- */
- void Set(const wxArrayString& items, void **clientData);
- /**
- Replaces the current control contents with the given items.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param items
- Array of strings to insert.
- @param clientData
- Array of client data pointers of the same size as @a items to
- associate with the new items.
- */
- void Set(const wxArrayString& items, wxClientData **clientData);
- /**
- Replaces the current control contents with the given items.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- */
- void Set(unsigned int n, const wxString* items);
- /**
- Replaces the current control contents with the given items.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param clientData
- Array of client data pointers of size @a n to associate with the
- new items.
- */
- void Set(unsigned int n, const wxString* items, void** clientData);
- /**
- Replaces the current control contents with the given items.
- Notice that calling this method is usually much faster than appending
- them one by one if you need to add a lot of items.
- @param n
- Number of items in the @a items array.
- @param items
- Array of strings of size @a n.
- @param clientData
- Array of client data pointers of size @a n to associate with the
- new items.
- */
- void Set(unsigned int n, const wxString* items, wxClientData** clientData);
- //@}
- };
- /**
- @class wxControlWithItems
- This is convenience class that derives from both wxControl and
- wxItemContainer. It is used as basis for some wxWidgets controls
- (wxChoice and wxListBox).
- @library{wxcore}
- @category{ctrl}
- @see wxItemContainer, wxItemContainerImmutable
- */
- class wxControlWithItems : public wxControl, public wxItemContainer
- {
- };
|