From 54518b28e6ef1585e35bed9cb92e3f5efb53e011 Mon Sep 17 00:00:00 2001 From: "David N. Welton" Date: Wed, 25 Feb 2009 17:06:05 +0100 Subject: Removed SELECTION_VISIBLE define in favor of runtime option. --- generic/tkTreeCtrl.c | 80 ++++++++++++++++++++++--------------------------- generic/tkTreeCtrl.h | 3 +- generic/tkTreeDisplay.c | 4 +-- generic/tkTreeItem.c | 28 ++++++++--------- 4 files changed, 53 insertions(+), 62 deletions(-) diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c index 7c6af90..1e7c7f8 100644 --- a/generic/tkTreeCtrl.c +++ b/generic/tkTreeCtrl.c @@ -132,8 +132,7 @@ static Tk_OptionSpec optionSpecs[] = { 0, (ClientData) doubleBufferST, TREE_CONF_REDISPLAY}, {TK_OPTION_PIXELS, "-fillstripes", "fillStripes", "FillStripes", - "1", Tk_Offset(TreeCtrl, fillStripesObj), - Tk_Offset(TreeCtrl, fillStripes), + "1", -1, Tk_Offset(TreeCtrl, fillStripes), 0, (ClientData) NULL, TREE_CONF_RELAYOUT}, {TK_OPTION_SYNONYM, "-fg", (char *) NULL, (char *) NULL, @@ -221,6 +220,11 @@ static Tk_OptionSpec optionSpecs[] = { {TK_OPTION_STRING, "-scrollmargin", "scrollMargin", "ScrollMargin", "0", Tk_Offset(TreeCtrl, scrollMargin), -1, 0, (ClientData) NULL, 0}, + + {TK_OPTION_BOOLEAN, "-selectionvisible", "selectionVisible", "SelectionVisible", + "1", -1, Tk_Offset(TreeCtrl, selectionVisible), + TK_OPTION_NULL_OK, (ClientData) NULL, 0}, + {TK_OPTION_STRING, "-selectmode", "selectMode", "SelectMode", DEF_LISTBOX_SELECT_MODE, -1, Tk_Offset(TreeCtrl, selectMode), TK_OPTION_NULL_OK, (ClientData) NULL, 0}, @@ -767,9 +771,9 @@ static int TreeWidgetCmd( TreeItemList_Free(&items); TreeItemList_Free(&item2s); } -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } break; } #endif /* DEPRECATED */ @@ -1365,7 +1369,7 @@ TreeConfigure( if ((Tcl_ListObjGetElements(interp, tree->wrapObj, &listObjc, &listObjv) != TCL_OK) || (listObjc > 2)) { -badWrap: + badWrap: FormatResult(interp, "bad wrap \"%s\"", Tcl_GetString(tree->wrapObj)); continue; @@ -2472,11 +2476,11 @@ Tree_AddToSelection( Tcl_HashEntry *hPtr; int isNew; -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { if (!TreeItem_ReallyVisible(tree, item)) panic("Tree_AddToSelection: item %d not ReallyVisible", TreeItem_GetID(tree, item)); -#endif + } if (TreeItem_GetSelected(tree, item)) panic("Tree_AddToSelection: item %d already selected", TreeItem_GetID(tree, item)); @@ -2606,14 +2610,10 @@ TreeSelectionCmd( hPtr = Tcl_FirstHashEntry(&tree->itemHash, &search); while (hPtr != NULL) { item = (TreeItem) Tcl_GetHashValue(hPtr); -#ifdef SELECTION_VISIBLE if (!TreeItem_GetSelected(tree, item) && TreeItem_GetEnabled(tree, item) && - TreeItem_ReallyVisible(tree, item)) { -#else - if (!TreeItem_GetSelected(tree, item) && - TreeItem_GetEnabled(tree, item)) { -#endif + (!tree->selectionVisible || + (tree->selectionVisible && TreeItem_ReallyVisible(tree, item)))) { Tree_AddToSelection(tree, item); TreeItemList_Append(&items, item); } @@ -2629,14 +2629,10 @@ TreeSelectionCmd( return TCL_ERROR; TreeItemList_Init(tree, &items, count); while (1) { -#ifdef SELECTION_VISIBLE - if (!TreeItem_GetSelected(tree, itemFirst) && - TreeItem_GetEnabled(tree, itemFirst) && - TreeItem_ReallyVisible(tree, itemFirst)) { -#else - if (!TreeItem_GetSelected(tree, itemFirst) && - TreeItem_GetEnabled(tree, itemFirst)) { -#endif + if (!TreeItem_GetSelected(tree, item) && + TreeItem_GetEnabled(tree, item) && + (!tree->selectionVisible || + (tree->selectionVisible && TreeItem_ReallyVisible(tree, item)))) { Tree_AddToSelection(tree, itemFirst); TreeItemList_Append(&items, itemFirst); } @@ -2650,19 +2646,15 @@ TreeSelectionCmd( TreeItemList_Init(tree, &items, count); for (i = 0; i < count; i++) { item = TreeItemList_Nth(&itemsFirst, i); -#ifdef SELECTION_VISIBLE if (!TreeItem_GetSelected(tree, item) && TreeItem_GetEnabled(tree, item) && - TreeItem_ReallyVisible(tree, item)) { -#else - if (!TreeItem_GetSelected(tree, item) && - TreeItem_GetEnabled(tree, item)) { -#endif + (!tree->selectionVisible || + (tree->selectionVisible && TreeItem_ReallyVisible(tree, item)))) { Tree_AddToSelection(tree, item); TreeItemList_Append(&items, item); } } -doneADD: + doneADD: if (TreeItemList_Count(&items)) { TreeNotify_Selection(tree, &items, NULL); } @@ -2757,7 +2749,7 @@ doneADD: } } TreeItemList_Free(&itemsFirst); -doneCLEAR: + doneCLEAR: if (TreeItemList_Count(&items)) { TreeNotify_Selection(tree, NULL, &items); } @@ -2780,7 +2772,7 @@ doneCLEAR: Tcl_HashEntry *hPtr; Tcl_HashSearch search; -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { if (objc < 3 || objc > 5) { Tcl_WrongNumArgs(interp, 3, objv, "?first? ?last?"); return TCL_ERROR; @@ -2835,14 +2827,14 @@ doneCLEAR: TreeItemList_Free(&items); break; } -#else /* SELECTION_VISIBLE */ + } else { /* SELECTION_VISIBLE */ /* If any item may be selected, including orphans, then getting * a sorted list of selected items is impossible. */ if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, (char *) NULL); return TCL_ERROR; } -#endif /* SELECTION_VISIBLE */ + } /* SELECTION_VISIBLE */ if (tree->selectCount < 1) break; @@ -2955,7 +2947,7 @@ doneCLEAR: /* Select all */ if (allS) { TreeItemList_Init(tree, &newS, tree->itemCount - tree->selectCount); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { item = tree->root; if (!TreeItem_ReallyVisible(tree, item)) item = TreeItem_NextVisible(tree, item); @@ -2966,7 +2958,7 @@ doneCLEAR: } item = TreeItem_NextVisible(tree, item); } -#else + } else { /* Include detached items */ hPtr = Tcl_FirstHashEntry(&tree->itemHash, &search); while (hPtr != NULL) { @@ -2977,7 +2969,7 @@ doneCLEAR: } hPtr = Tcl_NextHashEntry(&search); } -#endif + } /* Ignore the deselect list. */ goto modifyDONE; } @@ -2991,10 +2983,10 @@ doneCLEAR: continue; if (!TreeItem_GetEnabled(tree, item)) continue; -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { if (!TreeItem_ReallyVisible(tree, item)) continue; -#endif + } TreeItemList_Append(&newS, item); } } @@ -3034,7 +3026,7 @@ doneCLEAR: } } } -modifyDONE: + modifyDONE: for (i = 0; i < TreeItemList_Count(&newS); i++) Tree_AddToSelection(tree, TreeItemList_Nth(&newS, i)); for (i = 0; i < TreeItemList_Count(&newD); i++) @@ -3578,7 +3570,7 @@ Tree_ReleaseItems( */ /* -textlayout $font $text + textlayout $font $text -width pixels -wrap word|char -justify left|center|right @@ -4274,7 +4266,7 @@ Treectrl_Init( return TCL_ERROR; } return Tcl_EvalEx(interp, initScript, -1, TCL_EVAL_GLOBAL); -} + } /* *-------------------------------------------------------------- @@ -4293,11 +4285,11 @@ Treectrl_Init( *-------------------------------------------------------------- */ -DLLEXPORT int -Treectrl_SafeInit( + DLLEXPORT int + Treectrl_SafeInit( Tcl_Interp *interp /* Interpreter the package is loading into. */ ) -{ + { return Treectrl_Init(interp); -} + } diff --git a/generic/tkTreeCtrl.h b/generic/tkTreeCtrl.h index 96bb93b..59f7d1c 100644 --- a/generic/tkTreeCtrl.h +++ b/generic/tkTreeCtrl.h @@ -37,7 +37,6 @@ extern void dbwin_add_interp(Tcl_Interp *interp); #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif -#define SELECTION_VISIBLE #define ALLOC_HAX #define DEPRECATED #define PACKAGE_PATCHLEVEL "/""/" @@ -407,8 +406,8 @@ struct TreeCtrl int itemTagExpr; /* Enable/disable operators in item tags */ int columnTagExpr; /* Enable/disable operators in column tags */ - Tcl_Obj* fillStripesObj; /* Enable filling empty space with more stripes. */ int fillStripes; /* Enable filling empty space with more stripes. */ + int selectionVisible; /* Allow non-visible items to be selected. */ int iAverageHeight; }; diff --git a/generic/tkTreeDisplay.c b/generic/tkTreeDisplay.c index 3e65b0d..6ceaa4b 100644 --- a/generic/tkTreeDisplay.c +++ b/generic/tkTreeDisplay.c @@ -5373,12 +5373,12 @@ displayRetry: /* Some change requires selection changes */ if (dInfo->flags & DINFO_REDO_SELECTION) { -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { /* Possible event. */ Tree_DeselectHidden(tree); if (tree->deleted) goto displayExit; -#endif + } dInfo->flags &= ~(DINFO_REDO_SELECTION); } diff --git a/generic/tkTreeItem.c b/generic/tkTreeItem.c index 32e9e72..e776235 100644 --- a/generic/tkTreeItem.c +++ b/generic/tkTreeItem.c @@ -7029,7 +7029,6 @@ ItemTagCmd( return result; } -#ifdef SELECTION_VISIBLE /* *---------------------------------------------------------------------- @@ -7063,6 +7062,8 @@ Tree_DeselectHidden( TreeItem item; int i; + fprintf(stderr, "bingbong %d\n", tree->selectionVisible); + if (tree->selectCount < 1) return; @@ -7086,7 +7087,6 @@ Tree_DeselectHidden( TreeItemList_Free(&items); } -#endif /* SELECTION_VISIBLE */ /* *---------------------------------------------------------------------- @@ -7464,9 +7464,9 @@ TreeItemCmd( TreeItem_OpenClose(tree, item, mode); } TreeItemList_Free(&items); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } break; } /* T item compare I op I */ @@ -7780,9 +7780,9 @@ TreeItemCmd( item2->parent = item; item->numChildren++; TreeItem_AddToParent(tree, item2); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } } if (item->firstChild != NULL) Tcl_SetObjResult(interp, TreeItem_ToObj(tree, item->firstChild)); @@ -7823,9 +7823,9 @@ TreeItemCmd( item2->parent = item; item->numChildren++; TreeItem_AddToParent(tree, item2); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } } if (item->lastChild != NULL) Tcl_SetObjResult(interp, TreeItem_ToObj(tree, item->lastChild)); @@ -7844,9 +7844,9 @@ TreeItemCmd( item2->parent = item->parent; item->parent->numChildren++; TreeItem_AddToParent(tree, item2); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } } if (item->nextSibling != NULL) Tcl_SetObjResult(interp, TreeItem_ToObj(tree, item->nextSibling)); @@ -7915,9 +7915,9 @@ TreeItemCmd( item2->parent = item->parent; item->parent->numChildren++; TreeItem_AddToParent(tree, item2); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } } if (item->prevSibling != NULL) Tcl_SetObjResult(interp, TreeItem_ToObj(tree, item->prevSibling)); @@ -7938,9 +7938,9 @@ TreeItemCmd( if (tree->debug.enable && tree->debug.data) Tree_Debug(tree); Tree_InvalidateColumnWidth(tree, NULL); -#ifdef SELECTION_VISIBLE + if (tree->selectionVisible) { Tree_DeselectHidden(tree); -#endif + } break; } case COMMAND_RNC: { -- cgit v0.12