From 39ead30e3bcb19925946e9e3d752486d6cc1d0cb Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Thu, 25 Jul 2024 00:04:04 +0200 Subject: Display new panels inside the main window when needed. --- src/gui/panels/binary.c | 30 +++++++++++++++++------------- src/gui/panels/binary.h | 5 +++-- src/gui/window.c | 24 +++++++++++++++++++++++- src/gui/window.h | 4 ++++ 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/gui/panels/binary.c b/src/gui/panels/binary.c index 88b19d2..aba0c7f 100644 --- a/src/gui/panels/binary.c +++ b/src/gui/panels/binary.c @@ -26,6 +26,7 @@ #include "binary-int.h" +#include "../window.h" #include "../../analysis/contents/file.h" #include "../../gtkext/helpers.h" #include "../../gtkext/hexview.h" @@ -35,10 +36,10 @@ /* ------------------------- COEUR D'UN PANNEAU D'AFFICHAGE ------------------------- */ -/* Initialise la classe des panneaux d'accueil par défaut. */ +/* Initialise la classe des panneaux pour binaires. */ static void gtk_binary_panel_class_init(GtkBinaryPanelClass *); -/* Initialise une instance de panneau d'accueil par défaut. */ +/* Initialise une instance de panneau pour binaire. */ static void gtk_binary_panel_init(GtkBinaryPanel *); /* Supprime toutes les références externes. */ @@ -86,7 +87,7 @@ static GtkWidget *g_binary_panel_get_launcher(GBinaryPanel *); static GtkWidget *g_binary_panel_get_properties(GBinaryPanel *); /* Ouvre une boîte de dialogue pour récupérer un fichier. */ -static void g_binary_panel_on_new_file_entry_icon_release(GtkEntry *, GtkEntryIconPosition, gpointer); +static void g_binary_panel_on_new_file_entry_icon_release(GtkEntry *, GtkEntryIconPosition, GBinaryPanel *); /* Fournit un composant représentant un panneau graphique. */ static GtkTiledPanel *g_binary_panel_get_panel(GBinaryPanel *, GtkWidget *); @@ -106,7 +107,7 @@ G_DEFINE_TYPE(GtkBinaryPanel, gtk_binary_panel, GTK_TYPE_TILED_PANEL); * * * Paramètres : class = classe à initialiser. * * * -* Description : Initialise la classe des panneaux d'accueil par défaut. * +* Description : Initialise la classe des panneaux pour binaires. * * * * Retour : - * * * @@ -137,7 +138,7 @@ static void gtk_binary_panel_class_init(GtkBinaryPanelClass *class) * * * Paramètres : panel = instance à initialiser. * * * -* Description : Initialise une instance de panneau d'accueil par défaut. * +* Description : Initialise une instance de panneau pour binaire. * * * * Retour : - * * * @@ -196,7 +197,7 @@ static void gtk_binary_panel_finalize(GtkBinaryPanel *panel) * * * Paramètres : content = contenu brut à exposer. * * * -* Description : Crée une nouvelle instance de panneau d'accueil. * +* Description : Crée une nouvelle instance de panneau pour binaire. * * * * Retour : Composant GTK mis en place. * * * @@ -439,6 +440,7 @@ static GtkWidget *g_binary_panel_get_properties(GBinaryPanel *panel) builder = gtk_builder_new(); gtk_builder_set_scope(builder, scope); + gtk_builder_set_current_object(builder, G_OBJECT(panel)); #ifndef NDEBUG status = gtk_builder_add_from_resource(builder, "/re/chrysalide/framework/gui/panels/binary-props.ui", NULL); @@ -460,9 +462,9 @@ static GtkWidget *g_binary_panel_get_properties(GBinaryPanel *panel) /****************************************************************************** * * -* Paramètres : entry = -* icon_pos = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx -* panel = définition de panneau à manipuler. * +* Paramètres : entry = zone de saisie concernée par l'appel. * +* icon_pos = position de l'icone incrustée dans la zone. * +* panel = définition de panneau à manipuler. * * * * Description : Ouvre une boîte de dialogue pour récupérer un fichier. * * * @@ -472,14 +474,16 @@ static GtkWidget *g_binary_panel_get_properties(GBinaryPanel *panel) * * ******************************************************************************/ -static void g_binary_panel_on_new_file_entry_icon_release(GtkEntry *entry, GtkEntryIconPosition icon_pos, gpointer user_data) +static void g_binary_panel_on_new_file_entry_icon_release(GtkEntry *entry, GtkEntryIconPosition icon_pos, GBinaryPanel *panel) { + GtkRoot *root; /* Racine du composant */ + GtkTiledPanel *tiled; /* Panneau d'affichage complet */ + root = gtk_widget_get_root(GTK_WIDGET(entry)); - printf("open...\n"); - - + tiled = g_binary_panel_get_panel(panel, NULL); + gtk_framework_window_add(GTK_FRAMEWORK_WINDOW(root), tiled); } diff --git a/src/gui/panels/binary.h b/src/gui/panels/binary.h index bcf8707..b459294 100644 --- a/src/gui/panels/binary.h +++ b/src/gui/panels/binary.h @@ -30,6 +30,7 @@ #include "../panel.h" +#include "../../analysis/content.h" #include "../../glibext/helpers.h" #include "../../gtkext/panel.h" @@ -43,8 +44,8 @@ DECLARE_GTYPE(GtkBinaryPanel, gtk_binary_panel, GTK, BINARY_PANEL); -/* Crée une nouvelle instance de panneau d'accueil. */ -GtkTiledPanel *gtk_binary_panel_new(void); +/* Crée une nouvelle instance de panneau pour binaire. */ +GtkTiledPanel *gtk_binary_panel_new_for_content(GBinContent *); diff --git a/src/gui/window.c b/src/gui/window.c index 24716ed..432a8a1 100644 --- a/src/gui/window.c +++ b/src/gui/window.c @@ -207,7 +207,7 @@ bool gtk_framework_window_create(GtkFrameworkWindow *window, GtkApplication *app item = find_item_panel_by_type(G_TYPE_WELCOME_PANEL); panel = g_panel_item_get_panel(item); - gtk_stack_add_child(window->grid, GTK_WIDGET(panel)); + gtk_framework_window_add(window, panel); unref_object(item); @@ -236,3 +236,25 @@ bool gtk_framework_window_create(GtkFrameworkWindow *window, GtkApplication *app return result; } + + +/****************************************************************************** +* * +* Paramètres : window = instance de fenêtre principale à remplir. * +* panel = nouveau panneau à afficher. * +* * +* Description : Ajoute un panneau à la fenêtre principale de Chrysalide. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_framework_window_add(GtkFrameworkWindow *window, /* __steal */GtkTiledPanel *panel) +{ + gtk_stack_add_child(window->grid, GTK_WIDGET(panel)); + + gtk_stack_set_visible_child(window->grid, GTK_WIDGET(panel)); + +} diff --git a/src/gui/window.h b/src/gui/window.h index 4e73a76..56c56ec 100644 --- a/src/gui/window.h +++ b/src/gui/window.h @@ -29,6 +29,7 @@ #include "../glibext/helpers.h" +#include "../gtkext/panel.h" @@ -46,6 +47,9 @@ DECLARE_GTYPE(GtkFrameworkWindow, gtk_framework_window, GTK, FRAMEWORK_WINDOW); /* Crée une nouvelle application principale pour Chrysalide. */ GtkApplicationWindow *gtk_framework_window_new(GtkApplication *); +/* Ajoute un panneau à la fenêtre principale de Chrysalide. */ +void gtk_framework_window_add(GtkFrameworkWindow *, GtkTiledPanel *); + #endif /* _GUI_WINDOW_H */ -- cgit v0.11.2-87-g4458