summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortreectrl <treectrl>2005-05-10 22:27:48 (GMT)
committertreectrl <treectrl>2005-05-10 22:27:48 (GMT)
commit212b89ab1224f6479e3aa51f570aa2d7d2a708b0 (patch)
tree3381310108a040ff8ad5c22354ccca636bdc2e33
parentcf56a41775d9fb1b0256d61e38c529805726e00b (diff)
downloadtktreectrl-212b89ab1224f6479e3aa51f570aa2d7d2a708b0.zip
tktreectrl-212b89ab1224f6479e3aa51f570aa2d7d2a708b0.tar.gz
tktreectrl-212b89ab1224f6479e3aa51f570aa2d7d2a708b0.tar.bz2
New <ItemDelete> event.
-rw-r--r--generic/tkTreeNotify.c65
1 files changed, 64 insertions, 1 deletions
diff --git a/generic/tkTreeNotify.c b/generic/tkTreeNotify.c
index d4a7710..2a92d5f 100644
--- a/generic/tkTreeNotify.c
+++ b/generic/tkTreeNotify.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 2002-2005 Tim Baker
*
- * RCS: @(#) $Id: tkTreeNotify.c,v 1.6 2005/05/01 01:39:36 treectrl Exp $
+ * RCS: @(#) $Id: tkTreeNotify.c,v 1.7 2005/05/10 22:27:48 treectrl Exp $
*/
#include "tkTreeCtrl.h"
@@ -27,6 +27,9 @@ static int EVENT_ACTIVEITEM;
static int EVENT_SCROLL,
DETAIL_SCROLL_X,
DETAIL_SCROLL_Y;
+#ifdef ALLOW_EVENT_ITEM_DELETED
+static int EVENT_ITEM_DELETE;
+#endif
static void ExpandItem(int id, Tcl_DString *result)
{
@@ -430,6 +433,62 @@ void TreeNotify_Scroll(TreeCtrl *tree, double fractions[2], int vertical)
(void) QE_BindEvent(tree->bindingTable, &event);
}
+#ifdef ALLOW_EVENT_ITEM_DELETED
+static void Percents_ItemDeleted(QE_ExpandArgs *args)
+{
+ struct {
+ TreeCtrl *tree;
+ int count;
+ int *itemIds;
+ } *data = args->clientData;
+ int i;
+
+ switch (args->which)
+ {
+ case 'i':
+ Tcl_DStringStartSublist(args->result);
+ for (i = 0; i < data->count; i++)
+ {
+#if ITEM_ID_IS_STRING
+ char buf[10 + TCL_INTEGER_SPACE];
+ (void) sprintf(buf, "%s%d", itemPrefix, data->itemIds[i]);
+ Tcl_DStringAppendElement(args->result, buf);
+#else /* ITEM_ID_IS_STRING */
+ char string[TCL_INTEGER_SPACE];
+ TclFormatInt(string, data->itemIds[i]);
+ Tcl_DStringAppendElement(args->result, string);
+#endif /* ITEM_ID_IS_STRING */
+ }
+ Tcl_DStringEndSublist(args->result);
+ break;
+
+ default:
+ Percents_Any(args, Percents_ItemDeleted, "i");
+ break;
+ }
+}
+
+void TreeNotify_ItemDeleted(TreeCtrl *tree, int itemIds[], int count)
+{
+ QE_Event event;
+ struct {
+ TreeCtrl *tree; /* Must be first*/
+ int count;
+ int *itemIds;
+ } data;
+
+ data.tree = tree;
+ data.count = count;
+ data.itemIds = itemIds;
+
+ event.type = EVENT_ITEM_DELETE;
+ event.detail = 0;
+ event.clientData = (ClientData) &data;
+
+ (void) QE_BindEvent(tree->bindingTable, &event);
+}
+#endif
+
int TreeNotify_Init(TreeCtrl *tree)
{
tree->bindingTable = QE_CreateBindingTable(tree->interp);
@@ -450,6 +509,10 @@ int TreeNotify_Init(TreeCtrl *tree)
DETAIL_SCROLL_X = QE_InstallDetail(tree->bindingTable, "x", EVENT_SCROLL, NULL);
DETAIL_SCROLL_Y = QE_InstallDetail(tree->bindingTable, "y", EVENT_SCROLL, NULL);
+#ifdef ALLOW_EVENT_ITEM_DELETED
+ EVENT_ITEM_DELETE = QE_InstallEvent(tree->bindingTable, "ItemDelete", Percents_ItemDeleted);
+#endif
+
return TCL_OK;
}