1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/*
* tkTreeElem.h --
*
* This module is the header for elements in treectrl widgets.
*
* Copyright (c) 2002-2005 Tim Baker
*
* RCS: @(#) $Id: tkTreeElem.h,v 1.9 2005/05/10 22:19:45 treectrl Exp $
*/
typedef struct ElementType ElementType;
typedef struct Element Element;
typedef struct ElementArgs ElementArgs;
struct ElementArgs
{
TreeCtrl *tree;
Element *elem;
int state;
struct {
TreeItem item;
TreeItemColumn column;
} create;
struct {
int noop;
} delete;
struct {
int objc;
Tcl_Obj *CONST *objv;
int flagSelf;
} config;
struct {
int x;
int y;
int width;
int height;
int pad[4];
Drawable drawable;
} display;
struct {
int squeeze;
int width;
int height;
} layout;
struct {
int flagTree;
int flagMaster;
int flagSelf;
} change;
struct {
int state1;
int state2;
} states;
struct {
Tcl_Obj *obj;
} actual;
};
struct ElementType
{
char *name; /* "image", "text" */
int size; /* size of an Element */
Tk_OptionSpec *optionSpecs;
Tk_OptionTable optionTable;
int (*createProc)(ElementArgs *args);
void (*deleteProc)(ElementArgs *args);
int (*configProc)(ElementArgs *args);
void (*displayProc)(ElementArgs *args);
void (*layoutProc)(ElementArgs *args);
int (*changeProc)(ElementArgs *args);
int (*stateProc)(ElementArgs *args);
void (*undefProc)(ElementArgs *args);
int (*actualProc)(ElementArgs *args);
ElementType *next;
};
/* list of these for each style */
struct Element
{
Tk_Uid name; /* "elem2", "eText" etc */
ElementType *typePtr;
Element *master; /* NULL if this is master */
/* type-specific data here */
};
extern ElementType elemTypeBitmap;
extern ElementType elemTypeBorder;
extern ElementType elemTypeCheckButton;
extern ElementType elemTypeImage;
extern ElementType elemTypeRect;
extern ElementType elemTypeText;
extern ElementType elemTypeWindow;
#define ELEMENT_TYPE_MATCHES(t1,t2) ((t1)->name == (t2)->name)
/***** ***** *****/
extern int Element_GetSortData(TreeCtrl *tree, Element *elem, int type, long *lv, double *dv, char **sv);
typedef struct TreeIterate_ *TreeIterate;
extern int TreeElement_TypeFromObj(TreeCtrl *tree, Tcl_Obj *objPtr, ElementType **typePtrPtr);
extern void Tree_RedrawElement(TreeCtrl *tree, TreeItem item, Element *elem);
extern TreeIterate Tree_ElementIterateBegin(TreeCtrl *tree, ElementType *elemTypePtr);
extern TreeIterate Tree_ElementIterateNext(TreeIterate iter_);
extern Element *Tree_ElementIterateGet(TreeIterate iter_);
extern void Tree_ElementIterateChanged(TreeIterate iter_, int mask);
extern void Tree_ElementChangedItself(TreeCtrl *tree, TreeItem item,
TreeItemColumn column, Element *elem, int mask);
typedef struct TreeCtrlStubs TreeCtrlStubs;
struct TreeCtrlStubs
{
int (*TreeCtrl_RegisterElementType)(Tcl_Interp *interp, ElementType *typePtr);
void (*Tree_RedrawElement)(TreeCtrl *tree, TreeItem item, Element *elem);
TreeIterate (*Tree_ElementIterateBegin)(TreeCtrl *tree, ElementType *elemTypePtr);
TreeIterate (*Tree_ElementIterateNext)(TreeIterate iter_);
Element *(*Tree_ElementIterateGet)(TreeIterate iter_);
void (*Tree_ElementIterateChanged)(TreeIterate iter_, int mask);
void (*PerStateInfo_Free)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo);
int (*PerStateInfo_FromObj)(TreeCtrl *tree, StateFromObjProc proc, PerStateType *typePtr, PerStateInfo *pInfo);
PerStateData *(*PerStateInfo_ForState)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match);
Tcl_Obj *(*PerStateInfo_ObjForState)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match);
void (*PerStateInfo_Undefine)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, int state);
};
|