summaryrefslogtreecommitdiffstats
path: root/generic/tkTreeDrag.c
diff options
context:
space:
mode:
authortreectrl <treectrl>2004-07-30 21:02:23 (GMT)
committertreectrl <treectrl>2004-07-30 21:02:23 (GMT)
commit3ef4596837d273c4be7d4fd19ae4aee4176ebd43 (patch)
tree600c378ca5117efffae0bfccc6aa05d33e021045 /generic/tkTreeDrag.c
parent2820e2198f2ef6c959569a4a04fdbf80bc3f4558 (diff)
downloadtktreectrl-3ef4596837d273c4be7d4fd19ae4aee4176ebd43.zip
tktreectrl-3ef4596837d273c4be7d4fd19ae4aee4176ebd43.tar.gz
tktreectrl-3ef4596837d273c4be7d4fd19ae4aee4176ebd43.tar.bz2
Add copyright.
Beefed up DragImage_Config(); handle -visible configuration properly. Removed "dragimage visible" command.
Diffstat (limited to 'generic/tkTreeDrag.c')
-rw-r--r--generic/tkTreeDrag.c92
1 files changed, 50 insertions, 42 deletions
diff --git a/generic/tkTreeDrag.c b/generic/tkTreeDrag.c
index f4d4dc4..dad0328 100644
--- a/generic/tkTreeDrag.c
+++ b/generic/tkTreeDrag.c
@@ -1,3 +1,13 @@
+/*
+ * tkTreeDrag.c --
+ *
+ * This module implements outline dragging for treectrl widgets.
+ *
+ * Copyright (c) 2002-2004 Tim Baker
+ *
+ * RCS: @(#) $Id: tkTreeDrag.c,v 1.7 2004/07/30 21:02:23 treectrl Exp $
+ */
+
#include "tkTreeCtrl.h"
typedef struct DragElem DragElem;
@@ -21,10 +31,12 @@ struct DragImage
int sx, sy; /* Window coords where displayed */
};
+#define DRAG_CONF_VISIBLE 0x0001
+
static Tk_OptionSpec optionSpecs[] = {
{TK_OPTION_BOOLEAN, "-visible", (char *) NULL, (char *) NULL,
"0", -1, Tk_Offset(DragImage, visible),
- 0, (ClientData) NULL, 0},
+ 0, (ClientData) NULL, DRAG_CONF_VISIBLE},
{TK_OPTION_END, (char *) NULL, (char *) NULL, (char *) NULL,
(char *) NULL, 0, -1, 0, 0, 0}
};
@@ -112,25 +124,46 @@ static int DragImage_Config(DragImage *dragImage, int objc, Tcl_Obj *CONST objv[
{
TreeCtrl *tree = dragImage->tree;
Tk_SavedOptions savedOptions;
- int mask, result;
+ int error;
+ Tcl_Obj *errorResult = NULL;
+ int mask;
- result = Tk_SetOptions(tree->interp, (char *) dragImage, dragImage->optionTable,
- objc, objv, tree->tkwin, &savedOptions, &mask);
- if (result != TCL_OK)
+ for (error = 0; error <= 1; error++)
{
- Tk_RestoreSavedOptions(&savedOptions);
- return TCL_ERROR;
+ if (error == 0)
+ {
+ if (Tk_SetOptions(tree->interp, (char *) dragImage, dragImage->optionTable,
+ objc, objv, tree->tkwin, &savedOptions, &mask) != TCL_OK)
+ {
+ mask = 0;
+ continue;
+ }
+
+ /* xxx */
+
+ Tk_FreeSavedOptions(&savedOptions);
+ break;
+ }
+ else
+ {
+ errorResult = Tcl_GetObjResult(tree->interp);
+ Tcl_IncrRefCount(errorResult);
+ Tk_RestoreSavedOptions(&savedOptions);
+
+ /* xxx */
+
+ Tcl_SetObjResult(tree->interp, errorResult);
+ Tcl_DecrRefCount(errorResult);
+ return TCL_ERROR;
+ }
}
- Tk_FreeSavedOptions(&savedOptions);
-#if 0
- if (mask & CONF_VISIBLE)
+
+ if (mask & DRAG_CONF_VISIBLE)
{
- if (dragImage->visible)
- TreeDragImage_Display();
- else
- TreeDragImage_Unisplay();
+ TreeDragImage_Undisplay((TreeDragImage) dragImage);
+ TreeDragImage_Display((TreeDragImage) dragImage);
}
-#endif
+
return TCL_OK;
}
@@ -166,9 +199,9 @@ int DragImageCmd(ClientData clientData, Tcl_Interp *interp, int objc,
TreeCtrl *tree = (TreeCtrl *) clientData;
DragImage *dragImage = (DragImage *) tree->dragImage;
static CONST char *commandNames[] = { "add", "cget", "clear", "configure",
- "offset", "visible", (char *) NULL };
+ "offset", (char *) NULL };
enum { COMMAND_ADD, COMMAND_CGET, COMMAND_CLEAR, COMMAND_CONFIGURE,
- COMMAND_OFFSET, COMMAND_VISIBLE };
+ COMMAND_OFFSET };
int index;
if (objc < 3)
@@ -448,31 +481,6 @@ doneAdd:
TreeDragImage_Display(tree->dragImage);
break;
}
-
- /* T dragimage visible ?boolean? */
- case COMMAND_VISIBLE:
- {
- int visible;
-
- if (objc != 3 && objc != 4)
- {
- Tcl_WrongNumArgs(interp, 3, objv, "?boolean?");
- return TCL_ERROR;
- }
- if (objc == 4)
- {
- if (Tcl_GetBooleanFromObj(interp, objv[3], &visible) != TCL_OK)
- return TCL_ERROR;
- if (visible != dragImage->visible)
- {
- dragImage->visible = visible;
- TreeDragImage_Undisplay(tree->dragImage);
- TreeDragImage_Display(tree->dragImage);
- }
- }
- Tcl_SetObjResult(interp, Tcl_NewBooleanObj(dragImage->visible));
- break;
- }
}
return TCL_OK;