From 562365ec78e8c7b3d50fedcc2f29482c09e7e9f0 Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Sat, 6 Jul 2024 08:27:05 +0200 Subject: [PATCH] WIP: creation des sub-automates: OBJECTS & SITUATIONS_box_RESET_VALUE --- include/base.h | 6 +- include/callbacks.h | 5 +- include/widgets.h | 21 ++++--- src/automat.c | 63 ++++++++++++++------ src/callbacks.c | 134 +++++++++++++++++++++++++------------------ src/widget.c/heads.c | 4 +- src/widget.c/rules.c | 2 +- src/widget.c/state.c | 107 +++++++++++++++++++++++----------- src/widget.c/stock.c | 7 ++- 9 files changed, 228 insertions(+), 121 deletions(-) diff --git a/include/base.h b/include/base.h index 866e2fe..d6c1b34 100644 --- a/include/base.h +++ b/include/base.h @@ -58,9 +58,13 @@ enum choice_STATE_RULES_DATA { STATE, RULES, DATA }; // xor void set_EXEC_EDIT (int prescribed); void set_STATE_RULES_DATA (int prescribed); +void set_OBJECTS_box_RESET_VALUE (int prescribed); +void set_SITUATIONS_box_RESET_VALUE (int prescribed); int get_EXEC_EDIT (); int get_STATE_RULES_DATA (); +int get_OBJECTS_box_RESET_VALUE (); +int get_SITUATIONS_box_RESET_VALUE (); @@ -112,7 +116,7 @@ static inline char *read_file(char *filename) char *contents; fd = open(filename, O_RDONLY); - if(fd < 0) { + if (fd < 0) { printf("Couldn't read file: %s\n",filename); return NULL; } diff --git a/include/callbacks.h b/include/callbacks.h index e5c2c1f..8bac52c 100644 --- a/include/callbacks.h +++ b/include/callbacks.h @@ -60,8 +60,11 @@ void on_glarea_realize (GtkWidget *widget); void on_glarea_unrealize (GtkWidget *widget); void on_axis_value_change (GtkAdjustment *adjustment, gpointer data); +void on_OBJECTS_box_RESET_VALUE (GtkAdjustment *adjustment, gpointer data); +void on_OBJECTS_box_DO_RESET (GtkWidget *btt_reset, gpointer data); +void on_SITUATIONS_box_RESET_VALUE (GtkAdjustment *adjustment, gpointer data); +void on_SITUATIONS_box_DO_RESET (GtkWidget *btt_reset, gpointer data); -void on_reset_image (GtkWidget *btt_reset, gpointer data); void on_clicked_HOME (GtkWidget *btt_reset, gpointer data); void on_clicked_MENU (GtkWidget *btt_reset, gpointer data); diff --git a/include/widgets.h b/include/widgets.h index 549013d..be11b28 100644 --- a/include/widgets.h +++ b/include/widgets.h @@ -47,11 +47,11 @@ GtkWindow *get_text_window(); GtkButton *get_GtkButton (char *btt_name); -GtkWidget *widget_get_STATE_page(); -GtkWidget *widget_get_RULES_page(); -GtkWidget *widget_get_STOCK_page(); +GtkWidget *get_STATE_page(); +GtkWidget *get_RULES_page(); +GtkWidget *get_STOCK_page(); -GtkWidget *widget_get_STOCK_text (gchar *text_name); +GtkWidget *get_STOCK_text (gchar *text_name); struct TreeNode_t {gchar *text; struct TreeNode_t *child, *next;}; void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child); @@ -59,10 +59,6 @@ struct TreeNode_t *create_user_tree_node (const gchar* text); void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root); GtkScrolledWindow *get_user_rules_tree (); -void icons_for_fun (GtkHeaderBar *header_bar); -GtkWidget *get_window_child_DATA_lab(); -void go_to_the_lab (GtkMenuButton* menu_button); - /******************************************************************************/ /* I M A G E S */ /******************************************************************************/ @@ -88,6 +84,15 @@ gchar *get_text_address_ANY (); +/******************************************************************************/ +/* L A B O */ +/******************************************************************************/ + +void icons_for_fun (GtkHeaderBar *header_bar); +void go_to_the_lab (GtkMenuButton* menu_button); + + + diff --git a/src/automat.c b/src/automat.c index db188a6..74583f3 100644 --- a/src/automat.c +++ b/src/automat.c @@ -4,24 +4,26 @@ * * * State machine * * * -* Copyright © 2021 Libre en Communs * -* Copyright © 2023 Adrien Bourmault * -* Copyright © 2024 Jean Sirmai * +* Copyright © 2021 Libre en Communs * +* Copyright © 2021 Adrien Bourmault * +* Copyright © 2021 Jean Sirmai * * * * This file is part of Gem-graph. * * * -* This program is free software: you can redistribute it and/or modify it * -* under the terms of the GNU Affero General Public License * -* as publishedby the Free Software Foundation, * -* either version 3 of the License, or (at your option) any later version. * +* This program is free software: you can redistribute it and/or modify it * +* under the terms of the GNU Affero General Public License * +* as published by the Free Software Foundation, * +* either version 3 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 Affero General Public License for more details. * +* 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 Affero General Public License for more details. * * * -* You should have received a copy of the GNU Affero General Public License * -* along with this program. If not, see . * +* You should have received a copy of the GNU Affero General Public License * +* along with this program. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -36,6 +38,9 @@ static int choice_EXEC_EDIT = EXEC; static int choice_STATE_RULES_DATA = STATE; +static int choice_OBJECTS_box_RESET_VALUE = 0; +static int choice_SITUATIONS_box_RESET_VALUE = 0; + /******************************************************************************/ /* T R A N S I T I O N S */ @@ -43,20 +48,38 @@ static int choice_STATE_RULES_DATA = STATE; static void debug_printing (int prescribed, int sub_automaton); -void set_EXEC_EDIT (int prescribed) { +void set_EXEC_EDIT (int prescribed) +{ if (choice_EXEC_EDIT != prescribed) { debug_printing (prescribed, 0); // EXEC_EDIT is sub_automaton 0 choice_EXEC_EDIT = prescribed; } } -void set_STATE_RULES_DATA (int prescribed) { +void set_STATE_RULES_DATA (int prescribed) +{ if (choice_STATE_RULES_DATA != prescribed) { debug_printing (prescribed, 1); // STATE_RULES_DATA is sub_automaton 1 choice_STATE_RULES_DATA = prescribed; } } +void set_OBJECTS_box_RESET_VALUE (int prescribed) +{ + if (choice_OBJECTS_box_RESET_VALUE != prescribed) { + debug_printing (prescribed, 2); // OBJECTS_box_RESET_VALUE is sub_automaton 2 + choice_OBJECTS_box_RESET_VALUE = prescribed; + } +} + +void set_SITUATIONS_box_RESET_VALUE (int prescribed) +{ + if (choice_SITUATIONS_box_RESET_VALUE != prescribed) { + debug_printing (prescribed, 3); // SITUATIONS_box_RESET_VALUE is sub_automaton 3 + choice_SITUATIONS_box_RESET_VALUE = prescribed; + } +} + /******************************************************************************/ /* G E T T E R S & D E B U G G E R S */ @@ -64,6 +87,8 @@ void set_STATE_RULES_DATA (int prescribed) { int get_EXEC_EDIT () {return choice_EXEC_EDIT;} int get_STATE_RULES_DATA () {return choice_STATE_RULES_DATA;} +int get_OBJECTS_box_RESET_VALUE () {return choice_OBJECTS_box_RESET_VALUE;} +int get_SITUATIONS_box_RESET_VALUE () {return choice_SITUATIONS_box_RESET_VALUE;} static char *get_str_EXEC_EDIT (int value) { switch (value) { @@ -97,6 +122,12 @@ static void debug_printing (int prescribed, int sub_automaton) { get_str_EXEC_EDIT (choice_EXEC_EDIT), get_str_STATE_RULES_DATA (prescribed)); break; + case (2) : printf("automat.set_OBJECTS_box_RESET_VALUE : %2d > %2d\n", + get_OBJECTS_box_RESET_VALUE(), prescribed); + break; + case (3) : printf("automat.set_SITUATIONS_box_RESET_VALUE : %2d > %2d\n", + get_SITUATIONS_box_RESET_VALUE(), prescribed); + break; default : printf("default in automaton.debug_printing()\n"); } } @@ -105,4 +136,4 @@ static void debug_printing (int prescribed, int sub_automaton) { /* N O N E X C L U S I V E S E L E C T I O N S */ /******************************************************************************/ - +// c'est quoi ça, déjà ? diff --git a/src/callbacks.c b/src/callbacks.c index 9926ac6..0496564 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -31,8 +31,30 @@ #include "../include/graph.h" +static void on_auto_notification (const char *message) +{ + /* Ignored (2024-06-06) because I don't know how to get "main_window" easily + + if (window->toast_revealer == NULL) { + g_printerr("Can't find app->toast_overlay !\n"); + return; + } + + if (window->toast_text == NULL) { + g_printerr("Can't find app->toast_overlay !\n"); + return; + } + + gtk_label_set_label(window->toast_text, message); + gtk_revealer_set_reveal_child(window->toast_revealer, true); + */ + g_printerr("%s\n", message); +} + + + /******************************************************************************/ -/* W I N D O W S A C T I V A T I O N S */ +/* W I N D O W S */ /******************************************************************************/ void on_main_window_activation (GtkApplication *app, @@ -61,26 +83,32 @@ void on_text_window_activation (GtkApplication *app, } -static void on_auto_notification (const char *message) -{ - /* Ignored (2024-06-06) because I don't know how to get "main_window" easily - if (window->toast_revealer == NULL) { - g_printerr("Can't find app->toast_overlay !\n"); - return; - } - - if (window->toast_text == NULL) { - g_printerr("Can't find app->toast_overlay !\n"); - return; - } - - gtk_label_set_label(window->toast_text, message); - gtk_revealer_set_reveal_child(window->toast_revealer, true); - */ - g_printerr("%s\n", message); +void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, + gpointer data) { + gtk_widget_set_sensitive (GTK_WIDGET (data), + TRUE); + printf ("callback.c (line 286) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n"); } +void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, + gpointer data) { + gtk_window_close (GTK_WINDOW (data)); + printf ("callback.c (line 292) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n"); +} + +void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, + gpointer data) { + gtk_window_close (GTK_WINDOW (data)); + printf ("callback.c (line 300) - WRITE_CURRENT_MODEL\n"); +} + +void on_clicked_HOME (GtkWidget *btt_reset, gpointer data) { + printf ("callback.on_clicked_HOME() button presents the dialog_window ( :- ) but it works only once.\n"); + gtk_window_present (GTK_WINDOW (get_dialog_window())); // works once only ! +} + + /******************************************************************************/ /* T R E E */ @@ -222,28 +250,26 @@ void on_axis_value_change(GtkAdjustment *adjustment, gpointer data) /******************************************************************************/ -/* B U T T O N S */ +/* S T A T E */ /******************************************************************************/ -static void switch_STATE_RULES_DATA() { - +static void switch_STATE_RULES_DATA() +{ switch (get_STATE_RULES_DATA()) { case (STATE) : gtk_window_set_child (get_main_window(), - GTK_WIDGET (widget_get_STATE_page())); + GTK_WIDGET (get_STATE_page())); break; case (RULES) : gtk_window_set_child (get_main_window(), - GTK_WIDGET (widget_get_RULES_page())); + GTK_WIDGET (get_RULES_page())); break; case (DATA) : - if (0) gtk_window_set_child (get_main_window(), - GTK_WIDGET (get_window_child_DATA_lab ())); gtk_window_set_child (get_main_window(), - GTK_WIDGET (widget_get_STOCK_page())); + GTK_WIDGET (get_STOCK_page())); break; default : @@ -251,8 +277,8 @@ static void switch_STATE_RULES_DATA() { } } -void on_toggle_EXEC_EDIT (GtkWidget *toggled_button, gpointer user_data) { - +void on_toggle_EXEC_EDIT (GtkWidget *toggled_button, gpointer user_data) +{ if (get_EXEC_EDIT ()) { gtk_button_set_icon_name (GTK_BUTTON (toggled_button), @@ -273,8 +299,8 @@ void on_toggle_EXEC_EDIT (GtkWidget *toggled_button, gpointer user_data) { switch_STATE_RULES_DATA(); } -void on_toggle_STATE_RULES_DATA (GtkWidget *toggled_button, gpointer user_data) { - +void on_toggle_STATE_RULES_DATA (GtkWidget *toggled_button, gpointer user_data) +{ const char *toggled_button_name = gtk_check_button_get_label (GTK_CHECK_BUTTON (toggled_button)); int is_active = gtk_check_button_get_active (GTK_CHECK_BUTTON (toggled_button)); @@ -296,30 +322,12 @@ void on_toggle_STATE_RULES_DATA (GtkWidget *toggled_button, gpointer user_data) } } -void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, - gpointer data) { - gtk_widget_set_sensitive (GTK_WIDGET (data), - TRUE); - printf ("callback.c (line 286) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n"); -} - -void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, - gpointer data) { - gtk_window_close (GTK_WINDOW (data)); - printf ("callback.c (line 292) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n"); -} - -void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, - gpointer data) { - gtk_window_close (GTK_WINDOW (data)); - printf ("callback.c (line 300) - WRITE_CURRENT_MODEL\n"); -} - -void on_clicked_HOME (GtkWidget *btt_reset, gpointer data) { - printf ("callback.on_clicked_HOME() button presents the dialog_window ( :- ) but it works only once.\n"); - gtk_window_present (GTK_WINDOW (get_dialog_window())); // works once only ! +void on_OBJECTS_box_RESET_VALUE (GtkAdjustment *adjustment, gpointer data) +{ + printf ("callback.on_OBJECTS_box_DO_RESET()\n"); } +void on_SITUATIONS_box_RESET_VALUE (GtkAdjustment *adjustment, gpointer data) {} @@ -333,10 +341,22 @@ void on_clicked_MENU (GtkWidget *btt_reset, gpointer menu_button) {go_to_the_lab - - - -void on_reset_image (GtkWidget *btt_reset, gpointer data) { - printf ("callback.on_reset_image() <> Comment remettre tous les curseurs à zéro ?\n"); +void on_OBJECTS_box_DO_RESET (GtkWidget *btt_reset, gpointer data) +{ + printf ("callback.on_OBJECTS_box_DO_RESET()\ + <> Comment remettre tous les curseurs à une même valeur ?\n\ + NB Cette valeur sera la valeur choisie au moyen du curseur situé à gauche du bouton 'RESET'\n\ + et elle sera lue par l'un des sous-automates qui déterminent l'état de la page 'ÉTAT'\n\ + et reportée dans le module 'automat'.\n"); + set_OBJECTS_box_RESET_VALUE (1); // utiliser gpointer data pour transmettre la valeur choisie TODO } +void on_SITUATIONS_box_DO_RESET (GtkWidget *btt_reset, gpointer data) +{ + set_SITUATIONS_box_RESET_VALUE (1); +} + +// GTK itself does not support event sounds, << A GREAT WAY TO DEBUG ! TODO +// you have to use a loadable module like the one that comes with libcanberra. + + diff --git a/src/widget.c/heads.c b/src/widget.c/heads.c index a634063..2ddaece 100644 --- a/src/widget.c/heads.c +++ b/src/widget.c/heads.c @@ -69,8 +69,8 @@ void widget_TEXT_WINDOW_design (GtkWindow *main_window, GtkWindow *text_window){ gtk_header_bar_set_title_widget (GTK_HEADER_BAR (header_bar), gtk_label_new (title)); gtk_window_set_titlebar (text_window, header_bar); - GtkWidget *child = widget_get_STOCK_text (get_text_address_THEORY()); - child = widget_get_STOCK_text (get_text_address_ABOUT_COMMANDS()); + GtkWidget *child = get_STOCK_text (get_text_address_THEORY()); + child = get_STOCK_text (get_text_address_ABOUT_COMMANDS()); gtk_window_set_child (GTK_WINDOW (text_window), GTK_WIDGET (child)); gtk_widget_set_size_request (GTK_WIDGET (child), W_TEXT_WINDOW, H_TEXT_WINDOW); diff --git a/src/widget.c/rules.c b/src/widget.c/rules.c index 61eea7b..46d7444 100644 --- a/src/widget.c/rules.c +++ b/src/widget.c/rules.c @@ -93,7 +93,7 @@ static GtkWidget *get_rules_tree_hpaned_new(){ return GTK_WIDGET (H_tree_vs_comparison); } -GtkWidget *widget_get_RULES_page() { +GtkWidget *get_RULES_page() { GtkPaned *H_tree_vs_selected = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)); // GtkWidget *arbre_des_règles = gtk_frame_new ("Arbre des règles"); // GtkWidget *édition_de_la_règle_sélectionnée_n_1 = gtk_frame_new ("Inspection"); diff --git a/src/widget.c/state.c b/src/widget.c/state.c index 76337b8..4b5cd11 100644 --- a/src/widget.c/state.c +++ b/src/widget.c/state.c @@ -37,9 +37,18 @@ #define UPPER_COMPARTMENT_PARTITION 600 #define LOWER_COMPARTMENT_PARTITION 1300 -GtkBox *get_XYZ_box(){ +/* L'image de l'état de l'espace (au centre) est entourée par trois panneaux: + * - CONTROL ou EDIT en bas qui permet de contrôler / choisir un état et / ou de l'éditer + * en mode EDIT, seuls les outils d'édition de l'état sont disponibles + * en mode EXEC, seuls les outils de déplacement dans la séquence sont disponibles + * - CAMERA à droite qui permet de choisir la position de la caméra + * - CONTRAST en haut qui permet de modifier un à un les contrastes des objets et des situations + * afin de mieux mettre en évidence l'objet ou le phénomène d'intérêt */ + +GtkBox *get_XYZ_box() +{ GtkBox *XYZ_labels_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); // spacing = 2 - GtkBox *XYZ_scrollbar_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2q + GtkBox *XYZ_scrollbar_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2 // GtkWidget *scale_X = gtk_scale_button_new (0, 360, 10, NULL); < à étudier // (double min, double max, double step, const char** icons) GtkAdjustment *X_adjust = gtk_adjustment_new (rand() % 100, 0, 380, 1, 0, 0); @@ -48,21 +57,24 @@ GtkBox *get_XYZ_box(){ GtkWidget *scroll_X = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, X_adjust); GtkWidget *scroll_Y = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, Y_adjust); GtkWidget *scroll_Z = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, Z_adjust); - gtk_widget_set_size_request (GTK_WIDGET (scroll_X), 1, 440); + gtk_widget_set_size_request (GTK_WIDGET (scroll_X), 1, 400); gtk_box_append (XYZ_scrollbar_box, GTK_WIDGET (gtk_label_new (" "))); // AD HOC (pour "centrer") gtk_box_append (XYZ_scrollbar_box, scroll_X); gtk_box_append (XYZ_scrollbar_box, scroll_Y); gtk_box_append (XYZ_scrollbar_box, scroll_Z); gtk_box_append (XYZ_scrollbar_box, GTK_WIDGET (gtk_label_new (" "))); // AD HOC (pour "centrer") - // + + GtkWidget *btt_reset = gtk_check_button_new_with_label ("reset"); gtk_box_append (XYZ_labels_box, GTK_WIDGET (gtk_label_new ("\nX Y Z"))); gtk_box_append (XYZ_labels_box, GTK_WIDGET (XYZ_scrollbar_box)); + gtk_box_append (XYZ_labels_box, GTK_WIDGET (btt_reset)); gtk_box_append (XYZ_labels_box, GTK_WIDGET (gtk_label_new (""))); return XYZ_labels_box; } -static GtkBox *get_ZOOM_box(){ +static GtkBox *get_ZOOM_box() +{ GtkBox *ZOOM_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); GtkWidget *ZOOM_Label = GTK_WIDGET (gtk_label_new (\ "\n TOOLS\n ---\n zoom\n ---\n space\n struct.\n\ @@ -73,53 +85,69 @@ static GtkBox *get_ZOOM_box(){ } -static GtkBox *get_OBJECTS_box(){ +static GtkBox *get_OBJECTS_box() +{ GtkBox *objects_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + GtkAdjustment *reset_value = gtk_adjustment_new (0, 0, 127, 1, 0, 0); + GtkScrollbar *reset_scrollbar = GTK_SCROLLBAR (gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, reset_value)); + printf("\nin state.get_OBJECTS_box() g_signal_connect (reset_scrollbar,...) déclenche:\n\ + Gtk-CRITICAL **:... assertion 'GTK_IS_SIGNAL_ACTION (self)' failed (Quel est le nom de ce signal ?)\n\ + GLib-GObject-CRITICAL **:... g_signal_connect_data: assertion 'detailed_signal != NULL' failed\n"); + g_signal_connect (reset_scrollbar, + gtk_signal_action_get_signal_name (GTK_SIGNAL_ACTION (reset_scrollbar)), + G_CALLBACK (on_OBJECTS_box_RESET_VALUE), NULL); + gtk_box_append (objects_box, gtk_label_new (" ")); // AD HOC (pour "centrer") + gtk_box_append (objects_box, GTK_WIDGET (reset_scrollbar)); GtkWidget *btt_reset = gtk_check_button_new_with_label ("reset"); - g_signal_connect (btt_reset, "toggled", G_CALLBACK (on_reset_image), NULL); + g_signal_connect (btt_reset, "toggled", G_CALLBACK (on_OBJECTS_box_DO_RESET), NULL); gtk_box_append (objects_box, btt_reset); - // Je veux pouvoir remettre tous les curseurs à ZÉRO ou à UN. TODO + // Je veux pouvoir remettre tous les curseurs à ZÉRO ou à UN. TODO + // À ZÉRO ou à UN ou à n'importe quelle valeur intermédiaire (la même pour tous) + // de façon à pouvoir mieux observer, par contraste, les structures qui m'intéressent + int n = 32; GtkAdjustment *adjust [n]; // (value, lower, upper, step_increment, page_increment, page_size) - for (int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) + { adjust [i] = gtk_adjustment_new (rand() % 127, 0, 127, 1, 0, 0); - } - for (int i = 0; i < n; i++) { - // adjust [i] = gtk_adjustment_new (127, 0, 127, 1, 0, 0); GtkScrollbar *scrollbar_i = GTK_SCROLLBAR (gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, adjust [i])); char tooltip_text[8]; sprintf(tooltip_text, "\n%d\n", i); - if (0 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " membrane "); - if (1 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " co-enzyme A "); - if (2 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " ATP synthase "); - if (3 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " any object name "); + if (0 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "membrane"); + if (1 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "co-enzyme A"); + if (2 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "ATP synthase"); + if (3 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "any object name"); if (4 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), tooltip_text); - gtk_box_append (objects_box, gtk_label_new (" ")); gtk_box_append (objects_box, GTK_WIDGET (scrollbar_i)); } return objects_box; } -static GtkBox *get_SITUATIONS_box(){ +static GtkBox *get_SITUATIONS_box() +{ GtkBox *situations_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + GtkAdjustment *reset_value = gtk_adjustment_new (0, 0, 127, 1, 0, 0); + GtkScrollbar *reset_scrollbar = GTK_SCROLLBAR (gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, reset_value)); + gtk_box_append (situations_box, gtk_label_new ("<>")); + gtk_box_append (situations_box, GTK_WIDGET (reset_scrollbar)); GtkWidget *btt_reset = gtk_check_button_new_with_label ("reset"); - g_signal_connect (btt_reset, "toggled", G_CALLBACK (on_reset_image), NULL); + g_signal_connect (btt_reset, "toggled", G_CALLBACK (on_SITUATIONS_box_DO_RESET), NULL); gtk_box_append (situations_box, btt_reset); GtkAdjustment *adjust = NULL; - for (int i = 0; i < 128; i++) { + for (int i = 0; i < 128; i++) + { adjust = gtk_adjustment_new (rand() % 127, 0, 127, 1, 0, 4); GtkScrollbar *scrollbar_i = GTK_SCROLLBAR (gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, adjust)); char tooltip_text[8]; sprintf(tooltip_text, "\n%d\n", i); - if (0 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " transcription "); - if (1 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " transport Na/K "); - if (2 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " ubiquitination "); - if (3 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " glycolyse aérobie "); - if (4 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " cycle de Krebs "); - if (5 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " shunt des pentoses "); - if (6 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), " any situation name "); + if (0 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "transcription"); + if (1 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "transport Na/K"); + if (2 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "ubiquitination"); + if (3 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "glycolyse aérobie"); + if (4 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "cycle de Krebs"); + if (5 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "shunt des pentoses"); + if (6 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), "any situation name"); if (7 == i % 8) gtk_widget_set_tooltip_text (GTK_WIDGET (scrollbar_i), tooltip_text); - gtk_box_append (situations_box, gtk_label_new (" ")); gtk_box_append (situations_box, GTK_WIDGET (scrollbar_i)); } return situations_box; @@ -129,7 +157,8 @@ static GtkBox *get_SITUATIONS_box(){ /* S T A T E p a g e > t h r e e t o p l e v e l b o x e s */ /******************************************************************************/ -static GtkWidget *get_OBJECTS_and_SITUATIONS(){ +static GtkWidget *get_OBJECTS_and_SITUATIONS() +{ GtkWidget *scroll_objects = gtk_scrolled_window_new (); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll_objects), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); @@ -154,7 +183,8 @@ static GtkWidget *get_OBJECTS_and_SITUATIONS(){ return objects_and_situations_horizontal_pane; } -GtkWidget *get_SPACE_VIEW_box() { +GtkWidget *get_SPACE_VIEW_box() +{ GtkBox *right_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); gtk_box_append (right_box, GTK_WIDGET (get_XYZ_box())); gtk_box_append (right_box, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL))); @@ -171,12 +201,14 @@ GtkWidget *get_SPACE_VIEW_box() { return GTK_WIDGET (central_box); } -static GtkWidget *get_SPACE_EDIT_CONTROL_box(){ +static GtkWidget *get_SPACE_EDIT_CONTROL_box() +{ return gtk_label_new ("_____________\n SPACE EDIT\n controls\n'''''''''''''''''''''''"); } -static GtkWidget *get_SEQUENCE_CONTROL_box() { +static GtkWidget *get_SEQUENCE_CONTROL_box() +{ GtkBox *SEQUENCE_CONTROL_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); GtkBox *DO_UNDO_REDO_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); @@ -202,7 +234,16 @@ static GtkWidget *get_SEQUENCE_CONTROL_box() { /* g e t S T A T E p a g e */ /******************************************************************************/ -GtkWidget *widget_get_STATE_page() { +/* L'image de l'état de l'espace (au centre) est entourée par trois panneaux: (à renommer ?) + * - CONTROL ou EDIT en bas qui permet de contrôler / choisir un état et / ou de l'éditer + * en mode EDIT, seuls les outils d'édition de l'état sont disponibles + * en mode EXEC, seuls les outils de déplacement dans la séquence sont disponibles + * - CAMERA à droite qui permet de choisir la position de la caméra + * - CONTRAST en haut qui permet de modifier un à un les contrastes des objets et des situations + * afin de mieux mettre en évidence l'objet ou le phénomène d'intérêt */ + +GtkWidget *get_STATE_page() +{ GtkBox *page_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); gtk_box_append (page_box, GTK_WIDGET (get_OBJECTS_and_SITUATIONS())); gtk_box_append (page_box, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL))); diff --git a/src/widget.c/stock.c b/src/widget.c/stock.c index a42a4df..761cd47 100644 --- a/src/widget.c/stock.c +++ b/src/widget.c/stock.c @@ -31,7 +31,7 @@ #include "../../include/callbacks.h" #include "../../include/widgets.h" -GtkWidget *widget_get_STOCK_page () { +GtkWidget *get_STOCK_page () { GtkBox *data_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 32)); GtkWidget* frame_rule_effect = gtk_frame_new ("rule effect"); @@ -64,7 +64,7 @@ GtkWidget *widget_get_STOCK_page () { return GTK_WIDGET (data_box); } -GtkWidget *widget_get_STOCK_text (gchar *text_address) { +GtkWidget *get_STOCK_text (gchar *text_address) { GtkWidget *view = gtk_text_view_new (); GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); gtk_text_buffer_set_text (buffer, read_file (text_address), -1); @@ -78,6 +78,9 @@ GtkWidget *widget_get_STOCK_text (gchar *text_address) { } + + + /******************************************************************************/ /* T E X T S */ /******************************************************************************/