diff options
author | treectrl <treectrl> | 2002-12-23 07:04:24 (GMT) |
---|---|---|
committer | treectrl <treectrl> | 2002-12-23 07:04:24 (GMT) |
commit | f6f9f3985bcc42c153678477cdbc912b9bea1561 (patch) | |
tree | 358981e034ef9af950cb09c09c539cbaca1cb7e3 | |
parent | 0354b85d170074a910dd456fc5607e0c2ea8f6ec (diff) | |
download | tktreectrl-f6f9f3985bcc42c153678477cdbc912b9bea1561.zip tktreectrl-f6f9f3985bcc42c153678477cdbc912b9bea1561.tar.gz tktreectrl-f6f9f3985bcc42c153678477cdbc912b9bea1561.tar.bz2 |
element delete command works when element is in use.
-rw-r--r-- | generic/tkTreeStyle.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/generic/tkTreeStyle.c b/generic/tkTreeStyle.c index c1a550e..7a785b6 100644 --- a/generic/tkTreeStyle.c +++ b/generic/tkTreeStyle.c @@ -2179,7 +2179,7 @@ static void Style_Deleted(TreeCtrl *tree, Style *masterStyle) while (column != NULL) { Style *style = (Style *) TreeItemColumn_GetStyle(tree, column); - if ((style != NULL) && ((style == masterStyle) || (style->master == masterStyle))) + if ((style != NULL) && (style->master == masterStyle)) { Tree_InvalidateColumnWidth(tree, columnIndex); TreeItemColumn_ForgetStyle(tree, column); @@ -2218,6 +2218,43 @@ static void Element_Changed(TreeCtrl *tree, Element *masterElem, int flagM, int } } +static void Element_Deleted(TreeCtrl *tree, Element *masterElem) +{ + Tcl_HashEntry *hPtr; + Tcl_HashSearch search; + Style *masterStyle; + ElementLink *eLink; + int i, j; + + hPtr = Tcl_FirstHashEntry(&tree->styleHash, &search); + while (hPtr != NULL) + { + masterStyle = (Style *) Tcl_GetHashValue(hPtr); + for (i = 0; i < masterStyle->numElements; i++) + { + eLink = &masterStyle->elements[i]; + if (eLink->elem == masterElem) + { + Element *elemList[20]; + int elemMap[20]; + + for (j = 0; j < masterStyle->numElements; j++) + { + if (j == i) + continue; + elemList[(j < i) ? j : (j - 1)] = + masterStyle->elements[j].elem; + elemMap[(j < i) ? j : (j - 1)] = j; + } + Style_ChangeElements(tree, masterStyle, + masterStyle->numElements - 1, elemList, elemMap); + break; + } + } + hPtr = Tcl_NextHashEntry(&search); + } +} + void TreeStyle_TreeChanged(TreeCtrl *tree, int flagT) { Tcl_HashEntry *hPtr; @@ -2567,7 +2604,7 @@ int TreeElementCmd(ClientData clientData, Tcl_Interp *interp, int objc, { if (Element_FromObj(tree, objv[i], &elem) != TCL_OK) return TCL_ERROR; - /* TODO: Mass changes to any Style using this Element */ + Element_Deleted(tree, elem); Element_FreeResources(tree, elem); } break; |