WIP: prêt pour un deuxième essai d'automate...

This commit is contained in:
Jean Sirmai 2024-06-13 00:08:10 +02:00
parent 3d7167361a
commit 246c2f2cac
Signed by: jean
GPG Key ID: FB3115C340E057E3
3 changed files with 52 additions and 35 deletions

View File

@ -1,56 +1,41 @@
#include <gtk-4.0/gtk/gtk.h> #include <gtk-4.0/gtk/gtk.h>
#include <assert.h> #include <assert.h>
#include "callback.h" #include "callback.h"
#include "automaton.h"
/******************************************************************************/ /******************************************************************************/
/* S T A T E S */ /* S T A T E S */
/******************************************************************************/ /******************************************************************************/
// (exec / edit) X (state / rules / measure) X (observ / interpret / read / write) /* (exec / edit)
* X
* (state / rules / data)
* X
* (measure / analyse / interpret)
* X
* (read / write)
*/
enum { // S T A T E S static int status = INTER; // int get_status () {return status;}
INTER,
EXEC_STOP,
EXEC_RUN,
EDIT_STATE,
EDIT_RULE,
MEASURE,
OBSERVE,
ANALYSE,
HELP,
CONFIGURE
};
static int status = EXEC_STOP; // int get_status () {return status;}
enum { // T R A N S I T I O N S
EXEC_TO_RUN,
RUN_TO_EXEC,
EXEC_TO_INTER,
INTER_TO_EDIT,
EDIT_TO_INTER,
INTER_TO_EXEC,
};
/******************************************************************************/ /******************************************************************************/
/* T R A N S I T I O N S */ /* T R A N S I T I O N S */
/******************************************************************************/ /******************************************************************************/
void SWITCH_TO (int asked) { void SWITCH_TO (int asked) {
switch (asked) { switch (asked) {
case (0) : // EXEC_TO_RUN case (INTER) : // BEGIN_TO_EXEC_STOP
status = EXEC_RUN; status = STATE; printf ("SWITCH_TO INTER\n");
break; break;
case (1) : // RUN_TO_EXEC case (STATE) : // EXEC_STOP_TO_RUN
status = EXEC_STOP; status = RULES; printf ("SWITCH_TO STATE\n");
break; break;
case (2) : // EXEC_TO_INTER case (RULES) : // EXEC_RUN_TO_STOP
status = INTER; status = DATA; printf ("SWITCH_TO RULES\n");
break; break;
case (3) : // EDIT_TO_INTER case (DATA) : // EXEC_TO_INTER
// Ici, il faudra prévenir l'utilisateur par une pop-up window : TODO (sauvegarde automatique sinon) status = INTER; printf ("SWITCH_TO DATA\n");
// S'il ne prend pas la main, les données de la simulation en cours risquent d'être perdues
status = INTER;
break; break;
default : ; default : ;
} }
@ -67,15 +52,42 @@ void SWITCH_TO (int asked) {
/* /*
enum { // S T A T E S
INTER,
EXEC_STOP,
EXEC_RUN,
EDIT_STATE,
EDIT_RULES_TREE,
EDIT_RULE,
EDIT_MEASURE,
OBSERVE,
ANALYSE,
HELP,
CONFIGURE
};
static int status = EXEC_STOP; // int get_status () {return status;}
enum { // T R A N S I T I O N S
BEGIN_TO_EXEC_STOP
EXEC_STOP_TO_RUN,
EXEC_RUN_TO_STOP,
EXEC_TO_INTER,
INTER_TO_EDIT,
EDIT_TO_INTER,
INTER_TO_EXEC,
};
void set_status (int prescribed) { void set_status (int prescribed) {
status = prescribed; if (0) printf ("status = %d\n", status); status = prescribed; if (0) printf ("status = %d\n", status);
switch (status) { switch (status) {
case (0) : // EXEC_STOP case (0) : // EXEC_STOP DATA_ANALYSIS
status = EXEC_RUN; status = EXEC_RUN;
break; break;
case (1) : // EXEC_RUN case (1) : // EXEC_RUN
// Ici, il faudra prévenir l'utilisateur par une pop-up window : TODO (sauvegarde automatique sinon) // Ici, il faudra prévenir l'utilisateur par une pop-up window : (sauvegarde automatique sinon)
// S'il ne prend pas la main, les données de la simulation en cours risquent d'être perdues // S'il ne prend pas la main, les données de la simulation en cours risquent d'être perdues
status = EXEC_STOP; status = EXEC_STOP;
break; break;

View File

@ -4,3 +4,6 @@
void set_status (int prescribed); void set_status (int prescribed);
int get_status (); int get_status ();
enum choice { INTER, STATE, RULES, DATA };
void SWITCH_TO (int asked);

View File

@ -199,11 +199,13 @@ void on_toggle_observ_interpret (GtkWidget *btt_toggle_observ_interpret, gpointe
void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data) { void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data) {
gtk_widget_set_sensitive (GTK_WIDGET (data), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (data), TRUE);
printf ("callback.c (line 201) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n"); printf ("callback.c (line 201) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n");
SWITCH_TO (INTER);
} }
void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data) { void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data) {
gtk_window_close (GTK_WINDOW (data)); gtk_window_close (GTK_WINDOW (data));
printf ("callback.c (line 206) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n"); printf ("callback.c (line 206) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n");
SWITCH_TO (RULES);
} }
void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, gpointer data) { void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, gpointer data) {