diff --git a/(notes) b/(notes) index 0a1a41a..8693532 100644 --- a/(notes) +++ b/(notes) @@ -109,6 +109,8 @@ GtkScrolledWindow *get_scrolled_gl_area(){ +// https://docs.gtk.org/gtk4/getting_started.html (m'aura bien servi, quand même !) + diff --git a/callback.c b/callback.c index 1a5e290..eef1fe4 100644 --- a/callback.c +++ b/callback.c @@ -22,9 +22,8 @@ void ui_main_window (GtkApplication *self, gpointer user_data) /******************************************************************************/ /* T R E E */ /******************************************************************************/ -void on_user_tree_expander_toggled(GtkExpander *expander, gpointer user_data) +void on_user_tree_expander_toggled (GtkExpander *expander, gpointer user_data) { - // This is a conceptual callback for when an expander is toggled GtkTreeListRow *row = GTK_TREE_LIST_ROW (user_data); gboolean is_expanded = gtk_tree_list_row_get_expanded(row); gtk_tree_list_row_set_expanded (row, !is_expanded); @@ -33,32 +32,37 @@ void on_user_tree_expander_toggled(GtkExpander *expander, gpointer user_data) void on_bind_user_tree_factory (GtkSignalListItemFactory *factory, GObject* object, gpointer user_data) { GtkListItem *list_item = GTK_LIST_ITEM (object); assert (list_item); - GtkTreeListRow *row = gtk_list_item_get_item (list_item); assert (row); -// if (row != NULL) { + GtkTreeListRow *row = gtk_list_item_get_item (list_item); assert (row); // if (row != NULL) {...} ? const gchar *text = gtk_string_object_get_string (GTK_STRING_OBJECT (gtk_tree_list_row_get_item (row))); GtkWidget *expander = gtk_list_item_get_child (list_item); gtk_expander_set_label (GTK_EXPANDER (expander), text); g_signal_handlers_disconnect_by_func(expander, G_CALLBACK (on_user_tree_expander_toggled), row); g_signal_connect(expander, "activate", G_CALLBACK (on_user_tree_expander_toggled), row); - gtk_widget_set_margin_start(expander, gtk_tree_list_row_get_depth(row)*20); - gboolean is_expanded = gtk_tree_list_row_get_expanded(row); - if (0) printf("[on_bind_user_tree_factory] row content is [%s] and expander is [%d]\n", text, is_expanded); -// } else if (0) printf("[on_bind_user_tree_factory] row == NULL\n"); + gtk_widget_set_margin_start(expander, gtk_tree_list_row_get_depth(row) * 20); } /******************************************************************************/ /* B U T T O N S */ /******************************************************************************/ -void ui_toggle_run_edit (GtkWidget *btt_run_xor_edit, gpointer data) +void ui_toggle_exec_edit (GtkWidget *btt_exec_xor_edit, gpointer data) { - printf("window.ui_toggle_run_edit() >>> mode = %d", get_run_edit_mode ()); - if (get_run_edit_mode()) { - gtk_button_set_icon_name (GTK_BUTTON (btt_run_xor_edit), "system-run-symbolic"); - set_run_edit_mode (0); + if (get_exec_edit_mode()) { + gtk_button_set_icon_name (GTK_BUTTON (btt_exec_xor_edit), "system-run-symbolic"); + set_exec_edit_mode (0); } else { - gtk_button_set_icon_name (GTK_BUTTON (btt_run_xor_edit), "document-edit-symbolic"); - set_run_edit_mode (1); + gtk_button_set_icon_name (GTK_BUTTON (btt_exec_xor_edit), "document-edit-symbolic"); + set_exec_edit_mode (1); + } +} + +void ui_toggle_model_exec (GtkWidget *btt_run_stop_model_exec, gpointer data) +{ + if (get_run_xor_stop_exec()) { + gtk_button_set_icon_name (GTK_BUTTON (btt_run_stop_model_exec), "media-playback-start-symbolic"); + set_run_xor_stop_exec (0); + } else { + gtk_button_set_icon_name (GTK_BUTTON (btt_run_stop_model_exec), "media-playback-pause-symbolic"); + set_run_xor_stop_exec (1); } - printf(" > %d\n", get_run_edit_mode ()); } diff --git a/callback.h b/callback.h index 46d6f7c..19391b4 100644 --- a/callback.h +++ b/callback.h @@ -1,4 +1,3 @@ -//#include #include void ui_main_window (GtkApplication *app, gpointer user_data); @@ -6,19 +5,13 @@ void ui_main_window (GtkApplication *app, gpointer user_data); void ui_enable_action (const char *name); void ui_disable_action (const char *name); -void set_run_edit_mode(int prescribed_mode); -int get_run_edit_mode(); - -// je vais déjà voir si j'arrive à manoeuvrer ces deux là... (2024-05-30) -// GtkWidget *btt_run_xor_edit = gtk_toggle_button_new (); -// GtkWidget *btt_run_stop_exec = gtk_toggle_button_new (); - // https://docs.gtk.org/gio/method.ActionMap.add_action_entries.html // A function for creating multiple GSimpleAction instances and adding them to a GActionMap. // @see application . gem_graph_client_application_init (GemGraphClientApplication *self) { // g_action_map_add_action_entries (G_ACTION_MAP(self), app_actions, G_N_ELEMENTS(app_actions), self); ... -void ui_toggle_run_edit(); +void ui_toggle_exec_edit (); +void ui_toggle_model_exec (); void on_quit_action (GSimpleAction *action, GVariant *parameter, gpointer user_data); void on_about_action (GSimpleAction *action, GVariant *parameter, gpointer user_data); diff --git a/contain.c b/contain.c index f93bf59..7d34115 100644 --- a/contain.c +++ b/contain.c @@ -196,7 +196,6 @@ GtkWidget *get_run_space_page_new(){ 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))); - gtk_box_append (page_box, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL))); gtk_box_append (page_box, GTK_WIDGET (get_SPACE_VIEW_box())); gtk_box_append (page_box, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL))); gtk_box_append (page_box, GTK_WIDGET (get_TIME_EXEC_controls_box())); @@ -281,17 +280,22 @@ void window_header_bar (GtkWindow *window, char *title){ // GtkWidget my_window_controls = *gtk_window_controls_new (GTK_PACK_END); // _START // gtk_window_controls_set_decoration_layout (GTK_WINDOW_CONTROLS(my_window_controls), NULL); // const char* layout); - gtk_button_set_icon_name (get_btt_run_xor_edit(), "document-edit-symbolic"); - gtk_button_set_icon_name (get_btt_run_xor_edit(), "text-editor-symbolic"); - gtk_button_set_icon_name (get_btt_run_xor_edit(), "system-run-symbolic"); + GtkButton *exec_xor_edit = GTK_BUTTON (gtk_toggle_button_new ()); +// gtk_button_set_icon_name (exec_xor_edit, "system-run-symbolic"); +// g_signal_connect (exec_xor_edit, "clicked", G_CALLBACK (ui_toggle_run_edit), NULL); + gtk_button_set_icon_name (exec_xor_edit, "document-edit-symbolic"); + gtk_button_set_icon_name (exec_xor_edit, "text-editor-symbolic"); + gtk_button_set_icon_name (exec_xor_edit, "system-run-symbolic"); + g_signal_connect (exec_xor_edit, "clicked", G_CALLBACK (ui_toggle_exec_edit), NULL); + gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar), GTK_WIDGET (exec_xor_edit)); - gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar), GTK_WIDGET (get_btt_run_xor_edit())); gtk_window_set_titlebar (window, header_bar); - GtkButton *run_stop_model_exec = GTK_BUTTON (gtk_button_new ()); + GtkButton *run_stop_model_exec = GTK_BUTTON (gtk_toggle_button_new ()); gtk_button_set_icon_name (run_stop_model_exec, "system-shutdown-symbolic"); - gtk_button_set_icon_name (run_stop_model_exec, "media-playback-start-symbolic"); gtk_button_set_icon_name (run_stop_model_exec, "media-playback-pause-symbolic"); + gtk_button_set_icon_name (run_stop_model_exec, "media-playback-start-symbolic"); + g_signal_connect (run_stop_model_exec, "clicked", G_CALLBACK (ui_toggle_model_exec), NULL); gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar), GTK_WIDGET (run_stop_model_exec)); icons_for_fun (GTK_HEADER_BAR (header_bar)); // https://iconduck.com/sets/adwaita-icon-theme @@ -318,26 +322,15 @@ void two_notebooks_in_two_panes (GtkWindow *window) { gtk_notebook_append_page (edit_notebook, get_edit_discuss_page_new(), gtk_label_new ("interpret")); gtk_notebook_append_page (edit_notebook, get_edit_help_page_new(), gtk_label_new ("help")); - GtkWidget *run_xor_edit_horizontal_pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); - gtk_widget_set_size_request (run_xor_edit_horizontal_pane, 0, 0); - gtk_paned_set_start_child (GTK_PANED(run_xor_edit_horizontal_pane), GTK_WIDGET (run_notebook)); - gtk_paned_set_end_child (GTK_PANED(run_xor_edit_horizontal_pane), GTK_WIDGET (edit_notebook)); - gtk_paned_set_position (GTK_PANED (run_xor_edit_horizontal_pane), W_IMAGE + 350); // '350' : AD HOC - gtk_window_set_child (window, GTK_WIDGET(run_xor_edit_horizontal_pane)); + GtkWidget *exec_xor_edit_horizontal_pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_size_request (exec_xor_edit_horizontal_pane, 0, 0); + gtk_paned_set_start_child (GTK_PANED(exec_xor_edit_horizontal_pane), GTK_WIDGET (run_notebook)); + gtk_paned_set_end_child (GTK_PANED(exec_xor_edit_horizontal_pane), GTK_WIDGET (edit_notebook)); + gtk_paned_set_position (GTK_PANED (exec_xor_edit_horizontal_pane), W_IMAGE + 350); // '350' : AD HOC + gtk_window_set_child (window, GTK_WIDGET(exec_xor_edit_horizontal_pane)); gtk_notebook_set_current_page (run_notebook, 0); // @see hot.c 2024-05-11 (line 68) gtk_notebook_set_current_page (edit_notebook, 1); // @see hot.c 2024-05-11 (line 68) } - -GtkButton *get_btt_run_xor_edit() { - GtkButton *run_xor_edit = GTK_BUTTON (gtk_toggle_button_new ()); - gtk_button_set_icon_name (run_xor_edit, "system-run-symbolic"); - g_signal_connect (run_xor_edit, "clicked", G_CALLBACK (ui_toggle_run_edit), NULL); - return run_xor_edit; -} - -// https://docs.gtk.org/gtk4/getting_started.html (m'aura bien servi, quand même !) - - diff --git a/in_depth.c b/in_depth.c index e6e6d53..2541917 100644 --- a/in_depth.c +++ b/in_depth.c @@ -1,8 +1,29 @@ #include #include +#include "callback.h" -static int run_edit_mode_val = 0; +enum { EXEC_MODE, EDIT_MODE, N_MODE }; +static int run_edit_mode_val = EXEC_MODE; -void set_run_edit_mode (int prescribed_mode) {run_edit_mode_val = prescribed_mode;} -int get_run_edit_mode () {return run_edit_mode_val;} +enum { STOP, RUN }; +static int run_stop_val = STOP; + +// --- EXEC / EDIT --------------------------------------------------------- + +int get_exec_edit_mode () {return run_edit_mode_val;} +void set_exec_edit_mode (int prescribed_mode) +{ + run_edit_mode_val = prescribed_mode; + if (! run_stop_val) { + run_stop_val = STOP; + // Là, il faut envoyer un signal > signal connect + // set_run_xor_stop_exec (STOP); + } +} + +// --- RUN / STOP ---------------------------------------------------------- + +int get_run_xor_stop_exec () {return run_stop_val;} +void set_run_xor_stop_exec (int prescribed_state) {run_stop_val = prescribed_state;} + diff --git a/in_depth.h b/in_depth.h index a3f1cc8..c95f14b 100644 --- a/in_depth.h +++ b/in_depth.h @@ -1,6 +1,9 @@ #include #include -void set_run_edit_mode (int prescribed_mode); -int get_run_edit_mode (); +void set_exec_edit_mode (int prescribed_mode); +int get_exec_edit_mode (); + +void set_run_xor_stop_exec (int prescribed_state); +int get_run_xor_stop_exec ();