Add functions provided by the midend to tell a front end whether GUI
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 2 Apr 2011 15:36:30 +0000 (15:36 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 2 Apr 2011 15:36:30 +0000 (15:36 +0000)
buttons for undo and redo should currently be greyed out.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@9139 cda61777-01e9-0310-a592-d414129be87e

devel.but
midend.c
puzzles.h

index 8e35359..076ef8b 100644 (file)
--- a/devel.but
+++ b/devel.but
@@ -3096,6 +3096,24 @@ The front end can expect its drawing API and/or
 \cw{activate_timer()} to be called from within a call to this
 function.
 
+\H{midend-can-undo} \cw{midend_can_undo()}
+
+\c int midend_can_undo(midend *me);
+
+Returns \cw{TRUE} if the midend is currently in a state where the undo
+operation is meaningful (i.e. at least one position exists on the undo
+chain before the present one). Front ends may wish to use this to
+visually activate and deactivate an undo button.
+
+\H{midend-can-redo} \cw{midend_can_redo()}
+
+\c int midend_can_redo(midend *me);
+
+Returns \cw{TRUE} if the midend is currently in a state where the redo
+operation is meaningful (i.e. at least one position exists on the redo
+chain after the present one). Front ends may wish to use this to
+visually activate and deactivate a redo button.
+
 \H{midend-serialise} \cw{midend_serialise()}
 
 \c void midend_serialise(midend *me,
index 05ea663..300e2bf 100644 (file)
--- a/midend.c
+++ b/midend.c
@@ -428,6 +428,16 @@ void midend_new_game(midend *me)
     me->pressed_mouse_button = 0;
 }
 
+int midend_can_undo(midend *me)
+{
+    return (me->statepos > 1);
+}
+
+int midend_can_redo(midend *me)
+{
+    return (me->statepos < me->nstates);
+}
+
 static int midend_undo(midend *me)
 {
     if (me->statepos > 1) {
index 971cb29..6933e70 100644 (file)
--- a/puzzles.h
+++ b/puzzles.h
@@ -253,6 +253,8 @@ char *midend_get_game_id(midend *me);
 int midend_can_format_as_text_now(midend *me);
 char *midend_text_format(midend *me);
 char *midend_solve(midend *me);
+int midend_can_undo(midend *me);
+int midend_can_redo(midend *me);
 void midend_supersede_game_desc(midend *me, char *desc, char *privdesc);
 char *midend_rewrite_statusbar(midend *me, char *text);
 void midend_serialise(midend *me,