diff options
author | treectrl <treectrl> | 2006-10-30 02:41:55 (GMT) |
---|---|---|
committer | treectrl <treectrl> | 2006-10-30 02:41:55 (GMT) |
commit | 944fbd178e18c860c178858548d1f1185fbac89a (patch) | |
tree | e45402fdd8caa2a09beb809a975c3d0b6eb8c893 /generic/tkTreeCtrl.c | |
parent | 1f8b31ddaef3345b511f5f4eaa54cfdb9f45c468 (diff) | |
download | tktreectrl-944fbd178e18c860c178858548d1f1185fbac89a.zip tktreectrl-944fbd178e18c860c178858548d1f1185fbac89a.tar.gz tktreectrl-944fbd178e18c860c178858548d1f1185fbac89a.tar.bz2 |
Restore old behaviour of deprecated [expand], [collapse] and [toggle] allowing zero or more item arguments.
Diffstat (limited to 'generic/tkTreeCtrl.c')
-rw-r--r-- | generic/tkTreeCtrl.c | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c index 6076ce0..001f756 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.75 2006/10/30 00:42:13 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.c,v 1.76 2006/10/30 02:41:55 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -645,35 +645,32 @@ static int TreeWidgetCmd( } #ifdef DEPRECATED - /* T expand ?-recurse? I */ + /* T expand ?-recurse? I ... */ case COMMAND_COLLAPSE: case COMMAND_EXPAND: case COMMAND_TOGGLE: { + char *s; int recurse = 0; int mode = 0; /* lint */ - int i, count; + int i, j, count, len; TreeItemList items, item2s; TreeItem _item; ItemForEach iter; - if (objc < 3 || objc > 4) { - Tcl_WrongNumArgs(interp, 2, objv, "?-recurse? item"); - goto error; - } - if (objc == 4) { - char *s = Tcl_GetString(objv[3]); - if (strcmp(s, "-recurse")) { + if (objc == 2) + break; + s = Tcl_GetStringFromObj(objv[2], &len); + if (s[0] == '-') { + if (strncmp(s, "-recurse", len)) { FormatResult(interp, "bad option \"%s\": must be -recurse", s); goto error; } + if (objc == 3) + break; recurse = 1; } - if (TreeItemList_FromObj(tree, objv[objc - 1], &items, - IFO_NOT_NULL) != TCL_OK) { - goto error; - } switch (index) { case COMMAND_COLLAPSE: mode = 0; @@ -685,20 +682,26 @@ static int TreeWidgetCmd( mode = -1; break; } - TreeItemList_Init(tree, &item2s, 0); - ITEM_FOR_EACH(_item, &items, NULL, &iter) { - TreeItemList_Append(&item2s, _item); - if (!iter.all && recurse) { - TreeItem_ListDescendants(tree, _item, &item2s); + for (i = 2 + recurse; i < objc; i++) { + if (TreeItemList_FromObj(tree, objv[i], &items, + IFO_NOT_NULL) != TCL_OK) { + goto error; } + TreeItemList_Init(tree, &item2s, 0); + ITEM_FOR_EACH(_item, &items, NULL, &iter) { + TreeItemList_Append(&item2s, _item); + if (!iter.all && recurse) { + TreeItem_ListDescendants(tree, _item, &item2s); + } + } + count = TreeItemList_Count(&item2s); + for (j = 0; j < count; j++) { + _item = TreeItemList_Nth(&item2s, j); + TreeItem_OpenClose(tree, _item, mode, FALSE); + } + TreeItemList_Free(&items); + TreeItemList_Free(&item2s); } - count = TreeItemList_Count(&item2s); - for (i = 0; i < count; i++) { - _item = TreeItemList_Nth(&item2s, i); - TreeItem_OpenClose(tree, _item, mode, FALSE); - } - TreeItemList_Free(&items); - TreeItemList_Free(&item2s); #ifdef SELECTION_VISIBLE Tree_DeselectHidden(tree); #endif |