vdk 2.4.0
vdktreeview.h
1 /*
2  * ===========================
3  * VDK Visual Development Kit
4  * Version 2.0
5  * November 2001
6  * ===========================
7  *
8  * Copyright (C) 1998, Mario Motta
9  * Developed by Mario Motta <mmotta@guest.net>
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public
22  * License along with this library; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24  * 02111-1307, USA.
25  */
26 
27 #ifndef TREEVIEW_H
28 #define TREEVIEW_H
29 #include <vdk/vdkobj.h>
30 #include <vdk/dlist.h>
31 #include <vdk/vdkprops.h>
32 #include <vdk/vdkarray.h>
33 #include <vdk/value_sem_list.h>
34 class VDKTreeView;
35 
42 typedef bool (*VDKStringCompareFunction)(VDKString&, VDKString&);
43 
45 {
46  /*
47  int key_index;
48  bool (*equal)(VDKString&, VDKString&);
49  bool (*less)(VDKString&, VDKString&);
50  */
51  public:
55  VDKReadWriteValueProp<VDKTreeViewModelTuple,int> KeyIndex;
59  VDKReadWriteValueProp<VDKTreeViewModelTuple,VDKStringCompareFunction> Less;
63  VDKReadWriteValueProp<VDKTreeViewModelTuple,VDKStringCompareFunction> Equal;
74  VDKTreeViewModelTuple(int n = 0, int key = 0, VDKStringCompareFunction less = NULL,
75  VDKStringCompareFunction equal= NULL):
76  StringRow(n),
77  KeyIndex("KeyIndex",this,key),
78  Less("Less",this,less),
79  Equal("Equal",this,equal)
80  {
81 
82  }
83 
84  virtual ~VDKTreeViewModelTuple() {}
85  /*
86  VDKTreeViewModelTuple(const VDKTreeViewModelTuple& tuple)
87  {
88  *this = tuple;
89  }
90 
91  VDKTreeViewModelTuple& operator=(const VDKTreeViewModelTuple& tuple)
92  {
93  resize(tuple.size());
94  for(int t = 0; t < size(); t++)
95  (*this)[t] = tuple[t];
96  int key_index = tuple.KeyIndex;
97  VDKStringCompareFunction less = tuple.Less;
98  VDKStringCompareFunction equal = tuple.Equal;
99  KeyIndex = key_index;
100  Less = less;
101  Equal = equal;
102  }
103  */
104  int operator <(VDKTreeViewModelTuple& t)
105  {
106  int key_index = KeyIndex;
107  VDKStringCompareFunction less = Less;
108  if(less)
109  return less((*this)[key_index],t[key_index]);
110  else
111  return (*this)[key_index] < t[key_index];
112  }
113  int operator==(VDKTreeViewModelTuple& t)
114  {
115  int key_index = KeyIndex;
116  VDKStringCompareFunction equal = Equal;
117  if(equal)
118  return equal((*this)[key_index],t[key_index]);
119  else
120  return (*this)[key_index] == t[key_index];
121  }
122 };
123 
134 {
135  protected:
136  GtkTreeStore *model;
137  // GtkTreeIter iter;
138  public:
142  GtkTreeStore* GtkModel() { return model; }
148  VDKTreeViewModel(GType* types, int ncol);
166  void AppendBlank(GtkTreeIter* iter,GtkTreeIter* parent = NULL);
181  void PrependBlank(GtkTreeIter* iter,GtkTreeIter* parent = NULL);
191  void InsertTuple(GtkTreeIter* iter,VDKTreeViewModelTuple &tuple,GtkTreeIter* parent = NULL, bool recurse = false);
195  void Clear();
200  void Remove(GtkTreeIter* i);
213  void SetData(GtkTreeIter* node,...);
238  void SetCell(GtkTreeIter* node, int column, const char* value);
287  char *GetCell(GtkTreeIter* node, int column);
295  void GetTuple(GtkTreeIter* node,VDKTreeViewModelTuple& tuple);
312  bool Root(GtkTreeIter* iter);
317  bool Next(GtkTreeIter* iter);
322  bool HasChild(GtkTreeIter* iter)
323  { return gtk_tree_model_iter_has_child (GTK_TREE_MODEL(model), iter); }
331  bool Child(GtkTreeIter* iter,GtkTreeIter* parent);
351  bool Find(GtkTreeIter* iter,int column, char* value);
352 
353 };
354 
355 
359 class VDKTreeViewModelIterator
360 {
361  VDKTreeViewModel* model;
362  GtkTreeIter iter, *internal_iter;
363  public:
364  VDKTreeViewModelIterator(): model(NULL),internal_iter(NULL) {}
371  VDKTreeViewModelIterator(VDKTreeViewModel* model,GtkTreeIter* parent = NULL);
375  GtkTreeIter* current() { return internal_iter; }
379  operator int() { return internal_iter != NULL; }
407  bool HasChild();
411  void operator++();
415  void operator++(int);
416 };
417 
423 {
424  protected:
425  static void edited_callback (GtkCellRendererText *cell,
426  gchar *path_string,
427  gchar *new_text,
428  gpointer data);
429  static void toggled_callback (GtkCellRendererToggle *cell,
430  gchar *path_string,
431  gpointer data);
432  private:
433  GtkCellRenderer *cell;
434  GtkTreeViewColumn *column;
435  VDKTreeView* owner;
436  gulong handler_seq_no;
437  int id;
438  public:
442  VDKReadWriteValueProp<VDKTreeViewColumn,VDKRgb> NormalBackground;
446  VDKReadWriteValueProp<VDKTreeViewColumn,VDKRgb> Foreground;
450  VDKReadWriteValueProp<VDKTreeViewColumn,VDKFont*> Font;
454  VDKReadWriteValueProp<VDKTreeViewColumn,const char*> Title;
460  VDKReadWriteValueProp<VDKTreeViewColumn,int> Width;
464  VDKReadWriteValueProp<VDKTreeViewColumn,bool> Sortable;
465 
532  int column,
533  char* title = NULL,
534  bool editable = false,
535  int editcol = -1);
543  GtkTreeViewColumn *GtkColumn() { return column; }
547  GtkCellRenderer* Renderer() { return cell; }
551  VDKTreeView* Owner() { return owner; }
555  void ActiveTitle(bool flag = true);
556 
557  protected:
558  void SetNormalBackground(VDKRgb rgb);
559  void SetForeground(VDKRgb rgb);
560  void SetFont(VDKFont* font);
561  void SetTitle(const char* title);
562  const char* GetTitle();
563  void SetWidth(int w);
564  int GetWidth();
565  void SetSortable(bool flag);
566  bool GetSortable();
567 };
568 
570 typedef VDKListIterator<VDKTreeViewColumn> VDKTreeViewColumnListIterator;
575 class VDKTreeViewIter: public GtkTreeIter
576 {
577  GtkTreeModel *model;
578  public:
583  VDKTreeViewIter(GtkTreeModel *model= NULL): model(model) {}
587  GtkTreeModel* Model(GtkTreeModel* m = NULL) { if(m) model = m; return model; }
588  // meaningless
592  bool operator==(VDKTreeViewIter& i) { return false; }
596  bool operator<(VDKTreeViewIter& i) { return false; }
602  bool Child(VDKTreeViewIter* child_iter);
608  bool Parent(VDKTreeViewIter* parent_iter);
609 };
610 
614 
620 class VDKTreeView: public VDKObject
621 {
622  private:
623  GtkTreeSelection *selection;
624  VDKTreeViewColumnList *columns;
625  VDKTreeViewIterList selections;
626 
627  protected:
628 
629  public:
633  VDKReadWriteValueProp<VDKTreeView,VDKTreeViewModel*> Model;
637  VDKReadOnlyValueProp<VDKTreeView,int> SelectedColumn;
649  VDKTreeView(VDKForm* owner ,
650  VDKTreeViewModel* model = NULL,
651  GtkSelectionMode mode = GTK_SELECTION_SINGLE);
655  ~VDKTreeView();
656 
660  void SetModel(VDKTreeViewModel* model);
661 
665  VDKTreeViewColumnList * Columns() { return columns; }
669  void GetSelections();
675  VDKTreeViewIterList &Selections() { return selections; }
680  void SelectNode(GtkTreeIter* iter);
685  void UnselectNode(GtkTreeIter* iter);
691  void Expand(GtkTreeIter* iter = NULL, bool expand_all = false);
695  void RemoveSelected(void);
696 #ifdef USE_SIGCPLUSPLUS
697 
710  VDKSignal3< void, GtkTreeIter*, int , char* > OnCellEdited;
724  VDKSignal3< void, GtkTreeIter*, int, bool> OnCellToggled;
725 #endif
726 };
727 
728 #endif
729 
730 
731 
732 
VDKTreeViewModel::Remove
void Remove(GtkTreeIter *i)
Definition: vdktreeview.cc:103
VDKTreeViewModel::SetData
void SetData(GtkTreeIter *node,...)
Definition: vdktreeview.cc:118
VDKTreeViewColumn::Owner
VDKTreeView * Owner()
Definition: vdktreeview.h:551
VDKTreeView::Selections
VDKTreeViewIterList & Selections()
Definition: vdktreeview.h:675
VDKObject
Definition: vdkobj.h:137
VDKTreeViewModel::InsertTuple
void InsertTuple(GtkTreeIter *iter, VDKTreeViewModelTuple &tuple, GtkTreeIter *parent=NULL, bool recurse=false)
Definition: vdktreeview.cc:61
VDKTreeView::Expand
void Expand(GtkTreeIter *iter=NULL, bool expand_all=false)
Definition: vdktreeview.cc:855
VDKTreeView::UnselectNode
void UnselectNode(GtkTreeIter *iter)
Definition: vdktreeview.cc:847
VDKTreeViewColumn::Foreground
VDKReadWriteValueProp< VDKTreeViewColumn, VDKRgb > Foreground
Definition: vdktreeview.h:446
VDKRgb
Provides a simple RGB color structure.
Definition: vdkutils.h:37
VDKTreeView::GetSelections
void GetSelections()
Definition: vdktreeview.cc:772
VDKTreeViewIter
Provides a wrapper for GtkTreeIter.
Definition: vdktreeview.h:575
VDKTreeViewColumn
Provides a wrapper for GtkTreeColumn.
Definition: vdktreeview.h:422
VDKTreeViewModel::HasChild
bool HasChild()
VDKTreeViewModel::GetTuple
void GetTuple(GtkTreeIter *node, VDKTreeViewModelTuple &tuple)
Definition: vdktreeview.cc:356
VDKTreeViewColumn::VDKTreeViewColumn
VDKTreeViewColumn(VDKTreeView *owner, int column, char *title=NULL, bool editable=false, int editcol=-1)
Definition: vdktreeview.cc:492
VDKTreeViewModelTuple::Equal
VDKReadWriteValueProp< VDKTreeViewModelTuple, VDKStringCompareFunction > Equal
Definition: vdktreeview.h:63
VDKTreeViewIter::Parent
bool Parent(VDKTreeViewIter *parent_iter)
Definition: vdktreeview.cc:672
VDKTreeViewModel::~VDKTreeViewModel
~VDKTreeViewModel()
Definition: vdktreeview.cc:127
VDKValueListIterator
provides a VDKValueList iterator
Definition: value_sem_list.h:55
VDKTreeView::RemoveSelected
void RemoveSelected(void)
Definition: vdktreeview.cc:873
VDKTreeViewModel
Provides a wrapper for GtkTreeModel basically it stores data to be viewed with a VDKTreeView.
Definition: vdktreeview.h:133
VDKTreeViewModel::SetCell
void SetCell(GtkTreeIter *node, int column, const char *value)
Definition: vdktreeview.cc:253
VDKTreeViewColumn::Renderer
GtkCellRenderer * Renderer()
Definition: vdktreeview.h:547
VDKTreeView::SelectNode
void SelectNode(GtkTreeIter *iter)
Definition: vdktreeview.cc:839
VDKNotCopyAble
Hierarchy root class.
Definition: vdkutils.h:263
VDKTreeView::Model
VDKReadWriteValueProp< VDKTreeView, VDKTreeViewModel * > Model
Definition: vdktreeview.h:633
VDKList
Provides a reference semantic double linked list.
Definition: dlist.h:64
VDKTreeView
Provides a wrapper for GtkTreeView widget.
Definition: vdktreeview.h:620
VDKTreeViewIter::VDKTreeViewIter
VDKTreeViewIter(GtkTreeModel *model=NULL)
Definition: vdktreeview.h:583
VDKForm
VDKForm widgets, generally the outermost widget container.
Definition: forms.h:68
VDKTreeViewIter::Child
bool Child(VDKTreeViewIter *child_iter)
Definition: vdktreeview.cc:660
VDKString
Implements famous cont referenced string objects.
Definition: vdkstring.h:45
VDKTreeView::Columns
VDKTreeViewColumnList * Columns()
Definition: vdktreeview.h:665
VDKTreeViewModel::VDKTreeViewModel
VDKTreeViewModel(GType *types, int ncol)
Definition: vdktreeview.cc:40
VDKTreeViewModelTuple
Definition: vdktreeview.h:44
VDKTreeView::VDKTreeView
VDKTreeView(VDKForm *owner, VDKTreeViewModel *model=NULL, GtkSelectionMode mode=GTK_SELECTION_SINGLE)
Definition: vdktreeview.cc:780
VDKValueList
provides a templatized double-linked list
Definition: value_sem_list.h:54
VDKTreeViewColumn::NormalBackground
VDKReadWriteValueProp< VDKTreeViewColumn, VDKRgb > NormalBackground
Definition: vdktreeview.h:442
VDKArray
provides a templatized array
Definition: vdkarray.h:72
VDKTreeViewColumn::Sortable
VDKReadWriteValueProp< VDKTreeViewColumn, bool > Sortable
Definition: vdktreeview.h:464
VDKTreeViewModel::GetCell
char * GetCell(GtkTreeIter *node, int column)
Definition: vdktreeview.cc:157
VDKTreeViewColumn::ActiveTitle
void ActiveTitle(bool flag=true)
Definition: vdktreeview.cc:567
VDKTreeViewModelTuple::KeyIndex
VDKReadWriteValueProp< VDKTreeViewModelTuple, int > KeyIndex
Definition: vdktreeview.h:55
VDKTreeViewModel::AppendBlank
void AppendBlank(GtkTreeIter *iter, GtkTreeIter *parent=NULL)
Definition: vdktreeview.cc:47
VDKTreeViewModel::PrependBlank
void PrependBlank(GtkTreeIter *iter, GtkTreeIter *parent=NULL)
Definition: vdktreeview.cc:54
VDKTreeView::SelectedColumn
VDKReadOnlyValueProp< VDKTreeView, int > SelectedColumn
Definition: vdktreeview.h:637
VDKTreeViewColumn::~VDKTreeViewColumn
~VDKTreeViewColumn()
Definition: vdktreeview.cc:560
VDKTreeViewColumn::Title
VDKReadWriteValueProp< VDKTreeViewColumn, const char * > Title
Definition: vdktreeview.h:454
VDKTreeView::~VDKTreeView
~VDKTreeView()
Definition: vdktreeview.cc:815
VDKTreeViewModelTuple::VDKTreeViewModelTuple
VDKTreeViewModelTuple(int n=0, int key=0, VDKStringCompareFunction less=NULL, VDKStringCompareFunction equal=NULL)
Definition: vdktreeview.h:74
VDKTreeViewModel::Clear
void Clear()
Definition: vdktreeview.cc:111
VDKTreeViewColumn::GtkColumn
GtkTreeViewColumn * GtkColumn()
Definition: vdktreeview.h:543
VDKTreeViewModel::GtkModel
GtkTreeStore * GtkModel()
Definition: vdktreeview.h:142
VDKTreeViewModelTuple::Less
VDKReadWriteValueProp< VDKTreeViewModelTuple, VDKStringCompareFunction > Less
Definition: vdktreeview.h:59
VDKFont
Provides a raw font.
Definition: vdkfont.h:37
VDKTreeViewColumn::Width
VDKReadWriteValueProp< VDKTreeViewColumn, int > Width
Definition: vdktreeview.h:460
VDKTreeViewColumn::Font
VDKReadWriteValueProp< VDKTreeViewColumn, VDKFont * > Font
Definition: vdktreeview.h:450