mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-29 00:59:44 -06:00
Import r67258 of the wxWidgets trunk, which I expect will before
long become wxWidgets 2.9.2, which in turn is expected to be the last 2.9 release before the 3.0 stable release. Since the full wxWidgets distribution is rather large, I have imported only the parts that we use, on a subdirectory basis: art include/wx/*.* include/wx/aui include/wx/cocoa include/wx/generic include/wx/gtk include/wx/meta include/wx/msw include/wx/osx include/wx/persist include/wx/private include/wx/protocol include/wx/unix src/aui src/common src/generic src/gtk src/msw src/osx src/unix git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7380 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
123
Externals/wxWidgets3/include/wx/generic/ctrlsub.h
vendored
Normal file
123
Externals/wxWidgets3/include/wx/generic/ctrlsub.h
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/generic/ctrlsub.h
|
||||
// Purpose: common functionality of wxItemContainer-derived controls
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2007-07-25
|
||||
// RCS-ID: $Id: ctrlsub.h 58757 2009-02-08 11:45:59Z VZ $
|
||||
// Copyright: (c) 2007 Vadim Zeitlin <vadim@wxwindows.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_GENERIC_CTRLSUB_H_
|
||||
#define _WX_GENERIC_CTRLSUB_H_
|
||||
|
||||
#include "wx/dynarray.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxControlWithItemsGeneric: generic implementation of item client data
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxControlWithItemsGeneric : public wxControlWithItemsBase
|
||||
{
|
||||
public:
|
||||
wxControlWithItemsGeneric() { }
|
||||
|
||||
virtual void DoInitItemClientData()
|
||||
{
|
||||
m_itemsClientData.resize(GetCount(), NULL);
|
||||
}
|
||||
|
||||
virtual void DoSetItemClientData(unsigned int n, void *clientData)
|
||||
{
|
||||
m_itemsClientData[n] = clientData;
|
||||
}
|
||||
|
||||
virtual void *DoGetItemClientData(unsigned int n) const
|
||||
{
|
||||
return m_itemsClientData[n];
|
||||
}
|
||||
|
||||
virtual void DoClear() { m_itemsClientData.clear(); }
|
||||
virtual void DoDeleteOneItem(unsigned int pos)
|
||||
{
|
||||
if ( HasClientData() )
|
||||
m_itemsClientData.RemoveAt(pos);
|
||||
}
|
||||
|
||||
protected:
|
||||
// preallocate memory for numItems new items: this should be called from
|
||||
// the derived classes DoInsertItems() to speed up appending big numbers of
|
||||
// items with client data; it is safe to call even if we don't use client
|
||||
// data at all and does nothing in this case
|
||||
void AllocClientData(unsigned int numItems)
|
||||
{
|
||||
if ( HasClientData() )
|
||||
m_itemsClientData.reserve(m_itemsClientData.size() + numItems);
|
||||
}
|
||||
|
||||
// this must be called by derived classes when a new item is added to the
|
||||
// control to add storage for the corresponding client data pointer (before
|
||||
// inserting many items, call AllocClientData())
|
||||
void InsertNewItemClientData(unsigned int pos,
|
||||
void **clientData,
|
||||
unsigned int n,
|
||||
wxClientDataType type)
|
||||
{
|
||||
if ( InitClientDataIfNeeded(type) )
|
||||
m_itemsClientData.Insert(clientData[n], pos);
|
||||
}
|
||||
|
||||
// the same as InsertNewItemClientData() but for numItems consecutive items
|
||||
// (this can only be used if the control doesn't support sorting as
|
||||
// otherwise the items positions wouldn't be consecutive any more)
|
||||
void InsertNewItemsClientData(unsigned int pos,
|
||||
unsigned int numItems,
|
||||
void **clientData,
|
||||
wxClientDataType type)
|
||||
{
|
||||
if ( InitClientDataIfNeeded(type) )
|
||||
{
|
||||
// it's more efficient to insert everything at once and then update
|
||||
// for big number of items to avoid moving the array contents
|
||||
// around (which would result in O(N^2) algorithm)
|
||||
m_itemsClientData.Insert(NULL, pos, numItems);
|
||||
|
||||
for ( unsigned int n = 0; n < numItems; ++n, ++pos )
|
||||
m_itemsClientData[pos] = clientData[n];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// vector containing the client data pointers: it is either empty (if
|
||||
// client data is not used) or has the same number of elements as the
|
||||
// control
|
||||
wxArrayPtrVoid m_itemsClientData;
|
||||
|
||||
private:
|
||||
// initialize client data if needed, return false if we don't have any
|
||||
// client data and true otherwise
|
||||
bool InitClientDataIfNeeded(wxClientDataType type)
|
||||
{
|
||||
if ( !HasClientData() )
|
||||
{
|
||||
if ( type == wxClientData_None )
|
||||
{
|
||||
// we didn't have the client data before and are not asked to
|
||||
// store it now neither
|
||||
return false;
|
||||
}
|
||||
|
||||
// this is the first time client data is used with this control
|
||||
DoInitItemClientData();
|
||||
SetClientDataType(type);
|
||||
}
|
||||
//else: we already have client data
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(wxControlWithItemsGeneric);
|
||||
};
|
||||
|
||||
#endif // _WX_GENERIC_CTRLSUB_H_
|
||||
|
Reference in New Issue
Block a user