1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
|
//////////////////////////////////////////////////////////////////////
// This file was auto-generated by codelite's wxCrafter Plugin
// Do not modify this file by hand!
//////////////////////////////////////////////////////////////////////
#ifndef __OpenResourceDialogModel_GUARD__H__
#define __OpenResourceDialogModel_GUARD__H__
#include <wx/variant.h>
#include <wx/dataview.h>
#include <algorithm>
#include <wx/clntdata.h>
/**
* @brief each item in the wxDataViewCtrl is represented in the model by this class.
* m_data - contains the data (columns values) as passed when adding an item to the wxDataViewCtrl model class
* m_clientData - is the user client data (owned by the model)
* To convert between a wxDataViewItem to a OpenResourceDialogModel_Item class, simply use:
* @code
* OpenResourceDialogModel_Item* itemData = reinterpret_cast<OpenResourceDialogModel_Item*>( item.GetID() );
* if ( itemData ) {
* // you can now traverese the tree or have a direct access to the model internal data
* // note that you must not delete itemData as it is owned by the model and
* }
* @endcode
*/
class OpenResourceDialogModel_Item
{
protected:
wxVector<wxVariant> m_data;
OpenResourceDialogModel_Item* m_parent;
wxVector<OpenResourceDialogModel_Item*> m_children;
bool m_isContainer;
wxClientData* m_clientData;
public:
OpenResourceDialogModel_Item()
: m_parent(NULL)
, m_isContainer(false)
, m_clientData(NULL)
{}
virtual ~OpenResourceDialogModel_Item() {
if ( m_clientData ) {
delete m_clientData;
m_clientData = NULL;
}
m_data.clear();
// Delete our children
// since the deletion of a child may alter its parent m_children array
// we use a temporary vector for the loop
wxVector<OpenResourceDialogModel_Item*> tmpChildren = m_children;
while ( !tmpChildren.empty() ) {
delete (*tmpChildren.begin());
tmpChildren.erase(tmpChildren.begin());
}
m_children.clear();
// Remove us from the parent
if ( m_parent ) {
m_parent->RemoveChild(this);
}
}
void SetIsContainer(bool b) {
m_isContainer = b;
}
bool IsContainer() const {
return m_isContainer;
}
/**
* @brief remove a child from this node and free its memory
* @param child
*/
void DeleteChild(OpenResourceDialogModel_Item* child) {
wxVector<OpenResourceDialogModel_Item*>::iterator iter = std::find(m_children.begin(), m_children.end(), child);
if ( iter != m_children.end() ) {
delete *iter;
m_children.erase(iter);
}
}
/**
* @brief remove child from this node without freeing its memory
* @param child
*/
void RemoveChild(OpenResourceDialogModel_Item* child) {
wxVector<OpenResourceDialogModel_Item*>::iterator iter = std::find(m_children.begin(), m_children.end(), child);
if ( iter != m_children.end() ) {
m_children.erase(iter);
}
}
/**
* @brief add child to this node
*/
void AddChild(OpenResourceDialogModel_Item* child) {
m_children.push_back(child);
child->m_parent = this;
}
bool IsRoot() const {
return m_parent == NULL;
}
// Setters / Getters
void SetChildren(const wxVector<OpenResourceDialogModel_Item*>& children) {
this->m_children = children;
}
void SetData(const wxVector<wxVariant>& data) {
this->m_data = data;
}
void SetParent(OpenResourceDialogModel_Item* parent) {
this->m_parent = parent;
}
const wxVector<OpenResourceDialogModel_Item*>& GetChildren() const {
return m_children;
}
wxVector<OpenResourceDialogModel_Item*>& GetChildren() {
return m_children;
}
const wxVector<wxVariant>& GetData() const {
return m_data;
}
wxVector<wxVariant>& GetData() {
return m_data;
}
OpenResourceDialogModel_Item* GetParent() {
return m_parent;
}
void SetClientObject(wxClientData *data) {
if ( m_clientData ) {
delete m_clientData;
}
m_clientData = data;
}
wxClientData* GetClientObject() const {
return m_clientData;
}
};
//////////////////////////////////////////////
// The TreeListCtrl model
//////////////////////////////////////////////
class OpenResourceDialogModel : public wxDataViewModel
{
protected:
wxVector<OpenResourceDialogModel_Item*> m_data;
unsigned int m_colCount;
public:
OpenResourceDialogModel();
virtual ~OpenResourceDialogModel();
/**
* @brief a helper method creating a wxVariant containing both bitmap and text
* this is useful when mostly when populating a column of type 'icontext'
*/
static wxVariant CreateIconTextVariant(const wxString &text, const wxBitmap& bmp);
void SetColCount(unsigned int colCount) {
this->m_colCount = colCount;
}
void SetData(const wxVector<OpenResourceDialogModel_Item*> data) {
this->m_data = data;
}
unsigned int GetColCount() const {
return m_colCount;
}
const wxVector<OpenResourceDialogModel_Item*>& GetData() const {
return m_data;
}
wxVector<OpenResourceDialogModel_Item*>& GetData() {
return m_data;
}
virtual bool HasContainerColumns (const wxDataViewItem& item) const {
return true;
}
public:
// Make the functions below 'virtual' so the user may override them
virtual unsigned int GetColumnCount() const;
virtual wxString GetColumnType(unsigned int col) const;
virtual void GetValue(wxVariant& variant, const wxDataViewItem& item, unsigned int col) const;
virtual bool SetValue(const wxVariant &variant, const wxDataViewItem &item, unsigned int col);
protected:
// Helpers
virtual wxDataViewItem DoAppendItem(const wxDataViewItem& parent, const wxVector<wxVariant>& data, bool isContainer, wxClientData *clientData = NULL);
virtual wxDataViewItem DoInsertItem(const wxDataViewItem& insertBeforeMe, const wxVector<wxVariant>& data, bool isContainer, wxClientData *clientData);
virtual void DoChangeItemType(const wxDataViewItem& item, bool changeToContainer);
public:
/**
* @brief Append a line to the model
* clientData will be owned by the model once added (i.e. the clientData must be allocated on the heap and it will be freed by the model)
*/
virtual wxDataViewItem AppendItem(const wxDataViewItem& parent, const wxVector<wxVariant>& data, wxClientData *clientData = NULL);
/**
* @brief Append a lines to the model
*/
virtual wxDataViewItemArray AppendItems(const wxDataViewItem& parent, const wxVector<wxVector<wxVariant> >& data);
/**
* @brief delete an item and all its children
* @param parent
*/
virtual void DeleteItem(const wxDataViewItem& item);
/**
* @brief delete an item
* @param parent
*/
virtual void DeleteItems(const wxDataViewItem& parent, const wxDataViewItemArray& items);
/**
* @brief update an item data + client-data
*/
virtual void UpdateItem(const wxDataViewItem& item, const wxVector<wxVariant>& data);
/**
* @brief insert an item into the model before 'insertBeforeMe' item. Return the newly inserted item on success
*/
virtual wxDataViewItem InsertItem (const wxDataViewItem& insertBeforeMe, const wxVector<wxVariant>& data, wxClientData *clientData = NULL);
/**
* @brief clear the control and delete all its content
*/
virtual void Clear();
virtual bool IsEmpty() const;
/**
* @brief returns the client data associated with this item
**/
wxClientData* GetClientObject(const wxDataViewItem& item) const;
/**
* @brief set the client data for an item. The item data will be freed by the model
*/
void SetClientObject(const wxDataViewItem& item, wxClientData *data);
/**
* @brief returns the item columns data (as passed to AppendItem(..) / InsertItem(...))
*/
wxVector<wxVariant> GetItemColumnsData(const wxDataViewItem& item) const;
/**
* @brief return true if this node is a container (i.e. has children)
*/
virtual bool IsContainer(const wxDataViewItem& item) const;
/**
* @brief return true if item has children
*/
virtual bool HasChildren(const wxDataViewItem& item) const;
/**
* @brief return the item parent. Return an invalid item if this item has no parent (item.IsOk() = false)
*/
virtual wxDataViewItem GetParent(const wxDataViewItem& item) const;
/**
* @brief return the item's children as an array.
* @return children count
*/
virtual unsigned int GetChildren(const wxDataViewItem& item, wxDataViewItemArray& children) const;
};
#endif // __OpenResourceDialogModel_GUARD__H__
|