1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796
|
/*
* tkTreeCtrl.h --
*
* This module is the header for treectrl widgets for the Tk toolkit.
*
* Copyright (c) 2002-2011 Tim Baker
* Copyright (c) 2002-2003 Christian Krone
* Copyright (c) 2003 ActiveState Corporation
*/
#include "tkPort.h"
#include "default.h"
#include "tclInt.h"
#include "tkInt.h"
#include "qebind.h"
/*
* Used to tag functions that are only to be visible within the module being
* built and not outside it (where this is supported by the linker).
*/
#ifndef MODULE_SCOPE
# ifdef __cplusplus
# define MODULE_SCOPE extern "C"
# else
# define MODULE_SCOPE extern
# endif
#endif
#ifndef Tk_Offset
# define Tk_Offset(x,y) offsetof(x,y)
#endif
#if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 7) || (TCL_MAJOR_VERSION >= 9)
#define TclGetIntForIndex Tcl_GetIntForIndex
#endif
#ifndef panic
# define panic Tcl_Panic
#endif
#ifndef VOID
# define VOID void
#endif
#define _ANSI_ARGS_(x) x
/*
* Macros used to cast between pointers and integers (e.g. when storing an int
* in ClientData), on 64-bit architectures they avoid gcc warning about "cast
* to/from pointer from/to integer of different size".
*/
#if !defined(INT2PTR) && !defined(PTR2INT)
# if defined(HAVE_INTPTR_T) || defined(intptr_t)
# define INT2PTR(p) ((void *)(intptr_t)(p))
# define PTR2INT(p) ((int)(intptr_t)(p))
# else
# define INT2PTR(p) ((void *)(p))
# define PTR2INT(p) ((int)(p))
# endif
#endif
#ifdef PLATFORM_SDL
#undef WIN32
#endif
#define dbwin TreeCtrl_dbwin
#define dbwin_add_interp TreeCtrl_dbwin_add_interp
MODULE_SCOPE void dbwin(char *fmt, ...);
MODULE_SCOPE void dbwin_add_interp(Tcl_Interp *interp);
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#ifdef WIN32
#define vsnprintf _vsnprintf
#endif
#ifndef MIN
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif
#define SELECTION_VISIBLE
#define ALLOC_HAX
#define DEPRECATED
/* #define DRAG_PIXMAP */
/* #define DRAGIMAGE_STYLE */ /* Use an item style as the dragimage instead of XOR rectangles. */
#define USE_ITEM_PIXMAP 1
#define COLUMNGRID 1
typedef struct TreeCtrl TreeCtrl;
typedef struct TreeColumn_ *TreeColumn;
typedef struct TreeColumnPriv_ *TreeColumnPriv;
typedef struct TreeColumnDInfo_ *TreeColumnDInfo;
typedef struct TreeDInfo_ *TreeDInfo;
typedef struct TreeDragImage_ *TreeDragImage;
typedef struct TreeItem_ *TreeItem;
typedef struct TreeItemColumn_ *TreeItemColumn;
typedef struct TreeItemDInfo_ *TreeItemDInfo;
typedef struct TreeMarquee_ *TreeMarquee;
typedef struct TreeItemRInfo_ *TreeItemRInfo;
typedef struct TreeStyle_ *TreeStyle;
typedef struct TreeElement_ *TreeElement;
typedef struct TreeThemeData_ *TreeThemeData;
typedef struct TreeGradient_ *TreeGradient;
typedef struct TreeHeader_ *TreeHeader;
typedef struct TreeHeaderColumn_ *TreeHeaderColumn;
typedef struct StyleDrawArgs StyleDrawArgs;
typedef struct TagInfo TagInfo;
/*****/
typedef struct PerStateInfo PerStateInfo;
typedef struct PerStateData PerStateData;
typedef struct PerStateType PerStateType;
/* A structure of the following type is kept for each {value stateList} pair
* for a single per-state option. */
struct PerStateData
{
int stateOff; /* States that must be off. */
int stateOn; /* States that must be on. */
/* Type-specific fields go here. */
/* See PerStateDataBorder, PerStateDataFont, etc. */
};
/* A structure of the following type represents the value of a per-state
* option. */
struct PerStateInfo
{
#ifdef TREECTRL_DEBUG
PerStateType *type;
#endif
Tcl_Obj *obj; /* The configured option value, a list object
* of the form {value stateList ...}.
* Each 'value' is a font, color etc.
* Each 'stateList' is a list of state names
* possibly preceded by "!". */
int count; /* The number of entries in 'data'. */
PerStateData *data; /* malloc'd array parsed from 'obj'. */
};
typedef int (*PerStateType_FromObjProc)(TreeCtrl *, Tcl_Obj *, PerStateData *);
typedef void (*PerStateType_FreeProc)(TreeCtrl *, PerStateData *);
/* A structure of the following type is kept for each per-state data type. */
struct PerStateType
{
CONST char *name; /* Name for debugging purposes. */
int size; /* Size of PerStateData + type-specific
* fields. */
PerStateType_FromObjProc fromObjProc; /* Convert a Tcl_Obj to this type's
* PerStateData internal representation,
* a Tk_Font, XColor, etc. */
PerStateType_FreeProc freeProc; /* Free the internal representation. */
};
/*****/
typedef struct
{
XColor *color;
#if 0
double opacity;
#endif
TreeGradient gradient;
} TreeColor;
#define TREECOLOR_CMP2(a,b) (((a)->color!=(b)->color)||((a)->gradient!=(b)->gradient))
#define TREECOLOR_CMP(a,b) ((!(a)!=!(b))||(((a)&&(b))&&TREECOLOR_CMP2(a,b)))
/* A structure of the following type is used to remember a drawable and its
* dimensions. Some drawing operations must be clipped to the actual bounds
* of a drawable (on X11 only?). */
typedef struct
{
Drawable drawable;
int width;
int height;
} TreeDrawable;
/* A structure of the following type represents a rectangle. XRectangle
* uses short integers which often aren't large enough. */
typedef struct
{
int x, y;
int width, height;
} TreeRectangle;
#define TreeRect_Left(tr) ((tr).x)
#define TreeRect_Top(tr) ((tr).y)
#define TreeRect_Right(tr) ((tr).x + (tr).width)
#define TreeRect_Bottom(tr) ((tr).y + (tr).height)
#define TreeRect_Width(tr) ((tr).width)
#define TreeRect_Height(tr) ((tr).height)
#define TreeRect_XYWH(tr,X,Y,W,H) ((*X)=TreeRect_Left(tr),(*Y)=TreeRect_Top(tr),\
(*W)=TreeRect_Width(tr),(*H)=TreeRect_Height(tr))
#define TreeRect_SetXYWH(tr,X,Y,W,H) ((tr).x=(X),(tr).y=(Y),\
(tr).width=(W),(tr).height=(H))
#define TreeRect_XYXY(tr,X1,Y1,X2,Y2) ((*X1)=TreeRect_Left(tr),(*Y1)=TreeRect_Top(tr),\
(*X2)=TreeRect_Right(tr),(*Y2)=TreeRect_Bottom(tr))
#define TreeRect_SetXYXY(tr,X1,Y1,X2,Y2) ((tr).x=(X1),(tr).y=(Y1),\
(tr).width=(X2)-(X1),(tr).height=(Y2)-(Y1))
#define TreeRect_ClipPoint(tr,XP,YP) \
do { \
if ((*XP) < (tr).x) (*XP)=(tr).x; \
if ((*XP) >= TreeRect_Right(tr)) (*XP) = TreeRect_Right(tr) - 1; \
if ((*YP) < (tr).y) (*YP)=(tr).y; \
if ((*YP) >= TreeRect_Bottom(tr)) (*YP) = TreeRect_Bottom(tr) - 1; \
} while (0)
#define TreeRect_FromXRect(xr,trp) ((trp)->x=(xr).x, (trp)->y=(xr).y, \
(trp)->width=(xr).width, (trp)->height=(xr).height)
#define TreeRect_ToXRect(tr,xrp) ((xrp)->x=(tr).x, (xrp)->y=(tr).y, \
(xrp)->width=(tr).width, (xrp)->height=(tr).height)
typedef struct GCCache GCCache;
struct GCCache
{
unsigned long mask;
XGCValues gcValues;
GC gc;
GCCache *next;
};
/*
* A TreePtrList is used for dynamically-growing lists of ClientData pointers.
* A TreePtrList is NULL-terminated.
* Based on Tcl_DString code.
*/
#define TIL_STATIC_SPACE 128
typedef struct TreePtrList TreePtrList;
typedef TreePtrList TreeItemList;
typedef TreePtrList TreeColumnList;
struct TreePtrList {
#ifdef TREECTRL_DEBUG
char magic[4];
#endif
TreeCtrl *tree;
ClientData *pointers; /* NULL-terminated list of pointers. */
int count; /* Number of items. */
int space; /* Number of slots pointed to by pointers[]. */
ClientData pointerSpace[TIL_STATIC_SPACE]; /* Space to use in common case
* where the list is small. */
};
enum { LEFT, TOP, RIGHT, BOTTOM };
/* A structure of the following type is kept for each TreeCtrl to hold the
* values of debug-related configuration options and other related fields. */
struct TreeCtrlDebug
{
Tk_OptionTable optionTable;
int enable; /* Turn all debugging on/off */
int data; /* Debug data structures */
int display; /* Debug display routines */
int span; /* Debug column spanning */
int textLayout; /* Debug text layout */
int displayDelay; /* Delay between copy/draw operations */
XColor *eraseColor; /* Erase "invalidated" areas */
GC gcErase; /* for eraseColor */
XColor *drawColor; /* Erase about-to-be-drawn areas */
GC gcDraw; /* for eraseColor */
};
/* A structure of the following type is kept for each TreeCtrl to hold the
* values of header drag-and-drop configuration options and other related
* fields. */
struct TreeCtrlColumnDrag
{
Tk_OptionTable optionTable;
int enable; /* -enable */
TreeColumn column; /* -imagecolumn */
Tcl_Obj *offsetObj; /* -imageoffset */
int offset; /* -imageoffset */
XColor *color; /* -imagecolor */
int alpha; /* -imagealpha */
int span; /* -imagespan */
TreeColumn indColumn; /* -indicatorcolumn */
XColor *indColor; /* -indicatorcolor */
int indSide; /* -indicatorside */
int indSpan; /* -indicatorspan */
int imageEpoch;
};
/* A structure of the following type is kept for each TreeCtrl to hold the
* names of static and dynamic states in each STATE_DOMAIN_XXX. */
typedef struct TreeStateDomain TreeStateDomain;
struct TreeStateDomain
{
CONST char *name; /* Human-readable name of this domain. */
char *stateNames[32]; /* Sparse array of state names. */
int staticCount; /* Number of static states. */
};
/* A structure of the following type represents a unique signature for each
* TreeStyle that is managed privately for use in column headers. A different
* header style is needed to for some header configuration options, such as
* -justify, but not for others, such as -arrow which are handled by the
* 'header' element type. */
typedef struct HeaderStyleParams HeaderStyleParams;
struct HeaderStyleParams
{
Tk_Justify justify; /* -justify */
int bitmap; /* 1 if -bitmap is specified, 0 if -bitmap
* is unspecified or -image is specified. */
int image; /* 1 if -image is specified. */
int imagePadX[2]; /* -imagepadx */
int imagePadY[2]; /* -imagepady */
int text; /* 1 if -text is specified, 0 otherwise. */
int textPadX[2]; /* -textpadx */
int textPadY[2]; /* -textpady */
};
/* A structure of the following type is kept for each TreeStyle that is
* managed privately for use in column headers. */
typedef struct HeaderStyle HeaderStyle;
struct HeaderStyle
{
TreeStyle style; /* A master style for use in a column
* header. */
HeaderStyleParams params; /* Unique signature for this style. */
HeaderStyle *next; /* Linked list of all header styles. */
};
/* A structure of the following type is kept for each treectrl widget. */
struct TreeCtrl
{
/* Standard stuff */
Tk_Window tkwin;
Display *display;
Tcl_Interp *interp;
Tcl_Command widgetCmd;
Tk_OptionTable optionTable;
/* Configuration options */
Tcl_Obj *fgObj; /* -foreground */
XColor *fgColorPtr; /* -foreground */
Tcl_Obj *borderWidthObj; /* -borderwidth */
int borderWidth; /* -borderwidth */
Tk_3DBorder border; /* -background */
Tk_Cursor cursor; /* Current cursor for window, or None. */
int relief; /* -relief */
Tcl_Obj *highlightWidthObj; /* -highlightthickness */
int highlightWidth; /* -highlightthickness */
XColor *highlightBgColorPtr; /* -highlightbackground */
XColor *highlightColorPtr; /* -highlightcolor */
char *xScrollCmd; /* -xscrollcommand */
char *yScrollCmd; /* -yscrollcommand */
Tcl_Obj *xScrollDelay; /* -xscrolldelay: used by scripts */
Tcl_Obj *yScrollDelay; /* -yscrolldelay: used by scripts */
int xScrollIncrement; /* -xscrollincrement */
int yScrollIncrement; /* -yscrollincrement */
int xScrollSmoothing; /* -xscrollsmoothing */
int yScrollSmoothing; /* -yscrollsmoothing */
#define SMOOTHING_X 0x01
#define SMOOTHING_Y 0x02
int scrollSmoothing; /* */
Tcl_Obj *scrollMargin; /* -scrollmargin: used by scripts */
char *takeFocus; /* -takfocus */
Tcl_Obj *fontObj; /* -font */
Tk_Font tkfont; /* -font */
Tcl_Obj *headerFontObj; /* -headerfont */
Tk_Font tkfontHeader; /* -headerfont */
int showButtons; /* boolean: Draw expand/collapse buttons */
int showLines; /* boolean: Draw lines connecting parent to
* child */
int showRootLines; /* boolean: Draw lines connecting children
* of the root item */
int showRoot; /* boolean: Draw the unique root item */
int showRootButton; /* boolean: Draw expand/collapse button for
* root item */
int showRootChildButtons; /* boolean: Draw expand/collapse buttons for
* children of the root item */
int showHeader; /* boolean: show column titles */
Tcl_Obj *indentObj; /* pixels: offset of child relative to
* parent */
int indent; /* pixels: offset of child relative to
* parent */
char *selectMode; /* -selectmode: used by scripts only */
Tcl_Obj *itemHeightObj; /* -itemheight: Fixed height for all items
(unless overridden) */
int itemHeight; /* -itemheight */
Tcl_Obj *minItemHeightObj; /* -minitemheight: Minimum height for all items */
int minItemHeight; /* -minitemheight */
Tcl_Obj *itemWidthObj; /* -itemwidth */
int itemWidth; /* -itemwidth */
int itemWidthEqual; /* -itemwidthequal */
Tcl_Obj *itemWidMultObj; /* -itemwidthmultiple */
int itemWidMult; /* -itemwidthmultiple */
Tcl_Obj *widthObj; /* -width */
int width; /* -width */
Tcl_Obj *heightObj; /* -height */
int height; /* -height */
TreeColumn columnTree; /* column where buttons/lines are drawn */
#define DOUBLEBUFFER_NONE 0
#define DOUBLEBUFFER_ITEM 1
#define DOUBLEBUFFER_WINDOW 2
int doubleBuffer; /* -doublebuffer */
XColor *buttonColor; /* -buttoncolor */
Tcl_Obj *buttonSizeObj; /* -buttonSize */
int buttonSize; /* -buttonsize */
Tcl_Obj *buttonThicknessObj;/* -buttonthickness */
int buttonThickness; /* -buttonthickness */
int buttonTracking; /* -buttontracking */
XColor *lineColor; /* -linecolor */
Tcl_Obj *lineThicknessObj; /* -linethickness */
int lineThickness; /* -linethickness */
#define LINE_STYLE_DOT 0
#define LINE_STYLE_SOLID 1
int lineStyle; /* -linestyle */
int vertical; /* -orient */
Tcl_Obj *wrapObj; /* -wrap */
PerStateInfo buttonImage; /* -buttonimage */
PerStateInfo buttonBitmap; /* -buttonbitmap */
char *backgroundImageString; /* -backgroundimage */
Tk_Anchor bgImageAnchor; /* -bgimageanchor */
int bgImageOpaque; /* -bgimageopaque */
#define BGIMG_SCROLL_X 0x01
#define BGIMG_SCROLL_Y 0x02
Tcl_Obj *bgImageScrollObj; /* -bgimagescroll */
int bgImageScroll; /* -bgimagescroll */
#define BGIMG_TILE_X 0x01
#define BGIMG_TILE_Y 0x02
Tcl_Obj *bgImageTileObj; /* -bgimagetile */
int bgImageTile; /* -bgimagetile */
int useIndent; /* MAX of open/closed button width and
* indent */
int buttonHeightMax; /* Maximum height of a button in any state. */
#define BG_MODE_COLUMN 0
#define BG_MODE_ORDER 1
#define BG_MODE_ORDERVIS 2
#define BG_MODE_ROW 3
#ifdef DEPRECATED
#define BG_MODE_INDEX 4 /* compatibility */
#define BG_MODE_VISINDEX 5 /* compatibility */
#endif /* DEPRECATED */
int backgroundMode; /* -backgroundmode */
int columnResizeMode; /* -columnresizemode */
int *canvasPadX; /* -canvaspadx */
Tcl_Obj *canvasPadXObj; /* -canvaspadx */
int *canvasPadY; /* -canvaspady */
Tcl_Obj *canvasPadYObj; /* -canvaspady */
int itemGapX; /* -itemgapx */
Tcl_Obj *itemGapXObj; /* -itemgapx */
int itemGapY; /* -itemgapy */
Tcl_Obj *itemGapYObj; /* -itemgapy */
struct TreeCtrlDebug debug;
struct TreeCtrlColumnDrag columnDrag;
/* Other stuff */
int gotFocus; /* flag */
int deleted; /* flag */
int updateIndex; /* flag */
int isActive; /* flag: mac & win "active" toplevel */
struct {
int left;
int top;
int right;
int bottom;
} inset; /* borderWidth + highlightWidth */
int xOrigin; /* offset from content x=0 to window x=0 */
int yOrigin; /* offset from content y=0 to window y=0 */
GC copyGC;
GC textGC;
GC headerTextGC;
GC buttonGC;
GC lineGC[2];
Tk_Image backgroundImage; /* -backgroundimage */
int useTheme; /* -usetheme */
char *itemPrefix; /* -itemprefix */
char *columnPrefix; /* -columnprefix */
int prevWidth;
int prevHeight;
int drawableXOrigin;
int drawableYOrigin;
TreeColumn columns; /* List of columns */
TreeColumn columnLast; /* Last in list of columns */
TreeColumn columnTail; /* Last infinitely-wide column */
TreeColumn columnVis; /* First visible non-locked column */
int columnCount; /* Number of columns */
int columnCountVis; /* Number of visible columns */
int headerHeight; /* Height of column titles */
int themeHeaderHeight; /* Fixed theme height of column titles */
int widthOfColumns; /* Sum of column widths */
int columnTreeLeft; /* left of column where buttons/lines are
* drawn */
int columnTreeVis; /* TRUE if columnTree is visible */
int columnBgCnt; /* Max -itembackground colors */
#if COLUMNGRID == 1
int columnsWithGridLines; /* # visible columns with grid lines. */
#endif
#define COLUMN_LOCK_LEFT 0
#define COLUMN_LOCK_NONE 1
#define COLUMN_LOCK_RIGHT 2
TreeColumn columnLockLeft; /* First left-locked column */
TreeColumn columnLockNone; /* First unlocked column */
TreeColumn columnLockRight; /* First right-locked column */
int widthOfColumnsLeft; /* Sum of left-locked column widths */
int widthOfColumnsRight; /* Sum of right-locked column widths */
int columnCountVisLeft; /* Number of visible left-locked columns */
int columnCountVisRight; /* Number of visible right-locked columns */
int displayLockedColumns; /* Last seen value of
* Tree_ShouldDisplayLockedColumns() */
#define UNIFORM_GROUP
#ifdef UNIFORM_GROUP
Tcl_HashTable uniformGroupHash; /* -uniform -> UniformGroup */
#endif
Tcl_Obj *headerFgObj; /* -headerforeground */
XColor *defHeaderTextColor; /* Default column header text color when
* the column's -textcolor option
* is not specified and the system theme
* doesn't specify a color. */
TreeItem root;
TreeItem activeItem;
TreeItem anchorItem;
int nextItemId;
int nextColumnId;
Tcl_HashTable itemHash; /* TreeItem.id -> TreeItem */
Tcl_HashTable itemSpansHash; /* TreeItem -> nothing */
Tcl_HashTable elementHash; /* Element.name -> Element */
Tcl_HashTable styleHash; /* Style.name -> Style */
Tcl_HashTable imageNameHash; /* image name -> TreeImageRef */
Tcl_HashTable imageTokenHash; /* Tk_Image -> TreeImageRef */
int depth; /* max depth of items under root */
int itemCount; /* Total number of items */
int itemVisCount; /* Total number of ReallyVisible() items */
int itemWrapCount; /* ReallyVisible() items with -wrap=true */
QE_BindingTable bindingTable;
TreeDragImage dragImage;
TreeMarquee marquee;
TreeDInfo dInfo;
int selectCount; /* Number of selected items */
Tcl_HashTable selection; /* Selected items */
#define TREE_WRAP_NONE 0
#define TREE_WRAP_ITEMS 1
#define TREE_WRAP_PIXELS 2
#define TREE_WRAP_WINDOW 3
int wrapMode; /* TREE_WRAP_xxx */
int wrapArg; /* Number of items, number of pixels */
int totalWidth; /* Max/Sum of all TreeRanges */
int totalHeight; /* Max/Sum of all TreeRanges */
struct {
Tcl_Obj *xObj;
int x; /* Window coords */
int sx; /* Window coords */
int onScreen;
} columnProxy;
#define STATE_DOMAIN_ITEM 0
#define STATE_DOMAIN_HEADER 1
TreeStateDomain stateDomain[2];
int configStateDomain;
int scanX; /* [scan mark] and [scan dragto] */
int scanY;
int scanXOrigin;
int scanYOrigin;
Tk_OptionTable styleOptionTable;
#ifdef DEPRECATED
struct {
Tcl_Obj *stylesObj;
TreeStyle *styles;
int numStyles;
} defaultStyle;
#endif /* DEPRECATED */
Tk_OptionTable itemOptionTable;
int itemPrefixLen; /* -itemprefix */
int columnPrefixLen; /* -columnprefix */
#ifdef ALLOC_HAX
ClientData allocData;
#endif
int preserveItemRefCnt; /* Ref count so items-in-use aren't freed. */
TreeItemList preserveItemList; /* List of items to be deleted when
* preserveItemRefCnt==0. */
struct {
Tcl_Obj *yObj;
int y; /* Window coords */
int sy; /* Window coords */
int onScreen;
} rowProxy;
char *optionHax[64]; /* Used by OptionHax_xxx */
int optionHaxCnt; /* Used by OptionHax_xxx */
TreeThemeData themeData;
GCCache *gcCache; /* Graphics contexts for elements. */
TkRegion regionStack[8]; /* Temp region stack. */
int regionStackLen; /* Number of unused regions in regionStack. */
int itemTagExpr; /* Enable/disable operators in item tags */
int columnTagExpr; /* Enable/disable operators in column tags */
Tk_OptionTable gradientOptionTable;
Tcl_HashTable gradientHash; /* TreeGradient.name -> TreeGradient */
int nativeGradients; /* Preference, not availability. */
Tk_OptionTable headerOptionTable;
Tk_OptionTable headerColumnOptionTable;
Tk_OptionTable headerDragOptionTable;
TreeItem headerItems;
int headerCount;
int nextHeaderId;
Tcl_HashTable headerHash; /* TreeItem.id -> TreeItem */
int tailExtend; /* This is the distance the tail column
* extends past the right edge of the
* content area. */
struct {
int nextId; /* Next unique id number for a header style. */
HeaderStyle *first; /* First in linked list of header styles. */
TreeElement headerElem; /* Master element used by header styles. */
TreeElement bitmapElem; /* Master element used by header styles. */
TreeElement imageElem; /* Master element used by header styles. */
TreeElement textElem; /* Master element used by header styles. */
} headerStyle;
/* These two options contain "-image" and "-text".
* They are used by the [item image] and [item text] commands.
* Originally these were static globals but that isn't thread safe. */
Tcl_Obj *imageOptionNameObj;
Tcl_Obj *textOptionNameObj;
/* Originally these were static globals but that isn't thread safe. */
Tcl_Obj *formatFloatObj; /* %g */
Tcl_Obj *formatIntObj; /* %d */
Tcl_Obj *formatLongObj; /* %ld */
Tcl_Obj *formatStringObj; /* %s */
Tcl_Obj *stringClockObj; /* clock */
Tcl_Obj *stringFormatObj; /* format */
Tcl_Obj *optionFormatObj; /* -format */
TreeColumnPriv columnPriv;
ClientData itemSpanPriv;
#ifdef TREECTRL_DEBUG
struct {
int inLayoutColumns;
} debugCheck;
#endif
};
#define TREE_CONF_FONT 0x0001
#define TREE_CONF_ITEMSIZE 0x0002
#define TREE_CONF_INDENT 0x0004
#define TREE_CONF_WRAP 0x0008
#define TREE_CONF_BUTIMG 0x0010
#define TREE_CONF_BUTBMP 0x0020
#define TREE_CONF_BORDERS 0x0040
#define TREE_CONF_BGIMGOPT 0x0080
#define TREE_CONF_RELAYOUT 0x0100
#define TREE_CONF_REDISPLAY 0x0200
#define TREE_CONF_FG 0x0400
#define TREE_CONF_PROXY 0x0800
#define TREE_CONF_BUTTON 0x1000
#define TREE_CONF_LINE 0x2000
#define TREE_CONF_DEFSTYLE 0x4000
#define TREE_CONF_BG_IMAGE 0x8000
#define TREE_CONF_THEME 0x00010000
MODULE_SCOPE void Tree_AddItem(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_RemoveItem(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_AddHeader(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_RemoveHeader(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE Tk_Image Tree_GetImage(TreeCtrl *tree, char *imageName);
MODULE_SCOPE void Tree_FreeImage(TreeCtrl *tree, Tk_Image image);
MODULE_SCOPE void Tree_UpdateScrollbarX(TreeCtrl *tree);
MODULE_SCOPE void Tree_UpdateScrollbarY(TreeCtrl *tree);
MODULE_SCOPE void Tree_AddToSelection(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_RemoveFromSelection(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_PreserveItems(TreeCtrl *tree);
MODULE_SCOPE void Tree_ReleaseItems(TreeCtrl *tree);
MODULE_SCOPE int TreeArea_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr,
int *areaPtr);
#define STATE_OP_ON 0
#define STATE_OP_OFF 1
#define STATE_OP_TOGGLE 2
#define SFO_NOT_OFF 0x0001
#define SFO_NOT_TOGGLE 0x0002
#define SFO_NOT_STATIC 0x0004
MODULE_SCOPE int Tree_StateFromObj(TreeCtrl *tree, int domain, Tcl_Obj *obj, int states[3], int *indexPtr, int flags);
MODULE_SCOPE int Tree_StateFromListObj(TreeCtrl *tree, int domain, Tcl_Obj *obj, int states[3], int flags);
MODULE_SCOPE int Tree_StateCmd(TreeCtrl *tree, int domain, int objc, Tcl_Obj *CONST objv[]);
#define Tree_BorderLeft(tree) \
tree->inset.left
#define Tree_BorderTop(tree) \
tree->inset.top
#define Tree_BorderRight(tree) \
(Tk_Width(tree->tkwin) - tree->inset.right)
#define Tree_BorderBottom(tree) \
(Tk_Height(tree->tkwin) - tree->inset.bottom)
#define Tree_HeaderLeft(tree) \
Tree_BorderLeft(tree)
#define Tree_HeaderTop(tree) \
Tree_BorderTop(tree)
#define Tree_HeaderRight(tree) \
Tree_BorderRight(tree)
#define Tree_HeaderBottom(tree) \
(Tree_BorderTop(tree) + Tree_HeaderHeight(tree))
#define Tree_HeaderWidth(tree) \
(Tree_HeaderRight(tree) - Tree_HeaderLeft(tree))
#define Tree_ContentLeft(tree) \
(Tree_BorderLeft(tree) + Tree_WidthOfLeftColumns(tree))
#define Tree_ContentTop(tree) \
(Tree_BorderTop(tree) + Tree_HeaderHeight(tree))
#define Tree_ContentRight(tree) \
(Tree_BorderRight(tree) - Tree_WidthOfRightColumns(tree))
#define Tree_ContentBottom(tree) \
Tree_BorderBottom(tree)
#define Tree_ContentWidth(tree) \
(Tree_ContentRight(tree) - Tree_ContentLeft(tree))
#define Tree_ContentHeight(tree) \
(Tree_ContentBottom(tree) - Tree_ContentTop(tree))
/* tkTreeHeader.c */
MODULE_SCOPE int TreeHeader_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeHeader_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeHeaderCmd(ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeHeaderList_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeItemList *items, int flags);
MODULE_SCOPE void TreeHeader_TreeChanged(TreeCtrl *tree, int flagT);
MODULE_SCOPE int TreeHeader_ColumnDragOrder(TreeHeader header,
TreeColumn column, int index);
MODULE_SCOPE int TreeHeader_IsDraggedColumn(TreeHeader header,
TreeColumn column);
MODULE_SCOPE int TreeHeader_GetDraggedColumns(TreeHeader header, int lock,
TreeColumn *first, TreeColumn *last);
MODULE_SCOPE int TreeHeaderColumn_NeededHeight(TreeHeader header, TreeHeaderColumn column, int fixedWidth);
MODULE_SCOPE void TreeHeaders_RequestWidthInColumns(TreeCtrl *tree,
TreeColumn columnMin, TreeColumn columnMax);
MODULE_SCOPE int Tree_HeaderHeight(TreeCtrl *tree);
MODULE_SCOPE TreeItem TreeHeader_GetItem(TreeHeader header);
MODULE_SCOPE void TreeHeader_ColumnDeleted(TreeCtrl *tree, TreeColumn treeColumn);
MODULE_SCOPE Tcl_Obj *TreeHeaderColumn_GetImageOrText(TreeHeader header,
TreeHeaderColumn column, int isImage);
MODULE_SCOPE int TreeHeaderColumn_SetImageOrText(TreeHeader header,
TreeHeaderColumn column, TreeColumn treeColumn, Tcl_Obj *valueObj,
int isImage);
MODULE_SCOPE int TreeHeaderColumn_EnsureStyleExists(TreeHeader header,
TreeHeaderColumn column, TreeColumn treeColumn);
MODULE_SCOPE int TreeHeader_ConsumeColumnCget(TreeCtrl *tree,
TreeColumn treeColumn, Tcl_Obj *objPtr);
MODULE_SCOPE int TreeHeader_ConsumeColumnConfig(TreeCtrl *tree,
TreeColumn treeColumn, int objc, Tcl_Obj *CONST objv[], int createFlag);
MODULE_SCOPE Tcl_Obj *TreeHeader_ConsumeColumnOptionInfo(TreeCtrl *tree,
TreeColumn treeColumn, Tcl_Obj *objPtr);
MODULE_SCOPE TreeHeader TreeHeader_CreateWithItem(TreeCtrl *tree,
TreeItem item);
MODULE_SCOPE void TreeHeader_FreeResources(TreeHeader header);
MODULE_SCOPE TreeHeaderColumn TreeHeaderColumn_CreateWithItemColumn(
TreeHeader header, TreeItemColumn itemColumn);
MODULE_SCOPE void TreeHeaderColumn_FreeResources(TreeCtrl *tree,
TreeHeaderColumn column);
MODULE_SCOPE int TreeHeaderColumn_StateChanged(TreeHeader header,
TreeHeaderColumn column, TreeColumn treeColumn, int state1, int state2);
MODULE_SCOPE int TreeHeaderColumn_DragBounds(TreeHeader header,
TreeHeaderColumn column, StyleDrawArgs *drawArgs, int dragPosition);
MODULE_SCOPE void TreeHeaderColumn_Draw(TreeHeader header,
TreeHeaderColumn column, int visIndex, StyleDrawArgs *drawArgs,
int dragPosition);
MODULE_SCOPE int TreeHeaderColumn_NeededWidth(TreeHeader header,
TreeHeaderColumn column);
MODULE_SCOPE TreeItem Tree_HeaderUnderPoint(TreeCtrl *tree, int *x_, int *y_, int *lock);
MODULE_SCOPE int TreeHeader_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr,
TreeHeader *headerPtr);
MODULE_SCOPE Tcl_Obj* TreeHeader_ToObj(TreeHeader header);
MODULE_SCOPE Tk_Justify TreeHeaderColumn_Justify(TreeHeader header,
TreeHeaderColumn column);
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_header;
/* tkTreeItem.c */
#define ITEM_ALL ((TreeItem) -1)
#define IFO_NOT_MANY 0x0001 /* ItemFromObj flag: > 1 item is not ok */
#define IFO_NOT_NULL 0x0002 /* ItemFromObj flag: can't be NULL */
#define IFO_NOT_ROOT 0x0004 /* ItemFromObj flag: "root" is forbidden */
#define IFO_NOT_ORPHAN 0x0008 /* ItemFromObj flag: item must have a parent */
#define IFO_LIST_ALL 0x0010 /* ItemFromObj flag: return "all" as list */
MODULE_SCOPE int TreeItemList_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeItemList *items, int flags);
MODULE_SCOPE int TreeItem_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeItem *itemPtr, int flags);
typedef struct ItemForEach ItemForEach;
struct ItemForEach {
TreeCtrl *tree;
int error;
int all;
Tcl_HashSearch search;
TreeItem last;
TreeItem item;
TreeItemList *items;
int index;
};
MODULE_SCOPE TreeItem TreeItemForEach_Start(TreeItemList *items, TreeItemList *item2s,
ItemForEach *iter);
MODULE_SCOPE TreeItem TreeItemForEach_Next(ItemForEach *iter);
#define ITEM_FOR_EACH(item, items, item2s, iter) \
for (item = TreeItemForEach_Start(items, item2s, iter); \
item != NULL; \
item = TreeItemForEach_Next(iter))
#ifdef TREECTRL_DEBUG
#define BreakIntoDebugger() TreeCtrl_BreakIntoDebugger(__FILE__, __LINE__)
MODULE_SCOPE void TreeCtrl_BreakIntoDebugger(const char *file, int line);
#endif
#define FormatResult TreeCtrl_FormatResult
MODULE_SCOPE void FormatResult(Tcl_Interp *interp, char *fmt, ...);
#define DStringAppendf TreeCtrl_DStringAppendf
MODULE_SCOPE void DStringAppendf(Tcl_DString *dString, char *fmt, ...);
MODULE_SCOPE void Tree_Debug(TreeCtrl *tree);
MODULE_SCOPE int TreeItem_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeItem_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeItem_Debug(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeItem_OpenClose(TreeCtrl *tree, TreeItem item, int mode);
MODULE_SCOPE void TreeItem_Delete(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE int TreeItem_Deleted(TreeCtrl *tree, TreeItem item);
#define STATE_ITEM_OPEN 0x0001
#define STATE_ITEM_SELECTED 0x0002
#define STATE_ITEM_ENABLED 0x0004
#define STATE_ITEM_ACTIVE 0x0008
#define STATE_ITEM_FOCUS 0x0010
#define STATE_HEADER_BG 0x0001
#define STATE_HEADER_FOCUS 0x0002
#define STATE_HEADER_ACTIVE 0x0004
#define STATE_HEADER_NORMAL 0x0008
#define STATE_HEADER_PRESSED 0x0010
#define STATE_HEADER_SORT_UP 0x0020
#define STATE_HEADER_SORT_DOWN 0x0040
MODULE_SCOPE int TreeItem_GetState(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItemColumn_GetState(TreeCtrl *tree, TreeItemColumn itemColumn);
/* State flags for button state, needed by themes */
/* FIXME: These may conflict with [state define] states */
#define BUTTON_STATE_ACTIVE (1<<30)
#define BUTTON_STATE_PRESSED (1<<31)
#define CS_DISPLAY 0x01
#define CS_LAYOUT 0x02
MODULE_SCOPE int TreeItem_ChangeState(TreeCtrl *tree, TreeItem item_, int stateOff, int stateOn);
MODULE_SCOPE int TreeItemColumn_ChangeState(TreeCtrl *tree, TreeItem item,
TreeItemColumn column_, TreeColumn treeColumn, int stateOff, int stateOn);
MODULE_SCOPE void TreeItem_UndefineState(TreeCtrl *tree, TreeItem item_, int state);
MODULE_SCOPE int TreeItem_HasButton(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_IsPointInButton(TreeCtrl *tree, TreeItem item_, int x, int y);
MODULE_SCOPE int TreeItem_GetDepth(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_GetID(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_SetID(TreeCtrl *tree, TreeItem item_, int id);
MODULE_SCOPE int TreeItem_GetEnabled(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_GetSelected(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_CanAddToSelection(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_GetWrap(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE TreeItem TreeItem_GetParent(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem TreeItem_GetNextSibling(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem TreeItem_NextSiblingVisible(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeItem_SetDInfo(TreeCtrl *tree, TreeItem item, TreeItemDInfo dInfo);
MODULE_SCOPE TreeItemDInfo TreeItem_GetDInfo(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeItem_SetRInfo(TreeCtrl *tree, TreeItem item, TreeItemRInfo rInfo);
MODULE_SCOPE TreeItemRInfo TreeItem_GetRInfo(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TagInfo *TreeItem_GetTagInfo(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE int TreeItem_HasTag(TreeItem, Tk_Uid tag);
MODULE_SCOPE TreeItemColumn TreeItem_MakeColumnExist(TreeCtrl *tree,
TreeItem item, int columnIndex);
MODULE_SCOPE TreeItem TreeItem_CreateHeader(TreeCtrl *tree);
MODULE_SCOPE TreeHeader TreeItem_GetHeader(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE TreeHeaderColumn TreeItemColumn_GetHeaderColumn(TreeCtrl *tree, TreeItemColumn itemColumn);
MODULE_SCOPE int TreeItem_ConsumeHeaderCget(TreeCtrl *tree, TreeItem item,
Tcl_Obj *objPtr);
MODULE_SCOPE int TreeItem_ConsumeHeaderConfig(TreeCtrl *tree, TreeItem item,
int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeItem_GetHeaderOptionInfo(TreeCtrl *tree,
TreeHeader header, Tcl_Obj *objPtr, Tcl_Obj *resultObjPtr);
MODULE_SCOPE int TreeItemCmd_Bbox(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doHeaders);
MODULE_SCOPE int TreeItemCmd_Element(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doHeaders);
MODULE_SCOPE int TreeItemCmd_Span(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doHeaders);
MODULE_SCOPE int TreeItemCmd_State(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doHeaders);
MODULE_SCOPE int TreeItemCmd_Style(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doHeaders);
MODULE_SCOPE int TreeItemCmd_ImageOrText(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doImage, int doHeaders);
MODULE_SCOPE int TreeItemCmd_Tag(TreeCtrl *tree, int objc,
Tcl_Obj *CONST objv[], int doHeaders);
MODULE_SCOPE void TreeItem_AppendChild(TreeCtrl *tree, TreeItem self, TreeItem child);
MODULE_SCOPE void TreeItem_RemoveFromParent(TreeCtrl *tree, TreeItem self);
MODULE_SCOPE int TreeItem_FirstAndLast(TreeCtrl *tree, TreeItem *first, TreeItem *last);
MODULE_SCOPE void TreeItem_ListDescendants(TreeCtrl *tree, TreeItem item_, TreeItemList *items);
MODULE_SCOPE void TreeItem_UpdateDepth(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeItem_AddToParent(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE int TreeItem_Height(TreeCtrl *tree, TreeItem self);
MODULE_SCOPE int TreeItem_TotalHeight(TreeCtrl *tree, TreeItem self);
MODULE_SCOPE void TreeItem_InvalidateHeight(TreeCtrl *tree, TreeItem self);
MODULE_SCOPE void TreeItem_SpansInvalidate(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_SpansRedo(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE void TreeItem_SpansRedoIfNeeded(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int *TreeItem_GetSpans(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE void TreeItem_Draw(TreeCtrl *tree, TreeItem self, int lock, int x, int y, int width, int height, TreeDrawable td, int minX, int maxX, int index);
MODULE_SCOPE void TreeItem_DrawLines(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, TreeDrawable td, TreeStyle style);
MODULE_SCOPE void TreeItem_DrawButton(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, TreeDrawable td, TreeStyle style);
MODULE_SCOPE int TreeItem_ReallyVisible(TreeCtrl *tree, TreeItem self);
MODULE_SCOPE void TreeItem_FreeResources(TreeCtrl *tree, TreeItem self);
MODULE_SCOPE void TreeItem_Release(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem TreeItem_RootAncestor(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE int TreeItem_IsAncestor(TreeCtrl *tree, TreeItem item1, TreeItem item2);
MODULE_SCOPE Tcl_Obj *TreeItem_ToObj(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeItem_ToIndex(TreeCtrl *tree, TreeItem item, int *absolute, int *visible);
MODULE_SCOPE TreeItem TreeItem_Next(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem TreeItem_NextVisible(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem TreeItem_Prev(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem TreeItem_PrevVisible(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeItem_Identify(TreeCtrl *tree, TreeItem item_, int lock, int x, int y, TreeColumn *columnPtr, TreeElement *elemPtr);
MODULE_SCOPE void TreeItem_Identify2(TreeCtrl *tree, TreeItem item_,
int x1, int y1, int x2, int y2, Tcl_Obj *listObj);
MODULE_SCOPE int TreeItem_GetRects(TreeCtrl *tree, TreeItem item_,
TreeColumn treeColumn, int objc, Tcl_Obj *CONST objv[], TreeRectangle rects[]);
MODULE_SCOPE int TreeItem_Indent(TreeCtrl *tree, TreeColumn column, TreeItem item_);
MODULE_SCOPE void Tree_UpdateItemIndex(TreeCtrl *tree);
MODULE_SCOPE void Tree_DeselectHidden(TreeCtrl *tree);
MODULE_SCOPE int TreeItemCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE void TreeItem_UpdateWindowPositions(TreeCtrl *tree, TreeItem item_,
int lock, int x, int y, int width, int height);
MODULE_SCOPE void TreeItem_GetOnScreenColumns(TreeCtrl *tree, TreeItem item_,
int lock, int x, int y, int width, int height, TreeColumnList *columns);
MODULE_SCOPE void TreeItem_OnScreen(TreeCtrl *tree, TreeItem item_, int onScreen);
MODULE_SCOPE TreeItemColumn TreeItem_GetFirstColumn(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItemColumn TreeItemColumn_GetNext(TreeCtrl *tree, TreeItemColumn column);
MODULE_SCOPE void TreeItemColumn_InvalidateSize(TreeCtrl *tree, TreeItemColumn column);
MODULE_SCOPE TreeStyle TreeItemColumn_GetStyle(TreeCtrl *tree, TreeItemColumn column);
MODULE_SCOPE void TreeItemColumn_SetStyle(TreeCtrl *tree, TreeItemColumn column, TreeStyle style);
MODULE_SCOPE int TreeItemColumn_Index(TreeCtrl *tree, TreeItem item_, TreeItemColumn column_);
MODULE_SCOPE void TreeItemColumn_ForgetStyle(TreeCtrl *tree, TreeItemColumn column_);
MODULE_SCOPE int TreeItemColumn_NeededWidth(TreeCtrl *tree, TreeItem item_, TreeItemColumn column_);
MODULE_SCOPE TreeItemColumn TreeItem_FindColumn(TreeCtrl *tree, TreeItem item, int columnIndex);
MODULE_SCOPE int TreeItem_ColumnFromObj(TreeCtrl *tree, TreeItem item,
Tcl_Obj *obj, TreeItemColumn *columnPtr, TreeColumn *treeColumnPtr,
int *indexPtr, int flags);
MODULE_SCOPE void TreeItem_RemoveColumns(TreeCtrl *tree, TreeItem item_, int first, int last);
MODULE_SCOPE void TreeItem_RemoveAllColumns(TreeCtrl *tree, TreeItem item_);
MODULE_SCOPE void TreeItem_MoveColumn(TreeCtrl *tree, TreeItem item_, int columnIndex, int beforeIndex);
MODULE_SCOPE void TreeItem_RequestWidthInColumns(TreeCtrl *tree,
TreeItem item, TreeColumn columnMin, TreeColumn columnMax);
MODULE_SCOPE void TreeItems_RequestWidthInColumns(TreeCtrl *tree,
TreeColumn columnMin, TreeColumn columnMax);
/* tkTreeElem.c */
MODULE_SCOPE int TreeElement_InitInterp(Tcl_Interp *interp);
MODULE_SCOPE int TreeElement_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeElement_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeStateFromObj(TreeCtrl *tree, int domain, Tcl_Obj *obj, int *stateOff, int *stateOn);
MODULE_SCOPE int StringTableCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName, CONST char **tablePtr);
struct StyleDrawArgs
{
TreeCtrl *tree;
TreeColumn column;
TreeItem item;
TreeStyle style;
int indent;
int x; /* Display area of the style. */
int y; /* ^ */
int width; /* ^ */
int height; /* ^ */
int spanIndex; /* 0-based index in the list of visible spans. */
TreeDrawable td; /* Where to draw. */
int state; /* STATE_xxx */
Tk_Justify justify; /* How to justify the style within 'bounds'. */
TreeRectangle bounds; /* TREE_AREA_XXX bounds. */
};
/* tkTreeStyle.c */
MODULE_SCOPE int TreeStyle_InitWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeStyle_NeededWidth(TreeCtrl *tree, TreeStyle style_, int state);
MODULE_SCOPE int TreeStyle_NeededHeight(TreeCtrl *tree, TreeStyle style_, int state);
MODULE_SCOPE int TreeStyle_UseHeight(StyleDrawArgs *drawArgs);
MODULE_SCOPE void TreeStyle_Draw(StyleDrawArgs *args);
MODULE_SCOPE void TreeStyle_FreeResources(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE void TreeStyle_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE Tcl_Obj *TreeElement_ToObj(TreeElement elem);
MODULE_SCOPE int TreeElement_FromObj(TreeCtrl *tree, Tcl_Obj *obj, TreeElement *elemPtr);
MODULE_SCOPE int TreeElement_IsType(TreeCtrl *tree, TreeElement elem, CONST char *type);
MODULE_SCOPE int TreeStyle_FromObj(TreeCtrl *tree, Tcl_Obj *obj, TreeStyle *stylePtr);
MODULE_SCOPE Tcl_Obj *TreeStyle_ToObj(TreeStyle style_);
MODULE_SCOPE Tcl_Obj *TreeStyle_GetImage(TreeCtrl *tree, TreeStyle style_, TreeElement *elemPtr);
MODULE_SCOPE Tcl_Obj *TreeStyle_GetText(TreeCtrl *tree, TreeStyle style_, TreeElement *elemPtr);
MODULE_SCOPE int TreeStyle_SetImage(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *imageObj, TreeElement *elemPtr);
MODULE_SCOPE int TreeStyle_SetText(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *textObj, TreeElement *elemPtr);
MODULE_SCOPE int TreeStyle_FindElement(TreeCtrl *tree, TreeStyle style_, TreeElement elem, int *index);
MODULE_SCOPE TreeStyle TreeStyle_NewInstance(TreeCtrl *tree, TreeStyle master);
MODULE_SCOPE int TreeStyle_ElementActual(TreeCtrl *tree, TreeStyle style_, int state, Tcl_Obj *elemObj, Tcl_Obj *obj);
MODULE_SCOPE int TreeStyle_ElementCget(TreeCtrl *tree, TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *elemObj, Tcl_Obj *obj);
MODULE_SCOPE int TreeStyle_ElementConfigure(TreeCtrl *tree, TreeItem item,
TreeItemColumn column, TreeStyle style_, TreeElement elem, int objc,
Tcl_Obj **objv, int *eMask);
MODULE_SCOPE int TreeStyle_ElementConfigureFromObj(TreeCtrl *tree,
TreeItem item, TreeItemColumn column, TreeStyle style_, Tcl_Obj *elemObj,
int objc, Tcl_Obj **objv, int *eMask);
MODULE_SCOPE void TreeStyle_ListElements(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE int TreeStyle_GetButtonY(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE TreeStyle TreeStyle_GetMaster(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE CONST char *TreeStyle_GetName(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE int TreeStyle_GetStateDomain(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE TreeElement TreeStyle_Identify(StyleDrawArgs *drawArgs, int x, int y);
MODULE_SCOPE void TreeStyle_Identify2(StyleDrawArgs *drawArgs,
int x1, int y1, int x2, int y2, Tcl_Obj *listObj);
MODULE_SCOPE int TreeStyle_Remap(TreeCtrl *tree, TreeStyle styleFrom_, TreeStyle styleTo_, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE void TreeStyle_TreeChanged(TreeCtrl *tree, int flagT);
#define SORT_ASCII 0
#define SORT_DICT 1
#define SORT_DOUBLE 2
#define SORT_LONG 3
#define SORT_COMMAND 4
MODULE_SCOPE int TreeStyle_GetSortData(TreeCtrl *tree, TreeStyle style_, int elemIndex, int type, long *lv, double *dv, char **sv);
#if 0
MODULE_SCOPE int TreeStyle_ValidateElements(TreeCtrl *tree, TreeStyle style_, int objc, Tcl_Obj *CONST objv[]);
#endif
MODULE_SCOPE int TreeStyle_GetElemRects(StyleDrawArgs *drawArgs, int objc, Tcl_Obj *CONST objv[], TreeRectangle rects[]);
MODULE_SCOPE int TreeElementCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeStyleCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeStyle_ChangeState(TreeCtrl *tree, TreeStyle style_, int state1, int state2);
MODULE_SCOPE void Tree_UndefineState(TreeCtrl *tree, int domain, int state);
MODULE_SCOPE int TreeStyle_NumElements(TreeCtrl *tree, TreeStyle style_);
MODULE_SCOPE int TreeStyle_IsHeaderStyle(TreeCtrl *tree, TreeStyle style);
MODULE_SCOPE int TreeStyle_HasHeaderElement(TreeCtrl *tree, TreeStyle style);
MODULE_SCOPE TreeStyle Tree_MakeHeaderStyle(TreeCtrl *tree, HeaderStyleParams *params);
MODULE_SCOPE void TreeStyle_UpdateWindowPositions(StyleDrawArgs *drawArgs);
MODULE_SCOPE void TreeStyle_OnScreen(TreeCtrl *tree, TreeStyle style_, int onScreen);
MODULE_SCOPE void Tree_ButtonMaxSize(TreeCtrl *tree, int *maxWidth, int *maxHeight);
MODULE_SCOPE int Tree_ButtonHeight(TreeCtrl *tree, int state);
/* tkTreeNotify.c */
MODULE_SCOPE int TreeNotify_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeNotify_OpenClose(TreeCtrl *tree, TreeItem item, int isOpen, int before);
MODULE_SCOPE void TreeNotify_Selection(TreeCtrl *tree, TreeItemList *select, TreeItemList *deselect);
MODULE_SCOPE int TreeNotifyCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE void TreeNotify_ActiveItem(TreeCtrl *tree, TreeItem itemOld, TreeItem itemNew);
MODULE_SCOPE void TreeNotify_Scroll(TreeCtrl *tree, double fractions[2], int vertical);
MODULE_SCOPE void TreeNotify_ItemDeleted(TreeCtrl *tree, TreeItemList *items);
MODULE_SCOPE void TreeNotify_ItemVisibility(TreeCtrl *tree, TreeItemList *v, TreeItemList *h);
/* tkTreeColumn.c */
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_column;
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_column_NOT_TAIL;
MODULE_SCOPE int TreeColumn_InitInterp(Tcl_Interp *interp);
MODULE_SCOPE void TreeColumn_InitWidget(TreeCtrl *tree);
MODULE_SCOPE TreeColumn Tree_FindColumn(TreeCtrl *tree, int columnIndex);
MODULE_SCOPE int TreeColumn_FirstAndLast(TreeColumn *first, TreeColumn *last);
#define COLUMN_ALL ((TreeColumn) -1) /* Every column. */
#define COLUMN_NTAIL ((TreeColumn) -2) /* Every column but the tail. */
#define CFO_NOT_MANY 0x01
#define CFO_NOT_NULL 0x02
#define CFO_NOT_TAIL 0x04
#define CFO_LIST_ALL 0x08
MODULE_SCOPE int TreeColumnList_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeColumnList *columns, int flags);
MODULE_SCOPE int TreeColumn_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TreeColumn *columnPtr, int flags);
/* Values for TreeColumn -arrow option, needed by themes */
#define COLUMN_ARROW_NONE 0
#define COLUMN_ARROW_UP 1
#define COLUMN_ARROW_DOWN 2
/* Values for TreeColumn -state option, needed by themes */
#define COLUMN_STATE_NORMAL 0
#define COLUMN_STATE_ACTIVE 1
#define COLUMN_STATE_PRESSED 2
typedef struct ColumnForEach ColumnForEach;
struct ColumnForEach {
TreeCtrl *tree;
int error;
int all;
int ntail;
TreeColumn current;
TreeColumn next;
TreeColumn last;
TreeColumnList *list;
int index;
};
MODULE_SCOPE TreeColumn TreeColumnForEach_Start(TreeColumnList *columns,
TreeColumnList *column2s, ColumnForEach *iter);
MODULE_SCOPE TreeColumn TreeColumnForEach_Next(ColumnForEach *iter);
#define COLUMN_FOR_EACH(column, columns, column2s, iter) \
for (column = TreeColumnForEach_Start(columns, column2s, iter); \
column != NULL; \
column = TreeColumnForEach_Next(iter))
MODULE_SCOPE Tcl_Obj *TreeColumn_ToObj(TreeCtrl *tree, TreeColumn column_);
MODULE_SCOPE int TreeColumnCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeColumn_GetID(TreeColumn column_);
MODULE_SCOPE int TreeColumn_Index(TreeColumn column_);
MODULE_SCOPE int TreeColumn_VisIndex(TreeColumn column_);
MODULE_SCOPE TreeColumn Tree_FirstColumn(TreeCtrl *tree, int lock, int tailOK);
MODULE_SCOPE TreeColumn Tree_ColumnToTheRight(TreeColumn column_, int displayOrder, int tailOK);
MODULE_SCOPE TreeColumn TreeColumn_Next(TreeColumn column_);
MODULE_SCOPE TreeColumn TreeColumn_Prev(TreeColumn column_);
MODULE_SCOPE int TreeColumn_FixedWidth(TreeColumn column_);
MODULE_SCOPE int TreeColumn_MinWidth(TreeColumn column_);
MODULE_SCOPE int TreeColumn_MaxWidth(TreeColumn column_);
MODULE_SCOPE int TreeColumn_NeededWidth(TreeColumn column_);
MODULE_SCOPE int TreeColumn_NeededHeight(TreeColumn column_);
MODULE_SCOPE int TreeColumn_UseWidth(TreeColumn column_);
MODULE_SCOPE int TreeColumn_Offset(TreeColumn column_);
MODULE_SCOPE Tk_Justify TreeColumn_ItemJustify(TreeColumn column_);
#ifdef DEPRECATED
MODULE_SCOPE int TreeColumn_WidthHack(TreeColumn column_);
MODULE_SCOPE int TreeColumn_StepWidth(TreeColumn column_);
#endif
MODULE_SCOPE TreeStyle TreeColumn_ItemStyle(TreeColumn column_);
MODULE_SCOPE void TreeColumn_StyleDeleted(TreeColumn column_, TreeStyle style);
MODULE_SCOPE int TreeColumn_Visible(TreeColumn column_);
MODULE_SCOPE int TreeColumn_Squeeze(TreeColumn column_);
MODULE_SCOPE int TreeColumn_BackgroundCount(TreeColumn column_);
MODULE_SCOPE TreeColor *TreeColumn_BackgroundColor(TreeColumn column_, int which);
#if COLUMNGRID==1
MODULE_SCOPE int TreeColumn_GridColors(TreeColumn column, TreeColor **leftColorPtr,
TreeColor **rightColorPtr, int *leftWidthPtr, int *rightWidthPtr);
#endif
MODULE_SCOPE void Tree_DrawHeader(TreeCtrl *tree, TreeDrawable td, int x, int y);
MODULE_SCOPE int TreeColumn_WidthOfItems(TreeColumn column_);
MODULE_SCOPE int TreeColumn_WidthOfHeaders(TreeColumn column_);
MODULE_SCOPE void TreeColumn_InvalidateWidth(TreeColumn column_);
MODULE_SCOPE void TreeColumn_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeColumns_InvalidateWidthOfItems(TreeCtrl *tree, TreeColumn column);
MODULE_SCOPE void TreeColumns_InvalidateWidth(TreeCtrl *tree);
MODULE_SCOPE void TreeColumns_InvalidateSpans(TreeCtrl *tree);
MODULE_SCOPE int TreeColumn_Bbox(TreeColumn column, int *x, int *y, int *w, int *h);
MODULE_SCOPE int TreeColumn_Lock(TreeColumn column_);
MODULE_SCOPE int Tree_WidthOfColumns(TreeCtrl *tree);
MODULE_SCOPE int Tree_WidthOfLeftColumns(TreeCtrl *tree);
MODULE_SCOPE int Tree_WidthOfRightColumns(TreeCtrl *tree);
MODULE_SCOPE void TreeColumns_UpdateCounts(TreeCtrl *tree);
MODULE_SCOPE void TreeColumns_InvalidateCounts(TreeCtrl *tree);
MODULE_SCOPE void TreeColumn_SetDInfo(TreeColumn column, TreeColumnDInfo dInfo);
MODULE_SCOPE TreeColumnDInfo TreeColumn_GetDInfo(TreeColumn column);
/* tkTreeDrag.c */
MODULE_SCOPE int TreeDragImage_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeDragImage_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeDragImage_IsXOR(TreeDragImage dragImage_);
MODULE_SCOPE int TreeDragImage_IsVisible(TreeDragImage dragImage_);
MODULE_SCOPE void TreeDragImage_Display(TreeDragImage dragImage_);
MODULE_SCOPE void TreeDragImage_Undisplay(TreeDragImage dragImage_);
MODULE_SCOPE void TreeDragImage_DrawXOR(TreeDragImage dragImage_, Drawable drawable, int x, int y);
MODULE_SCOPE void TreeDragImage_Draw(TreeDragImage dragImage, TreeDrawable td);
MODULE_SCOPE int TreeDragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
/* tkTreeMarquee.c */
MODULE_SCOPE int TreeMarquee_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeMarquee_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeMarquee_IsXOR(TreeMarquee marquee_);
MODULE_SCOPE int TreeMarquee_IsVisible(TreeMarquee marquee_);
MODULE_SCOPE void TreeMarquee_DrawXOR(TreeMarquee marquee_, Drawable drawable, int x, int y);
MODULE_SCOPE void TreeMarquee_Display(TreeMarquee marquee_);
MODULE_SCOPE void TreeMarquee_Undisplay(TreeMarquee marquee_);
MODULE_SCOPE void TreeMarquee_Draw(TreeMarquee marquee_, TreeDrawable td);
MODULE_SCOPE int TreeMarqueeCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
/* tkTreeDisplay.c */
MODULE_SCOPE int Tree_CanvasWidth(TreeCtrl *tree);
MODULE_SCOPE int Tree_CanvasHeight(TreeCtrl *tree);
MODULE_SCOPE TreeItem Tree_ItemUnderPoint(TreeCtrl *tree, int *x, int *y, int *lock, int nearest);
MODULE_SCOPE void Tree_FreeItemRInfo(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE int Tree_ItemBbox(TreeCtrl *tree, TreeItem item, int lock, TreeRectangle *tr);
MODULE_SCOPE TreeItem Tree_ItemLARB(TreeCtrl *tree, TreeItem item, int vertical, int prev);
MODULE_SCOPE TreeItem Tree_ItemAbove(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemBelow(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemLeft(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemRight(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemFL(TreeCtrl *tree, TreeItem item, int vertical, int first);
MODULE_SCOPE TreeItem Tree_ItemTop(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemBottom(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemLeftMost(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE TreeItem Tree_ItemRightMost(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE int Tree_ItemToRNC(TreeCtrl *tree, TreeItem item, int *row, int *col);
MODULE_SCOPE TreeItem Tree_RNCToItem(TreeCtrl *tree, int row, int col);
MODULE_SCOPE int Tree_AreaBbox(TreeCtrl *tree, int area, TreeRectangle *tr);
enum {
TREE_AREA_NONE = 0,
TREE_AREA_HEADER,
TREE_AREA_CONTENT,
TREE_AREA_LEFT,
TREE_AREA_RIGHT,
TREE_AREA_HEADER_LEFT,
TREE_AREA_HEADER_NONE,
TREE_AREA_HEADER_RIGHT
};
MODULE_SCOPE int Tree_HitTest(TreeCtrl *tree, int x, int y);
MODULE_SCOPE void TreeDisplay_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeDisplay_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE void Tree_EventuallyRedraw(TreeCtrl *tree);
MODULE_SCOPE void Tree_GetScrollFractionsX(TreeCtrl *tree, double fractions[2]);
MODULE_SCOPE void Tree_GetScrollFractionsY(TreeCtrl *tree, double fractions[2]);
MODULE_SCOPE int Tree_FakeCanvasWidth(TreeCtrl *tree);
MODULE_SCOPE int Tree_FakeCanvasHeight(TreeCtrl *tree);
MODULE_SCOPE void Tree_SetScrollSmoothingX(TreeCtrl *tree, int smooth);
MODULE_SCOPE void Tree_SetScrollSmoothingY(TreeCtrl *tree, int smooth);
MODULE_SCOPE int Increment_FindX(TreeCtrl *tree, int offset);
MODULE_SCOPE int Increment_FindY(TreeCtrl *tree, int offset);
MODULE_SCOPE int Increment_ToOffsetX(TreeCtrl *tree, int index);
MODULE_SCOPE int Increment_ToOffsetY(TreeCtrl *tree, int index);
MODULE_SCOPE int TreeXviewCmd(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeYviewCmd(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE void Tree_SetOriginX(TreeCtrl *tree, int xOrigin);
MODULE_SCOPE void Tree_SetOriginY(TreeCtrl *tree, int yOrigin);
MODULE_SCOPE int Tree_GetOriginX(TreeCtrl *tree);
MODULE_SCOPE int Tree_GetOriginY(TreeCtrl *tree);
MODULE_SCOPE void Tree_RelayoutWindow(TreeCtrl *tree);
MODULE_SCOPE void Tree_FreeItemDInfo(TreeCtrl *tree, TreeItem item1, TreeItem item2);
MODULE_SCOPE void Tree_InvalidateItemDInfo(TreeCtrl *tree, TreeColumn column, TreeItem item1, TreeItem item2);
MODULE_SCOPE void TreeDisplay_ItemDeleted(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeDisplay_ColumnDeleted(TreeCtrl *tree, TreeColumn column);
MODULE_SCOPE void TreeDisplay_FreeColumnDInfo(TreeCtrl *tree, TreeColumn column);
MODULE_SCOPE int Tree_ShouldDisplayLockedColumns(TreeCtrl *tree);
MODULE_SCOPE void TreeDisplay_GetReadyForTrouble(TreeCtrl *tree, int *requestsPtr);
MODULE_SCOPE int TreeDisplay_WasThereTrouble(TreeCtrl *tree, int requests);
MODULE_SCOPE void Tree_InvalidateArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
MODULE_SCOPE void Tree_InvalidateItemArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
MODULE_SCOPE void Tree_InvalidateItemOnScrollX(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_InvalidateItemOnScrollY(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void Tree_InvalidateRegion(TreeCtrl *tree, TkRegion region);
MODULE_SCOPE void Tree_RedrawArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
MODULE_SCOPE void Tree_ExposeArea(TreeCtrl *tree, int x1, int y1, int x2, int y2);
MODULE_SCOPE void Tree_FocusChanged(TreeCtrl *tree, int gotFocus);
MODULE_SCOPE void Tree_Activate(TreeCtrl *tree, int isActive);
MODULE_SCOPE void Tree_ItemsInArea(TreeCtrl *tree, TreeItemList *items, int minX, int minY, int maxX, int maxY);
MODULE_SCOPE void TreeColumnProxy_Undisplay(TreeCtrl *tree);
MODULE_SCOPE void TreeColumnProxy_Display(TreeCtrl *tree);
MODULE_SCOPE void TreeRowProxy_Undisplay(TreeCtrl *tree);
MODULE_SCOPE void TreeRowProxy_Display(TreeCtrl *tree);
MODULE_SCOPE int Tree_DrawTiledImage(TreeCtrl *tree, TreeDrawable td,
Tk_Image image, TreeRectangle tr, int xOffset, int yOffset,
int tileX, int tileY);
MODULE_SCOPE int Tree_IsBgImageOpaque(TreeCtrl *tree);
MODULE_SCOPE int Tree_DrawBgImage(TreeCtrl *tree, TreeDrawable td,
TreeRectangle tr, int xOrigin, int yOrigin);
MODULE_SCOPE int TreeRect_Intersect(TreeRectangle *resultPtr,
CONST TreeRectangle *r1, CONST TreeRectangle *r2);
#define DINFO_OUT_OF_DATE 0x0001
#define DINFO_CHECK_COLUMN_WIDTH 0x0002
#define DINFO_DRAW_HEADER 0x0004
#define DINFO_SET_ORIGIN_X 0x0008
#define DINFO_UPDATE_SCROLLBAR_X 0x0010
#define DINFO_REDRAW_PENDING 0x00020
#define DINFO_INVALIDATE 0x0040
#define DINFO_DRAW_HIGHLIGHT 0x0080
#define DINFO_DRAW_BORDER 0x0100
#define DINFO_REDO_RANGES 0x0200
#define DINFO_SET_ORIGIN_Y 0x0400
#define DINFO_UPDATE_SCROLLBAR_Y 0x0800
#define DINFO_REDO_INCREMENTS 0x1000
#define DINFO_REDO_COLUMN_WIDTH 0x2000
#define DINFO_REDO_SELECTION 0x4000
#define DINFO_DRAW_WHITESPACE 0x8000
MODULE_SCOPE void Tree_DInfoChanged(TreeCtrl *tree, int flags);
MODULE_SCOPE void Tree_TheWorldHasChanged(Tcl_Interp *interp);
MODULE_SCOPE int Tree_DumpDInfo(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]);
/* tkTreeTheme.c */
MODULE_SCOPE int TreeTheme_InitInterp(Tcl_Interp *interp);
MODULE_SCOPE void TreeTheme_ThemeChanged(TreeCtrl *tree);
MODULE_SCOPE int TreeTheme_InitWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeTheme_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeTheme_DrawHeaderItem(TreeCtrl *tree, TreeDrawable td,
int state, int arrow, int visIndex, int x, int y, int width, int height);
MODULE_SCOPE int TreeTheme_GetHeaderFixedHeight(TreeCtrl *tree, int *heightPtr);
MODULE_SCOPE int TreeTheme_GetHeaderContentMargins(TreeCtrl *tree, int state, int arrow, int bounds[4]);
MODULE_SCOPE int TreeTheme_DrawHeaderArrow(TreeCtrl *tree, TreeDrawable td, int state, int up, int x, int y, int width, int height);
MODULE_SCOPE int TreeTheme_DrawButton(TreeCtrl *tree, TreeDrawable td, TreeItem item, int state, int x, int y, int width, int height);
MODULE_SCOPE int TreeTheme_GetButtonSize(TreeCtrl *tree, Drawable drawable, int open, int *widthPtr, int *heightPtr);
MODULE_SCOPE int TreeTheme_GetArrowSize(TreeCtrl *tree, Drawable drawable, int up, int *widthPtr, int *heightPtr);
MODULE_SCOPE int TreeTheme_SetBorders(TreeCtrl *tree);
MODULE_SCOPE int TreeTheme_DrawBorders(TreeCtrl *tree, Drawable drawable);
MODULE_SCOPE int TreeTheme_GetHeaderTextColor(TreeCtrl *tree, int state, XColor **xColorPtr);
MODULE_SCOPE int TreeTheme_AnimateButtonStart(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE int TreeTheme_ItemDeleted(TreeCtrl *tree, TreeItem item);
MODULE_SCOPE void TreeTheme_Relayout(TreeCtrl *tree);
MODULE_SCOPE int TreeTheme_IsDesktopComposited(TreeCtrl *tree);
MODULE_SCOPE int TreeThemeCmd(TreeCtrl *tree, int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE void TreeTheme_SetOptionDefault(Tk_OptionSpec *specPtr);
/* tkTreeUtils.c */
#ifdef TREECTRL_DEBUG
#define WIPE(p,s) memset((char *) p, 0xAA, s)
#else
#define WIPE(p,s)
#endif
#define CWIPE(p,t,c) WIPE(p, sizeof(t) * (c))
#define WIPEFREE(p,s) { WIPE(p, s); ckfree((char *) p); }
#define WFREE(p,t) WIPEFREE(p, sizeof(t))
#define WCFREE(p,t,c) WIPEFREE(p, sizeof(t) * (c))
MODULE_SCOPE int Tree_Ellipsis(Tk_Font tkfont, char *string, int numBytes, int *maxPixels, char *ellipsis, int force);
MODULE_SCOPE void Tree_HDotLine(TreeCtrl *tree, Drawable drawable, int x1, int y1, int x2);
MODULE_SCOPE void Tree_VDotLine(TreeCtrl *tree, Drawable drawable, int x1, int y1, int y2);
MODULE_SCOPE void Tree_DrawActiveOutline(TreeCtrl *tree, Drawable drawable, int x, int y, int width, int height, int open);
typedef struct DotState
{
void *stuff[10];
} DotState;
MODULE_SCOPE void TreeDotRect_Setup(TreeCtrl *tree, Drawable drawable, DotState *dotState);
MODULE_SCOPE void TreeDotRect_Draw(DotState *dotState, int x, int y, int width, int height);
MODULE_SCOPE void TreeDotRect_Restore(DotState *dotState);
typedef struct TextLayout_ *TextLayout;
MODULE_SCOPE TextLayout TextLayout_Compute(Tk_Font tkfont, CONST char *string,
int numChars, int wrapLength, Tk_Justify justify, int maxLines,
int lMargin1, int lMargin2, int flags);
MODULE_SCOPE void TextLayout_Free(TextLayout textLayout);
MODULE_SCOPE void TextLayout_Size(TextLayout textLayout, int *widthPtr, int *heightPtr);
MODULE_SCOPE int TextLayout_TotalWidth(TextLayout textLayout);
MODULE_SCOPE void TextLayout_Draw(Display *display, Drawable drawable, GC gc,
TextLayout layout, int x, int y, int firstChar, int lastChar,
int underline);
MODULE_SCOPE void Tree_RedrawImage(Tk_Image image, int imageX, int imageY,
int width, int height, TreeDrawable td, int drawableX, int drawableY);
MODULE_SCOPE void Tree_DrawBitmapWithGC(TreeCtrl *tree, Pixmap bitmap, Drawable drawable,
GC gc, int src_x, int src_y, int width, int height, int dest_x, int dest_y);
MODULE_SCOPE void Tree_DrawBitmap(TreeCtrl *tree, Pixmap bitmap, Drawable drawable,
XColor *fg, XColor *bg,
int src_x, int src_y, int width, int height, int dest_x, int dest_y);
MODULE_SCOPE TkRegion Tree_GetRegion(TreeCtrl *tree);
MODULE_SCOPE void Tree_FreeRegion(TreeCtrl *tree, TkRegion region);
MODULE_SCOPE void Tree_FillRegion(Display *display, Drawable drawable, GC gc, TkRegion rgn);
MODULE_SCOPE void Tree_OffsetRegion(TkRegion region, int xOffset, int yOffset);
MODULE_SCOPE void Tree_SetEmptyRegion(TkRegion region);
MODULE_SCOPE TkRegion Tree_GetRectRegion(TreeCtrl *tree, const TreeRectangle *rect);
MODULE_SCOPE void Tree_SetRectRegion(TkRegion region, const TreeRectangle *rect);
MODULE_SCOPE void Tree_GetRegionBounds(TkRegion region, TreeRectangle *rect);
MODULE_SCOPE void Tree_UnionRegion(TkRegion rgnA, TkRegion rgnB, TkRegion rgnOut);
MODULE_SCOPE int Tree_ScrollWindow(TreeCtrl *tree, GC gc, int x, int y,
int width, int height, int dx, int dy, TkRegion damageRgn);
MODULE_SCOPE void Tree_UnsetClipMask(TreeCtrl *tree, Drawable drawable, GC gc);
MODULE_SCOPE void Tree_XImage2Photo(Tcl_Interp *interp, Tk_PhotoHandle photoH,
XImage *ximage, unsigned long trans, int alpha);
#define PAD_TOP_LEFT 0
#define PAD_BOTTOM_RIGHT 1
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_pad;
MODULE_SCOPE int TreeCtrl_GetPadAmountFromObj(Tcl_Interp *interp,
Tk_Window tkwin, Tcl_Obj *padObj,
int *topLeftPtr, int *bottomRightPtr);
MODULE_SCOPE Tcl_Obj *TreeCtrl_NewPadAmountObj(int *padAmounts);
/*****/
#define ObjectIsEmpty TreeCtrl_ObjectIsEmpty
MODULE_SCOPE int ObjectIsEmpty(Tcl_Obj *obj);
#define pstBitmap TreeCtrl_pstBitmap
#define pstBoolean TreeCtrl_pstBoolean
#define pstBorder TreeCtrl_pstBorder
#define pstColor TreeCtrl_pstColor
#define pstFlags TreeCtrl_pstFlags
#define pstFont TreeCtrl_pstFont
#define pstImage TreeCtrl_pstImage
#define pstRelief TreeCtrl_pstRelief
MODULE_SCOPE PerStateType pstBitmap;
MODULE_SCOPE PerStateType pstBoolean;
MODULE_SCOPE PerStateType pstBorder;
MODULE_SCOPE PerStateType pstColor;
MODULE_SCOPE PerStateType pstFlags;
MODULE_SCOPE PerStateType pstFont;
MODULE_SCOPE PerStateType pstImage;
MODULE_SCOPE PerStateType pstRelief;
#define MATCH_NONE 0
#define MATCH_ANY 1
#define MATCH_PARTIAL 2
#define MATCH_EXACT 3
MODULE_SCOPE void PerStateInfo_Free(TreeCtrl *tree, PerStateType *typePtr,
PerStateInfo *pInfo);
typedef int (*StateFromObjProc)(TreeCtrl *tree, int domain, Tcl_Obj *obj, int *stateOff, int *stateOn);
MODULE_SCOPE int PerStateInfo_FromObj(TreeCtrl *tree, int domain, StateFromObjProc proc,
PerStateType *typePtr, PerStateInfo *pInfo);
MODULE_SCOPE PerStateData *PerStateInfo_ForState(TreeCtrl *tree,
PerStateType *typePtr, PerStateInfo *pInfo, int state, int *match);
MODULE_SCOPE Tcl_Obj *PerStateInfo_ObjForState(TreeCtrl *tree, PerStateType *typePtr,
PerStateInfo *pInfo, int state, int *match);
MODULE_SCOPE int PerStateInfo_Undefine(TreeCtrl *tree, PerStateType *typePtr,
PerStateInfo *pInfo, int domain, int state);
MODULE_SCOPE GC Tree_GetGC(TreeCtrl *tree, unsigned long mask, XGCValues *gcValues);
MODULE_SCOPE void Tree_FreeAllGC(TreeCtrl *tree);
MODULE_SCOPE Pixmap PerStateBitmap_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE void PerStateBitmap_MaxSize(TreeCtrl *tree, PerStateInfo *pInfo,
int *widthPtr, int *heightPtr);
MODULE_SCOPE int PerStateBoolean_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE Tk_3DBorder PerStateBorder_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE TreeColor *PerStateColor_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE int PerStateFlags_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE Tk_Font PerStateFont_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE Tk_Image PerStateImage_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE void PerStateImage_MaxSize(TreeCtrl *tree, PerStateInfo *pInfo,
int *widthPtr, int *heightPtr);
MODULE_SCOPE int PerStateRelief_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
MODULE_SCOPE void PSTSave(PerStateInfo *pInfo, PerStateInfo *pSave);
MODULE_SCOPE void PSTRestore(TreeCtrl *tree, PerStateType *typePtr,
PerStateInfo *pInfo, PerStateInfo *pSave);
typedef struct CharFlag {
char flagChar;
int flagBit;
} CharFlag;
MODULE_SCOPE int Tree_GetFlagsFromString(TreeCtrl *tree, const char *string,
int length, const char *typeStr, const CharFlag flags[], int *flagsPtr);
MODULE_SCOPE int Tree_GetFlagsFromObj(TreeCtrl *tree, Tcl_Obj *obj,
const char *typeStr, const CharFlag flags[], int *flagsPtr);
#ifdef ALLOC_HAX
MODULE_SCOPE ClientData TreeAlloc_Init(void);
MODULE_SCOPE void TreeAlloc_Finalize(ClientData data);
MODULE_SCOPE char *TreeAlloc_Alloc(ClientData data, Tk_Uid id, int size);
MODULE_SCOPE char *TreeAlloc_CAlloc(ClientData data, Tk_Uid id, int size, int count, int roundUp);
MODULE_SCOPE char *TreeAlloc_Realloc(ClientData data, Tk_Uid id, char *ptr, int size1, int size2);
MODULE_SCOPE void TreeAlloc_Free(ClientData data, Tk_Uid id, char *ptr, int size);
MODULE_SCOPE void TreeAlloc_CFree(ClientData data, Tk_Uid id, char *ptr, int size, int count, int roundUp);
MODULE_SCOPE void TreeAlloc_Stats(Tcl_Interp *interp, ClientData data);
#endif
/*****/
MODULE_SCOPE void TreePtrList_Init(TreeCtrl *tree, TreePtrList *tilPtr, int count);
MODULE_SCOPE void TreePtrList_Grow(TreePtrList *tilPtr, int count);
MODULE_SCOPE ClientData *TreePtrList_Append(TreePtrList *tilPtr, ClientData ptr);
MODULE_SCOPE ClientData *TreePtrList_Concat(TreePtrList *tilPtr, TreePtrList *til2Ptr);
MODULE_SCOPE void TreePtrList_Free(TreePtrList *tilPtr);
#define TreeItemList_Init TreePtrList_Init
#define TreeItemList_Append TreePtrList_Append
#define TreeItemList_Concat TreePtrList_Concat
#define TreeItemList_Free TreePtrList_Free
#define TreeItemList_Items(L) ((TreeItem *) (L)->pointers)
#define TreeItemList_Nth(L,n) ((TreeItem) (L)->pointers[n])
#define TreeItemList_Count(L) ((L)->count)
MODULE_SCOPE void TreeItemList_Sort(TreeItemList *items);
#define TreeColumnList_Init TreePtrList_Init
#define TreeColumnList_Append TreePtrList_Append
#define TreeColumnList_Concat TreePtrList_Concat
#define TreeColumnList_Free TreePtrList_Free
#define TreeColumnList_Nth(L,n) ((TreeColumn) (L)->pointers[n])
#define TreeColumnList_Count(L) ((L)->count)
/*****/
/*
* This structure holds a list of tags.
*/
struct TagInfo {
int numTags; /* Number of tag slots actually used
* at tagPtr. */
int tagSpace; /* Total amount of tag space available
* at tagPtr. */
#define TREE_TAG_SPACE 3
Tk_Uid tagPtr[TREE_TAG_SPACE]; /* Array of tags. The actual size will
* be tagSpace. THIS FIELD MUST BE THE
* LAST IN THE STRUCTURE. */
};
MODULE_SCOPE TagInfo *TagInfo_Add(TreeCtrl *tree, TagInfo *tagInfo, Tk_Uid tags[], int numTags);
MODULE_SCOPE TagInfo *TagInfo_Remove(TreeCtrl *tree, TagInfo *tagInfo, Tk_Uid tags[], int numTags);
MODULE_SCOPE Tk_Uid *TagInfo_Names(TreeCtrl *tree, TagInfo *tagInfo, Tk_Uid *tags, int *numTagsPtr, int *tagSpacePtr);
MODULE_SCOPE TagInfo *TagInfo_Copy(TreeCtrl *tree, TagInfo *tagInfo);
MODULE_SCOPE void TagInfo_Free(TreeCtrl *tree, TagInfo *tagInfo);
MODULE_SCOPE int TagInfo_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr, TagInfo **tagInfoPtr);
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_tagInfo;
/*
* This struct holds information about a tag expression.
*/
typedef struct TagExpr {
TreeCtrl *tree;
Tk_Uid *uids; /* expresion compiled to an array of uids */
Tk_Uid staticUids[15];
int allocated; /* available space for array of uids */
int length; /* number of uids */
int index; /* current position in expression evaluation */
int simple; /* TRUE if expr is single tag */
Tk_Uid uid; /* single tag if 'simple' is TRUE */
char *string; /* tag expression string */
int stringIndex; /* current position in string scan */
Tcl_Size stringLength; /* length of tag expression string */
char *rewritebuffer; /* tag string (after removing escapes) */
char staticRWB[100];
} TagExpr;
MODULE_SCOPE int TagExpr_Init(TreeCtrl *tree, Tcl_Obj *exprObj, TagExpr *expr);
MODULE_SCOPE int TagExpr_Scan(TagExpr *expr);
MODULE_SCOPE int TagExpr_Eval(TagExpr *expr, TagInfo *tags);
MODULE_SCOPE void TagExpr_Free(TagExpr *expr);
MODULE_SCOPE Tk_OptionSpec *Tree_FindOptionSpec(Tk_OptionSpec *optionTable, CONST char *optionName);
MODULE_SCOPE Tk_ObjCustomOption *PerStateCO_Alloc(CONST char *optionName,
PerStateType *typePtr, StateFromObjProc proc);
MODULE_SCOPE int PerStateCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
PerStateType *typePtr, StateFromObjProc proc);
/*****/
typedef struct DynamicOptionSpec DynamicOptionSpec;
typedef struct DynamicOption DynamicOption;
struct DynamicOption
{
int id; /* Unique id. */
DynamicOption *next; /* Linked list. */
char data[1]; /* Actual size will be > 1 */
};
typedef void (DynamicOptionInitProc)(void *data);
MODULE_SCOPE DynamicOption *DynamicOption_AllocIfNeeded(TreeCtrl *tree,
DynamicOption **firstPtr, int id, int size, DynamicOptionInitProc *init);
MODULE_SCOPE void *DynamicOption_FindData(DynamicOption *first, int id);
MODULE_SCOPE void DynamicOption_Free(TreeCtrl *tree, DynamicOption *first,
Tk_OptionSpec *optionTable);
MODULE_SCOPE void DynamicOption_Free1(TreeCtrl *tree, DynamicOption **firstPtr,
int id, int size);
MODULE_SCOPE int DynamicCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
int id, int size, int objOffset, int internalOffset,
Tk_ObjCustomOption *custom, DynamicOptionInitProc *init);
/*****/
MODULE_SCOPE int Tree_InitOptions(TreeCtrl *tree, int domain, void *recordPtr,
Tk_OptionTable optionTable);
MODULE_SCOPE int Tree_SetOptions(TreeCtrl *tree, int domain, void *recordPtr,
Tk_OptionTable optionTable, int objc, Tcl_Obj *CONST objv[],
Tk_SavedOptions *savePtr, int *maskPtr);
MODULE_SCOPE int BooleanFlagCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
int theFlag);
MODULE_SCOPE int ItemButtonCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
int flag1, int flag2);
MODULE_SCOPE void TreeStyleCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName,
int domain);
MODULE_SCOPE int Tree_GetIntForIndex(TreeCtrl *tree, Tcl_Obj *objPtr, Tcl_Size *indexPtr,
int *endRelativePtr);
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_pixels;
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_string;
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_style;
MODULE_SCOPE Tk_ObjCustomOption TreeCtrlCO_treecolor;
/*****/
#define STATIC_SIZE 20
#define STATIC_ALLOC(P,T,C) \
do { \
if (C > STATIC_SIZE) \
P = (T *) ckalloc(sizeof(T) * (C)); \
} while (0)
#define STATIC_FREE(P,T,C) \
do { \
CWIPE(P, T, C); \
if (C > STATIC_SIZE) \
ckfree((char *) P); \
} while (0)
#define STATIC_FREE2(P,P2) \
do { \
if (P != P2) \
ckfree((char *) P); \
} while (0)
MODULE_SCOPE TreeColor *Tree_AllocColorFromObj(TreeCtrl *tree, Tcl_Obj *obj);
MODULE_SCOPE void Tree_FreeColor(TreeCtrl *tree, TreeColor *tc);
MODULE_SCOPE Tcl_Obj *TreeColor_ToObj(TreeCtrl *tree, TreeColor *tc);
MODULE_SCOPE int TreeColor_IsOpaque(TreeCtrl *tree, TreeColor *tc);
#define pstGradient TreeCtrl_pstGradient
MODULE_SCOPE PerStateType pstGradient;
MODULE_SCOPE TreeGradient PerStateGradient_ForState(TreeCtrl *tree, PerStateInfo *pInfo,
int state, int *match);
/*****/
typedef struct GradientCoord GradientCoord;
/*
* Records for gradient fills.
* We need a separate GradientStopArray to simplify option parsing.
*/
typedef struct GradientStop {
double offset;
XColor *color;
double opacity;
} GradientStop;
typedef struct GradientStopArray {
int nstops;
GradientStop **stops; /* Array of pointers to GradientStop. */
} GradientStopArray;
typedef struct TreeGradient_
{
int refCount; /* Number of users of gradient. */
int deletePending; /* Non-zero if gradient should be deleted when
* last reference goes away. */
Tk_Uid name;
Tcl_Obj *stopsObj; /* -stops */
GradientStopArray *stopArrPtr; /* -stops */
int vertical; /* -orient */
int steps; /* -steps */
int nStepColors; /* length of stepColors */
XColor **stepColors; /* calculated from color1,color2,steps */
GradientCoord *left, *right, *top, *bottom;
Tcl_Obj *leftObj, *rightObj, *topObj, *bottomObj;
} TreeGradient_;
MODULE_SCOPE void TreeGradient_InitWidget(TreeCtrl *tree);
MODULE_SCOPE void TreeGradient_FreeWidget(TreeCtrl *tree);
MODULE_SCOPE int TreeGradientCmd(ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[]);
MODULE_SCOPE int TreeGradient_FromObj(TreeCtrl *tree, Tcl_Obj *objPtr,
TreeGradient *gradientPtr);
MODULE_SCOPE void TreeGradient_Release(TreeCtrl *tree, TreeGradient gradient);
MODULE_SCOPE int TreeGradient_IsOpaque(TreeCtrl *tree, TreeGradient gradient);
MODULE_SCOPE int Tree_HasNativeGradients(TreeCtrl *tree);
MODULE_SCOPE int TreeGradient_GetBrushBounds(TreeCtrl *tree,
TreeGradient gradient, const TreeRectangle *trPaint,
TreeRectangle *trBrush, TreeColumn column, TreeItem item);
MODULE_SCOPE void TreeGradient_IsRelativeToCanvas(TreeGradient gradient,
int *relX, int *relY);
MODULE_SCOPE void TreeColor_GetBrushBounds(TreeCtrl *tree, TreeColor *tc,
TreeRectangle trPaint, int xOrigin, int yOrigin, TreeColumn column,
TreeItem item, TreeRectangle *trBrush);
MODULE_SCOPE void TreeGradient_ColumnDeleted(TreeCtrl *tree,
TreeColumn column);
MODULE_SCOPE void TreeGradient_ItemDeleted(TreeCtrl *tree, TreeItem item);
/*****/
typedef enum {
TREE_CLIP_REGION,
TREE_CLIP_RECT,
TREE_CLIP_AREA
} TreeClipType;
typedef struct {
TreeClipType type;
TkRegion region;
TreeRectangle tr;
int area;
} TreeClip;
#define RECT_OPEN_W 0x01
#define RECT_OPEN_N 0x02
#define RECT_OPEN_E 0x04
#define RECT_OPEN_S 0x08
#define RECT_OPEN_WNES (RECT_OPEN_W|RECT_OPEN_N|RECT_OPEN_E|RECT_OPEN_S)
MODULE_SCOPE void Tree_FillRectangle(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, GC gc, TreeRectangle tr);
#if USE_ITEM_PIXMAP == 0
MODULE_SCOPE void Tree_DrawArc(TreeCtrl *tree, TreeDrawable td, TreeClip *clip,
GC gc, int x, int y, unsigned int width, unsigned int height,
int start, int extent);
MODULE_SCOPE void Tree_FillArc(TreeCtrl *tree, TreeDrawable td, TreeClip *clip,
GC gc, int x, int y, unsigned int width, unsigned int height,
int start, int extent);
MODULE_SCOPE void Tree_Draw3DRectangle(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, Tk_3DBorder border, int x, int y, int width, int height,
int borderWidth, int relief);
MODULE_SCOPE void Tree_Fill3DRectangle(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, Tk_3DBorder border, int x, int y, int width, int height,
int borderWidth, int relief);
#else /* USE_ITEM_PIXMAP == 1 */
#define Tree_DrawArc(tree,td,clip,gc,x,y,width,height,start,extent) \
XDrawArc(tree->display,td.drawable,gc,x,y,width,height,start,extent);
#define Tree_FillArc(tree,td,clip,gc,x,y,width,height,start,extent) \
XFillArc(tree->display,td.drawable,gc,x,y,width,height,start,extent);
#endif /* USE_ITEM_PIXMAP == 1 */
MODULE_SCOPE void Tree_DrawRoundRectX11(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, GC gc, TreeRectangle tr, int outlineWidth,
int rx, int ry, int open);
MODULE_SCOPE void Tree_FillRoundRectX11(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, GC gc, TreeRectangle tr, int rx, int ry, int open);
MODULE_SCOPE void TreeGradient_DrawRectX11(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush, TreeRectangle tr,
int outlineWidth, int open);
MODULE_SCOPE void TreeGradient_FillRectX11(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush,
TreeRectangle tr);
MODULE_SCOPE void TreeGradient_FillRoundRectX11(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush,
TreeRectangle tr, int rx, int ry, int open);
MODULE_SCOPE void Tree_DrawRoundRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, XColor *xcolor, TreeRectangle tr, int outlineWidth,
int rx, int ry, int open);
MODULE_SCOPE void Tree_FillRoundRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, XColor *xcolor, TreeRectangle tr, int rx, int ry, int open);
MODULE_SCOPE void TreeGradient_DrawRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush,
TreeRectangle tr, int outlineWidth, int open);
MODULE_SCOPE void TreeGradient_DrawRoundRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush,
TreeRectangle tr, int outlineWidth, int rx, int ry, int open);
MODULE_SCOPE void TreeGradient_FillRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush,
TreeRectangle tr);
MODULE_SCOPE void TreeGradient_FillRoundRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeGradient gradient, TreeRectangle trBrush,
TreeRectangle tr, int rx, int ry, int open);
MODULE_SCOPE void TreeColor_DrawRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeColor *tc, TreeRectangle trBrush, TreeRectangle tr,
int outlineWidth, int open);
MODULE_SCOPE void TreeColor_FillRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeColor *tc, TreeRectangle trBrush, TreeRectangle tr);
MODULE_SCOPE void TreeColor_DrawRoundRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeColor *tc, TreeRectangle trBrush, TreeRectangle tr,
int outlineWidth, int rx, int ry, int open);
MODULE_SCOPE void TreeColor_FillRoundRect(TreeCtrl *tree, TreeDrawable td,
TreeClip *clip, TreeColor *tc, TreeRectangle trBrush, TreeRectangle tr,
int rx, int ry, int open);
MODULE_SCOPE int TreeDraw_InitInterp(Tcl_Interp *interp);
|