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>
34class VDKTreeView;
35
42typedef 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
359class 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();
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
570typedef VDKListIterator<VDKTreeViewColumn> VDKTreeViewColumnListIterator;
575class 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
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
710 VDKSignal3< void, GtkTreeIter*, int , char* > OnCellEdited;
724 VDKSignal3< void, GtkTreeIter*, int, bool> OnCellToggled;
725#endif
726};
727
728#endif
729
730
731
732
provides a templatized array
Definition: vdkarray.h:73
Provides a raw font.
Definition: vdkfont.h:38
VDKForm widgets, generally the outermost widget container.
Definition: forms.h:69
Provides a reference semantic double linked list.
Definition: dlist.h:65
Hierarchy root class.
Definition: vdkutils.h:264
Definition: vdkobj.h:141
Provides a simple RGB color structure.
Definition: vdkutils.h:38
Implements famous cont referenced string objects.
Definition: vdkstring.h:46
Provides a wrapper for GtkTreeColumn.
Definition: vdktreeview.h:423
VDKReadWriteValueProp< VDKTreeViewColumn, VDKFont * > Font
Definition: vdktreeview.h:450
VDKReadWriteValueProp< VDKTreeViewColumn, int > Width
Definition: vdktreeview.h:460
VDKReadWriteValueProp< VDKTreeViewColumn, bool > Sortable
Definition: vdktreeview.h:464
VDKTreeView * Owner()
Definition: vdktreeview.h:551
GtkCellRenderer * Renderer()
Definition: vdktreeview.h:547
GtkTreeViewColumn * GtkColumn()
Definition: vdktreeview.h:543
VDKReadWriteValueProp< VDKTreeViewColumn, VDKRgb > NormalBackground
Definition: vdktreeview.h:442
~VDKTreeViewColumn()
Definition: vdktreeview.cc:560
VDKTreeViewColumn(VDKTreeView *owner, int column, char *title=NULL, bool editable=false, int editcol=-1)
Definition: vdktreeview.cc:492
VDKReadWriteValueProp< VDKTreeViewColumn, const char * > Title
Definition: vdktreeview.h:454
VDKReadWriteValueProp< VDKTreeViewColumn, VDKRgb > Foreground
Definition: vdktreeview.h:446
void ActiveTitle(bool flag=true)
Definition: vdktreeview.cc:567
Provides a wrapper for GtkTreeIter.
Definition: vdktreeview.h:576
bool Child(VDKTreeViewIter *child_iter)
Definition: vdktreeview.cc:660
bool Parent(VDKTreeViewIter *parent_iter)
Definition: vdktreeview.cc:672
VDKTreeViewIter(GtkTreeModel *model=NULL)
Definition: vdktreeview.h:583
Definition: vdktreeview.h:45
VDKReadWriteValueProp< VDKTreeViewModelTuple, VDKStringCompareFunction > Less
Definition: vdktreeview.h:59
VDKTreeViewModelTuple(int n=0, int key=0, VDKStringCompareFunction less=NULL, VDKStringCompareFunction equal=NULL)
Definition: vdktreeview.h:74
VDKReadWriteValueProp< VDKTreeViewModelTuple, VDKStringCompareFunction > Equal
Definition: vdktreeview.h:63
VDKReadWriteValueProp< VDKTreeViewModelTuple, int > KeyIndex
Definition: vdktreeview.h:55
Provides a wrapper for GtkTreeModel basically it stores data to be viewed with a VDKTreeView.
Definition: vdktreeview.h:134
void operator++(int)
void PrependBlank(GtkTreeIter *iter, GtkTreeIter *parent=NULL)
Definition: vdktreeview.cc:54
GtkTreeStore * GtkModel()
Definition: vdktreeview.h:142
char * GetCell(GtkTreeIter *node, int column)
Definition: vdktreeview.cc:157
void SetCell(GtkTreeIter *node, int column, const char *value)
Definition: vdktreeview.cc:253
void SetData(GtkTreeIter *node,...)
Definition: vdktreeview.cc:118
void Clear()
Definition: vdktreeview.cc:111
void GetTuple(GtkTreeIter *node, VDKTreeViewModelTuple &tuple)
Definition: vdktreeview.cc:356
void Remove(GtkTreeIter *i)
Definition: vdktreeview.cc:103
void InsertTuple(GtkTreeIter *iter, VDKTreeViewModelTuple &tuple, GtkTreeIter *parent=NULL, bool recurse=false)
Definition: vdktreeview.cc:61
void AppendBlank(GtkTreeIter *iter, GtkTreeIter *parent=NULL)
Definition: vdktreeview.cc:47
~VDKTreeViewModel()
Definition: vdktreeview.cc:127
VDKTreeViewModel(GType *types, int ncol)
Definition: vdktreeview.cc:40
Provides a wrapper for GtkTreeView widget.
Definition: vdktreeview.h:621
void UnselectNode(GtkTreeIter *iter)
Definition: vdktreeview.cc:847
VDKTreeViewColumnList * Columns()
Definition: vdktreeview.h:665
void GetSelections()
Definition: vdktreeview.cc:772
VDKReadWriteValueProp< VDKTreeView, VDKTreeViewModel * > Model
Definition: vdktreeview.h:633
VDKReadOnlyValueProp< VDKTreeView, int > SelectedColumn
Definition: vdktreeview.h:637
void Expand(GtkTreeIter *iter=NULL, bool expand_all=false)
Definition: vdktreeview.cc:855
void SelectNode(GtkTreeIter *iter)
Definition: vdktreeview.cc:839
~VDKTreeView()
Definition: vdktreeview.cc:815
VDKTreeViewIterList & Selections()
Definition: vdktreeview.h:675
VDKTreeView(VDKForm *owner, VDKTreeViewModel *model=NULL, GtkSelectionMode mode=GTK_SELECTION_SINGLE)
Definition: vdktreeview.cc:780
void RemoveSelected(void)
Definition: vdktreeview.cc:873
provides a VDKValueList iterator
Definition: value_sem_list.h:180
provides a templatized double-linked list
Definition: value_sem_list.h:82