many wxItemContainer-related changes:
1. the main function for item insertion is now DoInsertItems() which allows for much more efficient addition of many new items at once 2. the items client data management is done entirely in wxItemContainer itself, the derived classes don't have to distinguish between void and object client data 3. many fixes for sorted controls, in particular implemented wxCB_SORT support in wxGTK combobox git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47730 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -362,4 +362,81 @@ WXDLLIMPEXP_BASE wxArrayString wxSplit(const wxString& str,
|
||||
const wxChar sep,
|
||||
const wxChar escape = wxT('\\'));
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// This helper class allows to pass both C array of wxStrings or wxArrayString
|
||||
// using the same interface.
|
||||
//
|
||||
// Use it when you have two methods taking wxArrayString or (int, wxString[]),
|
||||
// that do the same thing. This class lets you iterate over input data in the
|
||||
// same way whether it is a raw array of strings or wxArrayString.
|
||||
//
|
||||
// The object does not take ownership of the data -- internally it keeps
|
||||
// pointers to the data, therefore the data must be disposed of by user
|
||||
// and only after this object is destroyed. Usually it is not a problem as
|
||||
// only temporary objects of this class are used.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxArrayStringsAdapter
|
||||
{
|
||||
public:
|
||||
// construct an adapter from a wxArrayString
|
||||
wxArrayStringsAdapter(const wxArrayString& strings)
|
||||
: m_type(wxSTRING_ARRAY), m_size(strings.size())
|
||||
{
|
||||
m_data.array = &strings;
|
||||
}
|
||||
|
||||
// construct an adapter from a wxString[]
|
||||
wxArrayStringsAdapter(unsigned int n, const wxString *strings)
|
||||
: m_type(wxSTRING_POINTER), m_size(n)
|
||||
{
|
||||
m_data.ptr = strings;
|
||||
}
|
||||
|
||||
// construct an adapter from a single wxString
|
||||
wxArrayStringsAdapter(const wxString& s)
|
||||
: m_type(wxSTRING_POINTER), m_size(1)
|
||||
{
|
||||
m_data.ptr = &s;
|
||||
}
|
||||
|
||||
// default copy constructor is ok
|
||||
|
||||
// iteration interface
|
||||
unsigned int GetCount() const { return m_size; }
|
||||
bool IsEmpty() const { return GetCount() == 0; }
|
||||
const wxString& operator[] (unsigned int i) const
|
||||
{
|
||||
wxASSERT_MSG( i < GetCount(), wxT("index out of bounds") );
|
||||
if(m_type == wxSTRING_POINTER)
|
||||
return m_data.ptr[i];
|
||||
return m_data.array->Item(i);
|
||||
}
|
||||
wxArrayString AsArrayString() const
|
||||
{
|
||||
if(m_type == wxSTRING_ARRAY)
|
||||
return *m_data.array;
|
||||
return wxArrayString(GetCount(), m_data.ptr);
|
||||
}
|
||||
|
||||
private:
|
||||
// type of the data being held
|
||||
enum wxStringContainerType
|
||||
{
|
||||
wxSTRING_ARRAY, // wxArrayString
|
||||
wxSTRING_POINTER // wxString[]
|
||||
};
|
||||
|
||||
wxStringContainerType m_type;
|
||||
unsigned int m_size;
|
||||
union
|
||||
{
|
||||
const wxString * ptr;
|
||||
const wxArrayString * array;
|
||||
} m_data;
|
||||
|
||||
DECLARE_NO_ASSIGN_CLASS(wxArrayStringsAdapter)
|
||||
};
|
||||
|
||||
#endif // _WX_ARRSTR_H
|
||||
|
Reference in New Issue
Block a user