diff options
-rw-r--r-- | generic/tkTreeColumn.c | 320 | ||||
-rw-r--r-- | generic/tkTreeCtrl.c | 25 | ||||
-rw-r--r-- | generic/tkTreeCtrl.h | 39 | ||||
-rw-r--r-- | generic/tkTreeDisplay.c | 241 | ||||
-rw-r--r-- | generic/tkTreeDrag.c | 6 | ||||
-rw-r--r-- | generic/tkTreeItem.c | 98 |
6 files changed, 75 insertions, 654 deletions
diff --git a/generic/tkTreeColumn.c b/generic/tkTreeColumn.c index 8ca88b5..bec852d 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.58 2006/11/07 00:01:03 treectrl Exp $ + * RCS: @(#) $Id: tkTreeColumn.c,v 1.59 2006/11/07 01:24:46 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -87,9 +87,7 @@ struct Column #define COLUMN_STATE_PRESSED 2 int state; /* -state */ -#ifdef COLUMN_LOCK int lock; /* -lock */ -#endif TreeCtrl *tree; Tk_OptionTable optionTable; @@ -263,9 +261,7 @@ Tk_ObjCustomOption uniformGroupCO = static char *arrowST[] = { "none", "up", "down", (char *) NULL }; static char *arrowSideST[] = { "left", "right", (char *) NULL }; static char *stateST[] = { "normal", "active", "pressed", (char *) NULL }; -#ifdef COLUMN_LOCK static CONST char *lockST[] = { "left", "none", "right", (char *) NULL }; -#endif #define COLU_CONF_IMAGE 0x0001 #define COLU_CONF_NWIDTH 0x0002 /* neededWidth */ @@ -349,10 +345,8 @@ static Tk_OptionSpec columnSpecs[] = { {TK_OPTION_JUSTIFY, "-justify", (char *) NULL, (char *) NULL, "left", -1, Tk_Offset(Column, justify), 0, (ClientData) NULL, COLU_CONF_DISPLAY | COLU_CONF_JUSTIFY}, -#ifdef COLUMN_LOCK {TK_OPTION_STRING_TABLE, "-lock", (char *) NULL, (char *) NULL, "none", -1, Tk_Offset(Column, lock), 0, (ClientData) lockST, 0}, -#endif {TK_OPTION_PIXELS, "-maxwidth", (char *) NULL, (char *) NULL, (char *) NULL, Tk_Offset(Column, maxWidthObj), Tk_Offset(Column, maxWidth), @@ -647,9 +641,7 @@ ImageChangedProc( column->neededHeight = -1; tree->headerHeight = -1; tree->widthOfColumns = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_DInfoChanged(tree, DINFO_CHECK_COLUMN_WIDTH | DINFO_DRAW_HEADER); } @@ -823,9 +815,7 @@ typedef struct Qualifiers { int states[3]; /* States that must be on or off. */ TagExpr expr; /* Tag expression. */ int exprOK; /* TRUE if expr is valid. */ -#ifdef COLUMN_LOCK int lock; /* COLUMN_LOCK_xxx or -1 */ -#endif int ntail; /* 1 for !tail, * 0 for unspecified. */ } Qualifiers; @@ -856,9 +846,7 @@ Qualifiers_Init( q->visible = -1; q->states[0] = q->states[1] = q->states[2] = 0; q->exprOK = FALSE; -#ifdef COLUMN_LOCK q->lock = -1; -#endif q->ntail = 0; } @@ -893,23 +881,15 @@ Qualifiers_Scan( int qual, j = startIndex; static CONST char *qualifiers[] = { -#ifdef COLUMN_LOCK - "lock", -#endif - "state", "tag", "visible", "!tail", "!visible", NULL + "lock", "state", "tag", "visible", "!tail", "!visible", NULL }; enum qualEnum { -#ifdef COLUMN_LOCK - QUAL_LOCK, -#endif - QUAL_STATE, QUAL_TAG, QUAL_VISIBLE, QUAL_NOT_TAIL, QUAL_NOT_VISIBLE + QUAL_LOCK, QUAL_STATE, QUAL_TAG, QUAL_VISIBLE, QUAL_NOT_TAIL, + QUAL_NOT_VISIBLE }; /* Number of arguments used by qualifiers[]. */ static int qualArgs[] = { -#ifdef COLUMN_LOCK - 2, -#endif - 2, 2, 1, 1, 1 + 2, 2, 2, 1, 1, 1 }; *argsUsed = 0; @@ -924,7 +904,6 @@ Qualifiers_Scan( goto errorExit; } switch ((enum qualEnum) qual) { -#ifdef COLUMN_LOCK case QUAL_LOCK: { if (Tcl_GetIndexFromObj(interp, objv[j + 1], lockST, @@ -932,7 +911,6 @@ Qualifiers_Scan( goto errorExit; break; } -#endif case QUAL_STATE: { int i, listObjc; @@ -1023,10 +1001,8 @@ Qualifies( return 0; if (q->exprOK && !TagExpr_Eval(&q->expr, column->tagInfo)) return 0; -#ifdef COLUMN_LOCK if ((q->lock != -1) && (column->lock != q->lock)) return 0; -#endif return 1; } @@ -1854,17 +1830,10 @@ Column_Move( TreeItem item; int index, numStyles; -#ifdef COLUMN_LOCK if (move == before) goto renumber; if (move->index == before->index - 1) goto renumber; -#else - if (move == before) - return; - if (move->index == before->index - 1) - return; -#endif /* Move the column in every item */ hPtr = Tcl_FirstHashEntry(&tree->itemHash, &search); @@ -1972,24 +1941,21 @@ Column_Move( } /* Renumber columns */ -#ifdef COLUMN_LOCK renumber: tree->columnLockLeft = NULL; tree->columnLockNone = NULL; tree->columnLockRight = NULL; -#endif + index = 0; column = (Column *) tree->columns; while (column != NULL) { column->index = index++; -#ifdef COLUMN_LOCK if (column->lock == COLUMN_LOCK_LEFT && tree->columnLockLeft == NULL) tree->columnLockLeft = (TreeColumn) column; if (column->lock == COLUMN_LOCK_NONE && tree->columnLockNone == NULL) tree->columnLockNone = (TreeColumn) column; if (column->lock == COLUMN_LOCK_RIGHT && tree->columnLockRight == NULL) tree->columnLockRight = (TreeColumn) column; -#endif column = column->next; } @@ -1997,9 +1963,7 @@ renumber: /* Must update column widths because of expansion. */ /* Also update columnTreeLeft. */ tree->widthOfColumns = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_DInfoChanged(tree, DINFO_CHECK_COLUMN_WIDTH | DINFO_INVALIDATE | DINFO_OUT_OF_DATE); /* BUG 784245 */ @@ -2045,9 +2009,7 @@ Column_Config( unsigned long gcMask; /* int stateOld = Column_MakeState(column), stateNew;*/ int visible = column->visible; -#ifdef COLUMN_LOCK int lock = column->lock; -#endif for (error = 0; error <= 1; error++) { if (error == 0) { @@ -2237,7 +2199,6 @@ Column_Config( Tree_DInfoChanged(tree, DINFO_INVALIDATE | DINFO_OUT_OF_DATE); } -#ifdef COLUMN_LOCK if (!createFlag && (column->lock != lock)) { Column *before = NULL; switch (column->lock) { @@ -2264,7 +2225,6 @@ Column_Config( Column_Move(column, before); Tree_DInfoChanged(tree, DINFO_REDO_COLUMN_WIDTH); } -#endif if (mask & (COLU_CONF_NWIDTH | COLU_CONF_TWIDTH)) mask |= COLU_CONF_NHEIGHT; @@ -2289,9 +2249,7 @@ Column_Config( /* Redraw everything */ if (mask & (COLU_CONF_TWIDTH | COLU_CONF_NWIDTH | COLU_CONF_NHEIGHT)) { tree->widthOfColumns = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_DInfoChanged(tree, DINFO_CHECK_COLUMN_WIDTH | DINFO_DRAW_HEADER); } @@ -2346,9 +2304,7 @@ Column_Alloc( #endif column->neededWidth = column->neededHeight = -1; tree->headerHeight = tree->widthOfColumns = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif column->id = tree->nextColumnId++; tree->columnCount++; return column; @@ -3486,7 +3442,6 @@ int TreeColumn_GetID( return ((Column *) column_)->id; } -#ifdef COLUMN_LOCK /* *---------------------------------------------------------------------- * @@ -3509,7 +3464,6 @@ int TreeColumn_Lock( { return ((Column *) column_)->lock; } -#endif /* *---------------------------------------------------------------------- @@ -3910,7 +3864,6 @@ TreeColumnCmd( tree->columnLast = (TreeColumn) column; ((Column *) tree->columnTail)->index++; -#ifdef COLUMN_LOCK { Column *before = NULL; switch (column->lock) { @@ -3930,7 +3883,6 @@ TreeColumnCmd( before = (Column *) tree->columnTail; Column_Move(column, before); } -#endif /* Indicate that all items must recalculate their list of spans. */ TreeItem_SpansInvalidate(tree, NULL); @@ -3979,11 +3931,10 @@ TreeColumnCmd( ((Column *) tree->columnTail)->index = 0; tree->columns = NULL; tree->columnLast = NULL; -#ifdef COLUMN_LOCK tree->columnLockLeft = NULL; tree->columnLockNone = NULL; tree->columnLockRight = NULL; -#endif + /* Delete all TreeItemColumns */ hPtr = Tcl_FirstHashEntry(&tree->itemHash, &search); while (hPtr != NULL) { @@ -3995,9 +3946,7 @@ TreeColumnCmd( tree->columnTree = NULL; tree->columnDrag.column = tree->columnDrag.indColumn = NULL; tree->widthOfColumns = tree->headerHeight = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_DInfoChanged(tree, DINFO_REDO_COLUMN_WIDTH); goto doneDELETE; } @@ -4043,31 +3992,26 @@ TreeColumnCmd( } } -#ifdef COLUMN_LOCK tree->columnLockLeft = NULL; tree->columnLockNone = NULL; tree->columnLockRight = NULL; -#endif + index = 0; column = (Column *) tree->columns; while (column != NULL) { column->index = index++; -#ifdef COLUMN_LOCK if (column->lock == COLUMN_LOCK_LEFT && tree->columnLockLeft == NULL) tree->columnLockLeft = (TreeColumn) column; if (column->lock == COLUMN_LOCK_NONE && tree->columnLockNone == NULL) tree->columnLockNone = (TreeColumn) column; if (column->lock == COLUMN_LOCK_RIGHT && tree->columnLockRight == NULL) tree->columnLockRight = (TreeColumn) column; -#endif column = column->next; } ((Column *) tree->columnTail)->index = index; tree->widthOfColumns = tree->headerHeight = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_DInfoChanged(tree, DINFO_REDO_COLUMN_WIDTH); doneDELETE: @@ -4226,9 +4170,8 @@ doneDELETE: { TreeColumn _move, _before; Column *move, *before; -#ifdef COLUMN_LOCK Column *first = NULL, *last = (Column *) tree->columnTail; -#endif + if (objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "column before"); return TCL_ERROR; @@ -4244,7 +4187,6 @@ doneDELETE: if ((move == before) || (move->index == before->index - 1)) break; -#ifdef COLUMN_LOCK switch (move->lock) { case COLUMN_LOCK_LEFT: first = (Column *) tree->columnLockLeft; @@ -4269,8 +4211,10 @@ doneDELETE: tree->columnPrefix, before->id); return TCL_ERROR; } -#endif Column_Move(move, before); + + /* Indicate that all items must recalculate their list of spans. */ + TreeItem_SpansInvalidate(tree, NULL); break; } @@ -4688,7 +4632,6 @@ SetImageForColumn( NULL, (ClientData) NULL); } -#ifdef COLUMN_LOCK static void DrawHeaderLeft( TreeCtrl *tree, /* Widget info. */ @@ -4748,7 +4691,6 @@ DrawHeaderRight( Tk_FreePixmap(tree->display, pixmap); } -#endif /* COLUMN_LOCK */ /* *---------------------------------------------------------------------- @@ -4791,12 +4733,8 @@ Tree_DrawHeader( else pixmap = drawable; -#ifdef COLUMN_LOCK column = (Column *) tree->columnLockNone; while (column != NULL && column->lock == COLUMN_LOCK_NONE) { -#else - while (column != NULL) { -#endif if (column->visible) { if ((x < maxX) && (x + column->useWidth > minX)) Column_Draw(column, pixmap, x, y, FALSE); @@ -4823,10 +4761,8 @@ Tree_DrawHeader( } } -#ifdef COLUMN_LOCK DrawHeaderLeft(tree, pixmap); DrawHeaderRight(tree, pixmap); -#endif { Tk_Image image = NULL; @@ -4990,9 +4926,7 @@ Tree_InvalidateColumnWidth( column->widthOfItems = -1; } tree->widthOfColumns = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_DInfoChanged(tree, DINFO_CHECK_COLUMN_WIDTH | DINFO_DRAW_HEADER); } @@ -5156,7 +5090,6 @@ TreeColumn_Bbox( /* Get width (and update column layout) */ *w = TreeColumn_UseWidth(column); -#ifdef COLUMN_LOCK switch (TreeColumn_Lock(column)) { case COLUMN_LOCK_LEFT: left = Tree_BorderLeft(tree); @@ -5167,7 +5100,6 @@ TreeColumn_Bbox( left = Tree_ContentRight(tree); break; } -#endif *x = left + TreeColumn_Offset(column); return 0; @@ -5221,7 +5153,6 @@ Tree_HeaderUnderPoint( y = Tree_ContentTop(tree) - 1; } -#ifdef COLUMN_LOCK /* Test the columns in reverse of drawing order. */ column = tree->columnLockRight; while ((column != NULL) && (TreeColumn_Lock(column) == COLUMN_LOCK_RIGHT)) { @@ -5252,16 +5183,6 @@ Tree_HeaderUnderPoint( } column = TreeColumn_Next(column); } -#else - while (column != NULL) { - if (TreeColumn_Bbox(column, &left, &top, &width, &height) == 0) { - if ((x >= left) && (x < left + width)) { - goto done; - } - } - column = TreeColumn_Next(column); - } -#endif column = tree->columnTail; left = Tree_WidthOfColumns(tree) - tree->xOrigin; @@ -5274,8 +5195,6 @@ done: return column; } -#ifdef COLUMN_LOCK - /* *---------------------------------------------------------------------- * @@ -5631,221 +5550,6 @@ Tree_WidthOfRightColumns( return tree->widthOfColumnsRight; } -#else /* COLUMN_LOCK */ - -/* - *---------------------------------------------------------------------- - * - * Tree_LayoutColumns -- - * - * Calculates the display width of every column. - * - * Results: - * The useWidth field of every column is updated. - * - * Side effects: - * The size of elements and styles will be updated if they are - * marked out-of-date. - * - *---------------------------------------------------------------------- - */ - -void -Tree_LayoutColumns( - TreeCtrl *tree /* Widget info. */ - ) -{ - Column *column = (Column *) tree->columns; - int width, visWidth, totalWidth = 0; - int numExpand = 0, numSqueeze = 0; -#ifdef UNIFORM_GROUP - Tcl_HashEntry *hPtr; - Tcl_HashSearch search; - UniformGroup *uniform; - int uniformCount = 0; - - hPtr = Tcl_FirstHashEntry(&tree->uniformGroupHash, &search); - while (hPtr != NULL) { - uniform = (UniformGroup *) Tcl_GetHashValue(hPtr); - uniform->minSize = 0; - hPtr = Tcl_NextHashEntry(&search); - } -#endif - - while (column != NULL) { - if (column->visible) { - if (column->widthObj != NULL) - width = column->width; - else { - width = TreeColumn_WidthOfItems((TreeColumn) column); - width = MAX(width, TreeColumn_NeededWidth((TreeColumn) column)); - width = MAX(width, TreeColumn_MinWidth((TreeColumn) column)); - if (TreeColumn_MaxWidth((TreeColumn) column) != -1) - width = MIN(width, TreeColumn_MaxWidth((TreeColumn) column)); -#ifdef UNIFORM_GROUP - /* Track the maximum requested width of every column in this - * column's uniform group considering -weight. */ - if (column->uniform != NULL) { - int weight = MAX(column->weight, 1); - int minSize = (width + weight - 1) / weight; - if (minSize > column->uniform->minSize) - column->uniform->minSize = minSize; - uniformCount++; - } - if (column->expand) - numExpand += MAX(column->weight, 0); - if (column->squeeze) - numSqueeze += MAX(column->weight, 0); -#else - if (column->expand) - numExpand++; - if (column->squeeze) - numSqueeze++; -#endif - } - column->useWidth = width; - totalWidth += width; - } else - column->useWidth = 0; - column = column->next; - } - -#ifdef UNIFORM_GROUP - /* Apply the -uniform and -weight options. */ - if (uniformCount > 0) { - column = (Column *) tree->columns; - while (column != NULL) { - if (column->visible && - column->widthObj == NULL && - column->uniform != NULL) { - int weight = MAX(column->weight, 1); - totalWidth -= column->useWidth; - width = column->uniform->minSize * weight; - if (column->maxWidthObj != NULL) - width = MIN(width, column->maxWidth); - column->useWidth = width; - totalWidth += width; - } - column = column->next; - } - } -#endif /* UNIFORM_GROUP */ - - visWidth = Tree_ContentWidth(tree); - if (visWidth <= 0) return; - - /* Squeeze columns */ - if ((visWidth < totalWidth) && (numSqueeze > 0)) { - int spaceRemaining = totalWidth - visWidth; - while ((spaceRemaining > 0) && (numSqueeze > 0)) { - int each = (spaceRemaining >= numSqueeze) ? - spaceRemaining / numSqueeze : 1; - numSqueeze = 0; - column = (Column *) tree->columns; - while (column != NULL) { - if (column->visible && - column->squeeze && - (column->widthObj == NULL)) { - int min = MAX(0, TreeColumn_MinWidth((TreeColumn) column)); - if (column->useWidth > min) { - int sub = MIN(each, column->useWidth - min); - column->useWidth -= sub; - spaceRemaining -= sub; - if (!spaceRemaining) break; - if (column->useWidth > min) - numSqueeze++; - } - } - column = column->next; - } - } - } - - /* Expand columns */ - if ((visWidth > totalWidth) && (numExpand > 0)) { - int spaceRemaining = visWidth - totalWidth; - while ((spaceRemaining > 0) && (numExpand > 0)) { - int each = (spaceRemaining >= numExpand) ? - spaceRemaining / numExpand : 1; - numExpand = 0; - column = (Column *) tree->columns; - while (column != NULL) { -#ifdef UNIFORM_GROUP - int weight = MAX(column->weight, 0); - if (column->visible && - column->expand && weight && - (column->widthObj == NULL)) { - int max = TreeColumn_MaxWidth((TreeColumn) column); - if ((max == -1) || (column->useWidth < max)) { - int eachW = MIN(each * weight, spaceRemaining); - int add = (max == -1) ? eachW : MIN(eachW, max - column->useWidth); - column->useWidth += add; - spaceRemaining -= add; - if (!spaceRemaining) break; - if ((max == -1) || (column->useWidth < max)) - numExpand += weight; -#else - if (column->visible && - column->expand && - (column->widthObj == NULL)) { - int max = TreeColumn_MaxWidth((TreeColumn) column); - if ((max == -1) || (column->useWidth < max)) { - int add = (max == -1) ? each : MIN(each, max - column->useWidth); - column->useWidth += add; - spaceRemaining -= add; - if (!spaceRemaining) break; - if ((max == -1) || (column->useWidth < max)) - numExpand++; -#endif - } - } - column = column->next; - } - } - } -} - -int -Tree_WidthOfColumns( - TreeCtrl *tree /* Widget info. */ - ) -{ - Column *column; - int width; - - if (tree->widthOfColumns >= 0) - return tree->widthOfColumns; - - Tree_LayoutColumns(tree); - - tree->columnTreeLeft = 0; - tree->columnTreeVis = FALSE; - tree->columnVis = NULL; - tree->columnCountVis = 0; - width = 0; - column = (Column *) tree->columns; - while (column != NULL) { - if (column->visible) { - if (tree->columnVis == NULL) - tree->columnVis = (TreeColumn) column; - tree->columnCountVis++; - if (column == (Column *) tree->columnTree) { - tree->columnTreeLeft = width; - tree->columnTreeVis = TRUE; - } - column->offset = width; - width += column->useWidth; - } - column = column->next; - } - - tree->widthOfColumns = width; - - return tree->widthOfColumns; -} - -#endif /* COLUMN_LOCK */ - /* *---------------------------------------------------------------------- * diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c index 3b8016d..1fd38d9 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.82 2006/11/07 00:01:04 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.c,v 1.83 2006/11/07 01:24:46 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -563,12 +563,10 @@ static int TreeWidgetCmd( TreeItem_ChangeState(tree, active, STATE_ACTIVE, 0); tree->activeItem = item; TreeItem_ChangeState(tree, tree->activeItem, 0, STATE_ACTIVE); -#ifdef COLUMN_LOCK + /* FIXME: is it onscreen? */ + /* FIXME: what if only lock columns displayed? */ if (Tree_ItemBbox(tree, item, COLUMN_LOCK_NONE, &x, &y, &w, &h) >= 0) { -#else - if (Tree_ItemBbox(tree, item, &x, &y, &w, &h) >= 0) { -#endif Tk_SetCaretPos(tree->tkwin, x - tree->xOrigin, y - tree->yOrigin, h); } @@ -815,9 +813,7 @@ static int TreeWidgetCmd( TreeItem item; char buf[64]; int hit; -#ifdef COLUMN_LOCK int lock; -#endif /* set id [$tree identify $x $y] "item I column C" : mouse is in column C of item I @@ -876,7 +872,6 @@ static int TreeWidgetCmd( if (item == tree->root) depth = (tree->showButtons && tree->showRootButton) ? 1 : 0; -#ifdef COLUMN_LOCK lock = (hit == TREE_AREA_LEFT) ? COLUMN_LOCK_LEFT : (hit == TREE_AREA_RIGHT) ? COLUMN_LOCK_RIGHT : COLUMN_LOCK_NONE; @@ -885,10 +880,6 @@ static int TreeWidgetCmd( if (tree->columnTreeVis && (TreeColumn_Lock(tree->columnTree) == lock) && (x >= tree->columnTreeLeft) && -#else - /* Point is in a line or button */ - if (tree->columnTreeVis && (x >= tree->columnTreeLeft) && -#endif (x < tree->columnTreeLeft + TreeColumn_UseWidth(tree->columnTree)) && (x < tree->columnTreeLeft + depth * tree->useIndent)) { int column = (x - tree->columnTreeLeft) / tree->useIndent + 1; @@ -909,11 +900,7 @@ static int TreeWidgetCmd( TreeItem_GetID(tree, item)); /* TreeItem_ToObj() */ } } else { -#ifdef COLUMN_LOCK TreeItem_Identify(tree, item, lock, x, y, buf); -#else - TreeItem_Identify(tree, item, x, y, buf); -#endif } Tcl_SetResult(interp, buf, TCL_VOLATILE); break; @@ -1122,11 +1109,7 @@ static int TreeWidgetCmd( goto error; /* Canvas coords */ -#ifdef COLUMN_LOCK if (Tree_ItemBbox(tree, item, COLUMN_LOCK_NONE, &x, &y, &w, &h) < 0) -#else - if (Tree_ItemBbox(tree, item, &x, &y, &w, &h) < 0) -#endif break; if ((C2Wx(x) > maxX) || (C2Wx(x + w) <= minX) || (w <= visWidth)) { @@ -1621,9 +1604,7 @@ TreeEventProc( if ((tree->prevWidth != Tk_Width(tree->tkwin)) || (tree->prevHeight != Tk_Height(tree->tkwin))) { tree->widthOfColumns = -1; -#ifdef COLUMN_LOCK tree->widthOfColumnsLeft = tree->widthOfColumnsRight = -1; -#endif Tree_RelayoutWindow(tree); tree->prevWidth = Tk_Width(tree->tkwin); tree->prevHeight = Tk_Height(tree->tkwin); diff --git a/generic/tkTreeCtrl.h b/generic/tkTreeCtrl.h index c9fbcf4..ca50f4b 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.68 2006/11/07 00:09:34 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.h,v 1.69 2006/11/07 01:24:46 treectrl Exp $ */ #include "tkPort.h" @@ -35,7 +35,6 @@ #define SELECTION_VISIBLE #define ALLOC_HAX -#define COLUMN_LOCK #define DEPRECATED typedef struct TreeCtrl TreeCtrl; @@ -271,7 +270,6 @@ struct TreeCtrl int columnTreeVis; /* TRUE if columnTree is visible */ int columnBgCnt; /* Max -itembackground colors */ -#ifdef COLUMN_LOCK #define COLUMN_LOCK_LEFT 0 #define COLUMN_LOCK_NONE 1 #define COLUMN_LOCK_RIGHT 2 @@ -282,7 +280,7 @@ struct TreeCtrl int widthOfColumnsRight; /* Sum of right-locked column widths */ int columnCountVisLeft; /* Number of visible left-locked columns */ int columnCountVisRight; /* Number of visible right-locked columns */ -#endif + #define UNIFORM_GROUP #ifdef UNIFORM_GROUP Tcl_HashTable uniformGroupHash; /* -uniform -> UniformGroup */ @@ -408,22 +406,12 @@ extern int Tree_StateFromListObj(TreeCtrl *tree, Tcl_Obj *obj, int states[3], in #define Tree_BorderBottom(tree) \ (Tk_Height(tree->tkwin) - tree->inset) -#if defined(COLUMN_LOCK) #define Tree_ContentLeft(tree) \ (Tree_BorderLeft(tree) + Tree_WidthOfLeftColumns(tree)) -#else -#define Tree_ContentLeft(tree) \ - Tree_BorderLeft(tree) -#endif #define Tree_ContentTop(tree) \ (tree->inset + Tree_HeaderHeight(tree)) -#if defined(COLUMN_LOCK) #define Tree_ContentRight(tree) \ (Tree_BorderRight(tree) - Tree_WidthOfRightColumns(tree)) -#else -#define Tree_ContentRight(tree) \ - Tree_BorderRight(tree) -#endif #define Tree_ContentBottom(tree) \ Tree_BorderBottom(tree) @@ -507,13 +495,9 @@ extern void TreeItem_ListDescendants(TreeCtrl *tree, TreeItem item_, TreeItemLis 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 extern void TreeItem_SpansInvalidate(TreeCtrl *tree, TreeItem item_); extern int *TreeItem_GetSpans(TreeCtrl *tree, TreeItem item_); 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); -#endif extern void TreeItem_DrawLines(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, Drawable drawable); extern void TreeItem_DrawButton(TreeCtrl *tree, TreeItem self, int x, int y, int width, int height, Drawable drawable); extern int TreeItem_ReallyVisible(TreeCtrl *tree, TreeItem self); @@ -527,24 +511,15 @@ extern TreeItem TreeItem_Next(TreeCtrl *tree, TreeItem item); extern TreeItem TreeItem_NextVisible(TreeCtrl *tree, TreeItem item); extern TreeItem TreeItem_Prev(TreeCtrl *tree, TreeItem item); extern TreeItem TreeItem_PrevVisible(TreeCtrl *tree, TreeItem item); -#ifdef COLUMN_LOCK extern void TreeItem_Identify(TreeCtrl *tree, TreeItem item_, int lock, int x, int y, char *buf); -#else -extern void TreeItem_Identify(TreeCtrl *tree, TreeItem item_, int x, int y, char *buf); -#endif extern void TreeItem_Identify2(TreeCtrl *tree, TreeItem item_, int x1, int y1, int x2, int y2, Tcl_Obj *listObj); extern int TreeItem_Indent(TreeCtrl *tree, TreeItem item_); extern void Tree_UpdateItemIndex(TreeCtrl *tree); extern void Tree_DeselectHidden(TreeCtrl *tree); extern int TreeItemCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); -#ifdef COLUMN_LOCK extern void TreeItem_UpdateWindowPositions(TreeCtrl *tree, TreeItem item_, int lock, int x, int y, int width, int height); -#else -extern void TreeItem_UpdateWindowPositions(TreeCtrl *tree, TreeItem item_, - int x, int y, int width, int height); -#endif extern void TreeItem_OnScreen(TreeCtrl *tree, TreeItem item_, int onScreen); extern TreeItemColumn TreeItem_GetFirstColumn(TreeCtrl *tree, TreeItem item); @@ -705,12 +680,10 @@ extern void Tree_InvalidateColumnHeight(TreeCtrl *tree, TreeColumn column); extern int Tree_HeaderHeight(TreeCtrl *tree); extern int TreeColumn_Bbox(TreeColumn column, int *x, int *y, int *w, int *h); extern TreeColumn Tree_HeaderUnderPoint(TreeCtrl *tree, int *x_, int *y_, int *w, int *h, int nearest); -extern int Tree_WidthOfColumns(TreeCtrl *tree); -#ifdef COLUMN_LOCK extern int TreeColumn_Lock(TreeColumn column_); +extern int Tree_WidthOfColumns(TreeCtrl *tree); extern int Tree_WidthOfLeftColumns(TreeCtrl *tree); extern int Tree_WidthOfRightColumns(TreeCtrl *tree); -#endif extern void TreeColumn_TreeChanged(TreeCtrl *tree, int flagT); /* tkTreeDrag.c */ @@ -734,11 +707,7 @@ extern int Tree_TotalWidth(TreeCtrl *tree); extern int Tree_TotalHeight(TreeCtrl *tree); extern TreeItem Tree_ItemUnderPoint(TreeCtrl *tree, int *x, int *y, int nearest); extern void Tree_FreeItemRInfo(TreeCtrl *tree, TreeItem item); -#ifdef COLUMN_LOCK extern int Tree_ItemBbox(TreeCtrl *tree, TreeItem item, int lock, int *x, int *y, int *w, int *h); -#else -extern int Tree_ItemBbox(TreeCtrl *tree, TreeItem item, int *x, int *y, int *w, int *h); -#endif extern TreeItem Tree_ItemAbove(TreeCtrl *tree, TreeItem item); extern TreeItem Tree_ItemBelow(TreeCtrl *tree, TreeItem item); extern TreeItem Tree_ItemLeft(TreeCtrl *tree, TreeItem item); @@ -755,10 +724,8 @@ enum { TREE_AREA_NONE = 0, TREE_AREA_HEADER, TREE_AREA_CONTENT, -#ifdef COLUMN_LOCK TREE_AREA_LEFT, TREE_AREA_RIGHT -#endif }; extern int Tree_HitTest(TreeCtrl *tree, int x, int y); diff --git a/generic/tkTreeDisplay.c b/generic/tkTreeDisplay.c index 63ecc15..de505d0 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.56 2006/11/07 00:09:34 treectrl Exp $ + * RCS: @(#) $Id: tkTreeDisplay.c,v 1.57 2006/11/07 01:24:46 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -67,16 +67,14 @@ struct DItem int y; /* Where it should be drawn, window coords. */ int height; /* Current height. */ DItemArea area; + DItemArea left, right; int oldX, oldY; /* Where it was last drawn, window coords. */ Range *range; /* Range the TreeItem is in. */ int index; /* Used for alternating background colors. */ int oldIndex; /* Used for alternating background colors. */ - DItem *next; -#ifdef COLUMN_LOCK - DItemArea left, right; -#endif int *spans; /* span[n] is the column index of the item * column displayed at the n'th tree column. */ + DItem *next; }; typedef struct ColumnInfo { @@ -123,7 +121,6 @@ struct DInfo int requests; /* Incremented for every call to Tree_EventuallyRedraw */ int bounds[4], empty; /* Bounds of TREE_AREA_CONTENT */ -#ifdef COLUMN_LOCK int boundsL[4], emptyL; /* Bounds of TREE_AREA_LEFT */ int boundsR[4], emptyR; /* Bounds of TREE_AREA_RIGHT */ int widthOfColumnsLeft; /* Last seen Tree_WidthOfLeftColumns() */ @@ -132,7 +129,6 @@ struct DInfo * columns, this range holds the vertical * offset and height of each ReallyVisible * item for displaying locked columns. */ -#endif }; /*========*/ @@ -369,7 +365,6 @@ freeRanges: while (rangeList != NULL) rangeList = Range_Free(tree, rangeList); -#ifdef COLUMN_LOCK /* If there are no visible non-locked columns, we won't have a Range. * But we need to know the offset/size of each item for drawing any * locked columns (and for vertical scrolling... and hit testing). */ @@ -423,7 +418,6 @@ freeRanges: range->totalHeight = pixels; range->prev = range->next = NULL; } -#endif /* COLUMN_COUNT */ } /* @@ -747,14 +741,14 @@ Tree_TotalHeight( } range = range->next; } -#ifdef COLUMN_LOCK + /* If dInfo->rangeLock is not NULL, then we are displaying some items * in locked columns but no non-locked columns. */ if (dInfo->rangeLock != NULL) { if (dInfo->rangeLock->totalHeight > tree->totalHeight) tree->totalHeight = dInfo->rangeLock->totalHeight; } -#endif + return tree->totalHeight; } @@ -1140,7 +1134,7 @@ RItemsToIncrementsY( ) { DInfo *dInfo = (DInfo *) tree->dInfo; - Range *range; + Range *range, *rangeFirst; RItem *rItem; int visHeight = Tree_ContentHeight(tree); int totalHeight = Tree_TotalHeight(tree); @@ -1155,18 +1149,15 @@ RItemsToIncrementsY( dInfo->yScrollIncrements = (int *) ckalloc(size * sizeof(int)); dInfo->yScrollIncrements[dInfo->yScrollIncrementCount++] = 0; -#ifdef COLUMN_LOCK /* If only locked columns are visible, we still scroll vertically. */ - if (dInfo->rangeFirst == NULL) - dInfo->rangeFirst = dInfo->rangeLock; -#endif + rangeFirst = dInfo->rangeFirst; + if (rangeFirst == NULL) + rangeFirst = dInfo->rangeLock; y1 = 0; while (1) { y2 = totalHeight; - for (range = dInfo->rangeFirst; - range != NULL; - range = range->next) { + for (range = rangeFirst; range != NULL; range = range->next) { if (y1 >= range->totalHeight) continue; @@ -1182,12 +1173,6 @@ RItemsToIncrementsY( y1 = y2; } -#ifdef COLUMN_LOCK - /* Reverse-hack. */ - if (dInfo->rangeFirst == dInfo->rangeLock) - dInfo->rangeFirst = NULL; -#endif - if ((visHeight > 1) && (totalHeight - dInfo->yScrollIncrements[dInfo->yScrollIncrementCount - 1] > visHeight)) { size = Increment_AddY(tree, totalHeight, size); @@ -1743,8 +1728,6 @@ Tree_ItemUnderPoint( { Range *range; RItem *rItem; - -#ifdef COLUMN_LOCK int hit; hit = Tree_HitTest(tree, *x_, *y_); @@ -1754,7 +1737,7 @@ Tree_ItemUnderPoint( Range_RedoIfNeeded(tree); range = dInfo->rangeFirst; - /* If range is NULL use dInfo->rangeLock */ + /* If range is NULL use dInfo->rangeLock. */ if (range == NULL) { if (dInfo->rangeLock == NULL) return NULL; @@ -1781,7 +1764,6 @@ Tree_ItemUnderPoint( } return NULL; } -#endif /* COLUMN_LOCK */ range = Range_UnderPoint(tree, x_, y_, nearest); if (range == NULL) @@ -1833,7 +1815,6 @@ Tree_AreaBbox( x2 = Tree_ContentRight(tree); y2 = Tree_ContentBottom(tree); break; -#ifdef COLUMN_LOCK case TREE_AREA_LEFT: x1 = Tree_BorderLeft(tree); y1 = Tree_ContentTop(tree); @@ -1849,7 +1830,6 @@ Tree_AreaBbox( x2 = Tree_BorderRight(tree); y2 = Tree_ContentBottom(tree); break; -#endif } if (x2 <= x1 || y2 <= y1) @@ -1903,7 +1883,6 @@ Tree_HitTest( if (y < tree->inset + Tree_HeaderHeight(tree)) { return TREE_AREA_HEADER; } -#ifdef COLUMN_LOCK /* Right-locked columns are drawn over the left. */ if (x >= Tree_ContentRight(tree)) { return TREE_AREA_RIGHT; @@ -1911,7 +1890,9 @@ Tree_HitTest( if (x < Tree_ContentLeft(tree)) { return TREE_AREA_LEFT; } -#endif + if (Tree_ContentLeft(tree) >= Tree_ContentRight(tree)) { + return TREE_AREA_NONE; + } return TREE_AREA_CONTENT; } @@ -1938,9 +1919,7 @@ int Tree_ItemBbox( TreeCtrl *tree, /* Widget info. */ TreeItem item, /* Item whose bbox is needed. */ -#ifdef COLUMN_LOCK int lock, -#endif int *x, int *y, /* Returned left and top. */ int *w, int *h /* Returned width and height. */ ) @@ -1948,12 +1927,15 @@ Tree_ItemBbox( Range *range; RItem *rItem; -#ifdef COLUMN_LOCK if (!TreeItem_ReallyVisible(tree, item)) return -1; + + /* Update columnCountVisXXX if needed */ + (void) Tree_WidthOfColumns(tree); + Range_RedoIfNeeded(tree); rItem = (RItem *) TreeItem_GetRInfo(tree, item); - (void) Tree_WidthOfColumns(tree); + switch (lock) { case COLUMN_LOCK_LEFT: if (tree->columnCountVisLeft == 0) @@ -1968,21 +1950,16 @@ Tree_ItemBbox( case COLUMN_LOCK_RIGHT: if (tree->columnCountVisRight == 0) return -1; - *x = Tree_ContentRight(tree) + tree->xOrigin; + *x = Tree_ContentRight(tree) + tree->xOrigin; /* window -> canvas */ *y = rItem->offset; *w = Tree_WidthOfRightColumns(tree); *h = rItem->size; return 0; } -#endif - /* Update columnCountVis if needed */ - (void) Tree_WidthOfColumns(tree); - - if (!TreeItem_ReallyVisible(tree, item) || (tree->columnCountVis < 1)) + if (tree->columnCountVis < 1) return -1; - Range_RedoIfNeeded(tree); - rItem = (RItem *) TreeItem_GetRInfo(tree, item); + range = rItem->range; if (tree->vertical) { (*x) = range->offset; @@ -2372,10 +2349,8 @@ DItem_Alloc( #endif dItem->item = rItem->item; dItem->area.flags = DITEM_DIRTY | DITEM_ALL_DIRTY; -#ifdef COLUMN_LOCK dItem->left.flags = DITEM_DIRTY | DITEM_ALL_DIRTY; dItem->right.flags = DITEM_DIRTY | DITEM_ALL_DIRTY; -#endif TreeItem_SetDInfo(tree, rItem->item, (TreeItemDInfo) dItem); return dItem; } @@ -2644,9 +2619,7 @@ GetOnScreenColumnsForItemAux( DItem *dItem, /* Display info for an item. */ DItemArea *area, /* Layout info. */ int bounds[4], /* TREE_AREA_xxx bounds. */ -#ifdef COLUMN_LOCK int lock, /* Set of columns we care about. */ -#endif TreeColumnList *columns /* Initialized list to append to. */ ) { @@ -2660,7 +2633,6 @@ GetOnScreenColumnsForItemAux( minX -= area->x; maxX -= area->x; -#ifdef COLUMN_LOCK switch (lock) { case COLUMN_LOCK_LEFT: columnIndex = TreeColumn_Index(tree->columnLockLeft); @@ -2672,14 +2644,11 @@ GetOnScreenColumnsForItemAux( columnIndex = TreeColumn_Index(tree->columnLockRight); break; } -#endif for (/* nothing */; columnIndex < tree->columnCount; columnIndex++) { column = dInfo->columns[columnIndex].column; -#ifdef COLUMN_LOCK if (TreeColumn_Lock(column) != lock) break; -#endif if (!TreeColumn_Visible(column)) continue; width = dInfo->columns[columnIndex].width; @@ -2728,28 +2697,18 @@ GetOnScreenColumnsForItem( { DInfo *dInfo = (DInfo *) tree->dInfo; -#ifdef COLUMN_LOCK if (!dInfo->emptyL) { - GetOnScreenColumnsForItemAux(tree, dItem, - &dItem->left, dInfo->boundsL, COLUMN_LOCK_LEFT, - columns); + GetOnScreenColumnsForItemAux(tree, dItem, &dItem->left, + dInfo->boundsL, COLUMN_LOCK_LEFT, columns); } -#endif /* COLUMN_LOCK */ if (!dInfo->empty && dInfo->rangeFirst != NULL) { GetOnScreenColumnsForItemAux(tree, dItem, &dItem->area, - dInfo->bounds, -#ifdef COLUMN_LOCK - COLUMN_LOCK_NONE, -#endif - columns); + dInfo->bounds, COLUMN_LOCK_NONE, columns); } -#ifdef COLUMN_LOCK if (!dInfo->emptyR) { - GetOnScreenColumnsForItemAux(tree, dItem, - &dItem->right, dInfo->boundsR, COLUMN_LOCK_RIGHT, - columns); + GetOnScreenColumnsForItemAux(tree, dItem, &dItem->right, + dInfo->boundsR, COLUMN_LOCK_RIGHT, columns); } -#endif /* COLUMN_LOCK */ return TreeColumnList_Count(columns); } @@ -2959,9 +2918,7 @@ UpdateDInfoForRange( else if (tree->showLines && (tree->lineStyle == LINE_STYLE_DOT) && tree->columnTreeVis && -#ifdef COLUMN_LOCK (TreeColumn_Lock(tree->columnTree) == COLUMN_LOCK_NONE) && -#endif ((dItem->oldY & 1) != (y & 1))) area->flags |= DITEM_DIRTY | DITEM_ALL_DIRTY; @@ -3157,9 +3114,7 @@ Tree_UpdateDInfo( int minX, minY, maxX, maxY; Range *range; RItem *rItem; -#ifdef COLUMN_LOCK DItem *dItem; -#endif if (tree->debug.enable && tree->debug.display) dbwin("Tree_UpdateDInfo %s\n", Tk_PathName(tree->tkwin)); @@ -3171,14 +3126,13 @@ Tree_UpdateDInfo( dInfo->empty = !Tree_AreaBbox(tree, TREE_AREA_CONTENT, &dInfo->bounds[0], &dInfo->bounds[1], &dInfo->bounds[2], &dInfo->bounds[3]); -#ifdef COLUMN_LOCK dInfo->emptyL = !Tree_AreaBbox(tree, TREE_AREA_LEFT, &dInfo->boundsL[0], &dInfo->boundsL[1], &dInfo->boundsL[2], &dInfo->boundsL[3]); dInfo->emptyR = !Tree_AreaBbox(tree, TREE_AREA_RIGHT, &dInfo->boundsR[0], &dInfo->boundsR[1], &dInfo->boundsR[2], &dInfo->boundsR[3]); -#endif + if (dInfo->empty) goto done; @@ -3260,7 +3214,6 @@ Tree_UpdateDInfo( dInfo->dItemLast->next = NULL; done: -#ifdef COLUMN_LOCK if (dInfo->dItem != NULL) goto skipLock; if (!tree->itemVisCount) @@ -3437,7 +3390,6 @@ skipLock: } } } -#endif /* COLUMN_LOCK */ while (dItemHead != NULL) dItemHead = DItem_Free(tree, dItemHead); @@ -3586,15 +3538,13 @@ DItemAllDirty( { DInfo *dInfo = (DInfo *) tree->dInfo; -#ifdef COLUMN_LOCK - if (((!dInfo->empty && dInfo->rangeFirst != NULL) && !(dItem->area.flags & DITEM_ALL_DIRTY)) || - (!dInfo->emptyL && !(dItem->left.flags & DITEM_ALL_DIRTY)) || - (!dInfo->emptyR && !(dItem->right.flags & DITEM_ALL_DIRTY))) + if ((!dInfo->empty && dInfo->rangeFirst != NULL) && + !(dItem->area.flags & DITEM_ALL_DIRTY)) return 0; -#else - if (!dInfo->empty && !(dItem->area.flags & DITEM_ALL_DIRTY)) + if (!dInfo->emptyL && !(dItem->left.flags & DITEM_ALL_DIRTY)) + return 0; + if (!dInfo->emptyR && !(dItem->right.flags & DITEM_ALL_DIRTY)) return 0; -#endif return 1; } @@ -3631,13 +3581,9 @@ ScrollVerticalComplex( int y; int numCopy = 0; -#ifdef COLUMN_LOCK if (dInfo->empty && dInfo->emptyL && dInfo->emptyR) return 0; -#else - if (dInfo->empty) - return 0; -#endif + minX = Tree_BorderLeft(tree); minY = Tree_ContentTop(tree); maxX = Tree_BorderRight(tree); @@ -3693,7 +3639,6 @@ ScrollVerticalComplex( if (oldY + offset + height > maxY) height = maxY - (oldY + offset); -#ifdef COLUMN_LOCK if (!dInfo->emptyL || !dInfo->emptyR) { oldX = minX; width = maxX - minX; @@ -3701,10 +3646,7 @@ ScrollVerticalComplex( oldX = dItem->oldX; width = dItem->area.width; } -#else - oldX = dItem->oldX; - width = dItem->area.width; -#endif + if (oldX < minX) { width -= minX - oldX; oldX = minX; @@ -3721,7 +3663,6 @@ ScrollVerticalComplex( InvalidateDItemY(dItem, &dItem->area, dItem->oldY, dItem->oldY, minY - dItem->oldY); dItem->area.flags |= DITEM_DIRTY; } -#ifdef COLUMN_LOCK if (!dInfo->emptyL) { InvalidateDItemX(dItem, &dItem->left, dItem->left.x, oldX, width); InvalidateDItemY(dItem, &dItem->left, dItem->oldY, dItem->oldY, minY - dItem->oldY); @@ -3732,7 +3673,6 @@ ScrollVerticalComplex( InvalidateDItemY(dItem, &dItem->right, dItem->oldY, dItem->oldY, minY - dItem->oldY); dItem->right.flags |= DITEM_DIRTY; } -#endif } if ((dItem->oldY + dItem->height > maxY) && (offset < 0)) { if (!dInfo->empty && dInfo->rangeFirst != NULL) { @@ -3740,7 +3680,6 @@ ScrollVerticalComplex( InvalidateDItemY(dItem, &dItem->area, dItem->oldY, maxY, maxY - dItem->oldY + dItem->height); dItem->area.flags |= DITEM_DIRTY; } -#ifdef COLUMN_LOCK if (!dInfo->emptyL) { InvalidateDItemX(dItem, &dItem->left, dItem->left.x, oldX, width); InvalidateDItemY(dItem, &dItem->left, dItem->oldY, maxY, maxY - dItem->oldY + dItem->height); @@ -3751,7 +3690,6 @@ ScrollVerticalComplex( InvalidateDItemY(dItem, &dItem->right, dItem->oldY, maxY, maxY - dItem->oldY + dItem->height); dItem->right.flags |= DITEM_DIRTY; } -#endif } dItem->oldY = dItem->y; if (dItem->next == dItem2) @@ -3771,7 +3709,6 @@ ScrollVerticalComplex( InvalidateDItemY(dItem2, &dItem2->area, dItem2->oldY, y, height); dItem2->area.flags |= DITEM_DIRTY; } -#ifdef COLUMN_LOCK if (!dInfo->emptyL) { InvalidateDItemX(dItem2, &dItem2->left, dItem2->left.x, oldX, width); InvalidateDItemY(dItem2, &dItem2->left, dItem2->oldY, y, height); @@ -3782,7 +3719,6 @@ ScrollVerticalComplex( InvalidateDItemY(dItem2, &dItem2->right, dItem2->oldY, y, height); dItem2->right.flags |= DITEM_DIRTY; } -#endif } } @@ -4404,7 +4340,6 @@ CalcWhiteSpaceRegion( wsRgn = TkCreateRegion(); -#ifdef COLUMN_LOCK /* Erase area below left columns */ if (!dInfo->emptyL) { minX = dInfo->boundsL[0]; @@ -4434,10 +4369,10 @@ CalcWhiteSpaceRegion( TkUnionRectWithRegion(&rect, wsRgn, wsRgn); } } -#endif if (dInfo->empty) return wsRgn; + minX = dInfo->bounds[0]; minY = dInfo->bounds[1]; maxX = dInfo->bounds[2]; @@ -4702,9 +4637,7 @@ static void DrawWhitespaceBelowItem( TreeCtrl *tree, /* Widget info. */ Drawable drawable, /* Where to draw. */ -#ifdef COLUMN_LOCK int lock, /* Which columns to draw. */ -#endif int bounds[4], /* TREE_AREA_xxx bounds. */ int left, /* Window coord of first column's left edge. */ int top, /* Window coord just below the last item. */ @@ -4719,7 +4652,6 @@ DrawWhitespaceBelowItem( TreeColumn treeColumn; XRectangle boundsBox, columnBox; -#ifdef COLUMN_LOCK switch (lock) { case COLUMN_LOCK_LEFT: i = TreeColumn_Index(tree->columnLockLeft); @@ -4731,7 +4663,6 @@ DrawWhitespaceBelowItem( i = TreeColumn_Index(tree->columnLockRight); break; } -#endif boundsBox.x = bounds[0]; boundsBox.y = bounds[1]; @@ -4740,10 +4671,8 @@ DrawWhitespaceBelowItem( for (/*nothing*/; i < tree->columnCount; i++) { treeColumn = dInfo->columns[i].column; -#ifdef COLUMN_LOCK if (TreeColumn_Lock(treeColumn) != lock) break; -#endif if (dInfo->columns[i].width == 0) continue; columnBox.x = left; @@ -4821,10 +4750,8 @@ DrawWhitespace( columnRgn = TkCreateRegion(); range = dInfo->rangeFirst; -#ifdef COLUMN_LOCK if (range == NULL) range = dInfo->rangeLock; -#endif if (!dInfo->empty) { minX = dInfo->bounds[0]; @@ -4875,7 +4802,6 @@ DrawWhitespace( } } -#ifdef COLUMN_LOCK /* Draw below the left columns. */ if (!dInfo->emptyL) { minX = dInfo->boundsL[0]; @@ -4893,14 +4819,10 @@ DrawWhitespace( minX, top, dirtyRgn, columnRgn, height, index); } -#endif /* COLUMN_LOCK */ /* Draw below non-locked columns. */ if (!dInfo->empty && dInfo->rangeFirst != NULL) { - DrawWhitespaceBelowItem(tree, drawable, -#ifdef COLUMN_LOCK - COLUMN_LOCK_NONE, -#endif + DrawWhitespaceBelowItem(tree, drawable, COLUMN_LOCK_NONE, dInfo->bounds, x, top, dirtyRgn, columnRgn, height, index); } @@ -4944,10 +4866,10 @@ Tree_DrawTiledImage( int dstX, dstY; Tk_SizeOfImage(image, &imgWidth, &imgHeight); -#ifdef COLUMN_LOCK + /* xOffset can be < 0 for left-locked columns. */ if (xOffset < 0) xOffset = imgWidth + xOffset % imgWidth; -#endif + srcX = (x1 + xOffset) % imgWidth; dstX = x1; while (dstX < x2) { @@ -4996,9 +4918,7 @@ DisplayDItem( TreeCtrl *tree, /* Widget info. */ DItem *dItem, DItemArea *area, -#ifdef COLUMN_LOCK int lock, /* Which set of columns. */ -#endif int bounds[4], /* TREE_AREA_xxx bounds of drawing. */ Drawable pixmap, /* Where to draw. */ Drawable drawable /* Where to copy to. */ @@ -5054,10 +4974,7 @@ DisplayDItem( tree->drawableXOrigin = left + tree->xOrigin; tree->drawableYOrigin = top + tree->yOrigin; - TreeItem_Draw(tree, dItem->item, -#ifdef COLUMN_LOCK - lock, -#endif + TreeItem_Draw(tree, dItem->item, lock, area->x - left, dItem->y - top, area->width, dItem->height, pixmap, @@ -5207,7 +5124,6 @@ displayRetry: if (tree->vertical && (tree->wrapMode == TREE_WRAP_WINDOW)) dInfo->flags |= DINFO_REDO_RANGES; } -#ifdef COLUMN_LOCK if (dInfo->widthOfColumnsLeft != Tree_WidthOfLeftColumns(tree) || dInfo->widthOfColumnsRight != Tree_WidthOfRightColumns(tree)) { dInfo->widthOfColumnsLeft = Tree_WidthOfLeftColumns(tree); @@ -5219,7 +5135,6 @@ displayRetry: DINFO_REDO_RANGES | DINFO_DRAW_HEADER*/; } -#endif /* COLUMN_LOCK */ Range_RedoIfNeeded(tree); Increment_RedoIfNeeded(tree); if (dInfo->xOrigin != tree->xOrigin) { @@ -5537,11 +5452,11 @@ displayRetry: for (dItem = dInfo->dItem; dItem != NULL; dItem = dItem->next) { - if ((!dInfo->empty && dInfo->rangeFirst != NULL) && (dItem->area.flags & DITEM_DIRTY)) { + if ((!dInfo->empty && dInfo->rangeFirst != NULL) && + (dItem->area.flags & DITEM_DIRTY)) { count++; break; } -#ifdef COLUMN_LOCK if (!dInfo->emptyL && (dItem->left.flags & DITEM_DIRTY)) { count++; break; @@ -5550,7 +5465,6 @@ displayRetry: count++; break; } -#endif } /* Display dirty items */ @@ -5569,7 +5483,6 @@ displayRetry: dItem != NULL; dItem = dItem->next) { -#ifdef COLUMN_LOCK int drawn = 0; if (!dInfo->empty && dInfo->rangeFirst != NULL) { /* FIXME: may "draw" window elements twice. */ @@ -5605,17 +5518,6 @@ displayRetry: } } numDraw += drawn ? 1 : 0; -#else - /* FIXME: may "draw" window elements twice. */ - tree->drawableXOrigin = tree->xOrigin; - tree->drawableYOrigin = tree->yOrigin; - TreeItem_UpdateWindowPositions(tree, dItem->item, COLUMN_LOCK_NONE, - dItem->area.x, dItem->y, dItem->area.width, dItem->height); - if (dItem->area.flags & DITEM_DIRTY) { - numDraw += DisplayDItem(tree, dItem, &dItem->area, - COLUMN_LOCK_NONE, bounds, pixmap, drawable); - } -#endif dItem->oldX = dItem->area.x; dItem->oldY = dItem->y; @@ -6482,7 +6384,6 @@ Tree_FreeItemDInfo( *-------------------------------------------------------------- */ -#if 1 void Tree_InvalidateItemDInfo( TreeCtrl *tree, /* Widget info. */ @@ -6504,10 +6405,8 @@ Tree_InvalidateItemDInfo( if (dItem != NULL) { if (column == NULL) { dItem->area.flags |= (DITEM_DIRTY | DITEM_ALL_DIRTY); -#ifdef COLUMN_LOCK dItem->left.flags |= (DITEM_DIRTY | DITEM_ALL_DIRTY); dItem->right.flags |= (DITEM_DIRTY | DITEM_ALL_DIRTY); -#endif } else { /* Do NOT call TreeColumn_UseWidth() or another routine * that calls Tree_WidthOfColumns() because that may end @@ -6533,6 +6432,7 @@ Tree_InvalidateItemDInfo( width = dInfo->columns[i].width; } + /* Calculate the width of the entire span. */ if (dItem->spans == NULL) { width = dInfo->columns[columnIndex].width; } else { @@ -6545,7 +6445,6 @@ Tree_InvalidateItemDInfo( } } -#ifdef COLUMN_LOCK switch (TreeColumn_Lock(column)) { case COLUMN_LOCK_NONE: if (tree->columnCountVis == 1) @@ -6565,11 +6464,6 @@ Tree_InvalidateItemDInfo( dItem->right.flags |= DITEM_DIRTY; break; } -#else - InvalidateDItemX(dItem, 0, left, width); - InvalidateDItemY(dItem, dItem->y, dItem->y, dItem->height); - dItem->flags |= DITEM_DIRTY; -#endif } changed = 1; } @@ -6581,39 +6475,6 @@ Tree_InvalidateItemDInfo( Tree_EventuallyRedraw(tree); } } -#else -void -Tree_InvalidateItemDInfo( - TreeCtrl *tree, /* Widget info. */ - TreeItem item1, /* First item in the range. */ - TreeItem item2 /* Last item in the range, or NULL. */ - ) -{ - /* DInfo *dInfo = (DInfo *) tree->dInfo; */ - DItem *dItem; - TreeItem item = item1; - int changed = 0; - - while (item != NULL) { - dItem = (DItem *) TreeItem_GetDInfo(tree, item); - if (dItem != NULL) { - dItem->flags |= (DITEM_DIRTY | DITEM_ALL_DIRTY); -#ifdef COLUMN_LOCK - dItem->left.flags |= (DITEM_DIRTY | DITEM_ALL_DIRTY); - dItem->right.flags |= (DITEM_DIRTY | DITEM_ALL_DIRTY); -#endif - changed = 1; - } - if (item == item2 || item2 == NULL) - break; - item = TreeItem_Next(tree, item); - } - if (changed) { - /*dInfo->flags |= DINFO_OUT_OF_DATE; */ - Tree_EventuallyRedraw(tree); - } -} -#endif /* *-------------------------------------------------------------- @@ -6766,14 +6627,14 @@ Tree_InvalidateArea( dItem = dInfo->dItem; while (dItem != NULL) { - if ((!dInfo->empty && dInfo->rangeFirst != NULL) && !(dItem->area.flags & DITEM_ALL_DIRTY) && + if ((!dInfo->empty && dInfo->rangeFirst != NULL) && + !(dItem->area.flags & DITEM_ALL_DIRTY) && (x2 > dItem->area.x) && (x1 < dItem->area.x + dItem->area.width) && (y2 > dItem->y) && (y1 < dItem->y + dItem->height)) { InvalidateDItemX(dItem, &dItem->area, dItem->area.x, x1, x2 - x1); InvalidateDItemY(dItem, &dItem->area, dItem->y, y1, y2 - y1); dItem->area.flags |= DITEM_DIRTY; } -#ifdef COLUMN_LOCK if (!dInfo->emptyL && !(dItem->left.flags & DITEM_ALL_DIRTY) && (x2 > dInfo->boundsL[0]) && (x1 < dInfo->boundsL[2]) && (y2 > dItem->y) && (y1 < dItem->y + dItem->height)) { @@ -6788,7 +6649,6 @@ Tree_InvalidateArea( InvalidateDItemY(dItem, &dItem->right, dItem->y, y1, y2 - y1); dItem->right.flags |= DITEM_DIRTY; } -#endif dItem = dItem->next; } @@ -6888,7 +6748,6 @@ Tree_InvalidateRegion( dItem->area.flags |= DITEM_DIRTY; } } -#ifdef COLUMN_LOCK if (!dInfo->emptyL && !(dItem->left.flags & DITEM_ALL_DIRTY)) { rect.x = dItem->left.x; rect.y = dItem->y; @@ -6919,7 +6778,6 @@ Tree_InvalidateRegion( dItem->right.flags |= DITEM_DIRTY; } } -#endif dItem = dItem->next; } @@ -7082,10 +6940,8 @@ TreeDInfo_Free( if (dInfo->rItem != NULL) ckfree((char *) dInfo->rItem); -#ifdef COLUMN_LOCK if (dInfo->rangeLock != NULL) ckfree((char *) dInfo->rangeLock); -#endif while (dInfo->dItem != NULL) { DItem *next = dInfo->dItem->next; WFREE(dInfo->dItem, DItem); @@ -7139,14 +6995,15 @@ DumpDInfo( dInfo->itemWidth, dInfo->itemHeight, dInfo->totalWidth, dInfo->totalHeight, dInfo->flags, tree->vertical, tree->itemVisCount); -#ifdef COLUMN_LOCK + DStringAppendf(&dString, " empty=%d bounds=%d,%d,%d,%d\n", dInfo->empty, + dInfo->bounds[0], dInfo->bounds[1], + dInfo->bounds[2], dInfo->bounds[3]); DStringAppendf(&dString, " emptyL=%d boundsL=%d,%d,%d,%d\n", dInfo->emptyL, dInfo->boundsL[0], dInfo->boundsL[1], dInfo->boundsL[2], dInfo->boundsL[3]); DStringAppendf(&dString, " emptyR=%d boundsR=%d,%d,%d,%d\n", dInfo->emptyR, dInfo->boundsR[0], dInfo->boundsR[1], dInfo->boundsR[2], dInfo->boundsR[3]); -#endif dItem = dInfo->dItem; while (dItem != NULL) { if (dItem->item == NULL) { @@ -7158,7 +7015,6 @@ DumpDInfo( dItem->area.dirty[LEFT], dItem->area.dirty[TOP], dItem->area.dirty[RIGHT], dItem->area.dirty[BOTTOM], dItem->area.flags); -#ifdef COLUMN_LOCK DStringAppendf(&dString, " left: dirty %d,%d,%d,%d flags %0X\n", dItem->left.dirty[LEFT], dItem->left.dirty[TOP], dItem->left.dirty[RIGHT], dItem->left.dirty[BOTTOM], @@ -7167,7 +7023,6 @@ DumpDInfo( dItem->right.dirty[LEFT], dItem->right.dirty[TOP], dItem->right.dirty[RIGHT], dItem->right.dirty[BOTTOM], dItem->right.flags); -#endif } dItem = dItem->next; } diff --git a/generic/tkTreeDrag.c b/generic/tkTreeDrag.c index be79ca9..638dcc4 100644 --- a/generic/tkTreeDrag.c +++ b/generic/tkTreeDrag.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2006 Tim Baker * - * RCS: @(#) $Id: tkTreeDrag.c,v 1.19 2006/11/06 01:47:47 treectrl Exp $ + * RCS: @(#) $Id: tkTreeDrag.c,v 1.20 2006/11/07 01:24:46 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -457,11 +457,7 @@ DragImageCmd( } } -#ifdef COLUMN_LOCK if (Tree_ItemBbox(tree, item, COLUMN_LOCK_NONE, &x, &y, &w, &h) < 0) -#else - if (Tree_ItemBbox(tree, item, &x, &y, &w, &h) < 0) -#endif return TCL_OK; if (w < 1 || h < 1) return TCL_OK; diff --git a/generic/tkTreeItem.c b/generic/tkTreeItem.c index 77260bd..549804b 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.81 2006/11/07 00:09:34 treectrl Exp $ + * RCS: @(#) $Id: tkTreeItem.c,v 1.82 2006/11/07 01:24:46 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -3717,9 +3717,7 @@ TreeItem_SpansRedo( TreeColumn treeColumn = tree->columns; Column *itemColumn = self->columns; int columnIndex = 0, spanner = 0, span = 1, simple = TRUE; -#ifdef COLUMN_LOCK int lock = TreeColumn_Lock(treeColumn); -#endif if (tree->debug.enable && tree->debug.display) dbwin("TreeItem_SpansRedo item %d\n", self->id); @@ -3734,13 +3732,11 @@ TreeItem_SpansRedo( } 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 = itemColumn ? itemColumn->span : 1; @@ -3850,7 +3846,6 @@ typedef struct SpanInfo { *---------------------------------------------------------------------- */ -#ifdef COLUMN_LOCK static int Item_GetSpans( TreeCtrl *tree, /* Widget info. */ @@ -3896,38 +3891,6 @@ next: } return spanCount; } -#else -static void -Item_GetSpans( - TreeCtrl *tree, /* Widget info. */ - TreeItem item_, /* Item token. */ - SpanInfo spans[] /* Returned span records. */ - ) -{ - Item *self = (Item *) item_; - TreeColumn treeColumn = tree->columns; - Column *column = self->columns; - int columnIndex = 0, itemColumnIndex = 0, span = 1; - - while (treeColumn != NULL) { - if (--span == 0) { - if (TreeColumn_Visible(treeColumn)) - span = column ? column->span : 1; - else - span = 1; - itemColumnIndex = columnIndex; - } - spans[columnIndex].treeColumn = treeColumn; - spans[columnIndex].itemColumn = (TreeItemColumn) column; - spans[columnIndex].itemColumnIndex = itemColumnIndex; - spans[columnIndex].width = TreeColumn_UseWidth(treeColumn); - ++columnIndex; - treeColumn = TreeColumn_Next(treeColumn); - if (column != NULL) - column = column->next; - } -} -#endif typedef int (*TreeItemWalkSpansProc)( TreeCtrl *tree, @@ -3959,9 +3922,7 @@ void TreeItem_WalkSpans( TreeCtrl *tree, /* Widget info. */ TreeItem item_, /* Item token. */ -#ifdef COLUMN_LOCK int lock, /* Which columns. */ -#endif int x, int y, /* Drawable coordinates of the item. */ int width, int height, /* Total size of the item. */ TreeItemWalkSpansProc proc, @@ -3977,7 +3938,6 @@ TreeItem_WalkSpans( SpanInfo staticSpans[STATIC_SIZE], *spans = staticSpans; int area = TREE_AREA_CONTENT; -#ifdef COLUMN_LOCK switch (lock) { case COLUMN_LOCK_LEFT: treeColumn = tree->columnLockLeft; @@ -3995,10 +3955,7 @@ TreeItem_WalkSpans( } STATIC_ALLOC(spans, SpanInfo, columnCount); spanCount = Item_GetSpans(tree, item_, treeColumn, spans); -#else - STATIC_ALLOC(spans, SpanInfo, columnCount); - spanCount = Item_GetSpans(tree, item_, spans); -#endif + drawArgs.tree = tree; drawArgs.drawable = None; @@ -4155,9 +4112,7 @@ void TreeItem_Draw( TreeCtrl *tree, /* Widget info. */ TreeItem item_, /* Item token. */ -#ifdef COLUMN_LOCK int lock, /* Which columns. */ -#endif int x, int y, /* Drawable coordinates of the item. */ int width, int height, /* Total size of the item. */ Drawable drawable, /* Where to draw. */ @@ -4178,10 +4133,7 @@ TreeItem_Draw( clientData.maxX = maxX; clientData.index = index; - TreeItem_WalkSpans(tree, item_, -#ifdef COLUMN_LOCK - lock, -#endif + TreeItem_WalkSpans(tree, item_, lock, x, y, width, height, SpanWalkProc_Draw, (ClientData) &clientData); } @@ -4511,17 +4463,12 @@ void TreeItem_UpdateWindowPositions( TreeCtrl *tree, /* Widget info. */ TreeItem item_, /* Item token. */ -#ifdef COLUMN_LOCK int lock, /* Columns we care about. */ -#endif int x, int y, /* Window coordinates of the item. */ int width, int height /* Total size of the item. */ ) { - TreeItem_WalkSpans(tree, item_, -#ifdef COLUMN_LOCK - lock, -#endif + TreeItem_WalkSpans(tree, item_, lock, x, y, width, height, SpanWalkProc_UpdateWindowPositions, (ClientData) NULL); } @@ -7316,7 +7263,6 @@ TreeItemCmd( TreeItem item_ = (TreeItem) item; XRectangle rect; -#ifdef COLUMN_LOCK if (objc == 4) { if (Tree_ItemBbox(tree, item_, COLUMN_LOCK_NONE, &x, &y, &w, &h) < 0) break; @@ -7330,20 +7276,6 @@ TreeItemCmd( totalWidth = TreeColumn_Offset(treeColumn); columnIndex = TreeColumn_Index(treeColumn); itemColumn = Item_FindColumn(tree, item, columnIndex); -#else - if (Tree_ItemBbox(tree, item_, &x, &y, &w, &h) < 0) - break; - if (objc > 4) { - if (Item_FindColumnFromObj(tree, item, objv[4], - &itemColumn, &columnIndex) != TCL_OK) - goto errorExit; - totalWidth = 0; - treeColumn = tree->columns; - for (i = 0; i < columnIndex; i++) { - totalWidth += TreeColumn_UseWidth(treeColumn); - treeColumn = TreeColumn_Next(treeColumn); - } -#endif if (treeColumn == tree->columnTree) indent = TreeItem_Indent(tree, item_); else @@ -8445,9 +8377,7 @@ void TreeItem_Identify( TreeCtrl *tree, /* Widget info. */ TreeItem item_, /* Item token. */ -#ifdef COLUMN_LOCK int lock, /* Columns to hit-test. */ -#endif int x, int y, /* Item coords to hit-test with. */ char *buf /* NULL-terminated string which may be * appended. */ @@ -8460,10 +8390,7 @@ TreeItem_Identify( char *buf; } clientData; - if (Tree_ItemBbox(tree, item_, -#ifdef COLUMN_LOCK - lock, -#endif + if (Tree_ItemBbox(tree, item_, lock, &left, &top, &width, &height) < 0) return; @@ -8472,10 +8399,7 @@ TreeItem_Identify( clientData.y = y; clientData.buf = buf; - TreeItem_WalkSpans(tree, item_, -#ifdef COLUMN_LOCK - lock, -#endif + TreeItem_WalkSpans(tree, item_, lock, 0, 0, width, height, SpanWalkProc_Identify, (ClientData) &clientData); } @@ -8546,10 +8470,7 @@ TreeItem_Identify2( Tcl_Obj *listObj; } clientData; - if (Tree_ItemBbox(tree, item_, -#ifdef COLUMN_LOCK - COLUMN_LOCK_NONE, -#endif + if (Tree_ItemBbox(tree, item_, COLUMN_LOCK_NONE, &left, &top, &width, &height) < 0) return; @@ -8560,10 +8481,7 @@ TreeItem_Identify2( clientData.y2 = y2; clientData.listObj = listObj; - TreeItem_WalkSpans(tree, item_, -#ifdef COLUMN_LOCK - COLUMN_LOCK_NONE, -#endif + TreeItem_WalkSpans(tree, item_, COLUMN_LOCK_NONE, left, top, width, height, SpanWalkProc_Identify2, (ClientData) &clientData); } |