diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/tkUndo.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/tkUndo.h	Tue Mar 18 17:55:14 2025 -0400
@@ -0,0 +1,115 @@
+/*
+ * tkUndo.h --
+ *
+ *	Declarations shared among the files that implement an undo stack.
+ *
+ * Copyright (c) 2002 Ludwig Callewaert.
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _TKUNDO
+#define _TKUNDO
+
+#ifndef _TKINT
+#include "tkInt.h"
+#endif
+
+/*
+ * Enum defining the types used in an undo stack.
+ */
+
+typedef enum {
+    TK_UNDO_SEPARATOR,		/* Marker */
+    TK_UNDO_ACTION		/* Command */
+} TkUndoAtomType;
+
+/*
+ * 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)(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. */
+    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 a single undo+redo stack.
+ */
+
+typedef struct TkUndoRedoStack {
+    TkUndoAtom *undoStack;	/* The undo stack. */
+    TkUndoAtom *redoStack;	/* The redo stack. */
+    Tcl_Interp *interp;		/* The interpreter in which to execute the
+				 * revert and apply scripts. */
+    int maxdepth;
+    int depth;
+} TkUndoRedoStack;
+
+/*
+ * Basic functions.
+ */
+
+MODULE_SCOPE void	TkUndoPushStack(TkUndoAtom **stack, TkUndoAtom *elem);
+MODULE_SCOPE TkUndoAtom *TkUndoPopStack(TkUndoAtom **stack);
+MODULE_SCOPE int	TkUndoInsertSeparator(TkUndoAtom **stack);
+MODULE_SCOPE void	TkUndoClearStack(TkUndoAtom **stack);
+
+/*
+ * Functions for working on an undo/redo stack.
+ */
+
+MODULE_SCOPE TkUndoRedoStack *TkUndoInitStack(Tcl_Interp *interp, int maxdepth);
+MODULE_SCOPE void	TkUndoSetMaxDepth(TkUndoRedoStack *stack, int maxdepth);
+MODULE_SCOPE void	TkUndoClearStacks(TkUndoRedoStack *stack);
+MODULE_SCOPE void	TkUndoFreeStack(TkUndoRedoStack *stack);
+MODULE_SCOPE int	TkUndoCanRedo(TkUndoRedoStack *stack);
+MODULE_SCOPE int	TkUndoCanUndo(TkUndoRedoStack *stack);
+MODULE_SCOPE void	TkUndoInsertUndoSeparator(TkUndoRedoStack *stack);
+MODULE_SCOPE TkUndoSubAtom *TkUndoMakeCmdSubAtom(Tcl_Command command,
+			    Tcl_Obj *actionScript, TkUndoSubAtom *subAtomList);
+MODULE_SCOPE TkUndoSubAtom *TkUndoMakeSubAtom(TkUndoProc *funcPtr,
+			    ClientData clientData, Tcl_Obj *actionScript,
+			    TkUndoSubAtom *subAtomList);
+MODULE_SCOPE void	TkUndoPushAction(TkUndoRedoStack *stack,
+			    TkUndoSubAtom *apply, TkUndoSubAtom *revert);
+MODULE_SCOPE int	TkUndoRevert(TkUndoRedoStack *stack);
+MODULE_SCOPE int	TkUndoApply(TkUndoRedoStack *stack);
+
+#endif /* _TKUNDO */