GtkTreeIter iter;
if(model->Root(&iter))
{
char* cell = model->GetCell(&iter,0);
if(cell)
{
delete[] cell;
}
}
bool Root(GtkTreeIter* iter);
!
Move iterator forward at present level
\param iter a not initialized iter address that will be filled with next node pointer
bool Next(GtkTreeIter* iter);
!
Returns true if iter has a child
\param iter
bool HasChild(GtkTreeIter* iter)
{ return gtk_tree_model_iter_has_child (GTK_TREE_MODEL(model), iter); }
!
Return the child of a parent node
\param iter a not initialized iter address that will be filled with child node pointer
\param parent a valid iter address of the parent node
Returns true if <parent> has a child, <iter> left undefined otherwise
bool Child(GtkTreeIter* iter,GtkTreeIter* parent);
!
Executes a linear search (deep first on childs), returns true if <value> found
\param iter a GtkTreeIter address to be filled with iter data if <value> found
\param column to be scanned to execute search
\param value a string representation of a GType value that will be converted
into a GType accordlying with the model
Supported GType's:
- G_TYPE_CHAR
- G_TYPE_STRING
- G_TYPE_BOOLEAN
- G_TYPE_INT
- G_TYPE_UINT
- G_TYPE_LONG
- G_TYPE_ULONG
- G_TYPE_FLOAT
- G_TYPE_DOUBLE
Returns true if found
bool Find(GtkTreeIter* iter,int column, char* value);
};
!
Provides an iterator on VDKTreeViewModel
class VDKTreeViewModelIterator
{
VDKTreeViewModel* model;
GtkTreeIter iter, *internal_iter;
public:
VDKTreeViewModelIterator(): model(NULL),internal_iter(NULL) {}
!
Constructor
\param model
\param parent if NULL makes an iterator on top level nodes,
otherwise makes an iterator on parent childs
VDKTreeViewModelIterator(VDKTreeViewModel* model,GtkTreeIter* parent = NULL);
!
return node presently visited
GtkTreeIter* current() { return internal_iter; }
!
Returns true if presently visited node is valid
operator int() { return internal_iter != NULL; }
!
Returns true if presently visited node has a child.
TIP:
Since iterator incremental operator skips on next sibling node, you can use this
to visit all tree nodes on depth-first strategy using recursion.
See example below taken from /testvdk/treeviewcompo.cc:
\code
void
TreeViewComponent::recurse(GtkTreeIter* iter)
{
VDKTreeViewModel* model = tree->Model;
VDKTreeViewModelIterator ti(model,iter);
for(;ti;ti++)
{
PrintRow(ti.current());
if(ti.HasChild())
recurse (ti.current());
}
}
bool
TreeViewComponent::OnTrasverseClicked (VDKObject* sender)
{
recurse(NULL);
return true;
}