KWWidgets
tkTreeElem.h
Go to the documentation of this file.
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