WIP: restructuring widget head (main window)

This commit is contained in:
Jean Sirmai 2024-07-15 07:11:30 +02:00
parent b3ea5c4676
commit 2115749c60
Signed by: jean
GPG Key ID: FB3115C340E057E3
3 changed files with 149 additions and 44 deletions

View File

@ -1,5 +1,10 @@
https://developer.gnome.org/hig/principles.html 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
================================================================================ ================================================================================

View File

@ -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) { 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); 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)); // 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 // 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, 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"); 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.

View File

@ -35,37 +35,40 @@
#define W_TEXT_WINDOW 700 #define W_TEXT_WINDOW 700
#define H_TEXT_WINDOW 1000 #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 GtkWindow *main_window, *dialog_window, *text_window;
static GtkButton *btt_STATE, *btt_RULES, *btt_DATA; static GtkButton *btt_STATE, *btt_RULES, *btt_DATA;
GtkWindow *widget_head_get_MAIN_WINDOW() {return main_window;} GtkWindow *widget_head_get_MAIN_WINDOW() { return main_window; }
GtkWindow *widget_head_get_DIALOG_WINDOW() {return dialog_window;} GtkWindow *widget_head_get_DIALOG_WINDOW() { return dialog_window; }
GtkWindow *widget_head_get_TEXT_WINDOW() {return text_window;} GtkWindow *widget_head_get_TEXT_WINDOW() { return text_window; }
void widget_head_set_MAIN_WINDOW (GtkApplication *app) 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) 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) 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) GtkButton *widget_head_get_GtkButton (char *btt_name)
{ {
if (strcmp (btt_name, "state")) return btt_STATE; if (strcmp (btt_name, "state")) return btt_STATE;
if (strcmp (btt_name, "rules")) return btt_RULES; if (strcmp (btt_name, "rules")) return btt_RULES;
if (strcmp (btt_name, "data analysis")) return btt_DATA; if (strcmp (btt_name, "data analysis")) return btt_DATA;
return NULL; 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) 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); 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 ()); GtkWidget *header_bar = GTK_WIDGET (gtk_header_bar_new ());
gtk_header_bar_set_title_widget (GTK_HEADER_BAR (header_bar), gtk_label_new (title)); 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_menu_button_set_popover (open_menu, GTK_WIDGET (pop));
gtk_header_bar_pack_end (GTK_HEADER_BAR (header_bar), GTK_WIDGET (open_menu)); 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 '0xbcb2900' of type 'GtkMenuButton'
// signal 'clicked' is invalid for instance '0x2812f80' of type 'GtkListBox' // signal 'clicked' is invalid for instance '0x2812f80' of type 'GtkListBox'
// signal 'clicked' is invalid for instance '0x2a15120' of type 'GtkLabel' // 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 // ce qui suit ira dans le callback
GtkListBoxRow *selected_row = gtk_list_box_get_selected_row (GTK_LIST_BOX (list_box)); 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); // g_signal_connect (menu_item_C, "clicked", G_CALLBACK (on_clicked_HOME), no_local_data);
} return header_bar;
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));
} }