summaryrefslogtreecommitdiff
path: root/indra/llui/llundo.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llundo.h')
-rw-r--r--indra/llui/llundo.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/indra/llui/llundo.h b/indra/llui/llundo.h
new file mode 100644
index 0000000000..8d0428ad3e
--- /dev/null
+++ b/indra/llui/llundo.h
@@ -0,0 +1,52 @@
+/**
+ * @file llundo.h
+ * @brief LLUndo class header file
+ *
+ * Copyright (c) 2000-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLUNDO_H
+#define LL_LLUNDO_H
+
+class LLUndoAction
+{
+ friend class LLUndoBuffer;
+protected:
+ S32 mClusterID;
+protected:
+ LLUndoAction(): mClusterID(0) {};
+ virtual ~LLUndoAction(){};
+
+public:
+ static LLUndoAction *create() { return NULL; }
+
+ virtual void undo() = 0;
+ virtual void redo() = 0;
+ virtual void cleanup() {};
+};
+
+class LLUndoBuffer
+{
+protected:
+ LLUndoAction **mActions; // array of pointers to undoactions
+ S32 mNumActions; // total number of actions in ring buffer
+ S32 mNextAction; // next action to perform undo/redo on
+ S32 mLastAction; // last action actually added to undo buffer
+ S32 mFirstAction; // beginning of ring buffer (don't undo any further)
+ S32 mOperationID; // current operation id, for undoing and redoing in clusters
+
+public:
+ LLUndoBuffer( LLUndoAction (*create_func()), S32 initial_count );
+ virtual ~LLUndoBuffer();
+
+ LLUndoAction *getNextAction(BOOL setClusterBegin = TRUE);
+ BOOL undoAction();
+ BOOL redoAction();
+ BOOL canUndo() { return (mNextAction != mFirstAction); }
+ BOOL canRedo() { return (mNextAction != mLastAction); }
+
+ void flushActions();
+};
+
+#endif //LL_LLUNDO_H