00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "vtkTcl.h"
00014 #include "vtkTk.h"
00015 #include "vtkTkInternals.h"
00016
00017 #ifdef MAC_OSX_TK
00018 #ifndef HAVE_LIMITS_H
00019 #define HAVE_LIMITS_H
00020 #endif
00021 #ifndef HAVE_UNISTD_H
00022 #define HAVE_UNISTD_H
00023 #endif
00024 #endif
00025
00026 #include "tkPort.h"
00027 #include "default.h"
00028 #include "tkInt.h"
00029 #include "qebind.h"
00030
00031 #ifdef HAVE_DBWIN_H
00032 #include "dbwin.h"
00033 #else
00034 #define dbwin printf
00035 #endif
00036
00037 #ifndef TRUE
00038 #define TRUE 1
00039 #define FALSE 0
00040 #endif
00041
00042 #ifndef MIN
00043 #define MIN(a,b) ((a) < (b) ? (a) : (b))
00044 #endif
00045 #ifndef MAX
00046 #define MAX(a,b) ((a) > (b) ? (a) : (b))
00047 #endif
00048
00049 #define SELECTION_VISIBLE
00050 #define ALLOC_HAX
00051 #define DEPRECATED
00052
00053 typedef struct TreeCtrl TreeCtrl;
00054 typedef struct TreeColumn_ *TreeColumn;
00055 typedef struct TreeDInfo_ *TreeDInfo;
00056 typedef struct TreeDragImage_ *TreeDragImage;
00057 typedef struct TreeItem_ *TreeItem;
00058 typedef struct TreeItemColumn_ *TreeItemColumn;
00059 typedef struct TreeItemDInfo_ *TreeItemDInfo;
00060 typedef struct TreeMarquee_ *TreeMarquee;
00061 typedef struct TreeItemRInfo_ *TreeItemRInfo;
00062 typedef struct TreeStyle_ *TreeStyle;
00063 typedef struct TreeElement_ *TreeElement;
00064 typedef struct TreeThemeData_ *TreeThemeData;
00065
00066
00067
00068 typedef struct PerStateInfo PerStateInfo;
00069 typedef struct PerStateData PerStateData;
00070 typedef struct PerStateType PerStateType;
00071
00072
00073 struct PerStateData
00074 {
00075 int stateOff;
00076 int stateOn;
00077
00078 };
00079
00080 struct PerStateInfo
00081 {
00082 #ifdef TREECTRL_DEBUG
00083 PerStateType *type;
00084 #endif
00085 Tcl_Obj *obj;
00086 int count;
00087 PerStateData *data;
00088 };
00089
00090 typedef int (*PerStateType_FromObjProc)(TreeCtrl *, Tcl_Obj *, PerStateData *);
00091 typedef void (*PerStateType_FreeProc)(TreeCtrl *, PerStateData *);
00092
00093 struct PerStateType
00094 {
00095 CONST char *name;
00096 int size;
00097 PerStateType_FromObjProc fromObjProc;
00098 PerStateType_FreeProc freeProc;
00099 };
00100
00101
00102
00103
00104
00105
00106
00107
00108 #define TIL_STATIC_SPACE 128
00109 typedef struct TreePtrList TreePtrList;
00110 typedef TreePtrList TreeItemList;
00111 typedef TreePtrList TreeColumnList;
00112 struct TreePtrList {
00113 TreeCtrl *tree;
00114 ClientData *pointers;
00115 int count;
00116 int space;
00117 ClientData pointerSpace[TIL_STATIC_SPACE];
00118
00119 };
00120
00121 enum { LEFT, TOP, RIGHT, BOTTOM };
00122
00123 struct TreeCtrlDebug
00124 {
00125 Tk_OptionTable optionTable;
00126 int enable;
00127 int data;
00128 int display;
00129 int textLayout;
00130 int displayDelay;
00131 XColor *eraseColor;
00132 GC gcErase;
00133 XColor *drawColor;
00134 GC gcDraw;
00135 };
00136
00137 struct TreeCtrlColumnDrag
00138 {
00139 Tk_OptionTable optionTable;
00140 int enable;
00141 TreeColumn column;
00142 Tcl_Obj *offsetObj;
00143 int offset;
00144 XColor *color;
00145 int alpha;
00146 TreeColumn indColumn;
00147 XColor *indColor;
00148 int indSide;
00149 };
00150
00151 struct TreeCtrl
00152 {
00153
00154 Tk_Window tkwin;
00155 Display *display;
00156 Tcl_Interp *interp;
00157 Tcl_Command widgetCmd;
00158 Tk_OptionTable optionTable;
00159
00160
00161 Tcl_Obj *fgObj;
00162 XColor *fgColorPtr;
00163 Tcl_Obj *borderWidthObj;
00164 int borderWidth;
00165 Tk_3DBorder border;
00166 Tk_Cursor cursor;
00167 int relief;
00168 Tcl_Obj *highlightWidthObj;
00169 int highlightWidth;
00170 XColor *highlightBgColorPtr;
00171 XColor *highlightColorPtr;
00172 char *xScrollCmd;
00173 char *yScrollCmd;
00174 Tcl_Obj *xScrollDelay;
00175 Tcl_Obj *yScrollDelay;
00176 int xScrollIncrement;
00177 int yScrollIncrement;
00178 Tcl_Obj *scrollMargin;
00179 char *takeFocus;
00180 Tcl_Obj *fontObj;
00181 Tk_Font tkfont;
00182 int showButtons;
00183 int showLines;
00184
00185 int showRootLines;
00186
00187 int showRoot;
00188 int showRootButton;
00189
00190 int showHeader;
00191 Tcl_Obj *indentObj;
00192
00193 int indent;
00194
00195 char *selectMode;
00196 Tcl_Obj *itemHeightObj;
00197
00198 int itemHeight;
00199 Tcl_Obj *minItemHeightObj;
00200 int minItemHeight;
00201 Tcl_Obj *itemWidthObj;
00202 int itemWidth;
00203 int itemWidthEqual;
00204 Tcl_Obj *itemWidMultObj;
00205 int itemWidMult;
00206 Tcl_Obj *widthObj;
00207 int width;
00208 Tcl_Obj *heightObj;
00209 int height;
00210 TreeColumn columnTree;
00211 #define DOUBLEBUFFER_NONE 0
00212 #define DOUBLEBUFFER_ITEM 1
00213 #define DOUBLEBUFFER_WINDOW 2
00214 int doubleBuffer;
00215 XColor *buttonColor;
00216 Tcl_Obj *buttonSizeObj;
00217 int buttonSize;
00218 Tcl_Obj *buttonThicknessObj;
00219 int buttonThickness;
00220 XColor *lineColor;
00221 Tcl_Obj *lineThicknessObj;
00222 int lineThickness;
00223 #define LINE_STYLE_DOT 0
00224 #define LINE_STYLE_SOLID 1
00225 int lineStyle;
00226 int vertical;
00227 Tcl_Obj *wrapObj;
00228 PerStateInfo buttonImage;
00229 PerStateInfo buttonBitmap;
00230 char *backgroundImageString;
00231 int useIndent;
00232
00233 #define BG_MODE_COLUMN 0
00234 #define BG_MODE_ORDER 1
00235 #define BG_MODE_ORDERVIS 2
00236 #define BG_MODE_ROW 3
00237 #ifdef DEPRECATED
00238 #define BG_MODE_INDEX 4
00239 #define BG_MODE_VISINDEX 5
00240 #endif
00241 int backgroundMode;
00242 int columnResizeMode;
00243 int *itemPadX;
00244 Tcl_Obj *itemPadXObj;
00245 int *itemPadY;
00246 Tcl_Obj *itemPadYObj;
00247
00248 struct TreeCtrlDebug debug;
00249 struct TreeCtrlColumnDrag columnDrag;
00250
00251
00252 int gotFocus;
00253 int deleted;
00254 int updateIndex;
00255 int isActive;
00256 int inset;
00257 int xOrigin;
00258 int yOrigin;
00259 GC copyGC;
00260 GC textGC;
00261 GC buttonGC;
00262 GC lineGC;
00263 Tk_Image backgroundImage;
00264 int useTheme;
00265 char *itemPrefix;
00266 char *columnPrefix;
00267
00268 int prevWidth;
00269 int prevHeight;
00270 int drawableXOrigin;
00271 int drawableYOrigin;
00272
00273 TreeColumn columns;
00274 TreeColumn columnLast;
00275 TreeColumn columnTail;
00276 TreeColumn columnVis;
00277 int columnCount;
00278 int columnCountVis;
00279 int headerHeight;
00280 int widthOfColumns;
00281 int columnTreeLeft;
00282
00283 int columnTreeVis;
00284 int columnBgCnt;
00285
00286 #define COLUMN_LOCK_LEFT 0
00287 #define COLUMN_LOCK_NONE 1
00288 #define COLUMN_LOCK_RIGHT 2
00289 TreeColumn columnLockLeft;
00290 TreeColumn columnLockNone;
00291 TreeColumn columnLockRight;
00292 int widthOfColumnsLeft;
00293 int widthOfColumnsRight;
00294 int columnCountVisLeft;
00295 int columnCountVisRight;
00296
00297 #define UNIFORM_GROUP
00298 #ifdef UNIFORM_GROUP
00299 Tcl_HashTable uniformGroupHash;
00300 #endif
00301
00302 TreeItem root;
00303 TreeItem activeItem;
00304 TreeItem anchorItem;
00305 int nextItemId;
00306 int nextColumnId;
00307 Tcl_HashTable itemHash;
00308 Tcl_HashTable itemSpansHash;
00309 Tcl_HashTable elementHash;
00310 Tcl_HashTable styleHash;
00311 Tcl_HashTable imageNameHash;
00312 Tcl_HashTable imageTokenHash;
00313 int depth;
00314 int itemCount;
00315 int itemVisCount;
00316 QE_BindingTable bindingTable;
00317 TreeDragImage dragImage;
00318 TreeMarquee marquee;
00319 TreeDInfo dInfo;
00320 int selectCount;
00321 Tcl_HashTable selection;
00322
00323 #define TREE_WRAP_NONE 0
00324 #define TREE_WRAP_ITEMS 1
00325 #define TREE_WRAP_PIXELS 2
00326 #define TREE_WRAP_WINDOW 3
00327 int wrapMode;
00328 int wrapArg;
00329
00330 int totalWidth;
00331 int totalHeight;
00332
00333 struct {
00334 Tcl_Obj *xObj;
00335 int x;
00336 int sx;
00337 int onScreen;
00338 } columnProxy;
00339
00340 char *stateNames[32];
00341
00342 int scanX;
00343 int scanY;
00344 int scanXOrigin;
00345 int scanYOrigin;
00346
00347 Tk_OptionTable styleOptionTable;
00348 #ifdef DEPRECATED
00349 struct {
00350 Tcl_Obj *stylesObj;
00351 TreeStyle *styles;
00352 int numStyles;
00353 } defaultStyle;
00354 #endif
00355 Tk_OptionTable itemOptionTable;
00356 int itemPrefixLen;
00357 int columnPrefixLen;
00358 #ifdef ALLOC_HAX
00359 ClientData allocData;
00360 #endif
00361 int preserveItemRefCnt;
00362 TreeItemList preserveItemList;
00363
00364
00365 struct {
00366 Tcl_Obj *yObj;
00367 int y;
00368 int sy;
00369 int onScreen;
00370 } rowProxy;
00371
00372 char *optionHax[64];
00373 int optionHaxCnt;
00374
00375 TreeThemeData themeData;
00376 };
00377
00378 #define TREE_CONF_FONT 0x0001
00379 #define TREE_CONF_ITEMSIZE 0x0002
00380 #define TREE_CONF_INDENT 0x0004
00381 #define TREE_CONF_WRAP 0x0008
00382 #define TREE_CONF_BUTIMG 0x0010
00383 #define TREE_CONF_BUTBMP 0x0020
00384
00385 #define TREE_CONF_RELAYOUT 0x0100
00386 #define TREE_CONF_REDISPLAY 0x0200
00387 #define TREE_CONF_FG 0x0400
00388 #define TREE_CONF_PROXY 0x0800
00389 #define TREE_CONF_BUTTON 0x1000
00390 #define TREE_CONF_LINE 0x2000
00391 #define TREE_CONF_DEFSTYLE 0x4000
00392 #define TREE_CONF_BG_IMAGE 0x8000
00393 #define TREE_CONF_THEME 0x00010000
00394
00395 extern void Tree_AddItem(TreeCtrl *tree, TreeItem item);
00396 extern void Tree_RemoveItem(TreeCtrl *tree, TreeItem item);
00397 extern Tk_Image Tree_GetImage(TreeCtrl *tree, char *imageName);
00398 extern void Tree_FreeImage(TreeCtrl *tree, Tk_Image image);
00399 extern void Tree_UpdateScrollbarX(TreeCtrl *tree);
00400 extern void Tree_UpdateScrollbarY(TreeCtrl *tree);
00401 extern void Tree_AddToSelection(TreeCtrl *tree, TreeItem item);
00402 extern void Tree_RemoveFromSelection(TreeCtrl *tree, TreeItem item);
00403 extern void Tree_PreserveItems(TreeCtrl *tree);
00404 extern void Tree_ReleaseItems(TreeCtrl *tree);
00405
00406 #define STATE_OP_ON 0
00407 #define STATE_OP_OFF 1
00408 #define STATE_OP_TOGGLE 2
00409 #define SFO_NOT_OFF 0x0001
00410 #define SFO_NOT_TOGGLE 0x0002
00411 #define SFO_NOT_STATIC 0x0004
00412 extern int Tree_StateFromObj(TreeCtrl *tree, Tcl_Obj *obj, int states[3], int *indexPtr, int flags);
00413 extern int Tree_StateFromListObj(TreeCtrl *tree, Tcl_Obj *obj, int states[3], int flags);
00414
00415 #define Tree_BorderLeft(tree) \
00416 tree->inset
00417 #define Tree_BorderTop(tree) \
00418 tree->inset
00419 #define Tree_BorderRight(tree) \
00420 (Tk_Width(tree->tkwin) - tree->inset)
00421 #define Tree_BorderBottom(tree) \
00422 (Tk_Height(tree->tkwin) - tree->inset)
00423
00424 #define Tree_HeaderLeft(tree) \
00425 Tree_BorderLeft(tree)
00426 #define Tree_HeaderTop(tree) \
00427 Tree_BorderTop(tree)
00428 #define Tree_HeaderRight(tree) \
00429 Tree_BorderRight(tree)
00430 #define Tree_HeaderBottom(tree) \
00431 (Tree_BorderTop(tree) + Tree_HeaderHeight(tree))
00432 #define Tree_HeaderWidth(tree) \
00433 (Tree_HeaderRight(tree) - Tree_HeaderLeft(tree))
00434
00435 #define Tree_ContentLeft(tree) \
00436 (Tree_BorderLeft(tree) + Tree_WidthOfLeftColumns(tree))
00437 #define Tree_ContentTop(tree) \
00438 (Tree_BorderTop(tree) + Tree_HeaderHeight(tree))
00439 #define Tree_ContentRight(tree) \
00440 (Tree_BorderRight(tree) - Tree_WidthOfRightColumns(tree))
00441 #define Tree_ContentBottom(tree) \
00442 Tree_BorderBottom(tree)
00443
00444 #define Tree_ContentWidth(tree) \
00445 (Tree_ContentRight(tree) - Tree_ContentLeft(tree))
00446 #define Tree_ContentHeight(tree) \
00447 (Tree_ContentBottom(tree) - Tree_ContentTop(tree))
00448
00449
00450
00451 #define ITEM_ALL ((TreeItem) -1)
00452 #define IFO_NOT_MANY 0x0001
00453 #define IFO_NOT_NULL 0x0002
00454 #define IFO_NOT_ROOT 0x0004
00455 #define IFO_NOT_ORPHAN 0x0008
00456 #define IFO_LIST_ALL 0x0010
00457 extern int TreeItemList_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeItemList *items, int flags);
00458 extern int TreeItem_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeItem *itemPtr, int flags);
00459
00460 typedef struct ItemForEach ItemForEach;
00461 struct ItemForEach {
00462 TreeCtrl *tree;
00463 int error;
00464 int all;
00465 Tcl_HashSearch search;
00466 TreeItem last;
00467 TreeItem item;
00468 TreeItemList *items;
00469 int index;
00470 };
00471 extern TreeItem ItemForEach_Start(TreeItemList *items, TreeItemList *item2s,
00472 ItemForEach *iter);
00473 extern TreeItem ItemForEach_Next(ItemForEach *iter);
00474 #define ITEM_FOR_EACH(item, items, item2s, iter) \
00475 for (item = ItemForEach_Start(items, item2s, iter); \
00476 item != NULL; \
00477 item = ItemForEach_Next(iter))
00478
00479 extern void FormatResult(Tcl_Interp *interp, char *fmt, ...);
00480 extern void DStringAppendf(Tcl_DString *dString, char *fmt, ...);
00481 extern void Tree_Debug(TreeCtrl *tree);
00482
00483 extern int TreeItem_Init(TreeCtrl *tree);
00484 extern int TreeItem_Debug(TreeCtrl *tree, TreeItem item);
00485 extern void TreeItem_OpenClose(TreeCtrl *tree, TreeItem item, int mode);
00486 extern void TreeItem_Delete(TreeCtrl *tree, TreeItem item);
00487 extern int TreeItem_Deleted(TreeCtrl *tree, TreeItem item);
00488
00489 #define STATE_OPEN 0x0001
00490 #define STATE_SELECTED 0x0002
00491 #define STATE_ENABLED 0x0004
00492 #define STATE_ACTIVE 0x0008
00493 #define STATE_FOCUS 0x0010
00494 #define STATE_USER 6
00495 extern int TreeItem_GetState(TreeCtrl *tree, TreeItem item_);
00496
00497 #define CS_DISPLAY 0x01
00498 #define CS_LAYOUT 0x02
00499 extern int TreeItem_ChangeState(TreeCtrl *tree, TreeItem item_, int stateOff, int stateOn);
00500
00501 extern void TreeItem_UndefineState(TreeCtrl *tree, TreeItem item_, int state);
00502
00503 extern int TreeItem_GetButton(TreeCtrl *tree, TreeItem item_);
00504 extern int TreeItem_GetDepth(TreeCtrl *tree, TreeItem item_);
00505 extern int TreeItem_GetID(TreeCtrl *tree, TreeItem item_);
00506 extern int TreeItem_SetID(TreeCtrl *tree, TreeItem item_, int id);
00507 extern int TreeItem_GetEnabled(TreeCtrl *tree, TreeItem item_);
00508 extern int TreeItem_GetSelected(TreeCtrl *tree, TreeItem item_);
00509 extern TreeItem TreeItem_GetParent(TreeCtrl *tree, TreeItem item);
00510 extern TreeItem TreeItem_GetNextSibling(TreeCtrl *tree, TreeItem item);
00511 extern TreeItem TreeItem_NextSiblingVisible(TreeCtrl *tree, TreeItem item);
00512 extern void TreeItem_SetDInfo(TreeCtrl *tree, TreeItem item, TreeItemDInfo dInfo);
00513 extern TreeItemDInfo TreeItem_GetDInfo(TreeCtrl *tree, TreeItem item);
00514 extern void TreeItem_SetRInfo(TreeCtrl *tree, TreeItem item, TreeItemRInfo rInfo);
00515 extern TreeItemRInfo TreeItem_GetRInfo(TreeCtrl *tree, TreeItem item);
00516
00517 extern void TreeItem_AppendChild(TreeCtrl *tree, TreeItem self, TreeItem child);
00518 extern void TreeItem_RemoveFromParent(TreeCtrl *tree, TreeItem self);
00519 extern int TreeItem_FirstAndLast(TreeCtrl *tree, TreeItem *first, TreeItem *last);
00520 extern void TreeItem_ListDescendants(TreeCtrl *tree, TreeItem item_, TreeItemList *items);
00521 extern int TreeItem_Height(TreeCtrl *tree, TreeItem self);
00522 extern int TreeItem_TotalHeight(TreeCtrl *tree, TreeItem self);
00523 extern void TreeItem_InvalidateHeight(TreeCtrl *tree, TreeItem self);
00524 extern void TreeItem_SpansInvalidate(TreeCtrl *tree, TreeItem item_);
00525 extern int *TreeItem_GetSpans(TreeCtrl *tree, TreeItem item_);
00526 extern void TreeItem_Draw(TreeCtrl *tree, TreeItem self, int lock, int x, int y, int width, int height, Drawable drawable, int minX, int maxX, int index);
00527 extern void TreeItem_DrawLines(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, Drawable drawable);
00528 extern void TreeItem_DrawButton(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, Drawable drawable);
00529 extern int TreeItem_ReallyVisible(TreeCtrl *tree, TreeItem self);
00530 extern void TreeItem_FreeResources(TreeCtrl *tree, TreeItem self);
00531 extern void TreeItem_Release(TreeCtrl *tree, TreeItem item);
00532 extern TreeItem TreeItem_RootAncestor(TreeCtrl *tree, TreeItem item_);
00533 extern int TreeItem_IsAncestor(TreeCtrl *tree, TreeItem item1, TreeItem item2);
00534 extern Tcl_Obj *TreeItem_ToObj(TreeCtrl *tree, TreeItem item);
00535 extern void TreeItem_ToIndex(TreeCtrl *tree, TreeItem item, int *absolute, int *visible);
00536 extern TreeItem TreeItem_Next(TreeCtrl *tree, TreeItem item);
00537 extern TreeItem TreeItem_NextVisible(TreeCtrl *tree, TreeItem item);
00538 extern TreeItem TreeItem_Prev(TreeCtrl *tree, TreeItem item);
00539 extern TreeItem TreeItem_PrevVisible(TreeCtrl *tree, TreeItem item);
00540 extern void TreeItem_Identify(TreeCtrl *tree, TreeItem item_, int lock, int x, int y, char *buf);
00541 extern void TreeItem_Identify2(TreeCtrl *tree, TreeItem item_,
00542 int x1, int y1, int x2, int y2, Tcl_Obj *listObj);
00543 extern int TreeItem_GetRects(TreeCtrl *tree, TreeItem item_,
00544 TreeColumn treeColumn, int objc, Tcl_Obj *CONST objv[], XRectangle rects[]);
00545 extern int TreeItem_Indent(TreeCtrl *tree, TreeItem item_);
00546 extern void Tree_UpdateItemIndex(TreeCtrl *tree);
00547 extern void Tree_DeselectHidden(TreeCtrl *tree);
00548 extern int TreeItemCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00549 extern void TreeItem_UpdateWindowPositions(TreeCtrl *tree, TreeItem item_,
00550 int lock, int x, int y, int width, int height);
00551 extern void TreeItem_OnScreen(TreeCtrl *tree, TreeItem item_, int onScreen);
00552
00553 extern TreeItemColumn TreeItem_GetFirstColumn(TreeCtrl *tree, TreeItem item);
00554 extern TreeItemColumn TreeItemColumn_GetNext(TreeCtrl *tree, TreeItemColumn column);
00555 extern void TreeItemColumn_InvalidateSize(TreeCtrl *tree, TreeItemColumn column);
00556 extern TreeStyle TreeItemColumn_GetStyle(TreeCtrl *tree, TreeItemColumn column);
00557 extern int TreeItemColumn_Index(TreeCtrl *tree, TreeItem item_, TreeItemColumn column_);
00558 extern void TreeItemColumn_ForgetStyle(TreeCtrl *tree, TreeItemColumn column_);
00559 extern int TreeItemColumn_NeededWidth(TreeCtrl *tree, TreeItem item_, TreeItemColumn column_);
00560 extern TreeItemColumn TreeItem_FindColumn(TreeCtrl *tree, TreeItem item, int columnIndex);
00561 extern int TreeItem_ColumnFromObj(TreeCtrl *tree, TreeItem item, Tcl_Obj *obj, TreeItemColumn *columnPtr, int *indexPtr);
00562 extern void TreeItem_RemoveColumns(TreeCtrl *tree, TreeItem item_, int first, int last);
00563 extern void TreeItem_RemoveAllColumns(TreeCtrl *tree, TreeItem item_);
00564 extern void TreeItem_MoveColumn(TreeCtrl *tree, TreeItem item_, int columnIndex, int beforeIndex);
00565
00566
00567 extern int TreeElement_Init(Tcl_Interp *interp);
00568 extern int TreeStateFromObj(TreeCtrl *tree, Tcl_Obj *obj, int *stateOff, int *stateOn);
00569 extern int StringTableCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName, CONST char **tablePtr);
00570
00571 typedef struct StyleDrawArgs StyleDrawArgs;
00572 struct StyleDrawArgs
00573 {
00574 TreeCtrl *tree;
00575 TreeStyle style;
00576 int indent;
00577 int x;
00578 int y;
00579 int width;
00580 int height;
00581 Drawable drawable;
00582 int state;
00583 Tk_Justify justify;
00584 int bounds[4];
00585 };
00586
00587
00588 extern int TreeStyle_Init(TreeCtrl *tree);
00589 extern int TreeStyle_NeededWidth(TreeCtrl *tree, TreeStyle style_, int state);
00590 extern int TreeStyle_NeededHeight(TreeCtrl *tree, TreeStyle style_, int state);
00591 extern int TreeStyle_UseHeight(StyleDrawArgs *drawArgs);
00592 extern void TreeStyle_Draw(StyleDrawArgs *args);
00593 extern void TreeStyle_FreeResources(TreeCtrl *tree, TreeStyle style_);
00594 extern void TreeStyle_Free(TreeCtrl *tree);
00595 extern int TreeElement_FromObj(TreeCtrl *tree, Tcl_Obj *obj, TreeElement *elemPtr);
00596 extern int TreeElement_IsType(TreeCtrl *tree, TreeElement elem_, CONST char *type);
00597 extern int TreeStyle_FromObj(TreeCtrl *tree, Tcl_Obj *obj, TreeStyle *stylePtr);
00598 extern Tcl_Obj *TreeStyle_ToObj(TreeStyle style_);
00599 extern Tcl_Obj *TreeStyle_GetImage(TreeCtrl *tree, TreeStyle style_);
00600 extern Tcl_Obj *TreeStyle_GetText(TreeCtrl *tree, TreeStyle style_);
00601 extern int TreeStyle_SetImage(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *textObj);
00602 extern int TreeStyle_SetText(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *textObj);
00603 extern int TreeStyle_FindElement(TreeCtrl *tree, TreeStyle style_, TreeElement elem_, int *index);
00604 extern TreeStyle TreeStyle_NewInstance(TreeCtrl *tree, TreeStyle master);
00605 extern int TreeStyle_ElementActual(TreeCtrl *tree, TreeStyle style_, int state, Tcl_Obj *elemObj, Tcl_Obj *obj);
00606 extern int TreeStyle_ElementCget(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *elemObj, Tcl_Obj *obj);
00607 extern int TreeStyle_ElementConfigure(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *elemObj, int objc, Tcl_Obj **objv, int *eMask);
00608 extern void TreeStyle_ListElements(TreeCtrl *tree, TreeStyle style_);
00609 extern TreeStyle TreeStyle_GetMaster(TreeCtrl *tree, TreeStyle style_);
00610 extern char *TreeStyle_Identify(StyleDrawArgs *drawArgs, int x, int y);
00611 extern void TreeStyle_Identify2(StyleDrawArgs *drawArgs,
00612 int x1, int y1, int x2, int y2, Tcl_Obj *listObj);
00613 extern int TreeStyle_Remap(TreeCtrl *tree, TreeStyle styleFrom_, TreeStyle styleTo_, int objc, Tcl_Obj *CONST objv[]);
00614 extern void TreeStyle_TreeChanged(TreeCtrl *tree, int flagT);
00615 #define SORT_ASCII 0
00616 #define SORT_DICT 1
00617 #define SORT_DOUBLE 2
00618 #define SORT_LONG 3
00619 #define SORT_COMMAND 4
00620 extern int TreeStyle_GetSortData(TreeCtrl *tree, TreeStyle style_, int elemIndex, int type, long *lv, double *dv, char **sv);
00621 #if 0
00622 extern int TreeStyle_ValidateElements(TreeCtrl *tree, TreeStyle style_, int objc, Tcl_Obj *CONST objv[]);
00623 #endif
00624 extern int TreeStyle_GetElemRects(StyleDrawArgs *drawArgs, int objc, Tcl_Obj *CONST objv[], XRectangle rects[]);
00625 extern int TreeElementCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00626 extern int TreeStyleCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00627 extern int TreeStyle_ChangeState(TreeCtrl *tree, TreeStyle style_, int state1, int state2);
00628 extern void Tree_UndefineState(TreeCtrl *tree, int state);
00629 extern int TreeStyle_NumElements(TreeCtrl *tree, TreeStyle style_);
00630 extern void TreeStyle_UpdateWindowPositions(StyleDrawArgs *drawArgs);
00631 extern void TreeStyle_OnScreen(TreeCtrl *tree, TreeStyle style_, int onScreen);
00632
00633 extern int ButtonMaxWidth(TreeCtrl *tree);
00634 extern int ButtonHeight(TreeCtrl *tree, int state);
00635
00636
00637 extern int TreeNotify_Init(TreeCtrl *tree);
00638 extern void TreeNotify_OpenClose(TreeCtrl *tree, TreeItem item, int isOpen, int before);
00639 extern void TreeNotify_Selection(TreeCtrl *tree, TreeItemList *select, TreeItemList *deselect);
00640 extern int TreeNotifyCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00641 extern void TreeNotify_ActiveItem(TreeCtrl *tree, TreeItem itemOld, TreeItem itemNew);
00642 extern void TreeNotify_Scroll(TreeCtrl *tree, double fractions[2], int vertical);
00643 extern void TreeNotify_ItemDeleted(TreeCtrl *tree, TreeItemList *items);
00644 extern void TreeNotify_ItemVisibility(TreeCtrl *tree, TreeItemList *v, TreeItemList *h);
00645
00646
00647 extern int TreeColumn_InitInterp(Tcl_Interp *interp);
00648 extern void Tree_InitColumns(TreeCtrl *tree);
00649 extern TreeColumn Tree_FindColumn(TreeCtrl *tree, int columnIndex);
00650
00651 #define COLUMN_ALL ((TreeColumn) -1)
00652 #define COLUMN_NTAIL ((TreeColumn) -2)
00653 #define CFO_NOT_MANY 0x01
00654 #define CFO_NOT_NULL 0x02
00655 #define CFO_NOT_TAIL 0x04
00656 #define CFO_LIST_ALL 0x08
00657 extern int TreeColumnList_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeColumnList *columns, int flags);
00658 extern int TreeColumn_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeColumn *columnPtr, int flags);
00659
00660 typedef struct ColumnForEach ColumnForEach;
00661 struct ColumnForEach {
00662 TreeCtrl *tree;
00663 int error;
00664 int all;
00665 int ntail;
00666 TreeColumn current;
00667 TreeColumn next;
00668 TreeColumn last;
00669 TreeColumnList *list;
00670 int index;
00671 };
00672 extern TreeColumn ColumnForEach_Start(TreeColumnList *columns,
00673 TreeColumnList *column2s, ColumnForEach *iter);
00674 extern TreeColumn ColumnForEach_Next(ColumnForEach *iter);
00675 #define COLUMN_FOR_EACH(column, columns, column2s, iter) \
00676 for (column = ColumnForEach_Start(columns, column2s, iter); \
00677 column != NULL; \
00678 column = ColumnForEach_Next(iter))
00679
00680 extern Tcl_Obj *TreeColumn_ToObj(TreeCtrl *tree, TreeColumn column_);
00681 extern int TreeColumnCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00682 extern int TreeColumn_GetID(TreeColumn column_);
00683 extern int TreeColumn_Index(TreeColumn column_);
00684 extern TreeColumn TreeColumn_Next(TreeColumn column_);
00685 extern TreeColumn TreeColumn_Prev(TreeColumn column_);
00686 extern int TreeColumn_FixedWidth(TreeColumn column_);
00687 extern int TreeColumn_MinWidth(TreeColumn column_);
00688 extern int TreeColumn_MaxWidth(TreeColumn column_);
00689 extern int TreeColumn_NeededWidth(TreeColumn column_);
00690 extern int TreeColumn_UseWidth(TreeColumn column_);
00691 extern int TreeColumn_Offset(TreeColumn column_);
00692 extern Tk_Justify TreeColumn_Justify(TreeColumn column_);
00693 #ifdef DEPRECATED
00694 extern int TreeColumn_WidthHack(TreeColumn column_);
00695 extern int TreeColumn_StepWidth(TreeColumn column_);
00696 #endif
00697 extern TreeStyle TreeColumn_ItemStyle(TreeColumn column_);
00698 extern void TreeColumn_StyleDeleted(TreeColumn column_, TreeStyle style);
00699 extern int TreeColumn_Visible(TreeColumn column_);
00700 extern int TreeColumn_Squeeze(TreeColumn column_);
00701 extern int TreeColumn_BackgroundCount(TreeColumn column_);
00702 extern GC TreeColumn_BackgroundGC(TreeColumn column_, int which);
00703 extern void Tree_DrawHeader(TreeCtrl *tree, Drawable drawable, int x, int y);
00704 extern int TreeColumn_WidthOfItems(TreeColumn column_);
00705 extern void TreeColumn_InvalidateWidth(TreeColumn column_);
00706 extern void TreeColumn_Init(TreeCtrl *tree);
00707 extern void Tree_FreeColumns(TreeCtrl *tree);
00708 extern void Tree_InvalidateColumnWidth(TreeCtrl *tree, TreeColumn column);
00709 extern void Tree_InvalidateColumnHeight(TreeCtrl *tree, TreeColumn column);
00710 extern int Tree_HeaderHeight(TreeCtrl *tree);
00711 extern int TreeColumn_Bbox(TreeColumn column, int *x, int *y, int *w, int *h);
00712 extern TreeColumn Tree_HeaderUnderPoint(TreeCtrl *tree, int *x_, int *y_, int *w, int *h, int nearest);
00713 extern int TreeColumn_Lock(TreeColumn column_);
00714 extern int Tree_WidthOfColumns(TreeCtrl *tree);
00715 extern int Tree_WidthOfLeftColumns(TreeCtrl *tree);
00716 extern int Tree_WidthOfRightColumns(TreeCtrl *tree);
00717 extern void TreeColumn_TreeChanged(TreeCtrl *tree, int flagT);
00718
00719
00720 extern int TreeDragImage_Init(TreeCtrl *tree);
00721 extern void TreeDragImage_Free(TreeDragImage dragImage_);
00722 extern void TreeDragImage_Display(TreeDragImage dragImage_);
00723 extern void TreeDragImage_Undisplay(TreeDragImage dragImage_);
00724 extern void TreeDragImage_Draw(TreeDragImage dragImage_, Drawable drawable, int x, int y);
00725 extern int DragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00726
00727
00728 extern int TreeMarquee_Init(TreeCtrl *tree);
00729 extern void TreeMarquee_Free(TreeMarquee marquee_);
00730 extern void TreeMarquee_Draw(TreeMarquee marquee_, Drawable drawable, int x, int y);
00731 extern void TreeMarquee_Display(TreeMarquee marquee_);
00732 extern void TreeMarquee_Undisplay(TreeMarquee marquee_);
00733 extern int TreeMarqueeCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
00734
00735
00736 extern int Tree_TotalWidth(TreeCtrl *tree);
00737 extern int Tree_TotalHeight(TreeCtrl *tree);
00738 extern TreeItem Tree_ItemUnderPoint(TreeCtrl *tree, int *x, int *y, int nearest);
00739 extern void Tree_FreeItemRInfo(TreeCtrl *tree, TreeItem item);
00740 extern int Tree_ItemBbox(TreeCtrl *tree, TreeItem item, int lock, int *x, int *y, int *w, int *h);
00741 extern TreeItem Tree_ItemAbove(TreeCtrl *tree, TreeItem item);
00742 extern TreeItem Tree_ItemBelow(TreeCtrl *tree, TreeItem item);
00743 extern TreeItem Tree_ItemLeft(TreeCtrl *tree, TreeItem item);
00744 extern TreeItem Tree_ItemRight(TreeCtrl *tree, TreeItem item);
00745 extern TreeItem Tree_ItemTop(TreeCtrl *tree, TreeItem item);
00746 extern TreeItem Tree_ItemBottom(TreeCtrl *tree, TreeItem item);
00747 extern TreeItem Tree_ItemLeftMost(TreeCtrl *tree, TreeItem item);
00748 extern TreeItem Tree_ItemRightMost(TreeCtrl *tree, TreeItem item);
00749 extern int Tree_ItemToRNC(TreeCtrl *tree, TreeItem item, int *row, int *col);
00750 extern TreeItem Tree_RNCToItem(TreeCtrl *tree, int row, int col);
00751 extern int Tree_AreaBbox(TreeCtrl *tree, int area, int *x1_, int *y1_, int *x2_, int *y2_);
00752
00753 enum {
00754 TREE_AREA_NONE = 0,
00755 TREE_AREA_HEADER,
00756 TREE_AREA_CONTENT,
00757 TREE_AREA_LEFT,
00758 TREE_AREA_RIGHT
00759 };
00760 extern int Tree_HitTest(TreeCtrl *tree, int x, int y);
00761
00762 extern void TreeDInfo_Init(TreeCtrl *tree);
00763 extern void TreeDInfo_Free(TreeCtrl *tree);
00764 extern void Tree_EventuallyRedraw(TreeCtrl *tree);
00765 extern void Tree_GetScrollFractionsX(TreeCtrl *tree, double fractions[2]);
00766 extern void Tree_GetScrollFractionsY(TreeCtrl *tree, double fractions[2]);
00767 extern int Increment_FindX(TreeCtrl *tree, int offset);
00768 extern int Increment_FindY(TreeCtrl *tree, int offset);
00769 extern int Increment_ToOffsetX(TreeCtrl *tree, int index);
00770 extern int Increment_ToOffsetY(TreeCtrl *tree, int index);
00771 extern int B_XviewCmd(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]);
00772 extern int B_YviewCmd(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]);
00773 extern void Tree_SetOriginX(TreeCtrl *tree, int xOrigin);
00774 extern void Tree_SetOriginY(TreeCtrl *tree, int yOrigin);
00775 extern void Tree_RelayoutWindow(TreeCtrl *tree);
00776 extern void Tree_FreeItemDInfo(TreeCtrl *tree, TreeItem item1, TreeItem item2);
00777 extern void Tree_InvalidateItemDInfo(TreeCtrl *tree, TreeColumn column, TreeItem item1, TreeItem item2);
00778 extern void TreeDisplay_ItemDeleted(TreeCtrl *tree, TreeItem item);
00779 extern void TreeDisplay_ColumnDeleted(TreeCtrl *tree, TreeColumn column);
00780 extern void TreeDisplay_GetReadyForTrouble(TreeCtrl *tree, int *requestsPtr);
00781 extern int TreeDisplay_WasThereTrouble(TreeCtrl *tree, int requests);
00782 extern void Tree_InvalidateArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
00783 extern void Tree_InvalidateItemArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
00784 extern void Tree_InvalidateRegion(TreeCtrl *tree, TkRegion region);
00785 extern void Tree_RedrawArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
00786 extern void Tree_FocusChanged(TreeCtrl *tree, int gotFocus);
00787 extern void Tree_Activate(TreeCtrl *tree, int isActive);
00788 extern void Tree_ItemsInArea(TreeCtrl *tree, TreeItemList *items, int minX, int minY, int maxX, int maxY);
00789 extern void TreeColumnProxy_Undisplay(TreeCtrl *tree);
00790 extern void TreeColumnProxy_Display(TreeCtrl *tree);
00791 extern void TreeRowProxy_Undisplay(TreeCtrl *tree);
00792 extern void TreeRowProxy_Display(TreeCtrl *tree);
00793 extern void Tree_DrawTiledImage(TreeCtrl *tree, Drawable drawable, Tk_Image image,
00794 int x1, int y1, int x2, int y2, int xOffset, int yOffset);
00795
00796 #define DINFO_OUT_OF_DATE 0x0001
00797 #define DINFO_CHECK_COLUMN_WIDTH 0x0002
00798 #define DINFO_DRAW_HEADER 0x0004
00799 #define DINFO_SET_ORIGIN_X 0x0008
00800 #define DINFO_UPDATE_SCROLLBAR_X 0x0010
00801 #define DINFO_REDRAW_PENDING 0x00020
00802 #define DINFO_INVALIDATE 0x0040
00803 #define DINFO_DRAW_HIGHLIGHT 0x0080
00804 #define DINFO_DRAW_BORDER 0x0100
00805 #define DINFO_REDO_RANGES 0x0200
00806 #define DINFO_SET_ORIGIN_Y 0x0400
00807 #define DINFO_UPDATE_SCROLLBAR_Y 0x0800
00808 #define DINFO_REDO_INCREMENTS 0x1000
00809 #define DINFO_REDO_COLUMN_WIDTH 0x2000
00810 #define DINFO_REDO_SELECTION 0x4000
00811 #define DINFO_DRAW_WHITESPACE 0x8000
00812 extern void Tree_DInfoChanged(TreeCtrl *tree, int flags);
00813
00814 extern void Tree_TheWorldHasChanged(Tcl_Interp *interp);
00815
00816
00817 extern int TreeTheme_InitInterp(Tcl_Interp *interp);
00818 extern void TreeTheme_ThemeChanged(TreeCtrl *tree);
00819 extern int TreeTheme_Init(TreeCtrl *tree);
00820 extern int TreeTheme_Free(TreeCtrl *tree);
00821 extern int TreeTheme_DrawHeaderItem(TreeCtrl *tree, Drawable drawable, int state, int arrow, int x, int y, int width, int height);
00822 extern int TreeTheme_GetHeaderFixedHeight(TreeCtrl *tree, int *heightPtr);
00823 extern int TreeTheme_GetHeaderContentMargins(TreeCtrl *tree, int state, int arrow, int bounds[4]);
00824 extern int TreeTheme_DrawHeaderArrow(TreeCtrl *tree, Drawable drawable, int up, int x, int y, int width, int height);
00825 extern int TreeTheme_DrawButton(TreeCtrl *tree, Drawable drawable, int open, int x, int y, int width, int height);
00826 extern int TreeTheme_GetButtonSize(TreeCtrl *tree, Drawable drawable, int open, int *widthPtr, int *heightPtr);
00827 extern int TreeTheme_GetArrowSize(TreeCtrl *tree, Drawable drawable, int up, int *widthPtr, int *heightPtr);
00828
00829
00830 #ifdef TREECTRL_DEBUG
00831 #define WIPE(p,s) memset((char *) p, 0xAA, s)
00832 #else
00833 #define WIPE(p,s)
00834 #endif
00835 #define CWIPE(p,t,c) WIPE(p, sizeof(t) * (c))
00836 #define WIPEFREE(p,s) { WIPE(p, s); ckfree((char *) p); }
00837 #define WFREE(p,t) WIPEFREE(p, sizeof(t))
00838 #define WCFREE(p,t,c) WIPEFREE(p, sizeof(t) * (c))
00839
00840 extern int Ellipsis(Tk_Font tkfont, char *string, int numBytes, int *maxPixels, char *ellipsis, int force);
00841 extern void HDotLine(TreeCtrl *tree, Drawable drawable, GC gc, int x1, int y1, int x2);
00842 extern void VDotLine(TreeCtrl *tree, Drawable drawable, GC gc, int x1, int y1, int y2);
00843 extern void DotRect(TreeCtrl *tree, Drawable drawable, int x, int y, int width, int height);
00844 extern void DrawActiveOutline(TreeCtrl *tree, Drawable drawable, int x, int y, int width, int height, int open);
00845 typedef struct DotState
00846 {
00847 int stuff[10];
00848 } DotState;
00849 extern void DotRect_Setup(TreeCtrl *tree, Drawable drawable, DotState *dotState);
00850 extern void DotRect_Draw(DotState *dotState, int x, int y, int width, int height);
00851 extern void DotRect_Restore(DotState *dotState);
00852 typedef struct TextLayout_ *TextLayout;
00853 extern TextLayout TextLayout_Compute(Tk_Font tkfont, CONST char *string,
00854 int numChars, int wrapLength, Tk_Justify justify, int maxLines, int flags);
00855 extern void TextLayout_Free(TextLayout textLayout);
00856 extern void TextLayout_Size(TextLayout textLayout, int *widthPtr, int *heightPtr);
00857 extern int TextLayout_TotalWidth(TextLayout textLayout);
00858 extern void TextLayout_Draw(Display *display, Drawable drawable, GC gc,
00859 TextLayout layout, int x, int y, int firstChar, int lastChar,
00860 int underline);
00861 #ifdef MAC_OSX_TK
00862 extern void DrawXORLine(Display *display, Drawable drawable, int x1, int y1,
00863 int x2, int y2);
00864 #endif
00865 extern void Tree_DrawBitmapWithGC(TreeCtrl *tree, Pixmap bitmap, Drawable drawable,
00866 GC gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y);
00867 extern void Tree_DrawBitmap(TreeCtrl *tree, Pixmap bitmap, Drawable drawable,
00868 XColor *fg, XColor *bg,
00869 int src_x, int src_y, int width, int height, int dest_x, int dest_y);
00870 extern void Tk_FillRegion(Display *display, Drawable drawable, GC gc, TkRegion rgn);
00871 extern void Tk_OffsetRegion(TkRegion region, int xOffset, int yOffset);
00872 extern int Tree_ScrollWindow(TreeCtrl *tree, GC gc, int x, int y,
00873 int width, int height, int dx, int dy, TkRegion damageRgn);
00874 extern void UnsetClipMask(TreeCtrl *tree, Drawable drawable, GC gc);
00875 extern void XImage2Photo(Tcl_Interp *interp, Tk_PhotoHandle photoH, XImage *ximage, int alpha);
00876
00877 #define PAD_TOP_LEFT 0
00878 #define PAD_BOTTOM_RIGHT 1
00879 extern Tk_ObjCustomOption PadAmountOption;
00880
00881 extern int TreeCtrl_GetPadAmountFromObj(Tcl_Interp *interp,
00882 Tk_Window tkwin, Tcl_Obj *padObj,
00883 int *topLeftPtr, int *bottomRightPtr);
00884 extern Tcl_Obj * TreeCtrl_NewPadAmountObj(int *padAmounts);
00885
00886
00887
00888 extern int ObjectIsEmpty(Tcl_Obj *obj);
00889
00890 extern PerStateType pstBitmap;
00891 extern PerStateType pstBoolean;
00892 extern PerStateType pstBorder;
00893 extern PerStateType pstColor;
00894 extern PerStateType pstFont;
00895 extern PerStateType pstImage;
00896 extern PerStateType pstRelief;
00897
00898 #define MATCH_NONE 0
00899 #define MATCH_ANY 1
00900 #define MATCH_PARTIAL 2
00901 #define MATCH_EXACT 3
00902
00903 extern void PerStateInfo_Free(TreeCtrl *tree, PerStateType *typePtr,
00904 PerStateInfo *pInfo);
00905 typedef int (*StateFromObjProc)(TreeCtrl *tree, Tcl_Obj *obj, int *stateOff, int *stateOn);
00906 extern int PerStateInfo_FromObj(TreeCtrl *tree, StateFromObjProc proc,
00907 PerStateType *typePtr, PerStateInfo *pInfo);
00908 extern PerStateData *PerStateInfo_ForState(TreeCtrl *tree,
00909 PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match);
00910 extern Tcl_Obj *PerStateInfo_ObjForState(TreeCtrl *tree, PerStateType *typePtr,
00911 PerStateInfo *pInfo, int state, int *match);
00912 extern int PerStateInfo_Undefine(TreeCtrl *tree, PerStateType *typePtr,
00913 PerStateInfo *pInfo, int state);
00914
00915 struct PerStateGC
00916 {
00917 unsigned long mask;
00918 XGCValues gcValues;
00919 GC gc;
00920 struct PerStateGC *next;
00921 };
00922 extern void PerStateGC_Free(TreeCtrl *tree, struct PerStateGC **pGCPtr);
00923 extern GC PerStateGC_Get(TreeCtrl *tree, struct PerStateGC **pGCPtr, unsigned long mask, XGCValues *gcValues);
00924
00925 extern Pixmap PerStateBitmap_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00926 int state, int *match);
00927 extern void PerStateBitmap_MaxSize(TreeCtrl *tree, PerStateInfo *pInfo,
00928 int *widthPtr, int *heightPtr);
00929 extern int PerStateBoolean_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00930 int state, int *match);
00931 extern Tk_3DBorder PerStateBorder_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00932 int state, int *match);
00933 extern XColor *PerStateColor_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00934 int state, int *match);
00935 extern Tk_Font PerStateFont_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00936 int state, int *match);
00937 extern Tk_Image PerStateImage_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00938 int state, int *match);
00939 extern void PerStateImage_MaxSize(TreeCtrl *tree, PerStateInfo *pInfo,
00940 int *widthPtr, int *heightPtr);
00941 extern int PerStateRelief_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
00942 int state, int *match);
00943
00944 extern void PSTSave(PerStateInfo *pInfo, PerStateInfo *pSave);
00945 extern void PSTRestore(TreeCtrl *tree, PerStateType *typePtr,
00946 PerStateInfo *pInfo, PerStateInfo *pSave);
00947
00948 #ifdef ALLOC_HAX
00949 extern ClientData AllocHax_Init(void);
00950 extern void AllocHax_Finalize(ClientData data);
00951 extern char *AllocHax_Alloc(ClientData data, Tk_Uid id, int size);
00952 extern char *AllocHax_CAlloc(ClientData data, Tk_Uid id, int size, int count, int roundUp);
00953 extern char *AllocHax_Realloc(ClientData data, Tk_Uid id, char *ptr, int size1, int size2);
00954 extern void AllocHax_Free(ClientData data, Tk_Uid id, char *ptr, int size);
00955 extern void AllocHax_CFree(ClientData data, Tk_Uid id, char *ptr, int size, int count, int roundUp);
00956 extern void AllocHax_Stats(Tcl_Interp *interp, ClientData data);
00957 #endif
00958
00959
00960
00961 extern void TreePtrList_Init(TreeCtrl *tree, TreePtrList *tilPtr, int count);
00962 extern ClientData *TreePtrList_Append(TreePtrList *tilPtr, ClientData ptr);
00963 extern ClientData *TreePtrList_Concat(TreePtrList *tilPtr, TreePtrList *til2Ptr);
00964 extern void TreePtrList_Free(TreePtrList *tilPtr);
00965
00966 #define TreeItemList_Init TreePtrList_Init
00967 #define TreeItemList_Append TreePtrList_Append
00968 #define TreeItemList_Concat TreePtrList_Concat
00969 #define TreeItemList_Free TreePtrList_Free
00970 #define TreeItemList_Items(L) ((TreeItem *) (L)->pointers)
00971 #define TreeItemList_Nth(L,n) ((TreeItem) (L)->pointers[n])
00972 #define TreeItemList_Count(L) ((L)->count)
00973 extern void TreeItemList_Sort(TreeItemList *items);
00974
00975 #define TreeColumnList_Init TreePtrList_Init
00976 #define TreeColumnList_Append TreePtrList_Append
00977 #define TreeColumnList_Concat TreePtrList_Concat
00978 #define TreeColumnList_Free TreePtrList_Free
00979 #define TreeColumnList_Nth(L,n) ((TreeColumn) (L)->pointers[n])
00980 #define TreeColumnList_Count(L) ((L)->count)
00981
00982
00983
00984
00985
00986
00987 typedef struct TagInfo TagInfo;
00988 struct TagInfo {
00989 int numTags;
00990
00991 int tagSpace;
00992
00993 #define TREE_TAG_SPACE 3
00994 Tk_Uid tagPtr[TREE_TAG_SPACE];
00995
00996
00997 };
00998
00999 extern TagInfo *TagInfo_Add(TreeCtrl *tree, TagInfo *tagInfo, Tk_Uid tags[], int numTags);
01000 extern TagInfo *TagInfo_Remove(TreeCtrl *tree, TagInfo *tagInfo, Tk_Uid tags[], int numTags);
01001 extern Tk_Uid *TagInfo_Names(TreeCtrl *tree, TagInfo *tagInfo, Tk_Uid *tags, int *numTagsPtr, int *tagSpacePtr);
01002 extern TagInfo *TagInfo_Copy(TreeCtrl *tree, TagInfo *tagInfo);
01003 extern void TagInfo_Free(TreeCtrl *tree, TagInfo *tagInfo);
01004 extern int TagInfo_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TagInfo **tagInfoPtr);
01005 extern Tk_ObjCustomOption TagInfoCO;
01006
01007
01008
01009
01010 typedef struct TagExpr {
01011 TreeCtrl *tree;
01012
01013 Tk_Uid *uids;
01014 Tk_Uid staticUids[15];
01015 int allocated;
01016 int length;
01017 int index;
01018
01019 int simple;
01020 Tk_Uid uid;
01021
01022 char *string;
01023 int stringIndex;
01024 int stringLength;
01025
01026 char *rewritebuffer;
01027 char staticRWB[100];
01028 } TagExpr;
01029
01030 extern int TagExpr_Init(TreeCtrl *tree, Tcl_Obj *exprObj, TagExpr *expr);
01031 extern int TagExpr_Scan(TagExpr *expr);
01032 extern int TagExpr_Eval(TagExpr *expr, TagInfo *tags);
01033 extern void TagExpr_Free(TagExpr *expr);
01034
01035 extern Tk_OptionSpec *OptionSpec_Find(Tk_OptionSpec *optionTable, CONST char *optionName);
01036
01037 extern Tk_ObjCustomOption *PerStateCO_Alloc(CONST char *optionName,
01038 PerStateType *typePtr, StateFromObjProc proc);
01039 extern int PerStateCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
01040 PerStateType *typePtr, StateFromObjProc proc);
01041
01042
01043
01044 typedef struct DynamicOptionSpec DynamicOptionSpec;
01045 typedef struct DynamicOption DynamicOption;
01046
01047 struct DynamicOption
01048 {
01049 int id;
01050 DynamicOption *next;
01051 char data[1];
01052 };
01053
01054 typedef void (DynamicOptionInitProc)(char *data);
01055
01056 extern DynamicOption *DynamicOption_AllocIfNeeded(TreeCtrl *tree,
01057 DynamicOption **firstPtr, int id, int size, DynamicOptionInitProc *init);
01058 extern char *DynamicOption_FindData(DynamicOption *first, int id);
01059 extern void DynamicOption_Free(TreeCtrl *tree, DynamicOption *first,
01060 Tk_OptionSpec *optionTable);
01061 extern void DynamicOption_Free1(TreeCtrl *tree, DynamicOption **firstPtr,
01062 int id, int size);
01063 extern int DynamicCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
01064 int id, int size, int objOffset, int internalOffset,
01065 Tk_ObjCustomOption *custom, DynamicOptionInitProc *init);
01066
01067 extern int BooleanFlagCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
01068 int theFlag);
01069
01070 extern Tk_ObjCustomOption pixelsCO;
01071 extern Tk_ObjCustomOption stringCO;
01072 extern Tk_ObjCustomOption styleCO;
01073
01074
01075
01076 #define STATIC_SIZE 20
01077 #define STATIC_ALLOC(P,T,C) \
01078 if (C > STATIC_SIZE) \
01079 P = (T *) ckalloc(sizeof(T) * (C))
01080 #define STATIC_FREE(P,T,C) \
01081 CWIPE(P, T, C); \
01082 if (C > STATIC_SIZE) \
01083 ckfree((char *) P)
01084 #define STATIC_FREE2(P,P2) \
01085 if (P != P2) \
01086 ckfree((char *) P)
01087