Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | Related Pages

VDKTreeViewModel Class Reference

Provides a wrapper for GtkTreeModel basically it stores data to be viewed with a VDKTreeView. More...

#include <vdktreeview.h>

Inheritance diagram for VDKTreeViewModel:

VDKNotCopyAble List of all members.

Public Member Functions


Detailed Description

Provides a wrapper for GtkTreeModel basically it stores data to be viewed with a VDKTreeView.


Constructor & Destructor Documentation

VDKTreeViewModel::VDKTreeViewModel GType *  types,
int  ncol
 

constructor

Parameters:
types a GType array
ncol the number of columns into the model

VDKTreeViewModel::~VDKTreeViewModel  ) 
 

destructor


Member Function Documentation

void VDKTreeViewModel::AppendBlank GtkTreeIter *  iter,
GtkTreeIter *  parent = NULL
 

Appends a new blank tree row

Parameters:
iter a not initialized iter address that will be filled with newly constructed tree row
parent if not NULL the row will appended as a child otherwise it will be appended as a sibling. TIP:
  • appending all rows as sibling will degenerate the tree into a list
          GtkTreeIter iter;
          model->AppendBlank();
          model->SetData(&iter,...);
    

void VDKTreeViewModel::Clear  ) 
 

Clears the tree store

char * VDKTreeViewModel::GetCell GtkTreeIter *  node,
int  column
 

Get data from a cell, data type will be converted into their string representation accordlying with GType.

Parameters:
node iterator to be retrieved
column cell column
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

Tip: Returned buffer address should be freed by user if not NULL.

    //signal response method
    bool 
    TvForm::OnTreeViewSelectRow(VDKObject* sender) 
    {
       // gets selections
       treeview->GetSelections();
       // disregard multiple selections
       if(treeview->Selections().size() == 1)
         {
         VDKTreeViewModel* model = treeview->Model;
         // gets iter position from selections list
         GtkTreeIter iter = treeview->Selections()[0];
         char* firstname = model->GetCell(&iter,0); // extract from iter position at column 0
         char* lastname  = model->GetCell(&iter,1);
         if(firstname && lastname) // GetCell() returns NULL on failure
           {
           printf("\n[%s %s]",firstname,lastname);
           fflush(stdout);
           delete[] firstname;
           delete[] lastname;
           }
         }
       treeview->Selections().flush();   
      return true;
   }

void VDKTreeViewModel::GetTuple GtkTreeIter *  node,
VDKTreeViewModelTuple tuple
 

Gets and fill a tuple with row data converted into their string representation

Parameters:
node iterator to be retrieved
tuple a tuple reference (tuple can be empty since it will be resized and filled by the method

GtkTreeStore* VDKTreeViewModel::GtkModel  )  [inline]
 

Return underlying GtkTreeStore object

bool VDKTreeViewModel::HasChild  ) 
 

Move iterator to root node

Parameters:
iter a not initialized iter address that will be filled with root node pointer
    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()); // uses presently pointed node 
      if(ti.HasChild())
        recurse (ti.current());
      }
    }
    bool
    TreeViewComponent::OnTrasverseClicked (VDKObject* sender)
    {
     recurse(NULL);
     return true;
    }

void VDKTreeViewModel::InsertTuple GtkTreeIter *  iter,
VDKTreeViewModelTuple tuple,
GtkTreeIter *  parent = NULL,
bool  recurse = false
 

Insert a tuple into model, tuple will be inserted in order.

Parameters:
iter a not initialized iter address that will be filled with newly constructed tree row
tuple to be inserted
parent if is NULL tuple will be inserted in order into top level nodes list otherwise will be inserted in order into parent children list
recurse if true scans children/sibling list recursively to search insertion position

void VDKTreeViewModel::operator++ int   ) 
 

Incremental operator (infix), visit next sibling node

void VDKTreeViewModel::operator++  ) 
 

Incremental operator (postfix), visit next sibling node

void VDKTreeViewModel::PrependBlank GtkTreeIter *  iter,
GtkTreeIter *  parent = NULL
 

Prepends a new blank tree row

Parameters:
iter a not initialized iter address that will be filled with newly constructed tree row
parent if not NULL the row will prepended as a child otherwise it will be prepended as a sibling. TIP:
  • prepending all rows as sibling will degenerate the tree into a list
      GtkTreeIter iter;
      model->PrependBlank();
      model->SetData(&iter,...);

void VDKTreeViewModel::Remove GtkTreeIter *  i  ) 
 

Removes the row at iter

Parameters:
i the iter to be removed

void VDKTreeViewModel::SetCell GtkTreeIter *  node,
int  column,
const char *  value
 

Sets data into a cell

Parameters:
node the iterator to be set
column cell column
value a string representation of GType value that will be converted into a GType accordlying with the model
    GtkTreeIter *iter = model->PrependBlank();
    model->SetCell(iter,0, "test");
    model->SetCell(iter,1, "true");

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

void VDKTreeViewModel::SetData GtkTreeIter *  node,
  ...
 

Sets data into a row

Parameters:
node the iterator to be set
a list of pairs <column ordinal number,type value> the list must be -1 terminated.
    GtkTreeIter   iter;
    model->AppendBlank();
    model->SetData(&iter, 0, "This is row 1", 1, FALSE, 2, NULL, -1);


The documentation for this class was generated from the following files:
Generated on Sat Sep 3 12:10:20 2005 for vdk 2.4.0 by  doxygen 1.4.4