KWWidgets
|
00001 /* 00002 * tkTreeCtrl.h -- 00003 * 00004 * This module is the header for treectrl widgets for the Tk toolkit. 00005 * 00006 * Copyright (c) 2002-2006 Tim Baker 00007 * Copyright (c) 2002-2003 Christian Krone 00008 * Copyright (c) 2003 ActiveState Corporation 00009 * 00010 * RCS: @(#) $Id: tkTreeCtrl.h,v 1.3 2008-01-24 20:35:28 barre Exp $ 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 /* HAVE_DBWIN_H */ 00034 #define dbwin printf 00035 #endif /* HAVE_DBWIN_H */ 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 /* There is one of these for each XColor, Tk_Font, Tk_Image etc */ 00073 struct PerStateData 00074 { 00075 int stateOff; 00076 int stateOn; 00077 /* Type-specific fields go here */ 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 * A TreePtrList is used for dynamically-growing lists of ClientData pointers. 00105 * A TreePtrList is NULL-terminated. 00106 * Based on Tcl_DString code. 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; /* NULL-terminated list of pointers. */ 00115 int count; /* Number of items. */ 00116 int space; /* Number of slots pointed to by pointers[]. */ 00117 ClientData pointerSpace[TIL_STATIC_SPACE]; /* Space to use in common case 00118 * where the list is small. */ 00119 }; 00120 00121 enum { LEFT, TOP, RIGHT, BOTTOM }; 00122 00123 struct TreeCtrlDebug 00124 { 00125 Tk_OptionTable optionTable; 00126 int enable; /* Turn all debugging on/off */ 00127 int data; /* Debug data structures */ 00128 int display; /* Debug display routines */ 00129 int textLayout; /* Debug text layout */ 00130 int displayDelay; /* Delay between copy/draw operations */ 00131 XColor *eraseColor; /* Erase "invalidated" areas */ 00132 GC gcErase; /* for eraseColor */ 00133 XColor *drawColor; /* Erase about-to-be-drawn areas */ 00134 GC gcDraw; /* for eraseColor */ 00135 }; 00136 00137 struct TreeCtrlColumnDrag 00138 { 00139 Tk_OptionTable optionTable; 00140 int enable; /* -enable */ 00141 TreeColumn column; /* -imagecolumn */ 00142 Tcl_Obj *offsetObj; /* -imageoffset */ 00143 int offset; /* -imageoffset */ 00144 XColor *color; /* -imagecolor */ 00145 int alpha; /* -imagealpha */ 00146 TreeColumn indColumn; /* -indicatorcolumn */ 00147 XColor *indColor; /* -indicatorcolor */ 00148 int indSide; /* -indicatorside */ 00149 }; 00150 00151 struct TreeCtrl 00152 { 00153 /* Standard stuff */ 00154 Tk_Window tkwin; 00155 Display *display; 00156 Tcl_Interp *interp; 00157 Tcl_Command widgetCmd; 00158 Tk_OptionTable optionTable; 00159 00160 /* Configuration options */ 00161 Tcl_Obj *fgObj; /* -foreground */ 00162 XColor *fgColorPtr; /* -foreground */ 00163 Tcl_Obj *borderWidthObj; /* -borderwidth */ 00164 int borderWidth; /* -borderwidth */ 00165 Tk_3DBorder border; /* -background */ 00166 Tk_Cursor cursor; /* Current cursor for window, or None. */ 00167 int relief; /* -relief */ 00168 Tcl_Obj *highlightWidthObj; /* -highlightthickness */ 00169 int highlightWidth; /* -highlightthickness */ 00170 XColor *highlightBgColorPtr; /* -highlightbackground */ 00171 XColor *highlightColorPtr; /* -highlightcolor */ 00172 char *xScrollCmd; /* -xscrollcommand */ 00173 char *yScrollCmd; /* -yscrollcommand */ 00174 Tcl_Obj *xScrollDelay; /* -xscrolldelay: used by scripts */ 00175 Tcl_Obj *yScrollDelay; /* -yscrolldelay: used by scripts */ 00176 int xScrollIncrement; /* -xscrollincrement */ 00177 int yScrollIncrement; /* -yscrollincrement */ 00178 Tcl_Obj *scrollMargin; /* -scrollmargin: used by scripts */ 00179 char *takeFocus; /* -takfocus */ 00180 Tcl_Obj *fontObj; /* -font */ 00181 Tk_Font tkfont; /* -font */ 00182 int showButtons; /* boolean: Draw expand/collapse buttons */ 00183 int showLines; /* boolean: Draw lines connecting parent to 00184 * child */ 00185 int showRootLines; /* boolean: Draw lines connecting children 00186 * of the root item */ 00187 int showRoot; /* boolean: Draw the unique root item */ 00188 int showRootButton; /* boolean: Draw expand/collapse button for 00189 * root item */ 00190 int showHeader; /* boolean: show column titles */ 00191 Tcl_Obj *indentObj; /* pixels: offset of child relative to 00192 * parent */ 00193 int indent; /* pixels: offset of child relative to 00194 * parent */ 00195 char *selectMode; /* -selectmode: used by scripts only */ 00196 Tcl_Obj *itemHeightObj; /* -itemheight: Fixed height for all items 00197 (unless overridden) */ 00198 int itemHeight; /* -itemheight */ 00199 Tcl_Obj *minItemHeightObj; /* -minitemheight: Minimum height for all items */ 00200 int minItemHeight; /* -minitemheight */ 00201 Tcl_Obj *itemWidthObj; /* -itemwidth */ 00202 int itemWidth; /* -itemwidth */ 00203 int itemWidthEqual; /* -itemwidthequal */ 00204 Tcl_Obj *itemWidMultObj; /* -itemwidthmultiple */ 00205 int itemWidMult; /* -itemwidthmultiple */ 00206 Tcl_Obj *widthObj; /* -width */ 00207 int width; /* -width */ 00208 Tcl_Obj *heightObj; /* -height */ 00209 int height; /* -height */ 00210 TreeColumn columnTree; /* column where buttons/lines are drawn */ 00211 #define DOUBLEBUFFER_NONE 0 00212 #define DOUBLEBUFFER_ITEM 1 00213 #define DOUBLEBUFFER_WINDOW 2 00214 int doubleBuffer; /* -doublebuffer */ 00215 XColor *buttonColor; /* -buttoncolor */ 00216 Tcl_Obj *buttonSizeObj; /* -buttonSize */ 00217 int buttonSize; /* -buttonsize */ 00218 Tcl_Obj *buttonThicknessObj;/* -buttonthickness */ 00219 int buttonThickness; /* -buttonthickness */ 00220 XColor *lineColor; /* -linecolor */ 00221 Tcl_Obj *lineThicknessObj; /* -linethickness */ 00222 int lineThickness; /* -linethickness */ 00223 #define LINE_STYLE_DOT 0 00224 #define LINE_STYLE_SOLID 1 00225 int lineStyle; /* -linestyle */ 00226 int vertical; /* -orient */ 00227 Tcl_Obj *wrapObj; /* -wrap */ 00228 PerStateInfo buttonImage; /* -buttonimage */ 00229 PerStateInfo buttonBitmap; /* -buttonbitmap */ 00230 char *backgroundImageString; /* -backgroundimage */ 00231 int useIndent; /* MAX of open/closed button width and 00232 * indent */ 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 /* compatibility */ 00239 #define BG_MODE_VISINDEX 5 /* compatibility */ 00240 #endif /* DEPRECATED */ 00241 int backgroundMode; /* -backgroundmode */ 00242 int columnResizeMode; /* -columnresizemode */ 00243 int *itemPadX; /* -itempadx */ 00244 Tcl_Obj *itemPadXObj; /* -itempadx */ 00245 int *itemPadY; /* -itempady */ 00246 Tcl_Obj *itemPadYObj; /* -itempady */ 00247 00248 struct TreeCtrlDebug debug; 00249 struct TreeCtrlColumnDrag columnDrag; 00250 00251 /* Other stuff */ 00252 int gotFocus; /* flag */ 00253 int deleted; /* flag */ 00254 int updateIndex; /* flag */ 00255 int isActive; /* flag: mac & win "active" toplevel */ 00256 int inset; /* borderWidth + highlightWidth */ 00257 int xOrigin; /* offset from content x=0 to window x=0 */ 00258 int yOrigin; /* offset from content y=0 to window y=0 */ 00259 GC copyGC; 00260 GC textGC; 00261 GC buttonGC; 00262 GC lineGC; 00263 Tk_Image backgroundImage; /* -backgroundimage */ 00264 int useTheme; /* -usetheme */ 00265 char *itemPrefix; /* -itemprefix */ 00266 char *columnPrefix; /* -columnprefix */ 00267 00268 int prevWidth; 00269 int prevHeight; 00270 int drawableXOrigin; 00271 int drawableYOrigin; 00272 00273 TreeColumn columns; /* List of columns */ 00274 TreeColumn columnLast; /* Last in list of columns */ 00275 TreeColumn columnTail; /* Last infinitely-wide column */ 00276 TreeColumn columnVis; /* First visible column */ 00277 int columnCount; /* Number of columns */ 00278 int columnCountVis; /* Number of visible columns */ 00279 int headerHeight; /* Height of column titles */ 00280 int widthOfColumns; /* Sum of column widths */ 00281 int columnTreeLeft; /* left of column where buttons/lines are 00282 * drawn */ 00283 int columnTreeVis; /* TRUE if columnTree is visible */ 00284 int columnBgCnt; /* Max -itembackground colors */ 00285 00286 #define COLUMN_LOCK_LEFT 0 00287 #define COLUMN_LOCK_NONE 1 00288 #define COLUMN_LOCK_RIGHT 2 00289 TreeColumn columnLockLeft; /* First left-locked column */ 00290 TreeColumn columnLockNone; /* First unlocked column */ 00291 TreeColumn columnLockRight; /* First right-locked column */ 00292 int widthOfColumnsLeft; /* Sum of left-locked column widths */ 00293 int widthOfColumnsRight; /* Sum of right-locked column widths */ 00294 int columnCountVisLeft; /* Number of visible left-locked columns */ 00295 int columnCountVisRight; /* Number of visible right-locked columns */ 00296 00297 #define UNIFORM_GROUP 00298 #ifdef UNIFORM_GROUP 00299 Tcl_HashTable uniformGroupHash; /* -uniform -> UniformGroup */ 00300 #endif 00301 00302 TreeItem root; 00303 TreeItem activeItem; 00304 TreeItem anchorItem; 00305 int nextItemId; 00306 int nextColumnId; 00307 Tcl_HashTable itemHash; /* TreeItem.id -> TreeItem */ 00308 Tcl_HashTable itemSpansHash; /* TreeItem -> nothing */ 00309 Tcl_HashTable elementHash; /* Element.name -> Element */ 00310 Tcl_HashTable styleHash; /* Style.name -> Style */ 00311 Tcl_HashTable imageNameHash; /* image name -> TreeImageRef */ 00312 Tcl_HashTable imageTokenHash; /* Tk_Image -> TreeImageRef */ 00313 int depth; /* max depth of items under root */ 00314 int itemCount; /* Total number of items */ 00315 int itemVisCount; /* Total number of ReallyVisible() items */ 00316 QE_BindingTable bindingTable; 00317 TreeDragImage dragImage; 00318 TreeMarquee marquee; 00319 TreeDInfo dInfo; 00320 int selectCount; /* Number of selected items */ 00321 Tcl_HashTable selection; /* Selected items */ 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; /* TREE_WRAP_xxx */ 00328 int wrapArg; /* Number of items, number of pixels */ 00329 00330 int totalWidth; /* Max/Sum of all TreeRanges */ 00331 int totalHeight; /* Max/Sum of all TreeRanges */ 00332 00333 struct { 00334 Tcl_Obj *xObj; 00335 int x; /* Window coords */ 00336 int sx; /* Window coords */ 00337 int onScreen; 00338 } columnProxy; 00339 00340 char *stateNames[32]; /* Names of static and dynamic item states */ 00341 00342 int scanX; /* [scan mark] and [scan dragto] */ 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 /* DEPRECATED */ 00355 Tk_OptionTable itemOptionTable; 00356 int itemPrefixLen; /* -itemprefix */ 00357 int columnPrefixLen; /* -columnprefix */ 00358 #ifdef ALLOC_HAX 00359 ClientData allocData; 00360 #endif 00361 int preserveItemRefCnt; /* Ref count so items-in-use aren't freed. */ 00362 TreeItemList preserveItemList; /* List of items to be deleted when 00363 * preserveItemRefCnt==0. */ 00364 00365 struct { 00366 Tcl_Obj *yObj; 00367 int y; /* Window coords */ 00368 int sy; /* Window coords */ 00369 int onScreen; 00370 } rowProxy; 00371 00372 char *optionHax[64]; /* Used by OptionHax_xxx */ 00373 int optionHaxCnt; /* Used by OptionHax_xxx */ 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 /* tkTreeItem.c */ 00450 00451 #define ITEM_ALL ((TreeItem) -1) 00452 #define IFO_NOT_MANY 0x0001 /* ItemFromObj flag: > 1 item is not ok */ 00453 #define IFO_NOT_NULL 0x0002 /* ItemFromObj flag: can't be NULL */ 00454 #define IFO_NOT_ROOT 0x0004 /* ItemFromObj flag: "root" is forbidden */ 00455 #define IFO_NOT_ORPHAN 0x0008 /* ItemFromObj flag: item must have a parent */ 00456 #define IFO_LIST_ALL 0x0010 /* ItemFromObj flag: return "all" as list */ 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 /* first user bit */ 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 /* tkTreeElem.c */ 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; /* STATE_xxx */ 00583 Tk_Justify justify; 00584 int bounds[4]; 00585 }; 00586 00587 /* tkTreeStyle.c */ 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 /* tkTreeNotify.c */ 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 /* tkTreeColumn.c */ 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) /* Every column. */ 00652 #define COLUMN_NTAIL ((TreeColumn) -2) /* Every column but the tail. */ 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 /* tkTreeDrag.c */ 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 /* tkTreeMarquee.c */ 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 /* tkTreeDisplay.c */ 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 /* tkTreeTheme.c */ 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 /* tkTreeUtils.c */ 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 * This structure holds a list of tags. 00986 */ 00987 typedef struct TagInfo TagInfo; 00988 struct TagInfo { 00989 int numTags; /* Number of tag slots actually used 00990 * at tagPtr. */ 00991 int tagSpace; /* Total amount of tag space available 00992 * at tagPtr. */ 00993 #define TREE_TAG_SPACE 3 00994 Tk_Uid tagPtr[TREE_TAG_SPACE]; /* Array of tags. The actual size will 00995 * be tagSpace. THIS FIELD MUST BE THE 00996 * LAST IN THE STRUCTURE. */ 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 * This struct holds information about a tag expression. 01009 */ 01010 typedef struct TagExpr { 01011 TreeCtrl *tree; 01012 01013 Tk_Uid *uids; /* expresion compiled to an array of uids */ 01014 Tk_Uid staticUids[15]; 01015 int allocated; /* available space for array of uids */ 01016 int length; /* number of uids */ 01017 int index; /* current position in expression evaluation */ 01018 01019 int simple; /* TRUE if expr is single tag */ 01020 Tk_Uid uid; /* single tag if 'simple' is TRUE */ 01021 01022 char *string; /* tag expression string */ 01023 int stringIndex; /* current position in string scan */ 01024 int stringLength; /* length of tag expression string */ 01025 01026 char *rewritebuffer; /* tag string (after removing escapes) */ 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; /* Unique id. */ 01050 DynamicOption *next; /* Linked list. */ 01051 char data[1]; /* Actual size will be > 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