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://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) {
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.

View File

@ -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;
}