KWWidgets
|
00001 /* 00002 * tkTreeElem.h -- 00003 * 00004 * This module is the header for elements in treectrl widgets. 00005 * 00006 * Copyright (c) 2002-2006 Tim Baker 00007 * 00008 * RCS: @(#) $Id: tkTreeElem.h,v 1.1 2007-02-06 13:18:14 barre Exp $ 00009 */ 00010 00011 typedef struct ElementType ElementType; 00012 typedef struct Element Element; 00013 typedef struct ElementArgs ElementArgs; 00014 00015 struct ElementArgs 00016 { 00017 TreeCtrl *tree; 00018 Element *elem; 00019 int state; 00020 struct { 00021 TreeItem item; 00022 TreeItemColumn column; 00023 } create; 00024 struct { 00025 int noop; 00026 } delete; 00027 struct { 00028 int objc; 00029 Tcl_Obj *CONST *objv; 00030 int flagSelf; 00031 TreeItem item; 00032 TreeItemColumn column; 00033 } config; 00034 struct { 00035 int x; 00036 int y; 00037 int width; 00038 int height; 00039 #define STICKY_W 0x1000 /* These values must match ELF_STICKY_xxx */ 00040 #define STICKY_N 0x2000 00041 #define STICKY_E 0x4000 00042 #define STICKY_S 0x8000 00043 int sticky; 00044 Drawable drawable; 00045 int bounds[4]; 00046 } display; 00047 struct { 00048 int fixedWidth; 00049 int fixedHeight; 00050 int maxWidth; 00051 int maxHeight; 00052 int width; 00053 int height; 00054 } needed; 00055 struct { 00056 int fixedWidth; 00057 int height; 00058 } height; 00059 struct { 00060 int flagTree; 00061 int flagMaster; 00062 int flagSelf; 00063 } change; 00064 struct { 00065 int state1; 00066 int state2; 00067 } states; 00068 struct { 00069 Tcl_Obj *obj; 00070 } actual; 00071 struct { 00072 int visible; 00073 } screen; 00074 }; 00075 00076 struct ElementType 00077 { 00078 char *name; /* "image", "text" */ 00079 int size; /* size of an Element */ 00080 Tk_OptionSpec *optionSpecs; 00081 Tk_OptionTable optionTable; 00082 int (*createProc)(ElementArgs *args); 00083 void (*deleteProc)(ElementArgs *args); 00084 int (*configProc)(ElementArgs *args); 00085 void (*displayProc)(ElementArgs *args); 00086 void (*neededProc)(ElementArgs *args); 00087 void (*heightProc)(ElementArgs *args); 00088 int (*changeProc)(ElementArgs *args); 00089 int (*stateProc)(ElementArgs *args); 00090 int (*undefProc)(ElementArgs *args); 00091 int (*actualProc)(ElementArgs *args); 00092 void (*onScreenProc)(ElementArgs *args); 00093 ElementType *next; 00094 }; 00095 00096 /* list of these for each style */ 00097 struct Element 00098 { 00099 Tk_Uid name; /* "elem2", "eText" etc */ 00100 ElementType *typePtr; 00101 Element *master; /* NULL if this is master */ 00102 DynamicOption *options; /* Dynamically-allocated options. */ 00103 /* type-specific data here */ 00104 }; 00105 00106 extern ElementType elemTypeBitmap; 00107 extern ElementType elemTypeBorder; 00108 extern ElementType elemTypeCheckButton; 00109 extern ElementType elemTypeImage; 00110 extern ElementType elemTypeRect; 00111 extern ElementType elemTypeText; 00112 extern ElementType elemTypeWindow; 00113 00114 #define ELEMENT_TYPE_MATCHES(t1,t2) ((t1)->name == (t2)->name) 00115 00116 /***** ***** *****/ 00117 00118 extern int Element_GetSortData(TreeCtrl *tree, Element *elem, int type, long *lv, double *dv, char **sv); 00119 00120 typedef struct TreeIterate_ *TreeIterate; 00121 00122 extern int TreeElement_TypeFromObj(TreeCtrl *tree, Tcl_Obj *objPtr, ElementType **typePtrPtr); 00123 extern void Tree_RedrawElement(TreeCtrl *tree, TreeItem item, Element *elem); 00124 extern TreeIterate Tree_ElementIterateBegin(TreeCtrl *tree, ElementType *elemTypePtr); 00125 extern TreeIterate Tree_ElementIterateNext(TreeIterate iter_); 00126 extern Element *Tree_ElementIterateGet(TreeIterate iter_); 00127 extern void Tree_ElementIterateChanged(TreeIterate iter_, int mask); 00128 extern void Tree_ElementChangedItself(TreeCtrl *tree, TreeItem item, 00129 TreeItemColumn column, Element *elem, int flags, int mask); 00130 00131 typedef struct TreeCtrlStubs TreeCtrlStubs; 00132 struct TreeCtrlStubs 00133 { 00134 int (*TreeCtrl_RegisterElementType)(Tcl_Interp *interp, ElementType *typePtr); 00135 void (*Tree_RedrawElement)(TreeCtrl *tree, TreeItem item, Element *elem); 00136 TreeIterate (*Tree_ElementIterateBegin)(TreeCtrl *tree, ElementType *elemTypePtr); 00137 TreeIterate (*Tree_ElementIterateNext)(TreeIterate iter_); 00138 Element *(*Tree_ElementIterateGet)(TreeIterate iter_); 00139 void (*Tree_ElementIterateChanged)(TreeIterate iter_, int mask); 00140 void (*PerStateInfo_Free)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo); 00141 int (*PerStateInfo_FromObj)(TreeCtrl *tree, StateFromObjProc proc, PerStateType *typePtr, PerStateInfo *pInfo); 00142 PerStateData *(*PerStateInfo_ForState)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match); 00143 Tcl_Obj *(*PerStateInfo_ObjForState)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match); 00144 int (*PerStateInfo_Undefine)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, int state); 00145 PerStateType *pstBoolean; 00146 int (*PerStateBoolean_ForState)(TreeCtrl *tree, PerStateInfo *pInfo, int state, int *match); 00147 void (*PSTSave)(PerStateInfo *pInfo, PerStateInfo *pSave); 00148 void (*PSTRestore)(TreeCtrl *tree, PerStateType *typePtr, PerStateInfo *pInfo, PerStateInfo *pSave); 00149 int (*TreeStateFromObj)(TreeCtrl *tree, Tcl_Obj *obj, int *stateOff, int *stateOn); 00150 int (*BooleanCO_Init)(Tk_OptionSpec *optionTable, CONST char *optionName); 00151 int (*StringTableCO_Init)(Tk_OptionSpec *optionTable, CONST char *optionName, CONST char **tablePtr); 00152 }; 00153