From 32e65656666b05faba999a0c01819949de9b28a1 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Tue, 14 Jul 2015 12:50:05 +0000
Subject: Given to the log panel its own GLib instance.

git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@549 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
---
 ChangeLog                |  10 +++
 src/gui/panels/log.c     | 170 ++++++++++++++++++++++++++++++++++++++++-------
 src/gui/panels/log.h     |  21 ++++++
 src/gui/panels/welcome.c |   4 +-
 src/gui/panels/welcome.h |   4 +-
 5 files changed, 181 insertions(+), 28 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a108660..fed6745 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+15-07-14  Cyrille Bagard <nocbos@gmail.com>
+
+	* src/gui/panels/log.c:
+	* src/gui/panels/log.h:
+	Give to the log panel its own GLib instance.
+
+	* src/gui/panels/welcome.c:
+	* src/gui/panels/welcome.h:
+	Typo.
+
 15-07-13  Cyrille Bagard <nocbos@gmail.com>
 
 	* plugins/mobicore/symbols.c:
diff --git a/src/gui/panels/log.c b/src/gui/panels/log.c
index 3e56519..ab815e4 100644
--- a/src/gui/panels/log.c
+++ b/src/gui/panels/log.c
@@ -32,6 +32,9 @@
 #include <gtk/gtk.h>
 
 
+#include "panel-int.h"
+
+
 
 /* Colonnes de la liste des messages */
 typedef enum _LogColumn
@@ -62,8 +65,33 @@ typedef struct _scroll_data
 } scroll_data;
 
 
-/* Construit le panneau d'affichage des messages système. */
-static GtkWidget *build_log_panel(void);
+/* Panneau d'accueil (instance) */
+struct _GLogPanel
+{
+    GPanelItem parent;                      /* A laisser en premier        */
+
+};
+
+
+/* Panneau d'accueil (classe) */
+struct _GLogPanelClass
+{
+    GPanelItemClass parent;                 /* A laisser en premier        */
+
+};
+
+
+/* Initialise la classe des panneaux d'affichage des messages. */
+static void g_log_panel_class_init(GLogPanelClass *);
+
+/* Initialise une instance de panneau d'affichage des messages. */
+static void g_log_panel_init(GLogPanel *);
+
+/* Supprime toutes les références externes. */
+static void g_log_panel_dispose(GLogPanel *);
+
+/* Procède à la libération totale de la mémoire. */
+static void g_log_panel_finalize(GLogPanel *);
 
 /* Affiche un message dans le journal des messages système. */
 static void _log_simple_message(LogMessageType, char *);
@@ -73,66 +101,69 @@ static gboolean log_message(log_data *);
 
 
 
+/* Indique le type définit pour un panneau d'affichage de messages. */
+G_DEFINE_TYPE(GLogPanel, g_log_panel, G_TYPE_PANEL_ITEM);
+
+
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : ref = espace de référencement global.                        *
+*  Paramètres  : klass = classe à initialiser.                                *
 *                                                                             *
-*  Description : Construit le panneau d'affichage des messages système.       *
+*  Description : Initialise la classe des panneaux d'affichage des messages.  *
 *                                                                             *
-*  Retour      : Adresse du panneau mis en place.                             *
+*  Retour      : -                                                            *
 *                                                                             *
 *  Remarques   : -                                                            *
 *                                                                             *
 ******************************************************************************/
 
-GPanelItem *create_log_panel(GObject *ref)
+static void g_log_panel_class_init(GLogPanelClass *klass)
 {
-    GEditorItem *result;                    /* Elément réactif à renvoyer  */
-    GtkWidget *panel;                       /* Composant GTK visuel        */
-
-    panel = build_log_panel();
+    GObjectClass *object;                   /* Autre version de la classe  */
 
-    result = g_panel_item_new(ref, PANEL_LOG_ID, _("Misc information"), panel, "S");
+    object = G_OBJECT_CLASS(klass);
 
-    return G_PANEL_ITEM(result);
+    object->dispose = (GObjectFinalizeFunc/* ! */)g_log_panel_dispose;
+    object->finalize = (GObjectFinalizeFunc)g_log_panel_finalize;
 
 }
 
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : -                                                            *
+*  Paramètres  : panel = instance à initialiser.                              *
 *                                                                             *
-*  Description : Construit le panneau d'affichage des messages système.       *
+*  Description : Initialise une instance de panneau d'affichage des messages. *
 *                                                                             *
-*  Retour      : Adresse du panneau mis en place.                             *
+*  Retour      : -                                                            *
 *                                                                             *
 *  Remarques   : -                                                            *
 *                                                                             *
 ******************************************************************************/
 
-static GtkWidget *build_log_panel(void)
+static void g_log_panel_init(GLogPanel *panel)
 {
-    GtkWidget *result;                      /* Panneau à retourner         */
+    GtkWidget *scrolled;                    /* Fenêtre avec défilements    */
     GtkTreeStore *store;                    /* Modèle de gestion           */
     GtkWidget *treeview;                    /* Affichage de la liste       */
     GtkCellRenderer *renderer;              /* Moteur de rendu de colonne  */
     GtkTreeViewColumn *column;              /* Colonne de la liste         */
+    GEditorItem *base;                      /* Version basique d'instance  */
 
-    result = gtk_scrolled_window_new(NULL, NULL);
-    gtk_widget_show(result);
+    scrolled = gtk_scrolled_window_new(NULL, NULL);
+    gtk_widget_show(scrolled);
 
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(result), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(result), GTK_SHADOW_IN);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN);
 
     store = gtk_tree_store_new(LGC_COUNT, G_TYPE_STRING, G_TYPE_STRING);
-    g_object_set_data(G_OBJECT(result), "store", store);
+    g_object_set_data(G_OBJECT(scrolled), "store", store);
 
     treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-    g_object_set_data(G_OBJECT(result), "treeview", treeview);
+    g_object_set_data(G_OBJECT(scrolled), "treeview", treeview);
     gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
     gtk_widget_show(treeview);
-    gtk_container_add(GTK_CONTAINER(result), treeview);
+    gtk_container_add(GTK_CONTAINER(scrolled), treeview);
 
     g_object_unref(G_OBJECT(store));
 
@@ -153,6 +184,71 @@ static GtkWidget *build_log_panel(void)
 
     gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
 
+    base = G_EDITOR_ITEM(panel);
+    base->widget = scrolled;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : panel = instance d'objet GLib à traiter.                     *
+*                                                                             *
+*  Description : Supprime toutes les références externes.                     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_log_panel_dispose(GLogPanel *panel)
+{
+    G_OBJECT_CLASS(g_log_panel_parent_class)->dispose(G_OBJECT(panel));
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : panel = instance d'objet GLib à traiter.                     *
+*                                                                             *
+*  Description : Procède à la libération totale de la mémoire.                *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_log_panel_finalize(GLogPanel *panel)
+{
+    G_OBJECT_CLASS(g_log_panel_parent_class)->finalize(G_OBJECT(panel));
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : ref = espace de référencement global.                        *
+*                                                                             *
+*  Description : Crée un panneau d'affichage des messages système.            *
+*                                                                             *
+*  Retour      : Adresse de la structure mise en place.                       *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GEditorItem *g_log_panel_new(GObject *ref)
+{
+    GEditorItem *result;                    /* Structure à retourner       */
+
+    result = g_object_new(G_TYPE_LOG_PANEL, NULL);
+
+    g_panel_item_init_ext(G_PANEL_ITEM(result), ref, PANEL_LOG_ID,
+                          _("Misc information"), G_EDITOR_ITEM(result)->widget, "S");
+
     return result;
 
 }
@@ -160,6 +256,32 @@ static GtkWidget *build_log_panel(void)
 
 /******************************************************************************
 *                                                                             *
+*  Paramètres  : ref = espace de référencement global.                        *
+*                                                                             *
+*  Description : Construit le panneau d'affichage des messages système.       *
+*                                                                             *
+*  Retour      : Adresse du panneau mis en place.                             *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GPanelItem *create_log_panel(GObject *ref)
+{
+    GEditorItem *result;                    /* Elément réactif à renvoyer  */
+
+    result = g_log_panel_new(ref);
+
+    /* Enregistre correctement le tout */
+    register_editor_item(result);
+
+    return G_PANEL_ITEM(result);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : type = espèce du message à ajouter.                          *
 *                msg  = message à faire apparaître à l'écran.                 *
 *                                                                             *
diff --git a/src/gui/panels/log.h b/src/gui/panels/log.h
index 67c5d47..ebd3579 100644
--- a/src/gui/panels/log.h
+++ b/src/gui/panels/log.h
@@ -40,6 +40,21 @@
 #define VARIADIC_LOG_BUFSIZE 256
 
 
+#define G_TYPE_LOG_PANEL               g_log_panel_get_type()
+#define G_LOG_PANEL(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_log_panel_get_type(), GLogPanel))
+#define G_IS_LOG_PANEL(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_log_panel_get_type()))
+#define G_LOG_PANEL_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_LOG_PANEL, GLogPanelClass))
+#define G_IS_LOG_PANEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_LOG_PANEL))
+#define G_LOG_PANEL_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_LOG_PANEL, GLogPanelClass))
+
+
+/* Panneau d'affichage de messages (instance) */
+typedef struct _GLogPanel GLogPanel;
+
+/* Panneau d'affichage de messages (classe) */
+typedef struct _GLogPanelClass GLogPanelClass;
+
+
 /* Type de messages disponibles */
 typedef enum _LogMessageType
 {
@@ -54,6 +69,12 @@ typedef enum _LogMessageType
 } LogMessageType;
 
 
+/* Indique le type définit pour un panneau d'affichage de messages. */
+GType g_log_panel_get_type(void);
+
+/* Crée un panneau d'affichage des messages système. */
+GEditorItem *g_log_panel_new(GObject *);
+
 /* Construit le panneau d'affichage des messages système. */
 GPanelItem *create_log_panel(GObject *);
 
diff --git a/src/gui/panels/welcome.c b/src/gui/panels/welcome.c
index 497e289..fa55fd7 100644
--- a/src/gui/panels/welcome.c
+++ b/src/gui/panels/welcome.c
@@ -38,7 +38,7 @@
 /* -------------------------- PARTIE PRINCIPALE DU PANNEAU -------------------------- */
 
 
-/* Panneau d'aperçu de graphiques (instance) */
+/* Panneau d'accueil (instance) */
 struct _GWelcomePanel
 {
     GPanelItem parent;                      /* A laisser en premier        */
@@ -46,7 +46,7 @@ struct _GWelcomePanel
 };
 
 
-/* Panneau d'aperçu de graphiques (classe) */
+/* Panneau d'accueil (classe) */
 struct _GWelcomePanelClass
 {
     GPanelItemClass parent;                 /* A laisser en premier        */
diff --git a/src/gui/panels/welcome.h b/src/gui/panels/welcome.h
index 19f236d..88c17bd 100644
--- a/src/gui/panels/welcome.h
+++ b/src/gui/panels/welcome.h
@@ -44,10 +44,10 @@
 #define G_WELCOME_PANEL_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_WELCOME_PANEL, GWelcomePanelClass))
 
 
-/* Panneau d'affichage des symboles (instance) */
+/* Panneau d'accueil (instance) */
 typedef struct _GWelcomePanel GWelcomePanel;
 
-/* Panneau d'affichage des symboles (classe) */
+/* Panneau d'accueil (classe) */
 typedef struct _GWelcomePanelClass GWelcomePanelClass;
 
 
-- 
cgit v0.11.2-87-g4458