summaryrefslogtreecommitdiff
path: root/src/gui/menus/project.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/menus/project.c')
-rw-r--r--src/gui/menus/project.c173
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);
+
+}