1/* 2 * tkTreeElem.h -- 3 * 4 * This module is the header for elements in treectrl widgets. 5 * 6 * Copyright (c) 2002-2009 Tim Baker 7 * 8 * RCS: @(#) $Id: tkTreeElem.h,v 1.30 2010/03/08 17:04:58 treectrl Exp $ 9 */ 10 11typedef struct TreeElementType TreeElementType; 12typedef struct TreeElement_ TreeElement_; 13typedef struct TreeElementArgs TreeElementArgs; 14 15struct TreeElementArgs 16{ 17 TreeCtrl *tree; 18 TreeElement elem; 19 int state; 20 struct { 21 TreeItem item; 22 TreeItemColumn column; 23 } create; 24 struct { 25 int noop; 26 } delete; 27 struct { 28 int objc; 29 Tcl_Obj *CONST *objv; 30 int flagSelf; 31 TreeItem item; 32 TreeItemColumn column; 33 } config; 34 struct { 35 int x; 36 int y; 37 int width; 38 int height; 39#define STICKY_W 0x1000 /* These values must match ELF_STICKY_xxx */ 40#define STICKY_N 0x2000 41#define STICKY_E 0x4000 42#define STICKY_S 0x8000 43 int sticky; 44 TreeDrawable td; 45 Drawable drawable; 46 int bounds[4]; 47 } display; 48 struct { 49 int fixedWidth; 50 int fixedHeight; 51 int maxWidth; 52 int maxHeight; 53 int width; 54 int height; 55 } needed; 56 struct { 57 int fixedWidth; 58 int height; 59 } height; 60 struct { 61 int flagTree; 62 int flagMaster; 63 int flagSelf; 64 } change; 65 struct { 66 int state1; 67 int state2; 68 int draw1; 69 int draw2; 70 int visible1; 71 int visible2; 72 } states; 73 struct { 74 Tcl_Obj *obj; 75 } actual; 76 struct { 77 int visible; 78 } screen; 79}; 80 81struct TreeElementType 82{ 83 char *name; /* "image", "text" */ 84 int size; /* size of an TreeElement */ 85 Tk_OptionSpec *optionSpecs; 86 Tk_OptionTable optionTable; 87 int (*createProc)(TreeElementArgs *args); 88 void (*deleteProc)(TreeElementArgs *args); 89 int (*configProc)(TreeElementArgs *args); 90 void (*displayProc)(TreeElementArgs *args); 91 void (*neededProc)(TreeElementArgs *args); 92 void (*heightProc)(TreeElementArgs *args); 93 int (*changeProc)(TreeElementArgs *args); 94 int (*stateProc)(TreeElementArgs *args); 95 int (*undefProc)(TreeElementArgs *args); 96 int (*actualProc)(TreeElementArgs *args); 97 void (*onScreenProc)(TreeElementArgs *args); 98 TreeElementType *next; 99}; 100 101/* list of these for each style */ 102struct TreeElement_ 103{ 104 Tk_Uid name; /* "elem2", "eText" etc */ 105 TreeElementType *typePtr; 106 TreeElement master; /* NULL if this is master */ 107 DynamicOption *options; /* Dynamically-allocated options. */ 108 /* type-specific data here */ 109}; 110 111MODULE_SCOPE TreeElementType treeElemTypeBitmap; 112MODULE_SCOPE TreeElementType treeElemTypeBorder; 113MODULE_SCOPE TreeElementType treeElemTypeCheckButton; 114MODULE_SCOPE TreeElementType treeElemTypeImage; 115MODULE_SCOPE TreeElementType treeElemTypeRect; 116MODULE_SCOPE TreeElementType treeElemTypeText; 117MODULE_SCOPE TreeElementType treeElemTypeWindow; 118 119#define ELEMENT_TYPE_MATCHES(t1,t2) ((t1)->name == (t2)->name) 120 121/***** ***** *****/ 122 123MODULE_SCOPE int TreeElement_GetSortData(TreeCtrl *tree, TreeElement elem, int type, long *lv, double *dv, char **sv); 124 125typedef struct TreeIterate_ *TreeIterate; 126 127MODULE_SCOPE int TreeElement_TypeFromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeElementType **typePtrPtr); 128MODULE_SCOPE void Tree_RedrawElement(TreeCtrl *tree, TreeItem item, TreeElement elem); 129MODULE_SCOPE TreeIterate Tree_ElementIterateBegin(TreeCtrl *tree, TreeElementType *elemTypePtr); 130MODULE_SCOPE TreeIterate Tree_ElementIterateNext(TreeIterate iter_); 131MODULE_SCOPE TreeElement Tree_ElementIterateGet(TreeIterate iter_); 132MODULE_SCOPE void Tree_ElementIterateChanged(TreeIterate iter_, int mask); 133MODULE_SCOPE void Tree_ElementChangedItself(TreeCtrl *tree, TreeItem item, 134 TreeItemColumn column, TreeElement elem, int flags, int mask); 135MODULE_SCOPE int TreeCtrl_RegisterElementType(Tcl_Interp *interp, TreeElementType *newTypePtr); 136 137typedef struct TreeCtrlStubs TreeCtrlStubs; 138struct TreeCtrlStubs 139{ 140 int (*TreeCtrl_RegisterElementType)(Tcl_Interp *interp, 141 TreeElementType *typePtr); 142 void (*Tree_RedrawElement)(TreeCtrl *tree, TreeItem item, 143 TreeElement elem); 144 TreeIterate (*Tree_ElementIterateBegin)(TreeCtrl *tree, 145 TreeElementType *elemTypePtr); 146 TreeIterate (*Tree_ElementIterateNext)(TreeIterate iter_); 147 TreeElement (*Tree_ElementIterateGet)(TreeIterate iter_); 148 void (*Tree_ElementIterateChanged)(TreeIterate iter_, int mask); 149 void (*PerStateInfo_Free)(TreeCtrl *tree, PerStateType *typePtr, 150 PerStateInfo *pInfo); 151 int (*PerStateInfo_FromObj)(TreeCtrl *tree, StateFromObjProc proc, 152 PerStateType *typePtr, PerStateInfo *pInfo); 153 PerStateData *(*PerStateInfo_ForState)(TreeCtrl *tree, 154 PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match); 155 Tcl_Obj *(*PerStateInfo_ObjForState)(TreeCtrl *tree, 156 PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match); 157 int (*PerStateInfo_Undefine)(TreeCtrl *tree, PerStateType *typePtr, 158 PerStateInfo *pInfo, int state); 159 PerStateType *pstBoolean; 160 int (*PerStateBoolean_ForState)(TreeCtrl *tree, PerStateInfo *pInfo, 161 int state, int *match); 162 void (*PSTSave)(PerStateInfo *pInfo, PerStateInfo *pSave); 163 void (*PSTRestore)(TreeCtrl *tree, PerStateType *typePtr, 164 PerStateInfo *pInfo, PerStateInfo *pSave); 165 int (*TreeStateFromObj)(TreeCtrl *tree, Tcl_Obj *obj, int *stateOff, 166 int *stateOn); 167 int (*BooleanCO_Init)(Tk_OptionSpec *optionTable, CONST char *optionName); 168 int (*StringTableCO_Init)(Tk_OptionSpec *optionTable, 169 CONST char *optionName, CONST char **tablePtr); 170 int (*PerStateCO_Init)(Tk_OptionSpec *optionTable, CONST char *optionName, 171 PerStateType *typePtr, StateFromObjProc proc); 172}; 173 174