diff options
-rw-r--r-- | generic/tkTreeColumn.c | 18 | ||||
-rw-r--r-- | generic/tkTreeCtrl.c | 8 | ||||
-rw-r--r-- | generic/tkTreeCtrl.h | 9 | ||||
-rw-r--r-- | generic/tkTreeDisplay.c | 103 | ||||
-rw-r--r-- | generic/tkTreeItem.c | 61 |
5 files changed, 36 insertions, 163 deletions
diff --git a/generic/tkTreeColumn.c b/generic/tkTreeColumn.c index fa6ce4b..8ca88b5 100644 --- a/generic/tkTreeColumn.c +++ b/generic/tkTreeColumn.c @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003 ActiveState Corporation * - * RCS: @(#) $Id: tkTreeColumn.c,v 1.57 2006/11/06 23:45:52 treectrl Exp $ + * RCS: @(#) $Id: tkTreeColumn.c,v 1.58 2006/11/07 00:01:03 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -1874,9 +1874,8 @@ Column_Move( hPtr = Tcl_NextHashEntry(&search); } -#ifdef NEW_SPAN_CODE + /* Indicate that all items must recalculate their list of spans. */ TreeItem_SpansInvalidate(tree, NULL); -#endif #ifdef DEPRECATED /* Re-order -defaultstyle */ @@ -2185,10 +2184,9 @@ Column_Config( } } -#ifdef NEW_SPAN_CODE + /* Indicate that all items must recalculate their list of spans. */ if (visible != column->visible || lock != column->lock) TreeItem_SpansInvalidate(tree, NULL); -#endif /* Wouldn't have to do this if Tk_InitOptions() would return * a mask of configured options like Tk_SetOptions() does. */ @@ -3934,9 +3932,9 @@ TreeColumnCmd( } #endif -#ifdef NEW_SPAN_CODE + /* Indicate that all items must recalculate their list of spans. */ TreeItem_SpansInvalidate(tree, NULL); -#endif + Tree_DInfoChanged(tree, DINFO_REDO_COLUMN_WIDTH); Tcl_SetObjResult(interp, TreeColumn_ToObj(tree, (TreeColumn) column)); break; @@ -4073,12 +4071,12 @@ TreeColumnCmd( Tree_DInfoChanged(tree, DINFO_REDO_COLUMN_WIDTH); doneDELETE: + /* Indicate that all items must recalculate their list of spans. */ + TreeItem_SpansInvalidate(tree, NULL); + TreeItemList_Free(&columns); if (objc == 5) TreeItemList_Free(&column2s); -#ifdef NEW_SPAN_CODE - TreeItem_SpansInvalidate(tree, NULL); -#endif break; } diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c index fe253b7..3b8016d 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.81 2006/11/06 23:49:33 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.c,v 1.82 2006/11/07 00:01:04 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -389,9 +389,7 @@ 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); @@ -1733,9 +1731,7 @@ 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++) { @@ -1997,11 +1993,9 @@ 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)); diff --git a/generic/tkTreeCtrl.h b/generic/tkTreeCtrl.h index aabceff..900ded7 100644 --- a/generic/tkTreeCtrl.h +++ b/generic/tkTreeCtrl.h @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003 ActiveState Corporation * - * RCS: @(#) $Id: tkTreeCtrl.h,v 1.66 2006/11/06 23:50:40 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.h,v 1.67 2006/11/07 00:01:04 treectrl Exp $ */ #include "tkPort.h" @@ -38,7 +38,6 @@ #define COLUMN_SPAN #define COLUMN_LOCK #define DEPRECATED -#define NEW_SPAN_CODE typedef struct TreeCtrl TreeCtrl; typedef struct TreeColumn_ *TreeColumn; @@ -296,9 +295,7 @@ struct TreeCtrl int nextItemId; int nextColumnId; Tcl_HashTable itemHash; /* TreeItem.id -> TreeItem */ -#ifdef NEW_SPAN_CODE Tcl_HashTable itemSpansHash; /* TreeItem -> nothing */ -#endif Tcl_HashTable elementHash; /* Element.name -> Element */ Tcl_HashTable styleHash; /* Style.name -> Style */ Tcl_HashTable imageNameHash; /* image name -> TreeImageRef */ @@ -512,12 +509,8 @@ extern int TreeItem_Height(TreeCtrl *tree, TreeItem self); extern int TreeItem_TotalHeight(TreeCtrl *tree, TreeItem self); extern void TreeItem_InvalidateHeight(TreeCtrl *tree, TreeItem self); #ifdef COLUMN_LOCK -#ifdef NEW_SPAN_CODE extern void TreeItem_SpansInvalidate(TreeCtrl *tree, TreeItem item_); extern int *TreeItem_GetSpans(TreeCtrl *tree, TreeItem item_); -#else -extern void TreeItem_GetSpans(TreeCtrl *tree, TreeItem item_, int *spans); -#endif extern void TreeItem_Draw(TreeCtrl *tree, TreeItem self, int lock, int x, int y, int width, int height, Drawable drawable, int minX, int maxX, int index); #else extern void TreeItem_Draw(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, Drawable drawable, int minX, int maxX, int index); diff --git a/generic/tkTreeDisplay.c b/generic/tkTreeDisplay.c index a2f6626..16e69b4 100644 --- a/generic/tkTreeDisplay.c +++ b/generic/tkTreeDisplay.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeDisplay.c,v 1.54 2006/11/06 23:49:01 treectrl Exp $ + * RCS: @(#) $Id: tkTreeDisplay.c,v 1.55 2006/11/07 00:01:04 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -78,9 +78,6 @@ struct DItem #ifdef COLUMN_SPAN int *spans; /* span[n] is the column index of the item * column displayed at the n'th tree column. */ -#ifndef NEW_SPAN_CODE - int spanAlloc; /* Size of spans[] */ -#endif #endif }; @@ -2358,11 +2355,6 @@ DItem_Alloc( { DInfo *dInfo = (DInfo *) tree->dInfo; DItem *dItem; -#ifdef COLUMN_SPAN -#ifndef NEW_SPAN_CODE - int *spans = NULL, spanAlloc = 0; -#endif -#endif dItem = (DItem *) TreeItem_GetDInfo(tree, rItem->item); if (dItem != NULL) @@ -2372,12 +2364,6 @@ DItem_Alloc( if (dInfo->dItemFree != NULL) { dItem = dInfo->dItemFree; dInfo->dItemFree = dItem->next; -#ifdef COLUMN_SPAN -#ifndef NEW_SPAN_CODE - spans = dItem->spans; - spanAlloc = dItem->spanAlloc; -#endif -#endif /* No free DItems, alloc a new one */ } else { dItem = (DItem *) ckalloc(sizeof(DItem)); @@ -2392,12 +2378,6 @@ DItem_Alloc( dItem->left.flags = DITEM_DIRTY | DITEM_ALL_DIRTY; dItem->right.flags = DITEM_DIRTY | DITEM_ALL_DIRTY; #endif -#ifdef COLUMN_SPAN -#ifndef NEW_SPAN_CODE - dItem->spans = spans; - dItem->spanAlloc = spanAlloc; -#endif -#endif TreeItem_SetDInfo(tree, rItem->item, (TreeItemDInfo) dItem); return dItem; } @@ -2641,31 +2621,6 @@ Tree_ItemsInArea( } } -#ifdef COLUMN_SPAN -static void -UpdateSpansForItem( - TreeCtrl *tree, /* Widget info. */ - DItem *dItem /* Display info for an item. */ - ) -{ -#ifdef NEW_SPAN_CODE - dItem->spans = TreeItem_GetSpans(tree, dItem->item); -#else - int *spans = dItem->spans; - - if (spans == NULL) { - spans = (int *) ckalloc(sizeof(int) * tree->columnCount); - dItem->spanAlloc = tree->columnCount; - } else if (dItem->spanAlloc < tree->columnCount) { - spans = (int *) ckrealloc((char *) spans, sizeof(int) * tree->columnCount); - dItem->spanAlloc = tree->columnCount; - } - TreeItem_GetSpans(tree, dItem->item, spans); - dItem->spans = spans; -#endif -} -#endif - #define DCOLUMN #ifdef DCOLUMN @@ -2731,21 +2686,17 @@ GetOnScreenColumnsForItemAux( continue; width = dInfo->columns[columnIndex].width; #ifdef COLUMN_SPAN -#ifdef NEW_SPAN_CODE if (dItem->spans != NULL) { -#endif - if (dItem->spans[columnIndex] != columnIndex) - goto next; - /* Start of a span */ - for (i = columnIndex + 1; columnIndex < tree->columnCount && - dItem->spans[i] == columnIndex; i++) { - width += dInfo->columns[i].width; - } - columnIndex = i - 1; -#ifdef NEW_SPAN_CODE + if (dItem->spans[columnIndex] != columnIndex) + goto next; + /* Start of a span */ + for (i = columnIndex + 1; columnIndex < tree->columnCount && + dItem->spans[i] == columnIndex; i++) { + width += dInfo->columns[i].width; + } + columnIndex = i - 1; } #endif -#endif if (x < maxX && x + width > minX) { TreeColumnList_Append(columns, column); } @@ -3040,7 +2991,7 @@ UpdateDInfoForRange( dItem->index = index; #ifdef COLUMN_SPAN - UpdateSpansForItem(tree, dItem); + dItem->spans = TreeItem_GetSpans(tree, dItem->item); #endif /* Keep track of the maximum item size */ @@ -3153,7 +3104,7 @@ UpdateDInfoForRange( dItem->index = index; #ifdef COLUMN_SPAN - UpdateSpansForItem(tree, dItem); + dItem->spans = TreeItem_GetSpans(tree, dItem->item); #endif /* Keep track of the maximum item size */ @@ -3374,7 +3325,7 @@ done: dItem->index = index; #ifdef COLUMN_SPAN - UpdateSpansForItem(tree, dItem); + dItem->spans = TreeItem_GetSpans(tree, dItem->item); #endif /* Keep track of the maximum item size */ @@ -6593,22 +6544,18 @@ Tree_InvalidateItemDInfo( } #ifdef COLUMN_SPAN -#ifdef NEW_SPAN_CODE if (dItem->spans == NULL) { width = dInfo->columns[columnIndex].width; } else { -#endif - width = 0; - i = dItem->spans[columnIndex]; - while (dItem->spans[i] == dItem->spans[columnIndex]) { - width += dInfo->columns[i].width; - if (++i == tree->columnCount) - break; - } -#ifdef NEW_SPAN_CODE + width = 0; + i = dItem->spans[columnIndex]; + while (dItem->spans[i] == dItem->spans[columnIndex]) { + width += dInfo->columns[i].width; + if (++i == tree->columnCount) + break; + } } #endif -#endif #ifdef COLUMN_LOCK switch (TreeColumn_Lock(column)) { @@ -7153,23 +7100,11 @@ TreeDInfo_Free( #endif while (dInfo->dItem != NULL) { DItem *next = dInfo->dItem->next; -#ifdef COLUMN_SPAN -#ifndef NEW_SPAN_CODE - if (dInfo->dItem->spans != NULL) - ckfree((char *) dInfo->dItem->spans); -#endif -#endif WFREE(dInfo->dItem, DItem); dInfo->dItem = next; } while (dInfo->dItemFree != NULL) { DItem *next = dInfo->dItemFree->next; -#ifdef COLUMN_SPAN -#ifndef NEW_SPAN_CODE - if (dInfo->dItemFree->spans != NULL) - ckfree((char *) dInfo->dItemFree->spans); -#endif -#endif WFREE(dInfo->dItemFree, DItem); dInfo->dItemFree = next; } diff --git a/generic/tkTreeItem.c b/generic/tkTreeItem.c index 54ae057..b597e5f 100644 --- a/generic/tkTreeItem.c +++ b/generic/tkTreeItem.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeItem.c,v 1.79 2006/11/06 23:45:32 treectrl Exp $ + * RCS: @(#) $Id: tkTreeItem.c,v 1.80 2006/11/07 00:01:04 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -49,20 +49,18 @@ struct Item { TreeItemDInfo dInfo; /* display info, or NULL */ TreeItemRInfo rInfo; /* range info, or NULL */ Column *columns; -#ifdef NEW_SPAN_CODE int *spans; /* 1 per tree-column. spans[N] is the column index of - * the item-column displayed in column N. If all this - * item's columns have a span of 1, this field is NULL. */ - int spanAlloc; -#endif + * the item-column displayed in column N. If this + * item's columns all have a span of 1, this field + * is NULL (unless it was previously allocated + * because some spans were > 1). */ + int spanAlloc; /* Size of spans[]. */ #define ITEM_FLAG_DELETED 0x0001 /* Item is being deleted */ -#ifdef NEW_SPAN_CODE #define ITEM_FLAG_SPANS_SIMPLE 0x0002 /* All spans are 1 */ #define ITEM_FLAG_SPANS_VALID 0x0004 /* Some spans are > 1, but we don't * need to redo them. Also indicates * we have an entry in * TreeCtrl.itemSpansHash. */ -#endif /* NEW_SPAN_CODE */ int flags; TagInfo *tagInfo; /* Tags. May be NULL. */ }; @@ -607,9 +605,8 @@ Item_Alloc( if (tree->gotFocus) item->state |= STATE_FOCUS; item->indexVis = -1; -#ifdef NEW_SPAN_CODE + /* In the typical case all spans are 1. */ item->flags |= ITEM_FLAG_SPANS_SIMPLE; -#endif Tree_AddItem(tree, (TreeItem) item); return item; } @@ -3212,10 +3209,8 @@ TreeItem_FreeResources( Tree_FreeItemDInfo(tree, item_, NULL); if (self->rInfo != NULL) Tree_FreeItemRInfo(tree, item_); -#ifdef NEW_SPAN_CODE if (self->spans != NULL) ckfree((char *) self->spans); -#endif Tk_FreeConfigOptions((char *) self, tree->itemOptionTable, tree->tkwin); /* Add the item record to the "preserved" list. It will be freed later. */ @@ -3647,8 +3642,6 @@ ItemDrawBackground( #ifdef COLUMN_SPAN -#ifdef NEW_SPAN_CODE - /* *---------------------------------------------------------------------- * @@ -3821,56 +3814,18 @@ TreeItem_SpansRedoIfNeeded( } } -#endif /* NEW_SPAN_CODE */ - int * TreeItem_GetSpans( TreeCtrl *tree, /* Widget info. */ TreeItem item_ /* Item token. */ ) { -#ifdef NEW_SPAN_CODE - Item *self = (Item *) item_; TreeItem_SpansRedoIfNeeded(tree, item_); if (self->flags & ITEM_FLAG_SPANS_SIMPLE) return NULL; return self->spans; - -#else /* NEW_SPAN_CODE */ - - Item *self = (Item *) item_; - TreeColumn treeColumn = tree->columns; - Column *column = self->columns; - int columnIndex = 0, itemColumnIndex = 0, span = 1; -#ifdef COLUMN_LOCK - int lock = TreeColumn_Lock(treeColumn); -#endif - - while (treeColumn != NULL) { -#ifdef COLUMN_LOCK - /* End current span if column lock changes. */ - if (TreeColumn_Lock(treeColumn) != lock) { - lock = TreeColumn_Lock(treeColumn); - span = 1; - } -#endif - if (--span == 0) { - if (TreeColumn_Visible(treeColumn)) - span = column ? column->span : 1; - else - span = 1; - itemColumnIndex = columnIndex; - } - spans[columnIndex] = itemColumnIndex; - ++columnIndex; - treeColumn = TreeColumn_Next(treeColumn); - if (column != NULL) - column = column->next; - } - -#endif /* NEW_SPAN_CODE */ } /* @@ -8235,12 +8190,10 @@ TreeItemCmd( column = Item_CreateColumn(tree, item, TreeColumn_Index(treeColumn), NULL); if (column->span != cs[i].span) { -#ifdef NEW_SPAN_CODE if (cs[i].span > 1) { item->flags &= ~ITEM_FLAG_SPANS_SIMPLE; } TreeItem_SpansInvalidate(tree, _item); -#endif column->span = cs[i].span; TreeItemColumn_InvalidateSize(tree, (TreeItemColumn) column); |