00001
00002
00003
00004
00005
00006
00007
00008
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
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;
00079 int size;
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
00097 struct Element
00098 {
00099 Tk_Uid name;
00100 ElementType *typePtr;
00101 Element *master;
00102 DynamicOption *options;
00103
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