From e56a0553f710235d829f36b1edbf3cea00148a98 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sat, 25 Jul 2015 20:14:23 +0000
Subject: Created an (empty) panel for evolution history.

git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@557 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
---
 ChangeLog                  |  28 +++++
 src/gtkext/easygtk.c       |  81 ++++++++++++
 src/gtkext/easygtk.h       |   3 +
 src/gtkext/theme.c         |   1 +
 src/gui/panels/Makefile.am |   1 +
 src/gui/panels/history.c   | 308 +++++++++++++++++++++++++++++++++++++++++++++
 src/gui/panels/history.h   |  65 ++++++++++
 src/gui/panels/panel.c     |   4 +
 src/gui/panels/symbols.c   |  10 +-
 themes/clean.png           | Bin 0 -> 741 bytes
 themes/icons.css           |  27 ++++
 themes/redo.png            | Bin 0 -> 617 bytes
 themes/undo.png            | Bin 0 -> 602 bytes
 13 files changed, 523 insertions(+), 5 deletions(-)
 create mode 100644 src/gui/panels/history.c
 create mode 100644 src/gui/panels/history.h
 create mode 100644 themes/clean.png
 create mode 100644 themes/icons.css
 create mode 100644 themes/redo.png
 create mode 100644 themes/undo.png

diff --git a/ChangeLog b/ChangeLog
index 1463aad..5c8bbd4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+15-07-25  Cyrille Bagard <nocbos@gmail.com>
+
+	* src/gtkext/easygtk.c:
+	* src/gtkext/easygtk.h:
+	Create a wrapper to provide buttons with images from CSS.
+
+	* src/gtkext/theme.c:
+	Load an extra style from the 'icons.css' file.
+
+	* src/gui/panels/history.c:
+	* src/gui/panels/history.h:
+	New entries: create an (empty) panel for evolution history.
+
+	* src/gui/panels/Makefile.am:
+	Add the 'history.[ch]' files to libguipanels_la_SOURCES.
+
+	* src/gui/panels/panel.c:
+	Update code.
+
+	* src/gui/panels/symbols.c:
+	Typo.
+
+	* themes/clean.png:
+	* themes/icons.css:
+	* themes/redo.png:
+	* themes/undo.png:
+	New entries: define a style for button pictures.
+
 15-07-24  Cyrille Bagard <nocbos@gmail.com>
 
 	* src/analysis/binary.c:
diff --git a/src/gtkext/easygtk.c b/src/gtkext/easygtk.c
index fa99f38..fcbaa19 100644
--- a/src/gtkext/easygtk.c
+++ b/src/gtkext/easygtk.c
@@ -401,6 +401,87 @@ GtkWidget *qck_create_button_with_img(GObject *object, const char *name, const c
 *                                                                             *
 *  Paramètres  : object  = espace dédié à l'inscription de références.        *
 *                name    = nom à donner au nouveau composant.                 *
+*                image   = nom de l'image stockée dans GTK.                   *
+*                label   = contenu de l'étiquette éventuelle associée.        *
+*                handler = éventuelle fonction de sélection associée.         *
+*                data    = données à transmettre avec l'événement si besoin.  *
+*                                                                             *
+*  Description : Crée et enregistre un composant 'GtkButton'.                 *
+*                                                                             *
+*  Retour      : Simple bouton mis en place.                                  *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GtkWidget *qck_create_button_with_css_img(GObject *object, const char *name, const char *image, const char *label, GCallback handler, gpointer data)
+{
+    GtkWidget *result;                      /* Résultat à renvoyer         */
+    GtkWidget *picture;                     /* Image de représentation     */
+    GtkWidget *caption;                     /* Etiquette à coller          */
+    GtkWidget *hbox;                        /* Séparation horizontale      */
+
+    result = gtk_button_new();
+    gtk_widget_set_can_default(result, TRUE);
+
+    /* Création des éléments internes */
+
+    if (image != NULL)
+    {
+        picture = gtk_image_new();
+        gtk_widget_show(picture);
+
+        gtk_widget_set_name(picture, image);
+
+    }
+
+    if (label != NULL)
+    {
+        caption = gtk_label_new_with_mnemonic(label);
+        gtk_widget_show(caption);
+    }
+
+    /* Mise en place */
+
+    if (image != NULL && label != NULL)
+    {
+        hbox = gtk_hbox_new(FALSE, 2);
+        gtk_widget_show(hbox);
+        gtk_container_add(GTK_CONTAINER(result), hbox);
+
+        gtk_box_pack_start(GTK_BOX(hbox), picture, FALSE, FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(hbox), caption, FALSE, FALSE, 0);
+
+    }
+
+    else if (image != NULL)
+        gtk_container_add(GTK_CONTAINER(result), picture);
+
+    else /*if (label != NULL)*/
+        gtk_container_add(GTK_CONTAINER(result), caption);
+
+    /* Interactions GTK... */
+
+    if (G_IS_OBJECT(object) && name != NULL)
+    {
+        g_object_ref(G_OBJECT(result));
+        g_object_set_data_full(object, name, result, (GDestroyNotify)g_object_unref);
+    }
+
+    gtk_widget_show(result);
+
+    if (handler != NULL)
+        g_signal_connect(result, "clicked", handler, data);
+
+	return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : object  = espace dédié à l'inscription de références.        *
+*                name    = nom à donner au nouveau composant.                 *
 *                caption = désignation apparaîssant sur le corps de l'objet.  *
 *                handler = éventuelle fonction de sélection associée.         *
 *                data    = données à transmettre avec l'événement si besoin.  *
diff --git a/src/gtkext/easygtk.h b/src/gtkext/easygtk.h
index 65d1127..58229af 100644
--- a/src/gtkext/easygtk.h
+++ b/src/gtkext/easygtk.h
@@ -62,6 +62,9 @@ GtkWidget *qck_create_button(GObject *, const char *, const char *, GCallback, g
 /* Crée et enregistre un composant 'GtkButton'. */
 GtkWidget *qck_create_button_with_img(GObject *, const char *, const char *, GCallback, gpointer);
 
+/* Crée et enregistre un composant 'GtkButton'. */
+GtkWidget *qck_create_button_with_css_img(GObject *, const char *, const char *, const char *, GCallback, gpointer);
+
 /* Crée et enregistre un composant 'GtkCheckButton'. */
 GtkWidget *qck_create_check_button(GObject *, const char *, const char *, GCallback, gpointer);
 
diff --git a/src/gtkext/theme.c b/src/gtkext/theme.c
index 41e0b4a..ba846bb 100644
--- a/src/gtkext/theme.c
+++ b/src/gtkext/theme.c
@@ -63,6 +63,7 @@ bool load_extra_gtk_theme(void)
     static const char *css_files[] = {
         "portions.css",
         "segments.css",
+        "icons.css",
         NULL
     };
 
diff --git a/src/gui/panels/Makefile.am b/src/gui/panels/Makefile.am
index ad8c6b2..70cf597 100644
--- a/src/gui/panels/Makefile.am
+++ b/src/gui/panels/Makefile.am
@@ -4,6 +4,7 @@ noinst_LTLIBRARIES  = libguipanels.la
 libguipanels_la_SOURCES =				\
 	bookmarks.h bookmarks.c				\
 	glance.h glance.c					\
+	history.h history.c					\
 	log.h log.c							\
 	panel.h panel.c						\
 	regedit.h regedit.c					\
diff --git a/src/gui/panels/history.c b/src/gui/panels/history.c
new file mode 100644
index 0000000..a827961
--- /dev/null
+++ b/src/gui/panels/history.c
@@ -0,0 +1,308 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * history.c - panneau de la liste des évolutions d'utilisateur(s)
+ *
+ * Copyright (C) 2008-2013 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  OpenIDA is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  OpenIDA is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include "history.h"
+
+
+#include <cairo-gobject.h>
+
+
+#include <i18n.h>
+
+
+#include "panel-int.h"
+#include "../../gtkext/easygtk.h"
+
+
+
+/* Panneau de la liste des évolutions utilisateur(s) (instance) */
+struct _GHistoryPanel
+{
+    GPanelItem parent;                      /* A laisser en premier        */
+
+    GtkTreeView *treeview;                  /* Composant d'affichage       */
+    GtkTreeStore *store;                    /* Modèle de gestion           */
+
+    GLoadedBinary *binary;                  /* Binaire à prendre en compte */
+
+};
+
+/* Panneau de la liste des évolutions utilisateur(s) (classe) */
+struct _GHistoryPanelClass
+{
+    GPanelItemClass parent;                 /* A laisser en premier        */
+
+};
+
+
+/* Colonnes de la liste des évolutions */
+typedef enum _HistoryColumn
+{
+    HTC_ITEM,                               /* Elément d'évolution         */
+
+    HTC_PICTURE,                            /* Image de représentation     */
+    HTC_LABEL,                              /* Désignation humaine         */
+
+    HTC_COUNT                               /* Nombre de colonnes          */
+
+} HistoryColumn;
+
+
+/* Initialise la classe des panneaux de la liste des évolutions utilisateur(s). */
+static void g_history_panel_class_init(GHistoryPanelClass *);
+
+/* Initialise une instance de panneau d'aperçu de graphiques. */
+static void g_history_panel_init(GHistoryPanel *);
+
+/* Supprime toutes les références externes. */
+static void g_history_panel_dispose(GHistoryPanel *);
+
+/* Procède à la libération totale de la mémoire. */
+static void g_history_panel_finalize(GHistoryPanel *);
+
+/* Réagit à un changement d'affichage principal de contenu. */
+static void change_history_panel_current_binary(GHistoryPanel *, GLoadedBinary *);
+
+
+
+/* Indique le type définit pour un panneau d'aperçu de graphiques. */
+G_DEFINE_TYPE(GHistoryPanel, g_history_panel, G_TYPE_PANEL_ITEM);
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : klass = classe à initialiser.                                *
+*                                                                             *
+*  Description : Initialise la classe des panneaux d'aperçu de graphiques.    *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_history_panel_class_init(GHistoryPanelClass *klass)
+{
+    GObjectClass *object;                   /* Autre version de la classe  */
+    GEditorItemClass *editem;               /* Encore une autre vision...  */
+
+    object = G_OBJECT_CLASS(klass);
+
+    object->dispose = (GObjectFinalizeFunc/* ! */)g_history_panel_dispose;
+    object->finalize = (GObjectFinalizeFunc)g_history_panel_finalize;
+
+    editem = G_EDITOR_ITEM_CLASS(klass);
+
+    editem->update_binary = (update_item_binary_fc)change_history_panel_current_binary;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : panel = instance à initialiser.                              *
+*                                                                             *
+*  Description : Initialise une instance de panneau d'aperçu de graphiques.   *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_history_panel_init(GHistoryPanel *panel)
+{
+    GEditorItem *base;                      /* Version basique d'instance  */
+    GObject *ref;                           /* Espace de référencement     */
+    GtkWidget *scrollwnd;                   /* Support défilant            */
+    GtkWidget *treeview;                    /* Affichage de la liste       */
+    GtkWidget *box;                         /* Séparation horizontale      */
+    GtkWidget *button;                      /* Bouton de cette même barre  */
+
+    base = G_EDITOR_ITEM(panel);
+
+    base->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
+    gtk_container_set_border_width(GTK_CONTAINER(base->widget), 8);
+    gtk_widget_show(base->widget);
+
+    ref = G_OBJECT(base->widget);
+    g_object_set_data(ref, "panel", panel);
+
+    /* Liste des éléments d'évolution */
+
+    scrollwnd = gtk_scrolled_window_new(NULL, NULL);
+    gtk_widget_show(scrollwnd);
+    gtk_box_pack_start(GTK_BOX(base->widget), scrollwnd, TRUE, TRUE, 0);
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwnd), GTK_SHADOW_IN);
+
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwnd), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwnd), GTK_SHADOW_IN);
+
+    panel->store = gtk_tree_store_new(HTC_COUNT, G_TYPE_OBJECT, CAIRO_GOBJECT_TYPE_SURFACE, G_TYPE_STRING);
+
+    treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(panel->store));
+    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
+    gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW(treeview), TRUE);
+
+    panel->treeview = GTK_TREE_VIEW(treeview);
+
+    gtk_widget_show(treeview);
+    gtk_container_add(GTK_CONTAINER(scrollwnd), treeview);
+
+    g_object_unref(G_OBJECT(panel->store));
+
+    /* Eléments de contrôle inférieurs */
+
+    box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
+    gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
+    gtk_widget_show(box);
+    gtk_box_pack_start(GTK_BOX(base->widget), box, FALSE, TRUE, 0);
+
+    button = qck_create_button_with_css_img(NULL, NULL, "img-undo", _("Undo"),
+                                            G_CALLBACK(NULL), NULL);
+    gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
+
+    button = qck_create_button_with_css_img(NULL, NULL, "img-redo", _("Redo"),
+                                            G_CALLBACK(NULL), NULL);
+    gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
+
+    button = qck_create_button_with_css_img(NULL, NULL, "img-clean", _("Clean"),
+                                            G_CALLBACK(NULL), NULL);
+    gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : panel = instance d'objet GLib à traiter.                     *
+*                                                                             *
+*  Description : Supprime toutes les références externes.                     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void g_history_panel_dispose(GHistoryPanel *panel)
+{
+    if (panel->binary != NULL)
+        g_object_unref(G_OBJECT(panel->binary));
+
+    G_OBJECT_CLASS(g_history_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_history_panel_finalize(GHistoryPanel *panel)
+{
+    G_OBJECT_CLASS(g_history_panel_parent_class)->finalize(G_OBJECT(panel));
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : ref = espace de référencement global.                        *
+*                                                                             *
+*  Description : Crée un panneau d'affichage des symboles.                    *
+*                                                                             *
+*  Retour      : Adresse de la structure mise en place.                       *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GEditorItem *g_history_panel_new(GObject *ref)
+{
+    GEditorItem *result;                    /* Structure à retourner       */
+
+    result = g_object_new(G_TYPE_HISTORY_PANEL, NULL);
+
+    g_panel_item_init_ext(G_PANEL_ITEM(result), ref, PANEL_HISTORY_ID,
+                          _("Change history"), G_EDITOR_ITEM(result)->widget, "eM");
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : ref = espace de référencement global.                        *
+*                                                                             *
+*  Description : Construit et intègre un panneau d'affichage des symboles.    *
+*                                                                             *
+*  Retour      : Adresse du panneau mis en place.                             *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+GPanelItem *create_history_panel(GObject *ref)
+{
+    GEditorItem *result;                    /* Elément réactif à renvoyer  */
+
+    result = g_history_panel_new(ref);
+
+    /* Enregistre correctement le tout */
+    register_editor_item(result);
+
+    return G_PANEL_ITEM(result);
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : panel  = panneau à mettre à jour.                            *
+*                binary = nouvelle instance de binaire analysé.               *
+*                                                                             *
+*  Description : Réagit à un changement d'affichage principal de contenu.     *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void change_history_panel_current_binary(GHistoryPanel *panel, GLoadedBinary *binary)
+{
+
+    /* TODO */
+
+}
diff --git a/src/gui/panels/history.h b/src/gui/panels/history.h
new file mode 100644
index 0000000..5b5b83b
--- /dev/null
+++ b/src/gui/panels/history.h
@@ -0,0 +1,65 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * history.h - prototypes pour le panneau de la liste des évolutions d'utilisateur(s)
+ *
+ * Copyright (C) 2015 Cyrille Bagard
+ *
+ *  This file is part of Chrysalide.
+ *
+ *  OpenIDA is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  OpenIDA is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#ifndef _GUI_PANELS_HISTORY_H
+#define _GUI_PANELS_HISTORY_H
+
+
+#include <i18n.h>
+
+
+#include "panel.h"
+
+
+
+#define PANEL_HISTORY_ID _("History")
+
+
+#define G_TYPE_HISTORY_PANEL               g_history_panel_get_type()
+#define G_HISTORY_PANEL(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_history_panel_get_type(), GHistoryPanel))
+#define G_IS_HISTORY_PANEL(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_history_panel_get_type()))
+#define G_HISTORY_PANEL_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_HISTORY_PANEL, GHistoryPanelClass))
+#define G_IS_HISTORY_PANEL_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_HISTORY_PANEL))
+#define G_HISTORY_PANEL_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_HISTORY_PANEL, GHistoryPanelClass))
+
+
+/* Panneau de la liste des évolutions utilisateur(s) (instance) */
+typedef struct _GHistoryPanel GHistoryPanel;
+
+/* Panneau de la liste des évolutions utilisateur(s) (classe) */
+typedef struct _GHistoryPanelClass GHistoryPanelClass;
+
+
+/* Indique le type définit pour un panneau d'affichage des symboles. */
+GType g_history_panel_get_type(void);
+
+/* Crée un panneau d'affichage des symboles. */
+GEditorItem *g_history_panel_new(GObject *);
+
+/* Construit et intègre un panneau d'affichage des symboles. */
+GPanelItem *create_history_panel(GObject *);
+
+
+
+#endif  /* _GUI_PANELS_HISTORY_H */
diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c
index 41d3b0a..8a46025 100644
--- a/src/gui/panels/panel.c
+++ b/src/gui/panels/panel.c
@@ -32,6 +32,7 @@
 
 #include "bookmarks.h"
 #include "glance.h"
+#include "history.h"
 #include "log.h"
 #include "panel-int.h"
 #include "regedit.h"
@@ -383,6 +384,9 @@ void load_main_panels(GObject *ref)
     item = create_symbols_panel(ref);
     g_panel_item_dock(item);
 
+    item = create_history_panel(ref);
+    g_panel_item_dock(item);
+
     item = create_strings_panel(ref);
     g_panel_item_dock(item);
 
diff --git a/src/gui/panels/symbols.c b/src/gui/panels/symbols.c
index 9b32aa5..2a9d612 100644
--- a/src/gui/panels/symbols.c
+++ b/src/gui/panels/symbols.c
@@ -89,10 +89,10 @@ typedef enum _SymbolsColumn
 } SymbolsColumn;
 
 
-/* Initialise la classe des panneaux d'aperçu de graphiques. */
+/* Initialise la classe des panneaux d'affichage des symboles. */
 static void g_symbols_panel_class_init(GSymbolsPanelClass *);
 
-/* Initialise une instance de panneau d'aperçu de graphiques. */
+/* Initialise une instance de panneau d'affichage des symboles. */
 static void g_symbols_panel_init(GSymbolsPanel *);
 
 /* Supprime toutes les références externes. */
@@ -160,7 +160,7 @@ static bool is_symbol_filtered(GSymbolsPanel *, const GBinSymbol *);
 /* ---------------------------------------------------------------------------------- */
 
 
-/* Indique le type définit pour un panneau d'aperçu de graphiques. */
+/* Indique le type définit pour un panneau d'affichage des symboles. */
 G_DEFINE_TYPE(GSymbolsPanel, g_symbols_panel, G_TYPE_PANEL_ITEM);
 
 
@@ -168,7 +168,7 @@ G_DEFINE_TYPE(GSymbolsPanel, g_symbols_panel, G_TYPE_PANEL_ITEM);
 *                                                                             *
 *  Paramètres  : klass = classe à initialiser.                                *
 *                                                                             *
-*  Description : Initialise la classe des panneaux d'aperçu de graphiques.    *
+*  Description : Initialise la classe des panneaux d'affichage des symboles.  *
 *                                                                             *
 *  Retour      : -                                                            *
 *                                                                             *
@@ -219,7 +219,7 @@ static void g_symbols_panel_class_init(GSymbolsPanelClass *klass)
 *                                                                             *
 *  Paramètres  : panel = instance à initialiser.                              *
 *                                                                             *
-*  Description : Initialise une instance de panneau d'aperçu de graphiques.   *
+*  Description : Initialise une instance de panneau d'affichage des symboles. *
 *                                                                             *
 *  Retour      : -                                                            *
 *                                                                             *
diff --git a/themes/clean.png b/themes/clean.png
new file mode 100644
index 0000000..f8f8c78
Binary files /dev/null and b/themes/clean.png differ
diff --git a/themes/icons.css b/themes/icons.css
new file mode 100644
index 0000000..4986ab2
--- /dev/null
+++ b/themes/icons.css
@@ -0,0 +1,27 @@
+
+#img-undo {
+
+    background-image: url("undo.png");
+    background-repeat: space;
+
+    padding-right: 10px;
+
+}
+
+#img-redo {
+
+    background-image: url("redo.png");
+    background-repeat: space;
+
+    padding-right: 10px;
+
+}
+
+#img-clean {
+
+    background-image: url("clean.png");
+    background-repeat: space;
+
+    padding-right: 10px;
+
+}
diff --git a/themes/redo.png b/themes/redo.png
new file mode 100644
index 0000000..9fb3199
Binary files /dev/null and b/themes/redo.png differ
diff --git a/themes/undo.png b/themes/undo.png
new file mode 100644
index 0000000..55b8c34
Binary files /dev/null and b/themes/undo.png differ
-- 
cgit v0.11.2-87-g4458