From 2115749c605d4b292306f1bb16386be08b2c452a Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Mon, 15 Jul 2024 07:11:30 +0200 Subject: [PATCH] WIP: restructuring widget head (main window) --- (notes) | 5 +++ src/calls.c | 92 +++++++++++++++++++++++++++++++++--------- src/widget.c/heads.c | 96 ++++++++++++++++++++++++++++++++------------ 3 files changed, 149 insertions(+), 44 deletions(-) diff --git a/(notes) b/(notes) index 08516ba..c450c2b 100644 --- a/(notes) +++ b/(notes) @@ -1,5 +1,10 @@ https://developer.gnome.org/hig/principles.html + // https://docs.gtk.org/gio/class.MenuModel.html + // https://www.geany.org/manual/gtk/gobject/index.html + // https://developer.gnome.org/hig/patterns/controls/menus.html + + ================================================================================ diff --git a/src/calls.c b/src/calls.c index f275034..416d213 100644 --- a/src/calls.c +++ b/src/calls.c @@ -348,6 +348,46 @@ void on_SITUATIONS_box_DO_RESET (GtkWidget *btt_reset, gpointer data) /******************************************************************************/ +void on_clicked_search (GtkWidget *btt_menu, gpointer list_box) { + // next line presents the text_window and works only once.\nIt should present a menu.\n"); // TODO + gtk_window_present (GTK_WINDOW (widget_head_get_TEXT_WINDOW())); +} + +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"); // TODO + gtk_window_present (GTK_WINDOW (widget_head_get_DIALOG_WINDOW())); +} + + + + + + + + + + + + + + + + + + + + + + + + + +/******************************************************************************/ +/* M E N U */ +/******************************************************************************/ + void on_clicked_menu_experiment (GtkWidget *btt_menu, gpointer list_box) { printf ("callback.on_clicked_MENU() button > %p < &list_box > children nb > 3\n", list_box); // gpointer list_box = gtk_popover_get_child (GTK_POPOVER (pop)); @@ -363,21 +403,44 @@ void on_clicked_menu_experiment (GtkWidget *btt_menu, gpointer list_box) { // https://docs.gtk.org/gtk4/class.ListBox.html } -void on_clicked_search (GtkWidget *btt_menu, gpointer list_box) { - // next line presents the text_window and works only once.\nIt should present a menu.\n"); // TODO - gtk_window_present (GTK_WINDOW (widget_head_get_TEXT_WINDOW())); -} -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"); // TODO - gtk_window_present (GTK_WINDOW (widget_head_get_DIALOG_WINDOW())); -} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /******************************************************************************/ -/* M E N U */ +/* M E N U (from TREE) */ /******************************************************************************/ static void on_user_menu_expander_toggled (GtkExpander *expander, @@ -424,10 +487,3 @@ void on_setup_user_menu_factory (GtkSignalListItemFactory *factory, if (0) printf("[on_setup_user_menu_factory] here is an expander\n"); } - - - -// 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 f3e1006..85ab869 100644 --- a/src/widget.c/heads.c +++ b/src/widget.c/heads.c @@ -35,37 +35,40 @@ #define W_TEXT_WINDOW 700 #define H_TEXT_WINDOW 1000 + +/******************************************************************************/ +/* G E T + S E T A L L W I N D O W S */ +/******************************************************************************/ + static GtkWindow *main_window, *dialog_window, *text_window; static GtkButton *btt_STATE, *btt_RULES, *btt_DATA; -GtkWindow *widget_head_get_MAIN_WINDOW() {return main_window;} -GtkWindow *widget_head_get_DIALOG_WINDOW() {return dialog_window;} -GtkWindow *widget_head_get_TEXT_WINDOW() {return text_window;} +GtkWindow *widget_head_get_MAIN_WINDOW() { return main_window; } +GtkWindow *widget_head_get_DIALOG_WINDOW() { return dialog_window; } +GtkWindow *widget_head_get_TEXT_WINDOW() { return text_window; } void widget_head_set_MAIN_WINDOW (GtkApplication *app) -{ - main_window = GTK_WINDOW (gtk_application_window_new (app)); -} +{ main_window = GTK_WINDOW (gtk_application_window_new (app)); } void widget_head_set_DIALOG_WINDOW (GtkApplication *app) -{ - dialog_window = GTK_WINDOW (gtk_application_window_new (app)); -} +{ dialog_window = GTK_WINDOW (gtk_application_window_new (app)); } void widget_head_set_TEXT_WINDOW (GtkApplication *app) -{ - text_window = GTK_WINDOW (gtk_application_window_new (app)); -} +{ text_window = GTK_WINDOW (gtk_application_window_new (app)); } GtkButton *widget_head_get_GtkButton (char *btt_name) { - if (strcmp (btt_name, "state")) return btt_STATE; - if (strcmp (btt_name, "rules")) return btt_RULES; - if (strcmp (btt_name, "data analysis")) return btt_DATA; + if (strcmp (btt_name, "state")) return btt_STATE; + if (strcmp (btt_name, "rules")) return btt_RULES; + if (strcmp (btt_name, "data analysis")) return btt_DATA; return NULL; } -//------------------------------------------------------------------------------ + + +/******************************************************************************/ +/* D I A L O G & T E X T W I N D O W S */ +/******************************************************************************/ void widget_head_TEXT_WINDOW_design (GtkWindow *main_window, GtkWindow *text_window) { @@ -118,9 +121,25 @@ void widget_head_DIALOG_WINDOW_design (GtkWindow *main_window, GtkWindow *dialog gtk_window_set_modal (GTK_WINDOW (dialog_window), TRUE); } -//------------------------------------------------------------------------------ -static void window_header_bar (GtkWindow *window, char *title) + +/******************************************************************************/ +/* M A I N W I N D O W */ +/******************************************************************************/ + +static GtkWidget *window_header_bar (GtkWindow *window, char *title); + +void widget_head_MAIN_WINDOW_design (GtkWindow *main_window){ + GtkWidget *header_bar = window_header_bar (main_window, + "E coli (with permission from David S. Goodsell, 2009)"); + + // next line <=> calls.on_toggle_STATE_RULES_DATA (btt_STATE) + gtk_check_button_set_active (GTK_CHECK_BUTTON (btt_STATE), TRUE); + + gtk_window_present (GTK_WINDOW (main_window)); +} + +static GtkWidget *window_header_bar (GtkWindow *window, char *title) { GtkWidget *header_bar = GTK_WIDGET (gtk_header_bar_new ()); gtk_header_bar_set_title_widget (GTK_HEADER_BAR (header_bar), gtk_label_new (title)); @@ -195,10 +214,41 @@ static void window_header_bar (GtkWindow *window, char *title) gtk_menu_button_set_popover (open_menu, GTK_WIDGET (pop)); gtk_header_bar_pack_end (GTK_HEADER_BAR (header_bar), GTK_WIDGET (open_menu)); -// g_signal_connect (menu_item_D, "clicked", G_CALLBACK (on_clicked_menu_experiment), list_box); + g_signal_connect (open_menu, "activate", G_CALLBACK (on_clicked_menu_experiment), list_box); // signal 'clicked' is invalid for instance '0xbcb2900' of type 'GtkMenuButton' // signal 'clicked' is invalid for instance '0x2812f80' of type 'GtkListBox' // signal 'clicked' is invalid for instance '0x2a15120' of type 'GtkLabel' +// signal 'activate' is invalid for instance '0x17fb93d0' of type 'GtkLabel' + + + + + + + + +/* + https://docs.gtk.org/gtk4/class.ListView.html + GtkStringList *model = gtk_string_list_new (NULL); // model = create_application_list (); + + GtkSignalListItemFactory *factory = GTK_SIGNAL_LIST_ITEM_FACTORY (gtk_signal_list_item_factory_new()); + g_signal_connect (factory, "setup", G_CALLBACK (setup_listitem_cb), NULL); + g_signal_connect (factory, "bind", G_CALLBACK (bind_listitem_cb), NULL); + + GtkStringList *list = gtk_list_view_new (GTK_SELECTION_MODEL (gtk_single_selection_new (model)), factory); + + g_signal_connect (list, "activate", G_CALLBACK (activate_cb), NULL); + + gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), list); +*/ + + + + + + + + // ce qui suit ira dans le callback GtkListBoxRow *selected_row = gtk_list_box_get_selected_row (GTK_LIST_BOX (list_box)); @@ -208,13 +258,7 @@ static void window_header_bar (GtkWindow *window, char *title) // g_signal_connect (menu_item_C, "clicked", G_CALLBACK (on_clicked_HOME), no_local_data); -} - -void widget_head_MAIN_WINDOW_design (GtkWindow *main_window){ - window_header_bar (main_window, - "E coli (with permission from David S. Goodsell, 2009)"); - gtk_check_button_set_active (GTK_CHECK_BUTTON (btt_STATE), TRUE); - gtk_window_present (GTK_WINDOW (main_window)); + return header_bar; }