From 32e65656666b05faba999a0c01819949de9b28a1 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard 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 + + * 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 * 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 +#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