00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#ifndef VDKCTREE_H
00028
#define VDKCTREE_H
00029
#include <vdk/vdkcustom.h>
00030
00031
00032
typedef GtkCTreeNode* VDKTreeNode;
00033
typedef VDKArray<VDKTreeNode> VDKTreeNodeArray;
00034
typedef VDKList<GtkCTreeNode> VDKTreeNodeList;
00035
typedef VDKListIterator<GtkCTreeNode> VDKTreeNodeListIterator;
00055 class VDKCustomTree:
public VDKCustom
00056 {
00057
int tree_column;
00058
protected:
00059 VDKTreeNodeArray WideSelection;
00060
00061
static void ColumnClick(GtkWidget* w,
00062 gint column,
00063 gpointer s);
00064
static void NodeSelection(GtkWidget* ,
00065 GtkCTreeNode* node,
00066
int column,
00067 gpointer s);
00068
static void NodeUnselection(GtkWidget* ,
00069 GtkCTreeNode* node,
00070
int column,
00071 gpointer s);
00072
static int ButtonPress (GtkWidget* wid,
00073 GdkEventButton *ev,
00074 gpointer s);
00075
00076
void SetStyle(VDKTreeNode node);
00077
void ConnectSignals();
00078
void SetSpacing(
int sp)
00079 { gtk_ctree_set_spacing(GTK_CTREE(custom_widget), sp); }
00080
void SetLineStyle(GtkCTreeLineStyle ls)
00081 { gtk_ctree_set_line_style (GTK_CTREE(custom_widget), ls); }
00082
void SetExpanderStyle(GtkCTreeExpanderStyle es)
00083 { gtk_ctree_set_expander_style (GTK_CTREE(custom_widget), es); }
00084
void SetSelectedNode(VDKTreeNode node);
00085
void SetUnselectedNode(VDKTreeNode node);
00086
00087
public:
00091
__rwproperty(
VDKCustomTree,
int) Spacing;
00096
__rwproperty(
VDKCustomTree,VDKTreeNode) SelectedNode;
00101
__rproperty(
VDKCustomTree,
int) SelectedColumn;
00106
__rwproperty(
VDKCustomTree,VDKTreeNode) UnselectedNode;
00111
__rproperty(
VDKCustomTree,
int) UnselectedColumn;
00115
__rwproperty(
VDKCustomTree,GtkCTreeLineStyle) LineStyle;
00119
__rwproperty(
VDKCustomTree,GtkCTreeExpanderStyle) ExpanderStyle;
00120
public:
00128
VDKCustomTree(
VDKForm* owner,
00129
int columns = 1,
00130
char **titles = NULL,
00131 GtkSelectionMode mode = GTK_SELECTION_SINGLE,
00132
int tree_column = 0);
00136
virtual ~VDKCustomTree();
00146 VDKTreeNode
AddNode(
char *text[],
00147 GtkCTreeNode *parent,
00148
bool expanded =
true,
00149
bool isLeaf =
false,
00150
char **pixmap_closed = NULL,
00151
char** pixmap_opened = NULL );
00156
bool RemoveNode(VDKTreeNode node);
00160
int RemoveKey(
char* key);
00161
virtual void Clear();
00162
00166 VDKTreeNode
Selection() {
return SelectedNode; }
00170 VDKTreeNode
Unselection() {
return UnselectedNode; }
00175 VDKTreeNodeArray&
Selections();
00176
00182
Tuple operator[](VDKTreeNode node);
00187 VDKTreeNodeList* Find(
char* key);
00188
00193
bool IsLeaf(VDKTreeNode node);
00198
char* Key(VDKTreeNode node);
00203
bool IsExpanded(VDKTreeNode node);
00204
#ifdef USE_SIGCPLUSPLUS
00205
public:
00212 VDKSignal2<void, VDKTreeNode, int>
OnNodeSelect;
00219 VDKSignal2<void, VDKTreeNode, int>
OnNodeUnselect;
00227 VDKSignal3<void, VDKTreeNode, VDKTreeNode, VDKTreeNode>
OnTreeMove;
00233 VDKSignal1<void, VDKTreeNode>
OnTreeExpand;
00234
protected:
00235
static void make_gtksigc_connection(
VDKCustomTree* obj);
00236
private:
00237
static void _handle_tree_move(GtkWidget*, GtkCTreeNode* node,
00238 GtkCTreeNode* new_parent,
00239 GtkCTreeNode* new_sibling,
00240 gpointer obj);
00241
static void _handle_tree_expand(GtkWidget*, GtkCTreeNode* node,
00242 gpointer obj);
00243
#endif
00244 };
00245
00246
#endif