summaryrefslogtreecommitdiffstats
path: root/generic/tkUndo.h
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tkUndo.h')
-rw-r--r--generic/tkUndo.h118
1 files changed, 77 insertions, 41 deletions
diff --git a/generic/tkUndo.h b/generic/tkUndo.h
index 9b072e6..3c34a0f 100644
--- a/generic/tkUndo.h
+++ b/generic/tkUndo.h
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkUndo.h,v 1.2 2003/05/19 13:04:24 vincentdarley Exp $
+ * RCS: @(#) $Id: tkUndo.h,v 1.3 2004/09/10 12:13:42 vincentdarley Exp $
*/
#ifndef _TKUNDO
@@ -24,27 +24,63 @@
# define TCL_STORAGE_CLASS DLLEXPORT
#endif
-/* enum definining the types used in an undo stack */
+/* Enum definining the types used in an undo stack */
typedef enum {
TK_UNDO_SEPARATOR, /* Marker */
- TK_UNDO_ACTION, /* Command */
- TK_UNDO_ACTION_LIST /* Command list */
+ TK_UNDO_ACTION /* Command */
} TkUndoAtomType;
-/* struct defining the basic undo/redo stack element */
+/*
+ * Callback proc type to carry out an undo or redo action
+ * via C code. (Actions can also be defined by Tcl scripts).
+ */
+
+typedef int (TkUndoProc) _ANSI_ARGS_((Tcl_Interp *interp,
+ ClientData clientData,
+ Tcl_Obj *objPtr));
+
+/*
+ * Struct defining a single action, one or more of which may
+ * be defined (and stored in a linked list) separately for each
+ * undo and redo action of an undo atom.
+ */
+
+typedef struct TkUndoSubAtom {
+ Tcl_Command command; /* Tcl token used to get the current
+ * Tcl command name which will be used
+ * to execute apply/revert scripts. If
+ * NULL then it is assumed the
+ * apply/revert scripts already contain
+ * everything. */
+ TkUndoProc *funcPtr; /* Function pointer for callback to
+ * perform undo/redo actions. */
+ ClientData clientData; /* data for 'funcPtr' */
+ Tcl_Obj *action; /* Command to apply the action that
+ * was taken */
+ struct TkUndoSubAtom *next; /* Pointer to the next element in the
+ * linked list */
+} TkUndoSubAtom;
+
+/*
+ * Struct representing a single undo+redo atom to be placed in
+ * the stack.
+ */
typedef struct TkUndoAtom {
TkUndoAtomType type; /* The type that will trigger the
* required action*/
- Tcl_Obj *apply; /* Command to apply the action that
- * was taken */
- Tcl_Obj *revert; /* The command to undo the action */
- struct TkUndoAtom * next; /* Pointer to the next element in the
+ TkUndoSubAtom *apply; /* Linked list of 'apply' actions to
+ * perform for this operation */
+ TkUndoSubAtom *revert; /* Linked list of 'revert' actions to
+ * perform for this operation */
+ struct TkUndoAtom *next; /* Pointer to the next element in the
* stack */
} TkUndoAtom;
-/* struct defining the basic undo/redo stack element */
+/*
+ * Struct defining a single undo+redo stack.
+ */
typedef struct TkUndoRedoStack {
TkUndoAtom * undoStack; /* The undo stack */
@@ -55,37 +91,37 @@ typedef struct TkUndoRedoStack {
int depth;
} TkUndoRedoStack;
-/* basic functions */
-
-EXTERN void TkUndoPushStack _ANSI_ARGS_((TkUndoAtom ** stack,
- TkUndoAtom * elem));
-
-EXTERN TkUndoAtom * TkUndoPopStack _ANSI_ARGS_((TkUndoAtom ** stack));
-
-EXTERN int TkUndoInsertSeparator _ANSI_ARGS_((TkUndoAtom ** stack));
-
-EXTERN void TkUndoClearStack _ANSI_ARGS_((TkUndoAtom ** stack));
-
-/* functions working on an undo/redo stack */
-
-EXTERN TkUndoRedoStack * TkUndoInitStack _ANSI_ARGS_((Tcl_Interp * interp,
- int maxdepth));
-
-EXTERN void TkUndoSetDepth _ANSI_ARGS_((TkUndoRedoStack * stack,
- int maxdepth));
-
-EXTERN void TkUndoClearStacks _ANSI_ARGS_((TkUndoRedoStack * stack));
-
-EXTERN void TkUndoFreeStack _ANSI_ARGS_((TkUndoRedoStack * stack));
-
-EXTERN void TkUndoInsertUndoSeparator _ANSI_ARGS_((TkUndoRedoStack * stack));
-
-EXTERN void TkUndoPushAction _ANSI_ARGS_((TkUndoRedoStack * stack,
- Tcl_Obj *actionScript, Tcl_Obj *revertScript, int isList));
-
-EXTERN int TkUndoRevert _ANSI_ARGS_((TkUndoRedoStack * stack));
-
-EXTERN int TkUndoApply _ANSI_ARGS_((TkUndoRedoStack * stack));
+/* Basic functions */
+
+EXTERN void TkUndoPushStack _ANSI_ARGS_((TkUndoAtom **stack,
+ TkUndoAtom *elem));
+EXTERN TkUndoAtom * TkUndoPopStack _ANSI_ARGS_((TkUndoAtom **stack));
+EXTERN int TkUndoInsertSeparator _ANSI_ARGS_((TkUndoAtom **stack));
+EXTERN void TkUndoClearStack _ANSI_ARGS_((TkUndoAtom **stack));
+
+/* Functions for working on an undo/redo stack */
+
+EXTERN TkUndoRedoStack * TkUndoInitStack _ANSI_ARGS_((Tcl_Interp *interp,
+ int maxdepth));
+EXTERN void TkUndoSetDepth _ANSI_ARGS_((TkUndoRedoStack *stack,
+ int maxdepth));
+EXTERN void TkUndoClearStacks _ANSI_ARGS_((TkUndoRedoStack *stack));
+EXTERN void TkUndoFreeStack _ANSI_ARGS_((TkUndoRedoStack *stack));
+EXTERN void TkUndoInsertUndoSeparator _ANSI_ARGS_((TkUndoRedoStack *stack));
+EXTERN TkUndoSubAtom * TkUndoMakeCmdSubAtom _ANSI_ARGS_((
+ Tcl_Command command,
+ Tcl_Obj *actionScript,
+ TkUndoSubAtom *subAtomList));
+EXTERN TkUndoSubAtom * TkUndoMakeSubAtom _ANSI_ARGS_((
+ TkUndoProc *funcPtr,
+ ClientData clientData,
+ Tcl_Obj *actionScript,
+ TkUndoSubAtom *subAtomList));
+EXTERN void TkUndoPushAction _ANSI_ARGS_((TkUndoRedoStack *stack,
+ TkUndoSubAtom *apply,
+ TkUndoSubAtom *revert));
+EXTERN int TkUndoRevert _ANSI_ARGS_((TkUndoRedoStack *stack));
+EXTERN int TkUndoApply _ANSI_ARGS_((TkUndoRedoStack *stack));
# undef TCL_STORAGE_CLASS
# define TCL_STORAGE_CLASS DLLIMPORT