summaryrefslogtreecommitdiffstats
path: root/generic/tkTreeCtrl.c
diff options
context:
space:
mode:
authortreectrl <treectrl>2006-11-06 23:49:33 (GMT)
committertreectrl <treectrl>2006-11-06 23:49:33 (GMT)
commitf72db05c3ec2d73d00aecc2806bfe54053a82f09 (patch)
tree441ab929d6497dced829aa9dc40d2b52e4ee28b5 /generic/tkTreeCtrl.c
parent5bebf5ee5a1cbcd4d90d4167eedda24cd41b7035 (diff)
downloadtktreectrl-f72db05c3ec2d73d00aecc2806bfe54053a82f09.zip
tktreectrl-f72db05c3ec2d73d00aecc2806bfe54053a82f09.tar.gz
tktreectrl-f72db05c3ec2d73d00aecc2806bfe54053a82f09.tar.bz2
Keep an array of column indexes for each item that has at least one span > 1. This is to avoid constantly recalculating the list of spans for displayed items. The list of spans is recalculated whenever [item span] changes a span, or whenever a column is created/deleted/moved or has its -lock or -visible option changed.
DumpDInfo now takes an index to indicate which kind of information to return.
Diffstat (limited to 'generic/tkTreeCtrl.c')
-rw-r--r--generic/tkTreeCtrl.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c
index fe41840..fe253b7 100644
--- a/generic/tkTreeCtrl.c
+++ b/generic/tkTreeCtrl.c
@@ -7,7 +7,7 @@
* Copyright (c) 2002-2003 Christian Krone
* Copyright (c) 2003-2005 ActiveState, a division of Sophos
*
- * RCS: @(#) $Id: tkTreeCtrl.c,v 1.80 2006/11/03 22:30:34 treectrl Exp $
+ * RCS: @(#) $Id: tkTreeCtrl.c,v 1.81 2006/11/06 23:49:33 treectrl Exp $
*/
#include "tkTreeCtrl.h"
@@ -389,6 +389,9 @@ TreeObjCmd(
tkwin);
Tcl_InitHashTable(&tree->itemHash, TCL_ONE_WORD_KEYS);
+#ifdef NEW_SPAN_CODE
+ Tcl_InitHashTable(&tree->itemSpansHash, TCL_ONE_WORD_KEYS);
+#endif
Tcl_InitHashTable(&tree->elementHash, TCL_STRING_KEYS);
Tcl_InitHashTable(&tree->styleHash, TCL_STRING_KEYS);
Tcl_InitHashTable(&tree->imageNameHash, TCL_STRING_KEYS);
@@ -1730,6 +1733,10 @@ TreeDestroy(
}
Tcl_DeleteHashTable(&tree->itemHash);
+#ifdef NEW_SPAN_CODE
+ Tcl_DeleteHashTable(&tree->itemSpansHash);
+#endif
+
count = TreeItemList_Count(&tree->preserveItemList);
for (i = 0; i < count; i++) {
item = TreeItemList_Nth(&tree->preserveItemList, i);
@@ -1990,6 +1997,12 @@ Tree_RemoveItem(
if (TreeItem_GetSelected(tree, item))
Tree_RemoveFromSelection(tree, item);
+#ifdef NEW_SPAN_CODE
+ hPtr = Tcl_FindHashEntry(&tree->itemSpansHash, (char *) item);
+ if (hPtr != NULL)
+ Tcl_DeleteHashEntry(hPtr);
+#endif
+
hPtr = Tcl_FindHashEntry(&tree->itemHash,
(char *) TreeItem_GetID(tree, item));
Tcl_DeleteHashEntry(hPtr);
@@ -3305,6 +3318,8 @@ TreeDebugCmd(
#else
FormatResult(interp, "TREECTRL_DEBUG is not defined");
#endif
+#else
+ FormatResult(interp, "ALLOC_HAX is not defined");
#endif
break;
}
@@ -3368,8 +3383,20 @@ TreeDebugCmd(
case COMMAND_DINFO:
{
- extern void DumpDInfo(TreeCtrl *tree);
- DumpDInfo(tree);
+ extern void DumpDInfo(TreeCtrl *tree, int index);
+ static CONST char *optionNames[] = {
+ "ditem", "onscreen", "range", (char *) NULL
+ };
+
+ if (objc != 4) {
+ Tcl_WrongNumArgs(interp, 3, objv, "option");
+ return TCL_ERROR;
+ }
+ if (Tcl_GetIndexFromObj(interp, objv[3], optionNames, "option", 0,
+ &index) != TCL_OK) {
+ return TCL_ERROR;
+ }
+ DumpDInfo(tree, index);
break;
}