summaryrefslogtreecommitdiff
path: root/history.h
diff options
context:
space:
mode:
Diffstat (limited to 'history.h')
-rw-r--r--history.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/history.h b/history.h
new file mode 100644
index 0000000..f2af08f
--- /dev/null
+++ b/history.h
@@ -0,0 +1,117 @@
+/*
+ * Sudoku: A plug-in for the Video Disk Recorder
+ *
+ * Copyright (C) 2008, Thomas Günther <tom@toms-cafe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * $Id: history.h 140 2008-06-30 22:10:38Z tom $
+ */
+
+#ifndef VDR_SUDOKU_HISTORY_H
+#define VDR_SUDOKU_HISTORY_H
+
+#include "sudoku.h"
+
+
+namespace Sudoku
+{
+ class PuzzleGame;
+ class Pos;
+ class Move;
+ typedef Vector<Move*> Moves;
+
+
+ //--- class Sudoku::History --------------------------------------------------
+
+ class History
+ {
+ private:
+ Moves history;
+ unsigned int executed;
+
+ public:
+
+ /** Constructor */
+ History();
+
+ /** Destructor */
+ ~History();
+
+ /** Reset the history. */
+ void reset();
+
+ /** Current move in the history */
+ Move* current();
+
+ /** Add a new move */
+ void add(Move* move);
+
+ /** Set previous move as current */
+ void backward();
+
+ /** Set next move as current */
+ void forward();
+
+ /** Are there executed moves in the history */
+ bool movesExecuted();
+
+ /** Are there moves to execute in the history */
+ bool movesToExecute();
+ };
+
+
+ //--- class Sudoku::Move -----------------------------------------------------
+
+ class Move
+ {
+ public:
+
+ /** Destructor */
+ virtual ~Move() {};
+
+ /** Do the move */
+ virtual void execute() = 0;
+
+ /** Undo the move. */
+ virtual void takeBack() = 0;
+ };
+
+
+ //--- class Sudoku::SetMove --------------------------------------------------
+
+ class SetMove : public Move
+ {
+ private:
+ PuzzleGame& puzzle;
+ unsigned int pos;
+ unsigned int old_number;
+ unsigned int new_number;
+
+ public:
+
+ /** Constructor */
+ SetMove(PuzzleGame& puzzle, unsigned int number);
+
+ /** Do the move. */
+ void execute();
+
+ /** Undo the move. */
+ void takeBack();
+ };
+
+} // namespace Sudoku
+
+#endif // VDR_SUDOKU_HISTORY_H