diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2020-08-15 12:52:38 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2020-08-15 12:52:38 (GMT) |
commit | ab4d9d3afa6185275323a40729193102c99ea5c6 (patch) | |
tree | 06a6031560e53600dd0d959462e0b9b83b4c6ccd /src/gui/menus/project.c | |
parent | 16498486a454f6042b881b77e572f342decf5851 (diff) |
Rebuilt the main interface using Glade.
Diffstat (limited to 'src/gui/menus/project.c')
-rw-r--r-- | src/gui/menus/project.c | 173 |
1 files changed, 79 insertions, 94 deletions
diff --git a/src/gui/menus/project.c b/src/gui/menus/project.c index e472419..e9e690c 100644 --- a/src/gui/menus/project.c +++ b/src/gui/menus/project.c @@ -32,6 +32,7 @@ #include "../item-int.h" +#include "../menubar.h" #include "../core/global.h" #include "../../analysis/loading.h" #include "../../analysis/contents/file.h" @@ -50,57 +51,9 @@ static void mcb_project_remove_content(GtkMenuItem *, GStudyProject *); /****************************************************************************** * * -* Paramètres : ref = espace de référencement global. * -* bar = barre de menu parente. * +* Paramètres : builder = constructeur avec l'ensemble des références. * * * -* Description : Construit le menu "Projet". * -* * -* Retour : Panneau de menus mis en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkWidget *build_menu_project(GObject *ref, GMenuBar *bar) -{ - GtkWidget *result; /* Support à retourner */ - GtkWidget *menubar; /* Support pour éléments #1 */ - GtkWidget *submenuitem; /* Sous-élément de menu #1 */ - GtkWidget *deepmenubar; /* Support pour éléments #2 */ - GtkWidget *deepmenuitem; /* Sous-élément de menu #2 */ - - result = gtk_menu_item_new_with_mnemonic(_("_Project")); - gtk_widget_show(result); - - menubar = qck_create_menu(GTK_MENU_ITEM(result)); - - submenuitem = qck_create_menu_item(NULL, NULL, _("Add a binary..."), NULL, NULL); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - deepmenubar = qck_create_menu(GTK_MENU_ITEM(submenuitem)); - - deepmenuitem = qck_create_menu_item(ref, "mnu_project_add_binary", _("File"), - G_CALLBACK(mcb_project_add_binary_file), bar); - gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem); - - submenuitem = qck_create_menu_item(G_OBJECT(result), "menu_prj_remove_bin", _("Remove a binary"), - NULL, NULL); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - - deepmenubar = qck_create_menu(GTK_MENU_ITEM(submenuitem)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : widget = menu principal à actualiser. * -* project = projet visé par la procédure. * -* bar = barre de menu parente. * -* * -* Description : Lance une actualisation relative à l'étendue du projet. * +* Description : Complète la définition du menu "Projet". * * * * Retour : - * * * @@ -108,56 +61,21 @@ GtkWidget *build_menu_project(GObject *ref, GMenuBar *bar) * * ******************************************************************************/ -void update_menu_project_for_project(GtkWidget *widget, GStudyProject *project, GMenuBar *bar) +void setup_menu_project_callbacks(GtkBuilder *builder) { - GtkWidget *menuitem; /* Menu principal à compléter */ - GtkWidget *menubar; /* Support pour éléments */ - GList *list; /* Liste des éléments en place */ - GList *iter; /* Boucle de parcours #1 */ - size_t count; /* Nombre de contenus attachés */ - GLoadedContent **contents; /* Liste de ces contenus */ - size_t i; /* Boucle de parcours #2 */ - char *desc; /* Description à afficher */ - GtkWidget *submenuitem; /* Sous-menu à ajouter */ - - menuitem = GTK_WIDGET(g_object_get_data(G_OBJECT(widget), "menu_prj_remove_bin")); - menubar = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuitem)); - - /* Remise à zéro */ - - list = gtk_container_get_children(GTK_CONTAINER(menubar)); - - for (iter = list; iter != NULL; iter = g_list_next(iter)) - gtk_container_remove(GTK_CONTAINER(menubar), GTK_WIDGET(iter->data)); - - g_list_free(list); - - /* Ajout des entrées */ - - contents = g_study_project_get_contents(project, &count); - - for (i = 0; i < count; i++) - { - desc = g_loaded_content_describe(contents[i], true); + GObject *item; /* Elément à compléter */ - submenuitem = qck_create_menu_item(NULL, NULL, desc, - G_CALLBACK(mcb_project_remove_content), project); - g_object_set_data_full(G_OBJECT(submenuitem), "content", contents[i], g_object_unref); - gtk_container_add(GTK_CONTAINER(menubar), submenuitem); +#define DEFINE_CALLBACK(cb) #cb, G_CALLBACK(cb) - free(desc); + gtk_builder_add_callback_symbols(builder, + DEFINE_CALLBACK(mcb_project_add_binary_file), + NULL); - /** - * Note : l'appel à g_object_unref() est réalisé lorsque la référence - * est retirée du menu. - */ + /* Projet -> Retirer un binaire */ - } - - if (contents != NULL) - free(contents); + item = gtk_builder_get_object(builder, "project_remove"); - gtk_widget_set_sensitive(menuitem, count > 0); + qck_create_menu(GTK_MENU_ITEM(item)); } @@ -255,3 +173,70 @@ static void mcb_project_remove_content(GtkMenuItem *menuitem, GStudyProject *pro g_object_set_data(ref, "content", NULL); } + + +/****************************************************************************** +* * +* Paramètres : builder = constructeur avec l'ensemble des références. * +* project = projet visé par la procédure. * +* * +* Description : Lance une actualisation relative à l'étendue du projet. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void update_menu_project_for_project(GtkBuilder *builder, GStudyProject *project) +{ + GtkWidget *menuitem; /* Menu principal à compléter */ + GtkWidget *submenu; /* Support pour éléments */ + GList *list; /* Liste des éléments en place */ + GList *iter; /* Boucle de parcours #1 */ + size_t count; /* Nombre de contenus attachés */ + GLoadedContent **contents; /* Liste de ces contenus */ + size_t i; /* Boucle de parcours #2 */ + char *desc; /* Description à afficher */ + GtkWidget *submenuitem; /* Sous-menu à ajouter */ + + menuitem = GTK_WIDGET(gtk_builder_get_object(builder, "project_remove")); + submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuitem)); + + /* Remise à zéro */ + + list = gtk_container_get_children(GTK_CONTAINER(submenu)); + + for (iter = list; iter != NULL; iter = g_list_next(iter)) + gtk_container_remove(GTK_CONTAINER(submenu), GTK_WIDGET(iter->data)); + + g_list_free(list); + + /* Ajout des entrées */ + + contents = g_study_project_get_contents(project, &count); + + for (i = 0; i < count; i++) + { + desc = g_loaded_content_describe(contents[i], true); + + submenuitem = qck_create_menu_item(NULL, NULL, desc, + G_CALLBACK(mcb_project_remove_content), project); + g_object_set_data_full(G_OBJECT(submenuitem), "content", contents[i], g_object_unref); + gtk_container_add(GTK_CONTAINER(submenu), submenuitem); + + free(desc); + + /** + * Note : l'appel à g_object_unref() est réalisé lorsque la référence + * est retirée du menu. + */ + + } + + if (contents != NULL) + free(contents); + + gtk_widget_set_sensitive(menuitem, count > 0); + +} |