summaryrefslogtreecommitdiff
path: root/src/gui/dialogs/about.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-08-18 22:27:06 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-08-18 22:29:56 (GMT)
commit3e9d5cedf701fd8957024f7ddf65238aea9a1eba (patch)
tree0495d0c5952f68a129b232325f45c23440ee1650 /src/gui/dialogs/about.c
parentc5631dd09fa9981e914ec9082c6270b69a719ca4 (diff)
Rebuilt the About window using Glade.
Diffstat (limited to 'src/gui/dialogs/about.c')
-rw-r--r--src/gui/dialogs/about.c80
1 files changed, 28 insertions, 52 deletions
diff --git a/src/gui/dialogs/about.c b/src/gui/dialogs/about.c
index 2b95f1d..e2836e5 100644
--- a/src/gui/dialogs/about.c
+++ b/src/gui/dialogs/about.c
@@ -2,7 +2,7 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
* about.h - boîte de dialogue d'information sur le programme
*
- * Copyright (C) 2015-2019 Cyrille Bagard
+ * Copyright (C) 2015-2020 Cyrille Bagard
*
* This file is part of Chrysalide.
*
@@ -24,16 +24,15 @@
#include "about.h"
+#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <gdk/gdkkeysyms.h>
#include <config.h>
-#include <i18n.h>
-#include "../../core/paths.h"
#include "../../gtkext/easygtk.h"
@@ -49,6 +48,7 @@ static gboolean draw_black_background(GtkWidget *, cairo_t *, gpointer);
/******************************************************************************
* *
* Paramètres : parent = fenêtre parente à surpasser. *
+* outb = constructeur à détruire après usage. [OUT] *
* *
* Description : Construit la fenêtre d'informations sur le logiciel. *
* *
@@ -58,81 +58,57 @@ static gboolean draw_black_background(GtkWidget *, cairo_t *, gpointer);
* *
******************************************************************************/
-GtkWidget *create_about_dialog(GtkWindow *parent)
+GtkWidget *create_about_dialog(GtkWindow *parent, GtkBuilder **outb)
{
GtkWidget *result; /* Fenêtre à renvoyer */
- GtkWidget *fixed; /* Support global */
- gchar *filename; /* Chemin d'accès au fichier */
- GtkWidget *image; /* Image chargée */
+ GtkBuilder *builder; /* Constructeur utilisé */
unsigned int revision; /* Numéro de révision */
unsigned int max; /* Nbre. de boucles à effectuer*/
unsigned int i; /* Boucle de parcours */
unsigned int level; /* Unité la plus importante */
- char buffer[16]; /* Nom d'image à forger */
- GtkWidget *label; /* Etiquette inférieure */
+ char buffer[64]; /* Nom d'image à forger */
+ GtkImage *img; /* Composant d'affichage */
- result = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(result), _("About"));
- gtk_widget_set_size_request(result, 350, 430);
- gtk_container_set_border_width(GTK_CONTAINER(result), 0);
- gtk_window_set_default_size(GTK_WINDOW(result), 350, 430);
- gtk_window_set_type_hint(GTK_WINDOW(result), GDK_WINDOW_TYPE_HINT_DIALOG);
+ builder = gtk_builder_new_from_resource("/org/chrysalide/gui/dialogs/about.ui");
+ *outb = builder;
- gtk_window_set_modal(GTK_WINDOW(result), TRUE);
- gtk_window_set_transient_for(GTK_WINDOW(result), parent);
-
- g_signal_connect(result, "key_press_event", G_CALLBACK(close_about_window_on_escape), NULL);
-
- fixed = gtk_fixed_new();
- gtk_widget_show(fixed);
- gtk_container_add(GTK_CONTAINER(result), fixed);
-
- g_signal_connect(fixed, "draw", G_CALLBACK(draw_black_background), NULL);
+ result = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
- /* Images principales */
-
- filename = find_pixmap_file("chrysalide-full.png");
- image = qck_create_image(NULL, NULL, filename);
- gtk_fixed_put(GTK_FIXED(fixed), image, 10, 10);
- gtk_widget_set_size_request(image, 330, 300);
-
- filename = find_pixmap_file("chrysalide_text.png");
- image = qck_create_image(NULL, NULL, filename);
- gtk_fixed_put(GTK_FIXED(fixed), image, 48, 324);
- gtk_widget_set_size_request(image, 253, 42);
+ gtk_window_set_transient_for(GTK_WINDOW(result), parent);
/* Numéro de révision */
- filename = find_pixmap_file("revision.png");
- image = qck_create_image(NULL, NULL, filename);
- gtk_fixed_put(GTK_FIXED(fixed), image, 149, 360);
- gtk_widget_set_size_request(image, 14, 18);
-
revision = REVISION;
max = log(revision) / log(10);
+ assert(max <= 6);
+
for (i = 0; i <= max; i++)
{
+ snprintf(buffer, 64, "revision_%u", i);
+
+ img = GTK_IMAGE(gtk_builder_get_object(builder, buffer));
+
level = pow(10, max - i);
- snprintf(buffer, 16, "revision_%hhu.png", revision / level);
+ snprintf(buffer, 64, "/org/chrysalide/gui/dialogs/about/revision_%u.png", revision / level);
- filename = find_pixmap_file(buffer);
- image = qck_create_image(NULL, NULL, filename);
- gtk_fixed_put(GTK_FIXED(fixed), image, 163 + i * 14, 360);
- gtk_widget_set_size_request(image, 14, 18);
+ gtk_image_set_from_resource(img, buffer);
revision %= level;
}
- /* Copyright */
+ /* Connexion des signaux */
+
+#define DEFINE_CALLBACK(cb) #cb, G_CALLBACK(cb)
+
+ gtk_builder_add_callback_symbols(builder,
+ DEFINE_CALLBACK(close_about_window_on_escape),
+ DEFINE_CALLBACK(draw_black_background),
+ NULL);
- label = qck_create_label(NULL, NULL, "<span fgcolor='white'>Copyright (C) 2008-2017 Cyrille Bagard</span>");
- gtk_widget_set_halign(label, GTK_ALIGN_CENTER);
- gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
- gtk_fixed_put(GTK_FIXED(fixed), label, 0, 400);
- gtk_widget_set_size_request(label, 350, 20);
+ gtk_builder_connect_signals(builder, builder);
return result;