1 2 /* 3 * bltTreeView.h -- 4 * 5 * This module implements an hierarchy widget for the BLT toolkit. 6 * 7 * Copyright 1998-1999 Lucent Technologies, Inc. 8 * 9 * Permission to use, copy, modify, and distribute this software and 10 * its documentation for any purpose and without fee is hereby 11 * granted, provided that the above copyright notice appear in all 12 * copies and that both that the copyright notice and warranty 13 * disclaimer appear in supporting documentation, and that the names 14 * of Lucent Technologies or any of their entities not be used in 15 * advertising or publicity pertaining to distribution of the software 16 * without specific, written prior permission. 17 * 18 * Lucent Technologies disclaims all warranties with regard to this 19 * software, including all implied warranties of merchantability and 20 * fitness. In no event shall Lucent Technologies be liable for any 21 * special, indirect or consequential damages or any damages 22 * whatsoever resulting from loss of use, data or profits, whether in 23 * an action of contract, negligence or other tortuous action, arising 24 * out of or in connection with the use or performance of this 25 * software. 26 * 27 * The "treeview" widget was created by George A. Howlett. 28 * Extensive cleanups and enhancements by Peter MacDonald. 29 */ 30 31 /* 32 * TODO: 33 * 34 * BUGS: 35 * 1. "open" operation should change scroll offset so that as many 36 * new entries (up to half a screen) can be seen. 37 * 2. "open" needs to adjust the scrolloffset so that the same entry 38 * is seen at the same place. 39 */ 40 41 #ifndef BLT_TREEVIEW_H 42 #define BLT_TREEVIEW_H 43 44 #include "bltImage.h" 45 #include "bltHash.h" 46 #include "bltChain.h" 47 #include "bltTree.h" 48 #include "bltTile.h" 49 #include "bltBind.h" 50 #include "bltObjConfig.h" 51 52 #define ITEM_ENTRY (ClientData)0 53 #define ITEM_ENTRY_BUTTON (ClientData)1 54 #define ITEM_COLUMN_TITLE (ClientData)2 55 #define ITEM_COLUMN_RULE (ClientData)3 56 #define ITEM_STYLE (ClientData)0x10004 57 58 #if HAVE_UTF 59 #else 60 #define Tcl_NumUtfChars(s,n) (((n) == -1) ? strlen((s)) : (n)) 61 #define Tcl_UtfAtIndex(s,i) ((s) + (i)) 62 #endif 63 64 #define ODD(x) ((x) | 0x01) 65 66 #define END (-1) 67 #define SEPARATOR_LIST ((char *)NULL) 68 #define SEPARATOR_NONE ((char *)-1) 69 70 #define SEARCH_Y 1 71 72 typedef char *UID; 73 74 /* 75 * The macro below is used to modify a "char" value (e.g. by casting 76 * it to an unsigned character) so that it can be used safely with 77 * macros such as isspace. 78 */ 79 #define UCHAR(c) ((unsigned char) (c)) 80 81 #define TOGGLE(x, mask) (((x) & (mask)) ? ((x) & ~(mask)) : ((x) | (mask))) 82 83 84 #define SCREENX(h, wx) ((wx) - (h)->xOffset + (h)->insetX) 85 #define SCREENY(h, wy) ((wy) - (h)->yOffset + (h)->insetY + (h)->titleHeight) 86 87 #define WORLDX(h, sx) ((sx) - (h)->insetX + (h)->xOffset) 88 #define WORLDY(h, sy) ((sy) - ((h)->insetY + (h)->titleHeight) + (h)->yOffset) 89 90 #define VPORTWIDTH(h) (Tk_Width((h)->tkwin) - 2 * (h)->insetX) 91 #define VPORTHEIGHT(h) \ 92 (Tk_Height((h)->tkwin) - (h)->titleHeight - 2 * (h)->insetY) 93 94 #define ICONWIDTH(d) (tvPtr->levelInfo[(d)].iconWidth) 95 #define LEVELX(d) (tvPtr->levelInfo[(d)].x) 96 97 #define DEPTH(h, n) \ 98 (((h)->flatView) ? 0 : Blt_TreeNodeDepth((h)->tree, (n))) 99 100 #define SELECT_FG(t) \ 101 (((((t)->flags & TV_FOCUS)) || ((t)->selOutFocusFgColor == NULL)) \ 102 ? (t)->selInFocusFgColor : (t)->selOutFocusFgColor) 103 #define SELECT_BORDER(t) \ 104 (((((t)->flags & TV_FOCUS)) || ((t)->selOutFocusBorder == NULL)) \ 105 ? (t)->selInFocusBorder : (t)->selOutFocusBorder) 106 107 #define FLATIND(tvPtr, n) ((tvPtr->flatArr == NULL) || (n) >= tvPtr->nEntries ? NULL : tvPtr->flatArr[n]) 108 109 #define SELECT_MODE_SINGLE (1<<0) 110 #define SELECT_MODE_MULTIPLE (1<<1) 111 #define SELECT_MODE_NONE (1<<2) 112 #define SELECT_MODE_CELL (1<<3) 113 #define SELECT_MODE_MCELL (1<<4) 114 #define SELECT_MODE_CELLMASK (SELECT_MODE_CELL|SELECT_MODE_MCELL) 115 116 /* 117 * ---------------------------------------------------------------------------- 118 * 119 * Internal treeview widget flags: 120 * 121 * TV_LAYOUT The layout of the hierarchy needs to be recomputed. 122 * 123 * TV_REDRAW A redraw request is pending for the widget. 124 * 125 * TV_XSCROLL X-scroll request is pending. 126 * 127 * TV_YSCROLL Y-scroll request is pending. 128 * 129 * TV_SCROLL Both X-scroll and Y-scroll requests are pending. 130 * 131 * TV_FOCUS The widget is receiving keyboard events. 132 * Draw the focus highlight border around the widget. 133 * 134 * TV_DIRTY The hierarchy has changed. It may invalidate 135 * the locations and pointers to entries. The widget 136 * will need to recompute its layout. 137 * 138 * TV_RESORT The tree has changed such that the view needs to 139 * be resorted. This can happen when an entry is 140 * open or closed, it's label changes, a column value 141 * changes, etc. 142 * 143 * TV_BORDERS The borders of the widget (highlight ring and 144 * 3-D border) need to be redrawn. 145 * 146 * TV_VIEWPORT Indicates that the viewport has changed in some 147 * way: the size of the viewport, the location of 148 * the viewport, or the contents of the viewport. 149 * 150 */ 151 152 #define TV_LAYOUT (1<<0) 153 #define TV_REDRAW (1<<1) 154 #define TV_XSCROLL (1<<2) 155 #define TV_YSCROLL (1<<3) 156 #define TV_SCROLL (TV_XSCROLL | TV_YSCROLL) 157 #define TV_FOCUS (1<<4) 158 #define TV_DIRTY (1<<5) 159 #define TV_UPDATE (1<<6) 160 #define TV_RESORT (1<<7) 161 #define TV_SORTED (1<<8) 162 #define TV_SORT_PENDING (1<<9) 163 #define TV_BORDERS (1<<10) 164 #define TV_VIEWPORT (1<<11) 165 #define TV_DIRTYALL (1<<12) 166 #define TV_PICKING (1<<13) 167 #define TV_ATTACH (1<<14) 168 169 /* 170 * Rule related flags: Rules are XOR-ed lines. We need to track whether 171 * they have been drawn or not. 172 * 173 * TV_RULE_ACTIVE Indicates that a rule is currently being drawn 174 * for a column. 175 * 176 * 177 * TV_RULE_NEEDED Indicates that a rule is needed (but not yet 178 * drawn) for a column. 179 */ 180 181 #define TV_RULE_ACTIVE (1<<15) 182 #define TV_RULE_NEEDED (1<<16) 183 184 /* 185 * Selection related flags: 186 * 187 * TV_SELECT_EXPORT Export the selection to X11. 188 * 189 * TV_SELECT_PENDING A "selection" command idle task is pending. 190 * 191 * TV_SELECT_CLEAR Clear selection flag of entry. 192 * 193 * TV_SELECT_SET Set selection flag of entry. 194 * 195 * TV_SELECT_TOGGLE Toggle selection flag of entry. 196 * 197 * TV_SELECT_MASK Mask of selection set/clear/toggle flags. 198 * 199 * TV_SELECT_SORTED Indicates if the entries in the selection 200 * should be sorted or displayed in the order 201 * they were selected. 202 * 203 */ 204 #define TV_SELECT_CLEAR (1<<16) 205 #define TV_SELECT_EXPORT (1<<17) 206 #define TV_SELECT_PENDING (1<<18) 207 #define TV_SELECT_SET (1<<19) 208 #define TV_SELECT_TOGGLE (TV_SELECT_SET | TV_SELECT_CLEAR) 209 #define TV_SELECT_MASK (TV_SELECT_SET | TV_SELECT_CLEAR) 210 #define TV_SELECT_SORTED (1<<20) 211 212 /* 213 * Miscellaneous flags: 214 * 215 * TV_ALLOW_DUPLICATES When inserting new entries, create 216 * duplicate entries. 217 * 218 * TV_FILL_ANCESTORS Automatically create ancestor entries 219 * as needed when inserting a new entry. 220 * 221 * TV_HIDE_ROOT Don't display the root entry. 222 * 223 * TV_HIDE_LEAVES Don't display entries that are leaves. 224 * 225 * TV_SHOW_COLUMN_TITLES Indicates whether to draw titles over each 226 * column. 227 * 228 */ 229 #define TV_ALLOW_DUPLICATES (1<<21) 230 #define TV_FILL_ANCESTORS (1<<22) 231 #define TV_HIDE_ROOT (1<<23) 232 #define TV_HIDE_LEAVES (1<<24) 233 #define TV_SHOW_COLUMN_TITLES (1<<25) 234 #define TV_SORT_AUTO (1<<26) 235 #define TV_NEW_TAGS (1<<27) 236 #define TV_NOAUTO_CLOSE_LEAF (1<<28) 237 /* #define TV_HIGHLIGHT_CELLS (1<<28) */ 238 #define TV_HIDE_ICONS (1<<29) 239 #define TV_FILL_NULL (1<<30) 240 #define TV_DELETED (1<<31) 241 242 #define TV_ITEM_COLUMN 1 243 #define TV_ITEM_RULE 2 244 245 #define TV_WINDOW_CLEAR 1 246 #define TV_WINDOW_UNMAP 2 247 #define TV_WINDOW_DRAW 4 248 249 250 /* 251 * ------------------------------------------------------------------------- 252 * 253 * Internal entry flags: 254 * 255 * ENTRY_HAS_BUTTON Indicates that a button needs to be 256 * drawn for this entry. 257 * 258 * ENTRY_CLOSED Indicates that the entry is closed and 259 * its subentries are not displayed. 260 * 261 * ENTRY_HIDDEN Indicates that the entry is hidden (i.e. 262 * can not be viewed by opening or scrolling). 263 * 264 * BUTTON_AUTO 265 * BUTTON_SHOW 266 * BUTTON_MASK 267 * 268 * ------------------------------------------------------------------------- 269 */ 270 #define ENTRY_CLOSED (1<<0) 271 #define ENTRY_HIDDEN (1<<1) 272 #define ENTRY_NOT_LEAF (1<<2) 273 #define ENTRY_MASK (ENTRY_CLOSED | ENTRY_HIDDEN) 274 275 #define ENTRY_HAS_BUTTON (1<<3) 276 #define ENTRY_ICON (1<<4) 277 #define ENTRY_REDRAW (1<<5) 278 #define ENTRY_LAYOUT_PENDING (1<<6) 279 #define ENTRY_DATA_CHANGED (1<<7) 280 #define ENTRY_DIRTY (ENTRY_DATA_CHANGED | ENTRY_LAYOUT_PENDING) 281 282 #define BUTTON_AUTO (1<<8) 283 #define BUTTON_SHOW (1<<9) 284 #define BUTTON_MASK (BUTTON_AUTO | BUTTON_SHOW) 285 #define ENTRY_ALTROW (1<<10) 286 #define ENTRY_IS_TREE (1<<11) 287 #define ENTRY_ONLYHIDDEN (1<<12) 288 #define ENTRY_DATA_WINDOW (1<<13) 289 #define ENTRY_WINDOW (1<<14) 290 #define ENTRY_DELETED (1<<15) 291 292 #define COLUMN_RULE_PICKED (1<<1) 293 #define COLUMN_DIRTY (1<<2) 294 #define COLUMN_DELETED (1<<3) 295 296 #define STYLE_TEXTBOX (0) 297 #define STYLE_COMBOBOX (1) 298 #define STYLE_CHECKBOX (2) 299 #define STYLE_WINDOWBOX (4) 300 #define STYLE_BARBOX (8) 301 #define STYLE_TYPE 0x15 302 303 #define STYLE_HIGHLIGHT (1<<10) 304 #define STYLE_USER (1<<11) 305 #define STYLE_LAYOUT (1<<12) 306 #define STYLE_DIRTY (1<<13) 307 308 #define STYLEFLAG_NOCLEAR (1<<0) 309 #define STYLEFLAG_ALTSTYLE (1<<1) 310 #define STYLEFLAG_EMPTYSTYLE (1<<2) 311 #define STYLEFLAG_SUBSTYLE (1<<3) 312 #define STYLEFLAG_TITLESTYLE (1<<4) 313 314 315 typedef struct TreeViewColumnStruct TreeViewColumn; 316 typedef struct TreeViewComboboxStruct TreeViewCombobox; 317 typedef struct TreeViewEntryStruct TreeViewEntry; 318 typedef struct TreeViewStruct TreeView; 319 typedef struct TreeViewStyleClassStruct TreeViewStyleClass; 320 typedef struct TreeViewStyleStruct TreeViewStyle; 321 322 typedef int (TreeViewCompareProc) _ANSI_ARGS_((Tcl_Interp *interp, 323 char *name, Tcl_Obj *pattern, int nocase)); 324 325 typedef TreeViewEntry *(TreeViewIterProc) _ANSI_ARGS_((TreeViewEntry *entryPtr, 326 unsigned int mask)); 327 328 typedef struct { 329 int init; 330 int tagType; 331 TreeView *tvPtr; 332 Blt_HashSearch cursor; 333 TreeViewEntry *entryPtr; 334 char *tagName; 335 Tcl_Obj **objv, *objPtr; 336 int objc; 337 int idx; 338 int refCount; 339 Blt_TreeTagEntry* tPtr; 340 Blt_TreeNode node; 341 unsigned int inode; 342 } TreeViewTagInfo; 343 344 /* 345 * TreeViewIcon -- 346 * 347 * Since instances of the same Tk image can be displayed in 348 * different windows with possibly different color palettes, Tk 349 * internally stores each instance in a linked list. But if 350 * the instances are used in the same widget and therefore use 351 * the same color palette, this adds a lot of overhead, 352 * especially when deleting instances from the linked list. 353 * 354 * For the treeview widget, we never need more than a single 355 * instance of an image, regardless of how many times it's used. 356 * Cache the image, maintaining a reference count for each 357 * image used in the widget. It's likely that the treeview 358 * widget will use many instances of the same image (for example 359 * the open/close icons). 360 */ 361 362 typedef struct TreeViewIconStruct { 363 Tk_Image tkImage; /* The Tk image being cached. */ 364 365 int refCount; /* Reference count for this image. */ 366 367 short int width, height; /* Dimensions of the cached image. */ 368 369 Blt_HashEntry *hashPtr; /* Hash table pointer to the image. */ 370 TreeView *tvPtr; 371 int count; /* Count number of times displayed. */ 372 373 } *TreeViewIcon; 374 375 #define TreeViewIconHeight(icon) ((icon)->height) 376 #define TreeViewIconWidth(icon) ((icon)->width) 377 #define TreeViewIconBits(icon) ((icon)->tkImage) 378 struct TreeViewValueStruct; 379 /* 380 * TreeViewColumn -- 381 * 382 * A column describes how to display a field of data in the tree. 383 * It may display a title that you can bind to. It may display a 384 * rule for resizing the column. Columns may be hidden, and have 385 * attributes (foreground color, background color, font, etc) 386 * that override those designated globally for the treeview 387 * widget. 388 */ 389 struct TreeViewColumnStruct { 390 int type; /* Always TV_COLUMN */ 391 Blt_TreeKey key; /* Data cell identifier for current tree. */ 392 char *name; /* Global key lookup */ 393 int position; /* Position of column in list. Used 394 * to indicate the first and last 395 * columns. */ 396 UID tagsUid; /* List of binding tags for this 397 * entry. UID, not a string, because 398 * in the typical case most columns 399 * will have the same bindtags. */ 400 401 TreeView *tvPtr; 402 unsigned int flags; 403 404 /* Title-related information */ 405 char *title; /* Text displayed in column heading as its 406 * title. By default, this is the same as 407 * the data cell name. */ 408 Tk_Font titleFont; /* Font to draw title in. */ 409 Shadow titleShadow; 410 411 XColor *titleFgColor; /* Foreground color of text displayed in 412 * the heading */ 413 Tk_3DBorder titleBorder; /* Background color of the column's heading. */ 414 415 GC titleGC; 416 GC textGC; 417 418 XColor *activeTitleFgColor; /* Foreground color of text heading when 419 * the column is activated.*/ 420 XColor *fgColor; /* Foreground color. */ 421 Tk_Font font; 422 Tk_3DBorder activeTitleBorder; 423 424 int titleBorderWidth; 425 int titleRelief; 426 427 GC activeTitleGC; 428 429 TextLayout *titleTextPtr; 430 short int titleWidth, titleHeight; 431 432 TreeViewIcon titleIcon; /* Icon displayed in column heading */ 433 char *titleCmd; /* Tcl script to be executed by the 434 * column's "invoke" operation. */ 435 436 char *sortCmd; /* Tcl script used to compare two 437 * columns. */ 438 439 /* General information. */ 440 int hidden; /* Indicates if the column is 441 * displayed */ 442 int state; /* Indicates if column title can 443 * invoked. */ 444 int editable; /* Indicates if column can be 445 * edited. */ 446 447 int max; /* Maximum space allowed for column. */ 448 int reqMin, reqMax; /* Requested bounds on the width of 449 * column. Does not include any 450 * padding or the borderwidth of 451 * column. If non-zero, overrides the 452 * computed width of the column. */ 453 454 int reqWidth; /* User-requested width of 455 * column. Does not include any 456 * padding or the borderwidth of 457 * column. If non-zero, overrides the 458 * computed column width. */ 459 460 int maxWidth; /* Width of the widest entry in the 461 * column. */ 462 463 int worldX; /* Starting world x-coordinate of the 464 * column. */ 465 466 double weight; /* Growth factor for column. Zero 467 * indicates that the column can not 468 * be resized. */ 469 470 int width; /* Computed width of column. */ 471 472 TreeViewStyle *stylePtr; /* Default style for column. */ 473 474 Tk_3DBorder border; /* Background color of column. */ 475 int borderWidth; /* Border width of the column. */ 476 int relief; /* Relief of the column. */ 477 Blt_Pad pad; /* Horizontal padding on either side 478 * of the column. */ 479 480 Tk_Justify justify; /* Indicates how the text or icon is 481 * justified within the column. */ 482 483 Blt_ChainLink *linkPtr; 484 485 int ruleLineWidth; 486 Blt_Dashes ruleDashes; 487 GC ruleGC; 488 Blt_Tile tile; /* Tiled background */ 489 int scrollTile; /* Adjust the tile along with viewport 490 * offsets as the widget is 491 * scrolled. */ 492 int hasbg; /* A -bg was specified. */ 493 int hasttlbg; /* A -titlebackground was specified. */ 494 struct TreeViewValueStruct * defValue; /* Default empty value. */ 495 char *validCmd; /* Command for post checking edits */ 496 char *editOpts; /* Options used for builtin editing. */ 497 Tk_Justify titleJustify; /* Indicates how the text or icon is 498 * justified within the title. */ 499 short iX, iY, iW, iH; /* Needed by "nearest" to determine if over icon/label*/ 500 short tX, tY, tW, tH; 501 int underline; 502 Blt_TreeTrace trace; 503 Tcl_Obj *fillCmd; 504 TreeViewStyle *titleStylePtr; /* Default style for column title. */ 505 int drawArrow; 506 int autoWidth; /* If contents exceed this then set as width, if width 0. */ 507 int sortType; /* Type of sorting to be performed. */ 508 /* The following colorPats/colorRegex change the fg color by pattern match. */ 509 Tcl_Obj *colorPats; /* List of string match pattern/attribute pairs */ 510 Tcl_Obj *colorRegex; /* List of regex pattern/attribute pairs */ 511 Tcl_Obj *formatCmd; 512 Tcl_Obj *sortAltColumns; 513 }; 514 515 516 #define TREEVIEW_STYLE_COMMON \ 517 int refCount; /* Usage reference count. A reference \ 518 * count of zero indicates that the \ 519 * style may be freed. */ \ 520 unsigned int flags; /* Bit field containing both the style \ 521 * type and various flags. */ \ 522 char *name; /* Instance name. */ \ 523 TreeViewStyleClass *classPtr; \ 524 /* Contains class-specific information such \ 525 * as configuration specifications and \ 526 * configure, draw, etc. routines. */ \ 527 Blt_HashEntry *hashPtr; /* If non-NULL, points to the hash \ 528 * table entry for the style. A style \ 529 * that's been deleted, but still in \ 530 * use (non-zero reference count) will \ 531 * have no hash table entry. \ 532 */ \ 533 /* General style fields. */ \ 534 Tk_Cursor cursor; /* X Cursor */ \ 535 TreeViewIcon icon; /* If non-NULL, is a Tk_Image to be drawn \ 536 * in the cell. */ \ 537 int gap; /* # pixels gap between icon and text. */ \ 538 Tk_Font font; \ 539 XColor *fgColor; /* Normal foreground color of cell. */ \ 540 Tk_3DBorder border; /* Normal background color of cell. */ \ 541 XColor *highlightFgColor; /* Foreground color of cell when \ 542 * highlighted. */ \ 543 Tk_3DBorder highlightBorder;/* Background color of cell when \ 544 * highlighted. */ \ 545 XColor *activeFgColor; /* Foreground color of cell when active. */ \ 546 Tk_3DBorder activeBorder; /* Background color of cell when active. */ \ 547 int priority; /* Priority order for bg/fg/font. */ \ 548 Blt_Tile tile; \ 549 Blt_Tile fillTile; \ 550 Shadow shadow; \ 551 int hidden; /* Hidden value or subtext. */ \ 552 GC gc; \ 553 GC highlightGC; \ 554 GC activeGC; \ 555 int noteditable; \ 556 char *editOpts; 557 558 559 struct TreeViewStyleStruct { 560 TREEVIEW_STYLE_COMMON 561 }; 562 563 typedef struct TreeViewValueStruct { 564 TreeViewColumn *columnPtr; /* Column in which the value is located. */ 565 TreeViewEntry *entryPtr; /* Entry for value. */ 566 short int width, height; /* Dimensions of value. */ 567 TreeViewStyle *stylePtr; /* Style information for cell 568 * displaying value. */ 569 char *string; /* Raw text string. */ 570 TextLayout *textPtr; /* Processes string to be displayed .*/ 571 struct TreeViewValueStruct *nextPtr; 572 short iX, iY, iW, iH; /* Needed by "nearest" to determine if over icon/label*/ 573 short tX, tY, tW, tH; 574 short selected; 575 } TreeViewValue; 576 577 typedef void (StyleConfigProc) _ANSI_ARGS_((TreeView *tvPtr, 578 TreeViewStyle *stylePtr)); 579 typedef void (StyleDrawProc) _ANSI_ARGS_((TreeView *tvPtr, Drawable drawable, 580 TreeViewEntry *entryPtr, TreeViewValue *valuePtr, 581 TreeViewStyle *stylePtr, TreeViewIcon icon, int x, int y)); 582 typedef int (StyleEditProc) _ANSI_ARGS_((TreeView *tvPtr, 583 TreeViewEntry *entryPtr, TreeViewValue *valuePtr, 584 TreeViewStyle *stylePtr, int x, int y, int *retVal)); 585 typedef void (StyleFreeProc) _ANSI_ARGS_((TreeView *tvPtr, 586 TreeViewStyle *stylePtr)); 587 typedef void (StyleMeasureProc) _ANSI_ARGS_((TreeView *tvPtr, 588 TreeViewStyle *stylePtr, TreeViewValue *valuePtr)); 589 typedef int (StylePickProc) _ANSI_ARGS_((TreeViewEntry *entryPtr, 590 TreeViewValue *valuePtr, TreeViewStyle *stylePtr, int worldX, 591 int worldY)); 592 593 struct TreeViewStyleClassStruct { 594 char *className; /* Class name of the style */ 595 Blt_ConfigSpec *specsPtr; /* Style configuration specifications */ 596 StyleConfigProc *configProc;/* Sets the GCs for style. */ 597 StyleMeasureProc *measProc; /* Measures the area needed for the value 598 * with this style. */ 599 StyleDrawProc *drawProc; /* Draw the value in it's style. */ 600 StylePickProc *pickProc; /* Routine to pick the style's button. 601 * Indicates if the mouse pointer is over 602 * the style's button (if it has one). */ 603 StyleEditProc *editProc; /* Routine to edit the style's value. */ 604 StyleFreeProc *freeProc; /* Routine to free the style's resources. */ 605 }; 606 607 /* 608 * TreeViewEntry -- 609 * 610 * Contains data-specific information how to represent the data 611 * of a node of the hierarchy. 612 * 613 */ 614 struct TreeViewEntryStruct { 615 Blt_TreeNode node; /* Node containing entry */ 616 int worldX, worldY; /* X-Y position in world coordinates 617 * where the entry is positioned. */ 618 619 short int width, height; /* Dimensions of the entry. This 620 * includes the size of its 621 * columns. */ 622 623 int reqHeight; /* Requested height of the entry. 624 * Overrides computed height. */ 625 626 int vertLineLength; /* Length of the vertical line 627 * segment. */ 628 629 int lineHeight; /* Height of first line of text. */ 630 unsigned int flags; /* Flags for this entry. For the 631 * definitions of the various bit 632 * fields see below. */ 633 634 UID tagsUid; /* List of binding tags for this 635 * entry. UID, not a string, because 636 * in the typical case most entries 637 * will have the same bindtags. */ 638 TreeView *tvPtr; 639 640 UID openCmd, closeCmd; /* Tcl commands to invoke when entries 641 * are opened or closed. They override 642 * those specified globally. */ 643 /* 644 * Button information: 645 */ 646 short int buttonX, buttonY; /* X-Y coordinate offsets from to 647 * upper left corner of the entry to 648 * the upper-left corner of the 649 * button. Used to pick the 650 * button quickly */ 651 652 TreeViewIcon *icons; /* Tk images displayed for the entry. 653 * The first image is the icon 654 * displayed to the left of the 655 * entry's label. The second is icon 656 * displayed when entry is "open". */ 657 658 TreeViewIcon *activeIcons; /* Tk images displayed for the entry. 659 * The first image is the icon 660 * displayed to the left of the 661 * entry's label. The second is icon 662 * displayed when entry is "open". */ 663 664 short int iconWidth; 665 short int iconHeight; /* Maximum dimensions for icons and 666 * buttons for this entry. This is 667 * used to align the button, icon, and 668 * text. */ 669 /* 670 * Label information: 671 */ 672 TextLayout *textPtr; 673 674 short int labelWidth; 675 short int labelHeight; 676 677 UID labelUid; /* Text displayed right of the icon. */ 678 679 Tk_Font font; /* Font of label. Overrides global 680 * font specification. */ 681 char *fullName; 682 683 int flatIndex; 684 685 Tcl_Obj *dataObjPtr; /* pre-fetched data for sorting */ 686 687 XColor *color; /* Color of label. Overrides default 688 * text color specification. */ 689 GC gc; 690 691 Shadow shadow; 692 693 TreeViewValue *values; /* List of column-related information 694 * for each data value in the node. 695 * Non-NULL only if there are value 696 * entries. */ 697 TreeViewStyle *stylePtr; /* Effective style for entry. */ 698 int hide; /* Entry is hidden. */ 699 int underline; 700 Tk_3DBorder border; /* Normal background color of entry. */ 701 char *userData; /* user data. */ 702 TextLayout *subTextPtr; 703 char *subLabel; 704 TreeViewStyle *realStylePtr; /* Default style for entry. */ 705 int state; 706 }; 707 708 /* 709 * TreeViewButton -- 710 * 711 * A button is the open/close indicator at the far left of the 712 * entry. It is displayed as a plus or minus in a solid 713 * colored box with optionally an border. It has both "active" 714 * and "normal" colors. 715 */ 716 typedef struct { 717 XColor *fgColor; /* Foreground color. */ 718 719 Tk_3DBorder border; /* Background color. */ 720 721 XColor *activeFgColor; /* Active foreground color. */ 722 723 Tk_3DBorder activeBorder; /* Active background color. */ 724 725 GC normalGC; 726 GC activeGC; 727 728 int reqSize; 729 730 int borderWidth; 731 732 int openRelief, closeRelief; 733 734 int width, height; 735 736 TreeViewIcon *icons; 737 TreeViewIcon *activeicons; 738 } TreeViewButton; 739 740 /* 741 * LevelInfo -- 742 * 743 */ 744 typedef struct { 745 int x; 746 int iconWidth; 747 int labelWidth; 748 } LevelInfo; 749 750 /* 751 * TreeView -- 752 * 753 * A TreeView is a widget that displays an hierarchical table 754 * of one or more entries. 755 * 756 * Entries are positioned in "world" coordinates, referring to 757 * the virtual treeview. Coordinate 0,0 is the upper-left corner 758 * of the root entry and the bottom is the end of the last entry. 759 * The widget's Tk window acts as view port into this virtual 760 * space. The treeview's xOffset and yOffset fields specify the 761 * location of the view port in the virtual world. Scrolling the 762 * viewport is therefore simply changing the xOffset and/or 763 * yOffset fields and redrawing. 764 * 765 * Note that world coordinates are integers, not signed short 766 * integers like X11 screen coordinates. It's very easy to 767 * create a hierarchy taller than 0x7FFF pixels. 768 */ 769 struct TreeViewStruct { 770 Tcl_Interp *interp; 771 772 Tcl_Command cmdToken; /* Token for widget's Tcl command. */ 773 774 Blt_Tree tree; /* Token holding internal tree. */ 775 Blt_Tree freeTree; /* Tree to free in configure. */ 776 777 Blt_HashEntry *hashPtr; 778 779 /* TreeView specific fields. */ 780 781 Tk_Window tkwin; /* Window that embodies the widget. 782 * NULL means that the window has been 783 * destroyed but the data structures 784 * haven't yet been cleaned up.*/ 785 786 Display *display; /* Display containing widget; needed, 787 * among other things, to release 788 * resources after tkwin has already 789 * gone away. */ 790 791 Blt_HashTable entryTable; /* Table of entry information, keyed by 792 * the node pointer. */ 793 794 Blt_HashTable columnTable; /* Table of column information. */ 795 Blt_Chain *colChainPtr; /* Chain of columns. Same as the hash 796 * table above but maintains the order 797 * in which columns are displayed. */ 798 799 unsigned int flags; /* For bitfield definitions, see below */ 800 801 int insetX, insetY; /* Total width of all borders, 802 * including traversal highlight and 803 * 3-D border. Indicates how much 804 * interior stuff must be offset from 805 * outside edges to leave room for 806 * borders. */ 807 808 Tk_Font font; 809 Tk_Font titleFont; 810 XColor *fgColor; 811 812 Tk_3DBorder border; /* 3D border surrounding the window 813 * (viewport). */ 814 815 int borderWidth; /* Width of 3D border. */ 816 817 int relief; /* 3D border relief. */ 818 819 820 int highlightWidth; /* Width in pixels of highlight to 821 * draw around widget when it has the 822 * focus. <= 0 means don't draw a 823 * highlight. */ 824 825 XColor *highlightBgColor; /* Color for drawing traversal 826 * highlight area when highlight is 827 * off. */ 828 829 XColor *highlightColor; /* Color for drawing traversal highlight. */ 830 831 char *pathSep; /* Pathname separators */ 832 833 char *trimLeft; /* Leading characters to trim from 834 * pathnames */ 835 836 /* 837 * Entries are connected by horizontal and vertical lines. They 838 * may be drawn dashed or solid. 839 */ 840 int lineWidth; /* Width of lines connecting entries */ 841 842 int dashes; /* Dash on-off value. */ 843 844 XColor *lineColor; /* Color of connecting lines. */ 845 846 /* 847 * Button Information: 848 * 849 * The button is the open/close indicator at the far left of the 850 * entry. It is usually displayed as a plus or minus in a solid 851 * colored box with optionally an border. It has both "active" and 852 * "normal" colors. 853 */ 854 TreeViewButton button; 855 856 /* 857 * Selection Information: 858 * 859 * The selection is the rectangle that contains a selected entry. 860 * There may be many selected entries. It is displayed as a solid 861 * colored box with optionally a 3D border. 862 */ 863 int selRelief; /* Relief of selected items. Currently 864 * is always raised. */ 865 866 int selBorderWidth; /* Border width of a selected entry.*/ 867 868 XColor *selInFocusFgColor; /* Text color of a selected entry. */ 869 XColor *selOutFocusFgColor; 870 871 Tk_3DBorder selInFocusBorder; 872 Tk_3DBorder selOutFocusBorder; 873 874 875 TreeViewEntry *selAnchorPtr; /* Fixed end of selection (i.e. entry 876 * at which selection was started.) */ 877 TreeViewEntry *selMarkPtr; 878 TreeViewColumn *selAnchorCol; /* Column for anchor */ 879 880 int selectMode; /* Selection style: "single" or 881 * "multiple". */ 882 883 char *selectCmd; /* Tcl script that's invoked whenever 884 * the selection changes. */ 885 886 Blt_HashTable selectTable; /* Hash table of currently selected 887 * entries. */ 888 889 Blt_Chain *selChainPtr; /* Chain of currently selected 890 * entries. Contains the same 891 * information as the above hash 892 * table, but maintains the order in 893 * which entries are selected. 894 */ 895 896 int leader; /* Number of pixels padding between 897 * entries. */ 898 899 Tk_Cursor cursor; /* X Cursor */ 900 901 Tk_Cursor resizeCursor; /* Resize Cursor */ 902 903 int reqWidth, reqHeight; /* Requested dimensions of the 904 * treeview widget's window. */ 905 906 GC lineGC; /* GC for drawing dotted line between 907 * entries. */ 908 909 XColor *disabledColor; 910 GC disabledGC; /* Graphics context for the disabled */ 911 XColor *focusColor; 912 Tk_3DBorder disabledBorder; 913 914 Blt_Dashes focusDashes; /* Dash on-off value. */ 915 916 GC focusGC; /* Graphics context for the active 917 * label. */ 918 919 Tk_Window comboWin; 920 921 TreeViewEntry *activePtr; /* Last active entry. */ 922 923 TreeViewEntry *focusPtr; /* Entry that currently has focus. */ 924 925 TreeViewEntry *activeButtonPtr; /* Pointer to last active button */ 926 927 TreeViewEntry *fromPtr; 928 929 struct TreeViewValueStruct *activeValuePtr;/* Last active value. */ 930 931 int xScrollUnits, yScrollUnits; /* # of pixels per scroll unit. */ 932 933 /* Command strings to control horizontal and vertical 934 * scrollbars. */ 935 char *xScrollCmdPrefix, *yScrollCmdPrefix; 936 937 int scrollMode; /* Selects mode of scrolling: either 938 * BLT_SCROLL_MODE_HIERBOX, 939 * BLT_SCROLL_MODE_LISTBOX, 940 * or BLT_SCROLL_MODE_CANVAS. */ 941 /* 942 * Total size of all "open" entries. This represents the range of 943 * world coordinates. 944 */ 945 int worldWidth, worldHeight; 946 947 int xOffset, yOffset; /* Translation between view port and 948 * world origin. */ 949 950 short int minHeight; /* Minimum entry height. Used to to 951 * compute what the y-scroll unit 952 * should be. */ 953 short int titleHeight; /* Height of column titles. */ 954 955 LevelInfo *levelInfo; 956 957 /* 958 * Scanning information: 959 */ 960 int scanAnchorX, scanAnchorY; 961 /* Scan anchor in screen coordinates. */ 962 int scanX, scanY; /* X-Y world coordinate where the scan 963 * started. */ 964 965 Blt_HashTable iconTable; /* Table of Tk images */ 966 967 Blt_HashTable uidTable; /* Table of strings. */ 968 969 Blt_HashTable styleTable; /* Table of cell styles. */ 970 971 TreeViewEntry *rootPtr; /* Root entry of tree. */ 972 973 TreeViewEntry **visibleArr; /* Array of visible entries */ 974 975 int nVisible; /* Number of entries in the above array */ 976 977 int nEntries; /* Number of entries in tree. */ 978 int treeWidth; /* Computed width of the tree. */ 979 980 int buttonFlags; /* Global button indicator for all 981 * entries. This may be overridden by 982 * the entry's -button option. */ 983 984 char *openCmd, *closeCmd; /* Tcl commands to invoke when entries 985 * are opened or closed. */ 986 987 TreeViewIcon *icons; /* Tk images displayed for the entry. 988 * The first image is the icon 989 * displayed to the left of the 990 * entry's label. The second is icon 991 * displayed when entry is "open". */ 992 TreeViewIcon *activeIcons; /* Tk images displayed for the entry. 993 * The first image is the icon 994 * displayed to the left of the 995 * entry's label. The second is icon 996 * displayed when entry is "open". */ 997 TreeViewIcon *leafIcons; /* Tk images displayed for the leaf entry. */ 998 TreeViewIcon *activeLeafIcons;/* Tk images displayed for the active leaf. */ 999 char *takeFocus; 1000 1001 ClientData clientData; 1002 1003 Blt_BindTable bindTable; /* Binding information for entries. */ 1004 1005 Blt_HashTable entryTagTable; 1006 Blt_HashTable buttonTagTable; 1007 Blt_HashTable columnTagTable; 1008 Blt_HashTable styleTagTable; 1009 1010 TreeViewStyle *stylePtr; /* Default style for text cells */ 1011 1012 TreeViewColumn treeColumn; 1013 1014 TreeViewColumn *activeColumnPtr; 1015 TreeViewColumn *activeTitleColumnPtr; 1016 /* Column title currently active. */ 1017 1018 TreeViewColumn *resizeColumnPtr; 1019 /* Column that is being resized. */ 1020 1021 int depth; 1022 1023 int flatView; /* Indicates if the view of the tree 1024 * has been flattened. */ 1025 1026 TreeViewEntry **flatArr; /* Flattened array of entries. */ 1027 1028 char *sortField; /* Field to be sorted. */ 1029 1030 int sortType; /* Type of sorting to be performed. See 1031 * below for valid values. */ 1032 1033 char *sortCmd; /* Sort command. */ 1034 1035 int sortDecreasing; /* Indicates entries should be sorted 1036 * in decreasing order. */ 1037 1038 int viewIsDecreasing; /* Current sorting direction */ 1039 1040 TreeViewColumn *sortColumnPtr;/* Column to use for sorting criteria. */ 1041 1042 #ifdef notdef 1043 Pixmap drawable; /* Pixmap used to cache the entries 1044 * displayed. The pixmap is saved so 1045 * that only selected elements can be 1046 * drawn quicky. */ 1047 1048 short int drawWidth, drawHeight; 1049 #endif 1050 short int ruleAnchor, ruleMark; 1051 1052 Blt_Pool entryPool; 1053 Blt_Pool valuePool; 1054 Blt_Tile tile; /* Tiled background */ 1055 int scrollTile; /* Adjust the tile along with viewport 1056 * offsets as the widget is 1057 * scrolled. */ 1058 int ruleWidth; /* Width of rule under entries */ 1059 GC solidGC; 1060 TreeViewStyle *altStylePtr; /* Default style for odd row text cells */ 1061 1062 int nAbove; 1063 TreeViewStyle *emptyStylePtr; /* Style for empty text cells */ 1064 int inlineImg; 1065 int openAnchor; 1066 int insertFirst; /* Preceeding lookups before doing reverse search of tree. */ 1067 int actCol; /* Show active column in active color on select. */ 1068 int actEntry; /* Show entry in active color on select. */ 1069 int rootNodeNum; /* Node in tree to act as root. */ 1070 Blt_TreeNode rootNode; /* Node in tree to act as root. */ 1071 int reqMin; 1072 Blt_HashTable winTable; /* Table of all windows. */ 1073 Blt_HashTable winCellTable; /* Table of windows indexed by cell. */ 1074 char *styleCmd; /* Tcl script invoked when @style is created */ 1075 int hideStyleIcons; 1076 int hideStyleText; 1077 Blt_Tile selectTile; /* Tiled background for selection. */ 1078 int nextIdx; 1079 int nextSubIdx; 1080 int focusHeight; 1081 int showFull; 1082 TreeViewStyle *subStylePtr; /* Style for sublabel */ 1083 int titlePad; 1084 int setFlatView; /* Indicates sort auto-switched tree to flat. */ 1085 char *treePath; 1086 int levelPad; 1087 TreeViewStyle **levelStyles; /* List of styles for entries begining at level 1. */ 1088 Tcl_Obj *imageCmd; 1089 Tcl_Obj *formatCmd; 1090 Tk_OptionTable buttonOptions; 1091 int noScroll; 1092 int padX, padY; 1093 }; 1094 1095 1096 extern UID Blt_TreeViewGetUid _ANSI_ARGS_((TreeView *tvPtr, 1097 CONST char *string)); 1098 extern void Blt_TreeViewFreeUid _ANSI_ARGS_((TreeView *tvPtr, UID uid)); 1099 1100 extern void Blt_TreeViewEventuallyRedraw _ANSI_ARGS_((TreeView *tvPtr)); 1101 extern Tcl_ObjCmdProc Blt_TreeViewWidgetInstCmd; 1102 extern TreeViewEntry *Blt_TreeViewNearestEntry _ANSI_ARGS_((TreeView *tvPtr, 1103 int x, int y, int flags)); 1104 extern char *Blt_TreeViewGetFullName _ANSI_ARGS_((TreeView *tvPtr, 1105 TreeViewEntry *entryPtr, int checkEntryLabel, Tcl_DString *dsPtr)); 1106 extern void Blt_TreeViewSelectCmdProc _ANSI_ARGS_((ClientData clientData)); 1107 extern void Blt_TreeViewInsertText _ANSI_ARGS_((TreeView *tvPtr, 1108 TreeViewEntry *entryPtr, char *string, int extra, int insertPos)); 1109 extern int Blt_TreeViewComputeLayout _ANSI_ARGS_((TreeView *tvPtr)); 1110 extern void Blt_TreeViewPercentSubst _ANSI_ARGS_((TreeView *tvPtr, 1111 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr, 1112 char *command, char *value, Tcl_DString *resultPtr)); 1113 extern int Blt_TreeViewDrawButton _ANSI_ARGS_((TreeView *tvPtr, 1114 TreeViewEntry *entryPtr, Drawable drawable, int x, int y)); 1115 extern void Blt_TreeViewDrawValue _ANSI_ARGS_((TreeView *tvPtr, 1116 TreeViewEntry *entryPtr, TreeViewValue *valuePtr, Drawable drawable, 1117 int x, int y, int altRow, int ishid)); 1118 extern void Blt_TreeViewDrawOuterBorders _ANSI_ARGS_((TreeView *tvPtr, 1119 Drawable drawable)); 1120 extern int Blt_TreeViewDrawIcon _ANSI_ARGS_((TreeView *tvPtr, 1121 TreeViewEntry *entryPtr, Drawable drawable, int x, int y, int clear)); 1122 extern void Blt_TreeViewDrawHeadings _ANSI_ARGS_((TreeView *tvPtr, 1123 Drawable drawable)); 1124 extern void Blt_TreeViewDrawRule _ANSI_ARGS_((TreeView *tvPtr, 1125 TreeViewColumn *columnPtr, Drawable drawable)); 1126 extern int Blt_TreeViewTextbox _ANSI_ARGS_((TreeView *tvPtr, 1127 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr)); 1128 1129 extern void Blt_TreeViewConfigureButtons _ANSI_ARGS_((TreeView *tvPtr)); 1130 extern int Blt_TreeViewUpdateWidget _ANSI_ARGS_((Tcl_Interp *interp, 1131 TreeView *tvPtr)); 1132 extern int Blt_TreeViewScreenToIndex _ANSI_ARGS_((TreeView *tvPtr, 1133 int x, int y)); 1134 1135 extern void Blt_TreeViewFreeIcon _ANSI_ARGS_((TreeView *tvPtr, 1136 TreeViewIcon icon)); 1137 extern TreeViewIcon Blt_TreeViewGetIcon _ANSI_ARGS_((TreeView *tvPtr, 1138 CONST char *iconName)); 1139 extern void Blt_TreeViewAddValue _ANSI_ARGS_((TreeViewEntry *entryPtr, 1140 TreeViewColumn *columnPtr)); 1141 extern int Blt_TreeViewCreateColumn _ANSI_ARGS_((TreeView *tvPtr, 1142 TreeViewColumn *columnPtr, char *name, char *defaultLabel)); 1143 extern void Blt_TreeViewDestroyValue _ANSI_ARGS_((TreeView *tvPtr, 1144 TreeViewEntry *entryPtr, TreeViewValue *valuePtr)); 1145 extern void Blt_TreeViewDeleteValue(TreeViewEntry* entryPtr, Blt_TreeKey key); 1146 extern TreeViewValue *Blt_TreeViewFindValue _ANSI_ARGS_(( 1147 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr)); 1148 extern void Blt_TreeViewConfigureColumns _ANSI_ARGS_((TreeView *tvPtr)); 1149 extern void Blt_TreeViewDestroyColumns _ANSI_ARGS_((TreeView *tvPtr)); 1150 extern void Blt_TreeViewAllocateColumnUids _ANSI_ARGS_((TreeView *tvPtr)); 1151 extern void Blt_TreeViewFreeColumnUids _ANSI_ARGS_((TreeView *tvPtr)); 1152 extern void Blt_TreeViewUpdateColumnGCs _ANSI_ARGS_((TreeView *tvPtr, 1153 TreeViewColumn *columnPtr)); 1154 extern TreeViewColumn *Blt_TreeViewNearestColumn _ANSI_ARGS_((TreeView *tvPtr, 1155 int x, int y, ClientData *contextPtr)); 1156 1157 extern void Blt_TreeViewDrawRule _ANSI_ARGS_((TreeView *tvPtr, 1158 TreeViewColumn *columnPtr, Drawable drawable)); 1159 extern int Blt_TreeViewTextOp _ANSI_ARGS_((TreeView *tvPtr, Tcl_Interp *interp, 1160 int objc, Tcl_Obj *CONST *objv)); 1161 extern int Blt_TreeViewCombobox _ANSI_ARGS_((TreeView *tvPtr, 1162 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr)); 1163 extern int Blt_TreeViewCreateEntry _ANSI_ARGS_((TreeView *tvPtr, 1164 Blt_TreeNode node, int objc, Tcl_Obj *CONST *objv, int flags)); 1165 extern int Blt_TreeViewConfigureEntry _ANSI_ARGS_((TreeView *tvPtr, 1166 TreeViewEntry *entryPtr, int objc, Tcl_Obj *CONST *objv, int flags)); 1167 extern int Blt_TreeViewOpenEntry _ANSI_ARGS_((TreeView *tvPtr, 1168 TreeViewEntry *entryPtr)); 1169 extern int Blt_TreeViewCloseEntry _ANSI_ARGS_((TreeView *tvPtr, 1170 TreeViewEntry *entryPtr)); 1171 extern TreeViewEntry *Blt_TreeViewNextEntry _ANSI_ARGS_(( 1172 TreeViewEntry *entryPtr, unsigned int mask)); 1173 extern TreeViewEntry *Blt_TreeViewPrevEntry _ANSI_ARGS_(( 1174 TreeViewEntry *entryPtr, unsigned int mask)); 1175 extern int Blt_TreeViewGetEntry _ANSI_ARGS_((TreeView *tvPtr, Tcl_Obj *objPtr, 1176 TreeViewEntry **entryPtrPtr)); 1177 extern int Blt_TreeViewEntryIsHidden _ANSI_ARGS_((TreeViewEntry *entryPtr)); 1178 extern int Blt_TreeViewEntryIsMapped _ANSI_ARGS_((TreeViewEntry *entryPtr)); 1179 extern TreeViewEntry *Blt_TreeViewNextSibling _ANSI_ARGS_(( 1180 TreeViewEntry *entryPtr, unsigned int mask)); 1181 extern TreeViewEntry *Blt_TreeViewPrevSibling _ANSI_ARGS_(( 1182 TreeViewEntry *entryPtr, unsigned int mask)); 1183 extern TreeViewEntry *Blt_TreeViewFirstChild _ANSI_ARGS_(( 1184 TreeViewEntry *parentPtr, unsigned int mask)); 1185 extern TreeViewEntry *Blt_TreeViewLastChild _ANSI_ARGS_(( 1186 TreeViewEntry *entryPtr, unsigned int mask)); 1187 extern TreeViewEntry *Blt_TreeViewParentEntry _ANSI_ARGS_(( 1188 TreeViewEntry *entryPtr)); 1189 1190 typedef int (TreeViewApplyProc) _ANSI_ARGS_((TreeView *tvPtr, 1191 TreeViewEntry *entryPtr)); 1192 1193 extern int Blt_TreeViewApply _ANSI_ARGS_((TreeView *tvPtr, 1194 TreeViewEntry *entryPtr, TreeViewApplyProc *proc, unsigned int mask)); 1195 1196 extern int Blt_TreeViewColumnOp _ANSI_ARGS_((TreeView *tvPtr, 1197 Tcl_Interp *interp, int objc, Tcl_Obj *CONST *objv)); 1198 extern int Blt_TreeViewSortOp _ANSI_ARGS_((TreeView *tvPtr, Tcl_Interp *interp, 1199 int objc, Tcl_Obj *CONST *objv)); 1200 extern int Blt_TreeViewGetColumn _ANSI_ARGS_((Tcl_Interp *interp, 1201 TreeView *tvPtr, Tcl_Obj *objPtr, TreeViewColumn **columnPtrPtr)); 1202 extern int Blt_TreeViewGetColumnKey _ANSI_ARGS_((Tcl_Interp *interp, 1203 TreeView *tvPtr, Tcl_Obj *objPtr, TreeViewColumn **columnPtrPtr, char **keyPtrPtr)); 1204 1205 extern void Blt_TreeViewSortFlatView _ANSI_ARGS_((TreeView *tvPtr)); 1206 extern void Blt_TreeViewSortTreeView _ANSI_ARGS_((TreeView *tvPtr)); 1207 1208 extern int Blt_TreeViewEntryIsSelected _ANSI_ARGS_((TreeView *tvPtr, 1209 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr)); 1210 extern void Blt_TreeViewSelectEntry _ANSI_ARGS_((TreeView *tvPtr, 1211 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr)); 1212 extern void Blt_TreeViewDeselectEntry _ANSI_ARGS_((TreeView *tvPtr, 1213 TreeViewEntry *entryPtr, TreeViewColumn *columnPtr)); 1214 extern void Blt_TreeViewPruneSelection _ANSI_ARGS_((TreeView *tvPtr, 1215 TreeViewEntry *entryPtr)); 1216 extern void Blt_TreeViewClearSelection _ANSI_ARGS_((TreeView *tvPtr)); 1217 extern void Blt_TreeViewClearTags _ANSI_ARGS_((TreeView *tvPtr, 1218 TreeViewEntry *entryPtr)); 1219 extern int Blt_TreeViewFindTaggedEntries _ANSI_ARGS_((TreeView *tvPtr, 1220 Tcl_Obj *objPtr, TreeViewTagInfo *infoPtr)); 1221 extern int Blt_TreeViewDoneTaggedEntries _ANSI_ARGS_((TreeViewTagInfo *infoPtr)); 1222 extern TreeViewEntry *Blt_TreeViewFirstTaggedEntry _ANSI_ARGS_(( 1223 TreeViewTagInfo *infoPtr)); 1224 extern TreeViewEntry *Blt_TreeViewNextTaggedEntry _ANSI_ARGS_(( 1225 TreeViewTagInfo *infoPtr)); 1226 extern ClientData Blt_TreeViewButtonTag _ANSI_ARGS_((TreeView *tvPtr, 1227 CONST char *string)); 1228 extern ClientData Blt_TreeViewEntryTag _ANSI_ARGS_((TreeView *tvPtr, 1229 CONST char *string)); 1230 extern ClientData Blt_TreeViewColumnTag _ANSI_ARGS_((TreeView *tvPtr, 1231 CONST char *string)); 1232 extern void Blt_TreeViewGetTags _ANSI_ARGS_((Tcl_Interp *interp, 1233 TreeView *tvPtr, TreeViewEntry *entryPtr, Blt_List list)); 1234 extern void Blt_TreeViewTraceColumn _ANSI_ARGS_((TreeView *tvPtr, 1235 TreeViewColumn *columnPtr)); 1236 extern TreeViewIcon Blt_TreeViewGetEntryIcon _ANSI_ARGS_((TreeView *tvPtr, 1237 TreeViewEntry *entryPtr)); 1238 extern int Blt_TreeViewStyleIsFmt _ANSI_ARGS_((TreeView *tvPtr, 1239 TreeViewStyle *stylePtr)); 1240 extern void Blt_TreeViewSetStyleIcon _ANSI_ARGS_((TreeView *tvPtr, 1241 TreeViewStyle *stylePtr, TreeViewIcon icon)); 1242 extern int Blt_TreeViewGetStyle _ANSI_ARGS_((Tcl_Interp *interp, 1243 TreeView *tvPtr, char *styleName, TreeViewStyle **stylePtrPtr)); 1244 extern int Blt_TreeViewGetStyleMake _ANSI_ARGS_((Tcl_Interp *interp, 1245 TreeView *tvPtr, char *styleName, TreeViewStyle **stylePtrPtr, 1246 TreeViewColumn *columnPtr, TreeViewEntry *entryPtr, TreeViewValue *valuePtr)); 1247 extern void Blt_TreeViewFreeStyle _ANSI_ARGS_((TreeView *tvPtr, 1248 TreeViewStyle *stylePtr)); 1249 extern TreeViewStyle *Blt_TreeViewCreateStyle _ANSI_ARGS_((Tcl_Interp *interp, 1250 TreeView *tvPtr, int type, char *styleName)); 1251 extern void Blt_TreeViewUpdateStyleGCs _ANSI_ARGS_((TreeView *tvPtr, 1252 TreeViewStyle *stylePtr)); 1253 extern void Blt_TreeViewUpdateStyles _ANSI_ARGS_((TreeView *tvPtr)); 1254 extern Tk_3DBorder Blt_TreeViewGetStyleBorder _ANSI_ARGS_((TreeView *tvPtr, 1255 TreeViewStyle *stylePtr)); 1256 extern GC Blt_TreeViewGetStyleGC _ANSI_ARGS_((TreeView *tvPtr,TreeViewStyle *stylePtr)); 1257 extern Tk_Font Blt_TreeViewGetStyleFont _ANSI_ARGS_((TreeView *tvPtr, 1258 TreeViewColumn *columnPtr, TreeViewStyle *stylePtr)); 1259 extern XColor *Blt_TreeViewGetStyleFg _ANSI_ARGS_((TreeView *tvPtr, 1260 TreeViewColumn *columnPtr, TreeViewStyle *stylePtr)); 1261 extern TreeViewEntry *Blt_NodeToEntry _ANSI_ARGS_((TreeView *tvPtr, 1262 Blt_TreeNode node)); 1263 extern int Blt_TreeViewStyleOp _ANSI_ARGS_((TreeView *tvPtr, Tcl_Interp *interp, 1264 int objc, Tcl_Obj *CONST *objv)); 1265 extern void Blt_TreeViewTileChangedProc( ClientData clientData, Blt_Tile tile); 1266 extern void Blt_TreeViewMakeStyleDirty( TreeView *tvPtr ); 1267 TreeViewValue * Blt_TreeViewMakeValue(TreeView *tvPtr, TreeViewColumn *columnPtr, TreeViewEntry *entryPtr); 1268 void Blt_TreeViewRelayout(TreeView *tvPtr); 1269 extern void Blt_TreeViewFill3DTile _ANSI_ARGS_((TreeView *tvPtr, 1270 Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, 1271 int borderWidth, int relief, Blt_Tile tile, int scrollTile, int flags)); 1272 extern int Blt_TreeViewIsLeaf(TreeViewEntry *entryPtr); 1273 extern void Blt_TreeViewFreeWindows( TreeView *tvPtr); 1274 extern void Blt_TreeViewMarkWindows( TreeView *tvPtr, int flag); 1275 extern void Blt_TreeViewWindowUpdate(TreeViewEntry *entryPtr, TreeViewColumn *columnPtr); 1276 extern void Blt_TreeViewWindowRelease(TreeViewEntry *entryPtr, TreeViewColumn *columnPtr); 1277 extern void Blt_TreeViewColumnRekey(TreeView *tvPtr); 1278 extern void Blt_TreeViewChanged(TreeView *tvPtr); 1279 extern int Blt_TreeViewRerawIcon(TreeView *tvPtr, TreeViewEntry *entryPtr, 1280 TreeViewColumn *columnPtr, TreeViewIcon icon, int imageX, 1281 int imageY, int width, int height, Drawable drawable, 1282 int drawableX, int drawableY); 1283 1284 extern void Blt_GetPriorityStyle _ANSI_ARGS_(( TreeViewStyle *stylePtr, 1285 TreeView *tvPtr, TreeViewColumn *columnPtr, TreeViewEntry *entryPtr, 1286 TreeViewValue *valuePtr, TreeViewStyle *inStylePtr, int flags)); 1287 extern int Blt_TreeViewRedrawIcon _ANSI_ARGS_((TreeView *tvPtr, TreeViewEntry *entryPtr, 1288 TreeViewColumn *columnPtr, TreeViewIcon icon, int imageX, 1289 int imageY, int width, int height, Drawable drawable, 1290 int drawableX, int drawableY)); 1291 void Blt_TreeViewFreeEntry _ANSI_ARGS_((TreeView *tvPtr, TreeViewEntry *entryPtr)); 1292 1293 #define CHOOSE(default, override) \ 1294 (((override) == NULL) ? (default) : (override)) 1295 1296 #define CHOOSE3(default, override2, override1) \ 1297 (((override1) == NULL) ? (CHOOSE(default, override2)) : (override1)) 1298 1299 #define CHOOSE4(default, override3, override2, override1) \ 1300 (((override1) == NULL) ? (CHOOSE3(default, override3, override2)) : (override1)) 1301 1302 #define GETLABEL(e) \ 1303 (((e)->labelUid != NULL) ? (e)->labelUid : Blt_TreeNodeLabel((e)->node)) 1304 1305 #define Blt_TreeViewGetData(entryPtr, key, objPtrPtr) \ 1306 Blt_TreeGetValueByKey((Tcl_Interp *)NULL, (entryPtr)->tvPtr->tree, \ 1307 (entryPtr)->node, key, objPtrPtr) 1308 1309 extern Blt_CustomOption bltTreeViewUidOption; 1310 extern Blt_CustomOption bltTreeViewIconOption; 1311 extern Blt_CustomOption bltTreeViewStyleOption; 1312 extern Blt_CustomOption bltTreeViewStylesOption; 1313 extern Blt_CustomOption bltTreeViewTreeOption; 1314 extern Blt_CustomOption bltTreeViewColumnOption; 1315 extern Blt_CustomOption bltTreeViewLabelOption; 1316 extern Blt_CustomOption bltTreeViewDataOption; 1317 extern void Blt_TreeViewOptsInit(TreeView* tvPtr); 1318 1319 1320 1321 #endif /* BLT_TREEVIEW_H */ 1322