summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2024-07-24 22:04:04 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2024-07-24 22:04:04 (GMT)
commit39ead30e3bcb19925946e9e3d752486d6cc1d0cb (patch)
treef189fa8f301916619aebdcbeac7217928c6ae481 /src
parent1596de25f349ca065422074327e208cfca7d8d3f (diff)
Display new panels inside the main window when needed.
Diffstat (limited to 'src')
-rw-r--r--src/gui/panels/binary.c30
-rw-r--r--src/gui/panels/binary.h5
-rw-r--r--src/gui/window.c24
-rw-r--r--src/gui/window.h4
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 */