From 425f8ce0e40592287431bd1d3d71e03f5bdcbdd5 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Wed, 28 Nov 2018 00:08:36 +0100
Subject: Used Glade to build all GUI panels.

---
 src/gui/panels/Makefile.am   |   5 ++
 src/gui/panels/bookmarks.c   | 156 ++++++++++++++-----------------------
 src/gui/panels/bookmarks.ui  |  89 +++++++++++++++++++++
 src/gui/panels/glance.c      |  30 +++----
 src/gui/panels/glance.ui     |  28 +++++++
 src/gui/panels/gresource.xml |   5 ++
 src/gui/panels/history.c     | 160 ++++++++++++++------------------------
 src/gui/panels/history.ui    | 141 +++++++++++++++++++++++++++++++++
 src/gui/panels/log.c         |  71 ++++-------------
 src/gui/panels/log.ui        |  59 ++++++++++++++
 src/gui/panels/panel.c       |   3 +-
 src/gui/panels/regedit.c     | 181 +++++++++++++++++--------------------------
 src/gui/panels/regedit.ui    | 144 ++++++++++++++++++++++++++++++++++
 13 files changed, 687 insertions(+), 385 deletions(-)
 create mode 100644 src/gui/panels/bookmarks.ui
 create mode 100644 src/gui/panels/glance.ui
 create mode 100644 src/gui/panels/history.ui
 create mode 100644 src/gui/panels/log.ui
 create mode 100644 src/gui/panels/regedit.ui

diff --git a/src/gui/panels/Makefile.am b/src/gui/panels/Makefile.am
index b273f82..8b63b24 100644
--- a/src/gui/panels/Makefile.am
+++ b/src/gui/panels/Makefile.am
@@ -5,7 +5,12 @@ noinst_LTLIBRARIES  = libguipanels.la
 
 UI_FILES =								\
 	bintree.ui							\
+	bookmarks.ui						\
 	errors.ui							\
+	glance.ui							\
+	history.ui							\
+	log.ui								\
+	regedit.ui							\
 	strings.ui							\
 	symbols.ui							\
 	welcome.ui
diff --git a/src/gui/panels/bookmarks.c b/src/gui/panels/bookmarks.c
index 071ae75..91301bc 100644
--- a/src/gui/panels/bookmarks.c
+++ b/src/gui/panels/bookmarks.c
@@ -59,7 +59,6 @@ struct _GBookmarksPanel
 {
     GPanelItem parent;                      /* A laisser en premier        */
 
-    GtkTreeView *treeview;                  /* Composant d'affichage       */
     const regex_t *filter;                  /* Filtre appliqué ou NULL     */
 
     GtkMenu *menu;                          /* Menu contextuel pour param. */
@@ -129,7 +128,7 @@ static void on_bookmarks_selection_change(GtkTreeSelection *, gpointer);
 static void on_config_param_modified(GCfgParam *, GBookmarksPanel *);
 
 /* Actualise la valeur affichée d'un paramètre de configuration. */
-static void update_config_param_value(GtkTreeStore *, GtkTreeIter *);
+static void update_config_param_value(GtkListStore *, GtkTreeIter *);
 
 /* Etablit une comparaison entre deux lignes de paramètres. */
 static gint compare_bookmarks_list_columns(GtkTreeModel *, GtkTreeIter *, GtkTreeIter *, gpointer);
@@ -248,13 +247,8 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
 {
     GEditorItem *base;                      /* Version basique d'instance  */
     GPanelItem *pitem;                      /* Version parente du panneau  */
-    GObject *ref;                           /* Espace de référencement     */
-    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         */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
     GtkTreeSortable *sortable;              /* Autre vision de la liste    */
-    GtkTreeSelection *select;               /* Sélection dans la liste     */
 
     /* Eléments de base */
 
@@ -271,67 +265,11 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
 
     /* Représentation graphique */
 
-    base->widget = gtk_scrolled_window_new(NULL, NULL);
-    gtk_widget_show(base->widget);
-
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(base->widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(base->widget), GTK_SHADOW_IN);
-
-    ref = G_OBJECT(base->widget);
-    g_object_set_data(ref, "panel", panel);
-
-    /* Partie signets */
-
-    store = gtk_tree_store_new(BMC_COUNT, G_TYPE_OBJECT,
-                               CAIRO_GOBJECT_TYPE_SURFACE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-
-    treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-    panel->treeview = GTK_TREE_VIEW(treeview);
-
-    g_signal_connect(G_OBJECT(treeview), "button-press-event",
-                     G_CALLBACK(on_button_press_over_bookmarks), panel);
-    g_signal_connect(G_OBJECT(treeview), "key-press-event",
-                     G_CALLBACK(on_key_pressed_over_params), panel);
-
-    gtk_widget_show(treeview);
-    gtk_container_add(GTK_CONTAINER(base->widget), treeview);
-
-    g_object_unref(G_OBJECT(store));
-
-    /* Cellules d'affichage */
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    column = gtk_tree_view_column_new_with_attributes("", renderer,
-                                                      "surface", BMC_PICTURE,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("Physical address"), renderer,
-                                                      "text", BMC_PHYSICAL,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, BMC_PHYSICAL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("Virtual address"), renderer,
-                                                      "text", BMC_VIRTUAL,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, BMC_VIRTUAL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL);
-    ///g_signal_connect(renderer, "edited", G_CALLBACK(on_param_value_edited), store);
-    column = gtk_tree_view_column_new_with_attributes(_("Comment"), renderer,
-                                                      "text", BMC_COMMENT,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, BMC_COMMENT);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+    builder = g_panel_item_build(pitem, "bookmarks");
 
     /* Tri de la liste */
 
-    sortable = GTK_TREE_SORTABLE(store);
+    sortable = GTK_TREE_SORTABLE(gtk_builder_get_object(builder, "store"));
 
     gtk_tree_sortable_set_sort_func(sortable, BMC_PHYSICAL, compare_bookmarks_list_columns,
                                     GINT_TO_POINTER(BMC_PHYSICAL), NULL);
@@ -344,16 +282,20 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
 
     gtk_tree_sortable_set_sort_column_id(sortable, BMC_COMMENT, GTK_SORT_ASCENDING);
 
-    /* Prise en compte de la sélection */
-
-    select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-    gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
-    g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(on_bookmarks_selection_change), NULL);
-
     /* Préparation du menu contextuel */
 
     panel->menu = build_bookmarks_panel_menu(panel);
 
+    /* Connexion des signaux */
+
+    gtk_builder_add_callback_symbols(builder,
+                                     "on_button_press_over_bookmarks", G_CALLBACK(on_button_press_over_bookmarks),
+                                     "on_key_pressed_over_params", G_CALLBACK(on_key_pressed_over_params),
+                                     "on_bookmarks_selection_change", G_CALLBACK(on_bookmarks_selection_change),
+                                     NULL);
+
+    gtk_builder_connect_signals(builder, panel);
+
 }
 
 
@@ -371,8 +313,7 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
 
 static void g_bookmarks_panel_dispose(GBookmarksPanel *panel)
 {
-    if (panel->binary != NULL)
-        g_object_unref(G_OBJECT(panel->binary));
+    g_clear_object(&panel->binary);
 
     G_OBJECT_CLASS(g_bookmarks_panel_parent_class)->dispose(G_OBJECT(panel));
 
@@ -479,7 +420,8 @@ static void change_bookmarks_panel_current_content(GBookmarksPanel *panel, GLoad
 static void reload_bookmarks_into_treeview(GBookmarksPanel *panel, GLoadedBinary *binary)
 {
     GDbCollection *collec;                  /* Collection à lister ici     */
-    GtkTreeStore *store;                    /* Modèle de gestion           */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
     GArchProcessor *proc;                   /* Architecture du binaire     */
     MemoryDataSize msize;                   /* Taille par défaut           */
     GList *items;                           /* Liste des éléments groupés  */
@@ -514,8 +456,11 @@ static void reload_bookmarks_into_treeview(GBookmarksPanel *panel, GLoadedBinary
 
     }
 
-    store = GTK_TREE_STORE(gtk_tree_view_get_model(panel->treeview));
-    gtk_tree_store_clear(store);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
+
+    gtk_list_store_clear(store);
 
     /* Si le panneau actif ne représente pas un binaire... */
 
@@ -546,8 +491,8 @@ static void reload_bookmarks_into_treeview(GBookmarksPanel *panel, GLoadedBinary
         if (is_bookmark_filtered(panel, phys, virt, comment))
             continue;
 
-        gtk_tree_store_append(store, &iter, NULL);
-        gtk_tree_store_set(store, &iter,
+        gtk_list_store_append(store, &iter);
+        gtk_list_store_set(store, &iter,
                            BMC_BOOKMARK, bookmark,
                            BMC_PICTURE, G_BOOKMARKS_PANEL_GET_CLASS(panel)->bookmark_img,
                            BMC_PHYSICAL, phys,
@@ -579,8 +524,8 @@ static void reload_bookmarks_into_treeview(GBookmarksPanel *panel, GLoadedBinary
 
 static void on_collection_content_changed(GDbCollection *collec, DBAction action, GDbBookmark *bookmark, GBookmarksPanel *panel)
 {
-
-    GtkTreeStore *store;                    /* Modèle de gestion           */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
 
 
     GArchProcessor *proc;                   /* Architecture du binaire     */
@@ -595,10 +540,12 @@ static void on_collection_content_changed(GDbCollection *collec, DBAction action
     GDbBookmark *displayed;                 /* Elément de collection       */
 
 
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
+
     if (action == DBA_ADD_ITEM || (action == DBA_CHANGE_STATE && g_db_item_is_active(G_DB_ITEM(bookmark))))
     {
-        store = GTK_TREE_STORE(gtk_tree_view_get_model(panel->treeview));
-
         proc = g_loaded_binary_get_processor(panel->binary);
         msize = g_arch_processor_get_memory_size(proc);
         g_object_unref(G_OBJECT(proc));
@@ -608,8 +555,8 @@ static void on_collection_content_changed(GDbCollection *collec, DBAction action
         vmpa2_phys_to_string(addr, msize, phys, NULL);
         vmpa2_virt_to_string(addr, msize, virt, NULL);
 
-        gtk_tree_store_append(store, &iter, NULL);
-        gtk_tree_store_set(store, &iter,
+        gtk_list_store_append(store, &iter);
+        gtk_list_store_set(store, &iter,
                            BMC_BOOKMARK, bookmark,
                            BMC_PICTURE, G_BOOKMARKS_PANEL_GET_CLASS(panel)->bookmark_img,
                            BMC_PHYSICAL, phys,
@@ -624,8 +571,6 @@ static void on_collection_content_changed(GDbCollection *collec, DBAction action
 
     else /*if (action == DBA_CHANGE_STATE && g_db_item_is_active(G_DB_ITEM(bookmark)))*/
     {
-
-        store = GTK_TREE_STORE(gtk_tree_view_get_model(panel->treeview));
         model = GTK_TREE_MODEL(store);
 
 
@@ -636,7 +581,7 @@ static void on_collection_content_changed(GDbCollection *collec, DBAction action
 
                 if (bookmark == displayed)
                 {
-                    gtk_tree_store_remove(store, &iter);
+                    gtk_list_store_remove(store, &iter);
                     break;
                 }
 
@@ -709,14 +654,17 @@ static void on_bookmarks_selection_change(GtkTreeSelection *selection, gpointer
 
 static void on_config_param_modified(GCfgParam *param, GBookmarksPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
     GtkTreeModel *model;                    /* Gestionnaire de données     */
     GtkTreeIter iter;                       /* Point de recherche          */
     gboolean looping;                       /* Autorisation de bouclage    */
     GCfgParam *item;                        /* Elément de la liste         */
 
-    model = gtk_tree_view_get_model(panel->treeview);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    model = GTK_TREE_MODEL(gtk_builder_get_object(builder, "store"));
 
-    for (looping = gtk_tree_model_get_iter_first (model, &iter);
+    for (looping = gtk_tree_model_get_iter_first(model, &iter);
          looping;
          looping = gtk_tree_model_iter_next(model, &iter))
     {
@@ -724,7 +672,7 @@ static void on_config_param_modified(GCfgParam *param, GBookmarksPanel *panel)
 
         if (item == param)
         {
-            update_config_param_value(GTK_TREE_STORE(model), &iter);
+            update_config_param_value(GTK_LIST_STORE(model), &iter);
             break;
         }
 
@@ -747,7 +695,7 @@ static void on_config_param_modified(GCfgParam *param, GBookmarksPanel *panel)
 *                                                                             *
 ******************************************************************************/
 
-static void update_config_param_value(GtkTreeStore *store, GtkTreeIter *iter)
+static void update_config_param_value(GtkListStore *store, GtkTreeIter *iter)
 {
     GCfgParam *param;                       /* Paramètre à consulter       */
     ConfigParamState state;                 /* Etat du paramètre           */
@@ -800,7 +748,7 @@ static void update_config_param_value(GtkTreeStore *store, GtkTreeIter *iter)
         }
 
     /*
-    gtk_tree_store_set(store, iter,
+    gtk_list_store_set(store, iter,
                        CPC_BOLD, state & CPS_DEFAULT ? 400 : 800,
                        CPC_STATUS, state_desc,
                        CPC_VALUE, desc, -1);
@@ -1182,19 +1130,25 @@ static GDbBookmark *get_selected_panel_bookmark(GtkTreeView *treeview, GtkTreeIt
 
 static void mcb_bookmarks_panel_edit(GtkMenuItem *menuitem, GBookmarksPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Arborescence manipulée      */
     GtkTreeIter iter;                       /* Point de la sélection       */
     GDbBookmark *mark;                      /* Signet sélectionné          */
     GtkTreeModel *model;                    /* Gestionnaire de données     */
     GtkTreePath *path;                      /* Chemin d'accès à ce point   */
 
-    mark = get_selected_panel_bookmark(panel->treeview, &iter);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    mark = get_selected_panel_bookmark(treeview, &iter);
     if (mark == NULL) return;
 
-    model = gtk_tree_view_get_model(panel->treeview);
+    model = gtk_tree_view_get_model(treeview);
     path = gtk_tree_model_get_path(model, &iter);
 
-    gtk_tree_view_set_cursor(panel->treeview, path,
-                             gtk_tree_view_get_column(panel->treeview, BMC_COMMENT - BMC_PHYSICAL),
+    gtk_tree_view_set_cursor(treeview, path,
+                             gtk_tree_view_get_column(treeview, BMC_COMMENT - BMC_PHYSICAL),
                              TRUE);
 
     gtk_tree_path_free(path);
@@ -1219,9 +1173,15 @@ static void mcb_bookmarks_panel_edit(GtkMenuItem *menuitem, GBookmarksPanel *pan
 
 static void mcb_bookmarks_panel_delete(GtkMenuItem *menuitem, GBookmarksPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Affichage de la liste       */
     GDbBookmark *mark;                      /* Signet sélectionné          */
 
-    mark = get_selected_panel_bookmark(panel->treeview, NULL);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    mark = get_selected_panel_bookmark(treeview, NULL);
     if (mark == NULL) return;
 
     g_loaded_binary_remove_from_collection(panel->binary, DBF_BOOKMARKS, G_DB_ITEM(mark));
diff --git a/src/gui/panels/bookmarks.ui b/src/gui/panels/bookmarks.ui
new file mode 100644
index 0000000..8ba6211
--- /dev/null
+++ b/src/gui/panels/bookmarks.ui
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.21.0 -->
+<interface>
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkListStore" id="store">
+    <columns>
+      <!-- column-name bookmark -->
+      <column type="GObject"/>
+      <!-- column-name picture -->
+      <column type="CairoSurface"/>
+      <!-- column-name physical -->
+      <column type="gchararray"/>
+      <!-- column-name virtual -->
+      <column type="gchararray"/>
+      <!-- column-name comment -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkOffscreenWindow">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkScrolledWindow" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="shadow_type">in</property>
+        <child>
+          <object class="GtkTreeView" id="treeview">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="model">store</property>
+            <signal name="button-press-event" handler="on_button_press_over_bookmarks" swapped="no"/>
+            <signal name="key-press-event" handler="on_key_pressed_over_params" swapped="no"/>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection">
+                <signal name="changed" handler="on_bookmarks_selection_change" swapped="no"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <child>
+                  <object class="GtkCellRendererPixbuf"/>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Physical address</property>
+                <property name="sort_column_id">2</property>
+                <child>
+                  <object class="GtkCellRendererText"/>
+                  <attributes>
+                    <attribute name="text">2</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Virtual address</property>
+                <property name="sort_column_id">3</property>
+                <child>
+                  <object class="GtkCellRendererText"/>
+                  <attributes>
+                    <attribute name="text">3</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">Comment</property>
+                <property name="sort_column_id">4</property>
+                <child>
+                  <object class="GtkCellRendererText"/>
+                  <attributes>
+                    <attribute name="text">4</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>
diff --git a/src/gui/panels/glance.c b/src/gui/panels/glance.c
index 00fe1ab..9b2c088 100644
--- a/src/gui/panels/glance.c
+++ b/src/gui/panels/glance.c
@@ -175,7 +175,7 @@ static void g_glance_panel_init(GGlancePanel *panel)
 {
     GEditorItem *base;                      /* Version basique d'instance  */
     GPanelItem *pitem;                      /* Version parente du panneau  */
-    GtkWidget *area;                        /* Surface de dessin réelle    */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
 
     /* Eléments de base */
 
@@ -190,27 +190,21 @@ static void g_glance_panel_init(GGlancePanel *panel)
     pitem->dock_at_startup = true;
     pitem->path = strdup("MEs");
 
-    /* Support de dessin */
+    /* Représentation graphique */
 
-    base->widget = gtk_event_box_new();
+    builder = g_panel_item_build(pitem, "glance");
 
-    area = gtk_drawing_area_new();
-    gtk_widget_show(area);
+    /* Connexion des signaux */
 
-    gtk_container_add(GTK_CONTAINER(base->widget), area);
-    gtk_widget_show(base->widget);
+    gtk_builder_add_callback_symbols(builder,
+                                     "redraw_glance_area", G_CALLBACK(redraw_glance_area),
+                                     "on_glance_resize", G_CALLBACK(on_glance_resize),
+                                     "on_button_press_over_glance", G_CALLBACK(on_button_press_over_glance),
+                                     "on_button_release_over_glance", G_CALLBACK(on_button_release_over_glance),
+                                     "on_mouse_motion_over_glance", G_CALLBACK(on_mouse_motion_over_glance),
+                                     NULL);
 
-    g_signal_connect(G_OBJECT(area), "draw",
-                      G_CALLBACK(redraw_glance_area), panel);
-    g_signal_connect(G_OBJECT(area), "size-allocate",
-                      G_CALLBACK(on_glance_resize), panel);
-
-    g_signal_connect(G_OBJECT(base->widget), "button-press-event",
-                      G_CALLBACK(on_button_press_over_glance), panel);
-    g_signal_connect(G_OBJECT(base->widget), "button-release-event",
-                      G_CALLBACK(on_button_release_over_glance), panel);
-    g_signal_connect(G_OBJECT(base->widget), "motion-notify-event",
-                      G_CALLBACK(on_mouse_motion_over_glance), panel);
+    gtk_builder_connect_signals(builder, panel);
 
 }
 
diff --git a/src/gui/panels/glance.ui b/src/gui/panels/glance.ui
new file mode 100644
index 0000000..7430e85
--- /dev/null
+++ b/src/gui/panels/glance.ui
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.21.0 -->
+<interface>
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkOffscreenWindow">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkEventBox" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <signal name="button-press-event" handler="on_button_press_over_glance" swapped="no"/>
+        <signal name="button-release-event" handler="on_button_release_over_glance" swapped="no"/>
+        <signal name="motion-notify-event" handler="on_mouse_motion_over_glance" swapped="no"/>
+        <child>
+          <object class="GtkDrawingArea">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <signal name="draw" handler="redraw_glance_area" swapped="no"/>
+            <signal name="size-allocate" handler="on_glance_resize" swapped="no"/>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>
diff --git a/src/gui/panels/gresource.xml b/src/gui/panels/gresource.xml
index b6f6cf9..d996ef1 100644
--- a/src/gui/panels/gresource.xml
+++ b/src/gui/panels/gresource.xml
@@ -7,7 +7,12 @@
         <file compressed="true">../../../pixmaps/tbutton_expand.png</file>
         <file compressed="true">../../../pixmaps/symbol_class_classic.png</file>
         <file compressed="true">bintree.ui</file>
+        <file compressed="true">bookmarks.ui</file>
         <file compressed="true">errors.ui</file>
+        <file compressed="true">glance.ui</file>
+        <file compressed="true">history.ui</file>
+        <file compressed="true">log.ui</file>
+        <file compressed="true">regedit.ui</file>
         <file compressed="true">strings.ui</file>
         <file compressed="true">symbols.ui</file>
         <file compressed="true">welcome.ui</file>
diff --git a/src/gui/panels/history.c b/src/gui/panels/history.c
index 247c1a1..a1aa36b 100644
--- a/src/gui/panels/history.c
+++ b/src/gui/panels/history.c
@@ -36,7 +36,6 @@
 #include "../../analysis/binary.h"
 #include "../../glibext/chrysamarshal.h"
 #include "../../glibext/signal.h"
-#include "../../gtkext/easygtk.h"
 
 
 
@@ -45,9 +44,6 @@ 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 */
 
 };
@@ -158,14 +154,8 @@ static void g_history_panel_init(GHistoryPanel *panel)
 {
     GEditorItem *base;                      /* Version basique d'instance  */
     GPanelItem *pitem;                      /* Version parente du panneau  */
-    GObject *ref;                           /* Espace de référencement     */
-    GtkWidget *scrollwnd;                   /* Support défilant            */
-    GtkWidget *treeview;                    /* Affichage de la liste       */
-    GtkCellRenderer *renderer;              /* Moteur de rendu de colonne  */
-    GtkTreeViewColumn *column;              /* Colonne de la liste         */
-    GtkWidget *box;                         /* Séparation horizontale      */
-    GtkWidget *button;                      /* Bouton de cette même barre  */
-    GtkTreeSelection *select;               /* Sélection dans la liste     */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
 
     /* Eléments de base */
 
@@ -182,80 +172,22 @@ static void g_history_panel_init(GHistoryPanel *panel)
 
     /* Représentation graphique */
 
-    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(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, 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_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(panel->store), sort_history_lines, NULL, NULL);
-
-    gtk_widget_show(treeview);
-    gtk_container_add(GTK_CONTAINER(scrollwnd), treeview);
-
-    g_object_unref(G_OBJECT(panel->store));
-
-    /* Cellules d'affichage */
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    column = gtk_tree_view_column_new_with_attributes("", renderer,
-                                                      "surface", HTC_PICTURE,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("Label"), renderer,
-                                                      "foreground", HTC_FOREGROUND,
-                                                      "text", HTC_LABEL,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+    builder = g_panel_item_build(pitem, "history");
 
-    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(panel->store),
-                                         GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
 
-    /* Eléments de contrôle inférieurs */
+    gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(store), sort_history_lines, NULL, NULL);
 
-    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);
+    /* Connexion des signaux */
 
-    button = qck_create_button_with_css_img(ref, "undo", "img-undo", _("Undo"),
-                                            G_CALLBACK(do_history_undo), panel);
-    gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
+    gtk_builder_add_callback_symbols(builder,
+                                     "on_history_selection_change", G_CALLBACK(on_history_selection_change),
+                                     "do_history_undo", G_CALLBACK(do_history_undo),
+                                     "do_history_redo", G_CALLBACK(do_history_redo),
+                                     "do_history_clean", G_CALLBACK(do_history_clean),
+                                     NULL);
 
-    button = qck_create_button_with_css_img(ref, "redo", "img-redo", _("Redo"),
-                                            G_CALLBACK(do_history_redo), panel);
-    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(do_history_clean), panel);
-    gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
-
-    /* Prise en compte de la sélection */
-
-    select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-    gtk_tree_selection_set_mode(select, GTK_SELECTION_BROWSE);
-    g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(on_history_selection_change), panel);
+    gtk_builder_connect_signals(builder, panel);
 
 }
 
@@ -274,8 +206,7 @@ static void g_history_panel_init(GHistoryPanel *panel)
 
 static void g_history_panel_dispose(GHistoryPanel *panel)
 {
-    if (panel->binary != NULL)
-        g_object_unref(G_OBJECT(panel->binary));
+    g_clear_object(&panel->binary);
 
     G_OBJECT_CLASS(g_history_panel_parent_class)->dispose(G_OBJECT(panel));
 
@@ -344,7 +275,8 @@ static void change_history_panel_current_content(GHistoryPanel *panel, GLoadedCo
     GList *collections;                     /* Ensemble de collections     */
     GList *c;                               /* Boucle de parcours #1       */
     GDbCollection *collec;                  /* Collection visée manipulée  */
-    GtkTreeStore *store;                    /* Modèle de gestion           */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
     GList *items;                           /* Liste des éléments groupés  */
     GList *i;                               /* Boucle de parcours #2       */
     GDbItem *item;                          /* Elément à intégrer          */
@@ -380,8 +312,11 @@ static void change_history_panel_current_content(GHistoryPanel *panel, GLoadedCo
     if (panel->binary != NULL)
         g_object_ref(G_OBJECT(binary));
 
-    store = GTK_TREE_STORE(gtk_tree_view_get_model(panel->treeview));
-    gtk_tree_store_clear(store);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
+
+    gtk_list_store_clear(store);
 
     /* Si le panneau actif ne représente pas un binaire... */
 
@@ -402,8 +337,8 @@ static void change_history_panel_current_content(GHistoryPanel *panel, GLoadedCo
         {
             item = G_DB_ITEM(i->data);
 
-            gtk_tree_store_append(store, &iter, NULL);
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_append(store, &iter);
+            gtk_list_store_set(store, &iter,
                                HTC_ITEM, item,
                                //HTC_PICTURE, G_BOOKMARKS_PANEL_GET_CLASS(panel)->bookmark_img,
                                HTC_FOREGROUND, g_db_item_is_active(item) ? NULL : "grey",
@@ -442,13 +377,21 @@ static void change_history_panel_current_content(GHistoryPanel *panel, GLoadedCo
 
 static void on_history_changed(GDbCollection *collec, DBAction action, GDbItem *item, GHistoryPanel *panel)
 {
-    GtkTreeModel *model;                    /* Modèle de gestion courant   */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Arborescence manipulée      */
+    GtkListStore *store;                    /* Modèle de gestion courant   */
+    GtkTreeModel *model;                    /* Modèle de gestion générique */
     GtkTreeSelection *selection;            /* Nouvelle sélection à établir*/
     GtkTreeIter iter;                       /* Boucle de parcours          */
 
-    model = GTK_TREE_MODEL(panel->store);
+    builder = G_PANEL_ITEM(panel)->builder;
 
-    selection = gtk_tree_view_get_selection(panel->treeview);
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
+    model = GTK_TREE_MODEL(store);
+
+    selection = gtk_tree_view_get_selection(treeview);
 
     /* Mise à jour de la liste affichée */
 
@@ -484,8 +427,8 @@ static void on_history_changed(GDbCollection *collec, DBAction action, GDbItem *
     {
         case DBA_ADD_ITEM:
 
-            gtk_tree_store_append(panel->store, &iter, NULL);
-            gtk_tree_store_set(panel->store, &iter,
+            gtk_list_store_append(store, &iter);
+            gtk_list_store_set(store, &iter,
                                HTC_ITEM, item,
                                //HTC_PICTURE, G_BOOKMARKS_PANEL_GET_CLASS(panel)->bookmark_img,
                                HTC_FOREGROUND, g_db_item_is_active(item) ? NULL : "grey",
@@ -497,14 +440,14 @@ static void on_history_changed(GDbCollection *collec, DBAction action, GDbItem *
         case DBA_REM_ITEM:
 
             if (find_changed_item(model, item, &iter))
-                gtk_tree_store_remove(panel->store, &iter);
+                gtk_list_store_remove(store, &iter);
 
             break;
 
         case DBA_CHANGE_STATE:
 
             if (find_changed_item(model, item, &iter))
-                gtk_tree_store_set(panel->store, &iter,
+                gtk_list_store_set(store, &iter,
                                    HTC_FOREGROUND, g_db_item_is_active(item) ? NULL : "grey",
                                    -1);
             break;
@@ -599,19 +542,22 @@ static gint sort_history_lines(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter
 
 static void on_history_selection_change(GtkTreeSelection *selection, GHistoryPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
     GtkTreeIter iter;                       /* Point de sélection          */
     GtkTreeModel *model;                    /* Modèle de gestion           */
     GDbItem *item;                          /* Elément de collection       */
     GtkWidget *button;                      /* Bouton de barre de contrôle */
 
+    builder = G_PANEL_ITEM(panel)->builder;
+
     if (gtk_tree_selection_get_selected(selection, &model, &iter))
     {
         gtk_tree_model_get(model, &iter, HTC_ITEM, &item, -1);
 
-        button = GTK_WIDGET(g_object_get_data(G_OBJECT(panel), "undo"));
+        button = GTK_WIDGET(gtk_builder_get_object(builder, "undo"));
         gtk_widget_set_sensitive(button, g_db_item_is_active(item));
 
-        button = GTK_WIDGET(g_object_get_data(G_OBJECT(panel), "redo"));
+        button = GTK_WIDGET(gtk_builder_get_object(builder, "redo"));
         gtk_widget_set_sensitive(button, !g_db_item_is_active(item));
 
         g_object_unref(G_OBJECT(item));
@@ -620,10 +566,10 @@ static void on_history_selection_change(GtkTreeSelection *selection, GHistoryPan
 
     else
     {
-        button = GTK_WIDGET(g_object_get_data(G_OBJECT(panel), "undo"));
+        button = GTK_WIDGET(gtk_builder_get_object(builder, "undo"));
         gtk_widget_set_sensitive(button, FALSE);
 
-        button = GTK_WIDGET(g_object_get_data(G_OBJECT(panel), "redo"));
+        button = GTK_WIDGET(gtk_builder_get_object(builder, "redo"));
         gtk_widget_set_sensitive(button, FALSE);
 
     }
@@ -646,13 +592,19 @@ static void on_history_selection_change(GtkTreeSelection *selection, GHistoryPan
 
 static void do_history_undo(GtkButton *button, GHistoryPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Arborescence manipulée      */
     GtkTreeSelection *selection;            /* Sélection courante          */
     GtkTreeModel *model;                    /* Modèle de gestion de données*/
     GtkTreeIter iter;                       /* Pointeur vers la ligne visée*/
     GDbItem *item;                          /* Elément de collection       */
     GDbClient *client;                      /* Connexion vers la base      */
 
-    selection = gtk_tree_view_get_selection(panel->treeview);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    selection = gtk_tree_view_get_selection(treeview);
 
     if (gtk_tree_selection_get_selected(selection, &model, &iter))
     {
@@ -687,13 +639,19 @@ static void do_history_undo(GtkButton *button, GHistoryPanel *panel)
 
 static void do_history_redo(GtkButton *button, GHistoryPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Arborescence manipulée      */
     GtkTreeSelection *selection;            /* Sélection courante          */
     GtkTreeModel *model;                    /* Modèle de gestion de données*/
     GtkTreeIter iter;                       /* Pointeur vers la ligne visée*/
     GDbItem *item;                          /* Elément de collection       */
     GDbClient *client;                      /* Connexion vers la base      */
 
-    selection = gtk_tree_view_get_selection(panel->treeview);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    selection = gtk_tree_view_get_selection(treeview);
 
     if (gtk_tree_selection_get_selected(selection, &model, &iter))
     {
diff --git a/src/gui/panels/history.ui b/src/gui/panels/history.ui
new file mode 100644
index 0000000..d62216a
--- /dev/null
+++ b/src/gui/panels/history.ui
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.21.0 -->
+<interface>
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkListStore" id="store">
+    <columns>
+      <!-- column-name item -->
+      <column type="GObject"/>
+      <!-- column-name picture -->
+      <column type="CairoSurface"/>
+      <!-- column-name foreground -->
+      <column type="gchararray"/>
+      <!-- column-name label -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkOffscreenWindow">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkBox" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_left">8</property>
+        <property name="margin_right">8</property>
+        <property name="margin_top">8</property>
+        <property name="margin_bottom">8</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">8</property>
+        <child>
+          <object class="GtkScrolledWindow">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkTreeView" id="treeview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="model">store</property>
+                <property name="headers_visible">False</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection">
+                    <signal name="changed" handler="on_history_selection_change" swapped="no"/>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn">
+                    <property name="title" translatable="yes">picture</property>
+                    <child>
+                      <object class="GtkCellRendererPixbuf"/>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn">
+                    <property name="title" translatable="yes">label</property>
+                    <child>
+                      <object class="GtkCellRendererText"/>
+                      <attributes>
+                        <attribute name="foreground">2</attribute>
+                        <attribute name="text">3</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="spacing">8</property>
+            <child>
+              <object class="GtkButton" id="undo">
+                <property name="label">gtk-undo</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+                <property name="always_show_image">True</property>
+                <signal name="clicked" handler="do_history_undo" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="redo">
+                <property name="label">gtk-redo</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+                <property name="always_show_image">True</property>
+                <signal name="clicked" handler="do_history_redo" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+                <property name="always_show_image">True</property>
+                <signal name="clicked" handler="do_history_clean" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>
diff --git a/src/gui/panels/log.c b/src/gui/panels/log.c
index 9c109d4..f0252e9 100644
--- a/src/gui/panels/log.c
+++ b/src/gui/panels/log.c
@@ -142,11 +142,6 @@ static void g_log_panel_init(GLogPanel *panel)
 {
     GEditorItem *base;                      /* Version basique d'instance  */
     GPanelItem *pitem;                      /* Version parente du panneau  */
-    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         */
 
     /* Eléments de base */
 
@@ -163,43 +158,7 @@ static void g_log_panel_init(GLogPanel *panel)
 
     /* Représentation graphique */
 
-    scrolled = gtk_scrolled_window_new(NULL, NULL);
-    gtk_widget_show(scrolled);
-
-    base->widget = scrolled;
-
-    /* Construction graphique */
-
-    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(scrolled), "store", store);
-
-    treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-    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(scrolled), treeview);
-
-    g_object_unref(G_OBJECT(store));
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_visible(column, FALSE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-    gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
-
-    column = gtk_tree_view_column_new();
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_add_attribute(column, renderer, "stock-id", LGC_PICTURE);
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, TRUE);
-    gtk_tree_view_column_add_attribute(column, renderer, "markup", LGC_STRING);
-
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+    g_panel_item_build(pitem, "log");
 
 }
 
@@ -283,7 +242,7 @@ void g_log_panel_add_message(GLogPanel *panel, LogMessageType type, const char *
 {
     log_data *data;                         /* Paramètres à joindre        */
 
-    data = (log_data *)calloc(1, sizeof(log_data));
+    data = calloc(1, sizeof(log_data));
 
     data->item = G_PANEL_ITEM(panel);
     data->type = type;
@@ -311,58 +270,58 @@ void g_log_panel_add_message(GLogPanel *panel, LogMessageType type, const char *
 
 static gboolean log_message(log_data *data)
 {
-    GtkWidget *panel;                       /* Panneau à traiter           */
-    GtkTreeStore *store;                    /* Modèle de gestion           */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
     GtkTreeIter iter;                       /* Point d'insertion           */
     GtkTreeView *treeview;                  /* Affichage de la liste       */
 
-    /* Mise en place du message */
+    builder = G_PANEL_ITEM(data->item)->builder;
 
-    panel = g_editor_item_get_widget(G_EDITOR_ITEM(data->item));
+    /* Mise en place du message */
 
-    store = g_object_get_data(G_OBJECT(panel), "store");
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
 
-    gtk_tree_store_append(store, &iter, NULL);
+    gtk_list_store_append(store, &iter);
 
     switch (data->type)
     {
         case LMT_INFO:
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_set(store, &iter,
                                LGC_PICTURE, "gtk-info",
                                LGC_STRING, data->msg,
                                -1);
             break;
 
         case LMT_BAD_BINARY:
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_set(store, &iter,
                                LGC_PICTURE, "gtk-dialog-warning",
                                LGC_STRING, data->msg,
                                -1);
             break;
 
         case LMT_PROCESS:
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_set(store, &iter,
                                LGC_PICTURE, "gtk-execute",
                                LGC_STRING, data->msg,
                                -1);
             break;
 
         case LMT_ERROR:
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_set(store, &iter,
                                LGC_PICTURE, "gtk-dialog-error",
                                LGC_STRING, data->msg,
                                -1);
             break;
 
         case LMT_WARNING:
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_set(store, &iter,
                                LGC_PICTURE, "gtk-dialog-warning",
                                LGC_STRING, data->msg,
                                -1);
             break;
 
         default:
-            gtk_tree_store_set(store, &iter,
+            gtk_list_store_set(store, &iter,
                                LGC_STRING, data->msg,
                                -1);
             break;
@@ -371,7 +330,7 @@ static gboolean log_message(log_data *data)
 
     /* Défilement pour pointer à l'affichage */
 
-    treeview = GTK_TREE_VIEW(g_object_get_data(G_OBJECT(panel), "treeview"));
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
 
     scroll_to_treeview_iter(treeview, GTK_TREE_MODEL(store), &iter);
 
diff --git a/src/gui/panels/log.ui b/src/gui/panels/log.ui
new file mode 100644
index 0000000..4ffe96c
--- /dev/null
+++ b/src/gui/panels/log.ui
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.21.0 -->
+<interface>
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkListStore" id="store">
+    <columns>
+      <!-- column-name picture -->
+      <column type="gchararray"/>
+      <!-- column-name string -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkOffscreenWindow">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkScrolledWindow" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="shadow_type">in</property>
+        <child>
+          <object class="GtkTreeView" id="treeview">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="model">store</property>
+            <property name="headers_visible">False</property>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection"/>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">picture</property>
+                <child>
+                  <object class="GtkCellRendererPixbuf"/>
+                  <attributes>
+                    <attribute name="stock-id">0</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn">
+                <property name="title" translatable="yes">string</property>
+                <child>
+                  <object class="GtkCellRendererText"/>
+                  <attributes>
+                    <attribute name="markup">1</attribute>
+                  </attributes>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child type="titlebar">
+      <placeholder/>
+    </child>
+  </object>
+</interface>
diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c
index c21e1b2..164fca7 100644
--- a/src/gui/panels/panel.c
+++ b/src/gui/panels/panel.c
@@ -201,8 +201,7 @@ static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface)
 
 static void g_panel_item_dispose(GPanelItem *item)
 {
-    if (item->builder != NULL) // REMME
-    g_object_unref(G_OBJECT(item->builder));
+    g_clear_object(&item->builder);
 
     G_OBJECT_CLASS(g_panel_item_parent_class)->dispose(G_OBJECT(item));
 
diff --git a/src/gui/panels/regedit.c b/src/gui/panels/regedit.c
index 7ec05c0..8ecc99b 100644
--- a/src/gui/panels/regedit.c
+++ b/src/gui/panels/regedit.c
@@ -52,7 +52,6 @@ struct _GRegeditPanel
 {
     GPanelItem parent;                      /* A laisser en premier        */
 
-    GtkTreeView *treeview;                  /* Composant d'affichage       */
     regex_t *filter;                        /* Filtre appliqué ou NULL     */
 
     GtkMenu *menu;                          /* Menu contextuel pour param. */
@@ -109,7 +108,7 @@ static void reload_config_into_treeview(GRegeditPanel *, GGenConfig *);
 static void on_config_param_modified(GCfgParam *, GRegeditPanel *);
 
 /* Actualise la valeur affichée d'un paramètre de configuration. */
-static void update_config_param_value(GtkTreeStore *, GtkTreeIter *);
+static void update_config_param_value(GtkListStore *, GtkTreeIter *);
 
 /* Etablit une comparaison entre deux lignes de paramètres. */
 static gint compare_config_list_columns(GtkTreeModel *, GtkTreeIter *, GtkTreeIter *, gpointer);
@@ -118,7 +117,7 @@ static gint compare_config_list_columns(GtkTreeModel *, GtkTreeIter *, GtkTreeIt
 static gboolean on_key_pressed_over_params(GtkTreeView *, GdkEventKey *, GRegeditPanel *);
 
 /* Réagit à une édition de la valeur d'un paramètre. */
-static void on_param_value_edited(GtkCellRendererText *, gchar *, gchar *, GtkTreeStore *);
+static void on_param_value_edited(GtkCellRendererText *, gchar *, gchar *, GRegeditPanel *);
 
 
 
@@ -206,14 +205,8 @@ static void g_regedit_panel_init(GRegeditPanel *panel)
 {
     GEditorItem *base;                      /* Version basique d'instance  */
     GPanelItem *pitem;                      /* Version parente du panneau  */
-    GObject *ref;                           /* Espace de référencement     */
-    GtkWidget *label;                       /* Etiquette à utiliser        */
-    GtkWidget *search;                      /* Zone de recherche           */
-    GtkWidget *scrolled;                    /* Fenêtre défilante           */
-    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         */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GObject *vrenderer;                     /* Moteur de rendu de colonne  */
     GtkTreeSortable *sortable;              /* Autre vision de la liste    */
 
     /* Eléments de base */
@@ -231,93 +224,15 @@ static void g_regedit_panel_init(GRegeditPanel *panel)
 
     /* Représentation graphique */
 
-    base->widget = gtk_grid_new();
-    gtk_widget_show(base->widget);
-
-    gtk_grid_set_row_spacing(GTK_GRID(base->widget), 8);
-
-    ref = G_OBJECT(base->widget);
-    g_object_set_data(ref, "panel", panel);
-
-    /* Partie recherche */
-
-    label = qck_create_label(NULL, NULL, _("Look for:"));
-    g_object_set(label, "margin", 8, NULL);
-    gtk_grid_attach(GTK_GRID(base->widget), label, 0, 0, 1, 1);
-
-    search = gtk_search_entry_new();
-    g_signal_connect(search, "search-changed", G_CALLBACK(on_param_search_changed), panel);
-    g_signal_connect(search, "focus-in-event", G_CALLBACK(track_focus_change_in_text_area), NULL);
-    g_signal_connect(search, "focus-out-event", G_CALLBACK(track_focus_change_in_text_area), NULL);
-    gtk_widget_show(search);
-    gtk_widget_set_hexpand(search, TRUE);
-    gtk_grid_attach_next_to(GTK_GRID(base->widget), search, label, GTK_POS_RIGHT, 1, 1);
-
-    /* Partie paramètres */
-
-    scrolled = gtk_scrolled_window_new(NULL, NULL);
-    gtk_widget_show(scrolled);
-    gtk_widget_set_vexpand(scrolled, TRUE);
-    gtk_grid_attach_next_to(GTK_GRID(base->widget), scrolled, label, GTK_POS_BOTTOM, 2, 1);
-
-    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_OBJECT, G_TYPE_INT,
-                               G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-
-    treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-    panel->treeview = GTK_TREE_VIEW(treeview);
-
-    g_signal_connect(G_OBJECT(treeview), "button-press-event",
-                     G_CALLBACK(on_button_press_over_params), panel);
-    g_signal_connect(G_OBJECT(treeview), "key-press-event",
-                     G_CALLBACK(on_key_pressed_over_params), panel);
-
-    gtk_widget_show(treeview);
-    gtk_container_add(GTK_CONTAINER(scrolled), treeview);
-
-    g_object_unref(G_OBJECT(store));
-
-    /* Cellules d'affichage */
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("Access path"), renderer,
-                                                      "text", CPC_PATH,
-                                                      "weight", CPC_BOLD,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, CPC_PATH);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("Status"), renderer,
-                                                      "text", CPC_STATUS,
-                                                      "weight", CPC_BOLD,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, CPC_STATUS);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("Type"), renderer,
-                                                      "text", CPC_TYPE,
-                                                      "weight", CPC_BOLD,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, CPC_TYPE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL);
-    g_signal_connect(renderer, "edited", G_CALLBACK(on_param_value_edited), store);
-    column = gtk_tree_view_column_new_with_attributes(_("Value"), renderer,
-                                                      "text", CPC_VALUE,
-                                                      "weight", CPC_BOLD,
-                                                      NULL);
-    gtk_tree_view_column_set_sort_column_id(column, CPC_VALUE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+    builder = g_panel_item_build(pitem, "regedit");
+
+    vrenderer = G_OBJECT(gtk_builder_get_object(builder, "vrenderer"));
+
+    g_object_set(vrenderer, "editable", TRUE, NULL);
 
     /* Tri de la liste */
 
-    sortable = GTK_TREE_SORTABLE(store);
+    sortable = GTK_TREE_SORTABLE(gtk_builder_get_object(builder, "store"));
 
     gtk_tree_sortable_set_sort_func(sortable, CPC_PATH, compare_config_list_columns,
                                     GINT_TO_POINTER(CPC_PATH), NULL);
@@ -337,6 +252,18 @@ static void g_regedit_panel_init(GRegeditPanel *panel)
 
     panel->menu = build_param_panel_menu(panel);
 
+    /* Connexion des signaux */
+
+    gtk_builder_add_callback_symbols(builder,
+                                     "on_param_search_changed", G_CALLBACK(on_param_search_changed),
+                                     "track_focus_change_in_text_area", G_CALLBACK(track_focus_change_in_text_area),
+                                     "on_button_press_over_params", G_CALLBACK(on_button_press_over_params),
+                                     "on_key_pressed_over_params", G_CALLBACK(on_key_pressed_over_params),
+                                     "on_param_value_edited", G_CALLBACK(on_param_value_edited),
+                                     NULL);
+
+    gtk_builder_connect_signals(builder, panel);
+
 }
 
 
@@ -430,15 +357,19 @@ GPanelItem *g_regedit_panel_new(void)
 
 static void reload_config_into_treeview(GRegeditPanel *panel, GGenConfig *config)
 {
-    GtkTreeStore *store;                    /* Modèle de gestion           */
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
     GList *params;                          /* Paramètres de configuration */
     GCfgParam *param;                       /* Paramètre en cours d'étude  */
     GList *p;                               /* Boucle de parcours          */
     char *type_desc;                        /* Type de paramètre           */
     GtkTreeIter iter;                       /* Point d'insertion           */
 
-    store = GTK_TREE_STORE(gtk_tree_view_get_model(panel->treeview));
-    gtk_tree_store_clear(store);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
+
+    gtk_list_store_clear(store);
 
     g_generic_config_rlock(config);
 
@@ -475,8 +406,8 @@ static void reload_config_into_treeview(GRegeditPanel *panel, GGenConfig *config
 
         }
 
-        gtk_tree_store_append(store, &iter, NULL);
-        gtk_tree_store_set(store, &iter,
+        gtk_list_store_append(store, &iter);
+        gtk_list_store_set(store, &iter,
                            CPC_PARAM, param,
                            CPC_PATH, g_config_param_get_path(param),
                            CPC_TYPE, type_desc,
@@ -508,14 +439,20 @@ static void reload_config_into_treeview(GRegeditPanel *panel, GGenConfig *config
 
 static void on_config_param_modified(GCfgParam *param, GRegeditPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Affichage de la liste       */
     GtkTreeModel *model;                    /* Gestionnaire de données     */
     GtkTreeIter iter;                       /* Point de recherche          */
     gboolean looping;                       /* Autorisation de bouclage    */
     GCfgParam *item;                        /* Elément de la liste         */
 
-    model = gtk_tree_view_get_model(panel->treeview);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    model = gtk_tree_view_get_model(treeview);
 
-    for (looping = gtk_tree_model_get_iter_first (model, &iter);
+    for (looping = gtk_tree_model_get_iter_first(model, &iter);
          looping;
          looping = gtk_tree_model_iter_next(model, &iter))
     {
@@ -523,7 +460,7 @@ static void on_config_param_modified(GCfgParam *param, GRegeditPanel *panel)
 
         if (item == param)
         {
-            update_config_param_value(GTK_TREE_STORE(model), &iter);
+            update_config_param_value(GTK_LIST_STORE(model), &iter);
             break;
         }
 
@@ -546,7 +483,7 @@ static void on_config_param_modified(GCfgParam *param, GRegeditPanel *panel)
 *                                                                             *
 ******************************************************************************/
 
-static void update_config_param_value(GtkTreeStore *store, GtkTreeIter *iter)
+static void update_config_param_value(GtkListStore *store, GtkTreeIter *iter)
 {
     GCfgParam *param;                       /* Paramètre à consulter       */
     ConfigParamState state;                 /* Etat du paramètre           */
@@ -606,7 +543,7 @@ static void update_config_param_value(GtkTreeStore *store, GtkTreeIter *iter)
 
         }
 
-    gtk_tree_store_set(store, iter,
+    gtk_list_store_set(store, iter,
                        CPC_BOLD, state & CPS_DEFAULT ? 400 : 800,
                        CPC_STATUS, state_desc,
                        CPC_VALUE, desc, -1);
@@ -718,7 +655,7 @@ static gboolean on_key_pressed_over_params(GtkTreeView *treeview, GdkEventKey *e
 *  Paramètres  : renderer = moteur de rendu pour la cellule.                  *
 *                path     = chemin d'accès vers la cellule éditée.            *
 *                new      = nouvelle valeur sous forme de texte à valider.    *
-*                store    = gestionnaire des données de la liste affichée.    *
+*                panel    = panneau d'affichage sur lequel s'appuyer.         *
 *                                                                             *
 *  Description : Réagit à une édition de la valeur d'un paramètre.            *
 *                                                                             *
@@ -728,8 +665,10 @@ static gboolean on_key_pressed_over_params(GtkTreeView *treeview, GdkEventKey *e
 *                                                                             *
 ******************************************************************************/
 
-static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gchar *new, GtkTreeStore *store)
+static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gchar *new, GRegeditPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkListStore *store;                    /* Modèle de gestion           */
     GtkTreePath *tree_path;                 /* Chemin d'accès natif        */
     GtkTreeIter iter;                       /* Point de la modification    */
     GCfgParam *param;                       /* Paramètre à actualiser      */
@@ -738,6 +677,10 @@ static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gc
     int ulong;                              /* Valeur entière positive     */
     char *end;                              /* Pointeur vers '\0' final ?  */
 
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
+
     tree_path = gtk_tree_path_new_from_string(path);
     if (tree_path == NULL) return;
 
@@ -1004,12 +947,18 @@ static GCfgParam *get_selected_panel_param(GtkTreeView *treeview, GtkTreeIter *s
 
 static void mcb_param_panel_copy(GtkMenuItem *menuitem, GRegeditPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Affichage de la liste       */
     GCfgParam *param;                       /* Paramètre sélectionné       */
     const char *content;                    /* Prochain contenu à diffuser */
     gint clen;                              /* Taille de ce contenu        */
     GtkClipboard *clipboard;                /* Presse-papiers à remplir    */
 
-    param = get_selected_panel_param(panel->treeview, NULL);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    param = get_selected_panel_param(treeview, NULL);
     if (param == NULL) return;
 
     content = g_config_param_get_path(param);
@@ -1041,9 +990,15 @@ static void mcb_param_panel_copy(GtkMenuItem *menuitem, GRegeditPanel *panel)
 
 static void mcb_param_panel_empty(GtkMenuItem *menuitem, GRegeditPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Affichage de la liste       */
     GCfgParam *param;                       /* Paramètre sélectionné       */
 
-    param = get_selected_panel_param(panel->treeview, NULL);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    param = get_selected_panel_param(treeview, NULL);
     if (param == NULL) return;
 
     g_config_param_make_empty(param);
@@ -1068,9 +1023,15 @@ static void mcb_param_panel_empty(GtkMenuItem *menuitem, GRegeditPanel *panel)
 
 static void mcb_param_panel_reset(GtkMenuItem *menuitem, GRegeditPanel *panel)
 {
+    GtkBuilder *builder;                    /* Constructeur utilisé        */
+    GtkTreeView *treeview;                  /* Affichage de la liste       */
     GCfgParam *param;                       /* Paramètre sélectionné       */
 
-    param = get_selected_panel_param(panel->treeview, NULL);
+    builder = G_PANEL_ITEM(panel)->builder;
+
+    treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+
+    param = get_selected_panel_param(treeview, NULL);
     if (param == NULL) return;
 
     g_config_param_reset(param);
diff --git a/src/gui/panels/regedit.ui b/src/gui/panels/regedit.ui
new file mode 100644
index 0000000..7bfd016
--- /dev/null
+++ b/src/gui/panels/regedit.ui
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.21.0 -->
+<interface>
+  <requires lib="gtk+" version="3.20"/>
+  <object class="GtkListStore" id="store">
+    <columns>
+      <!-- column-name param -->
+      <column type="GObject"/>
+      <!-- column-name bold -->
+      <column type="gint"/>
+      <!-- column-name path -->
+      <column type="gchararray"/>
+      <!-- column-name status -->
+      <column type="gchararray"/>
+      <!-- column-name type -->
+      <column type="gchararray"/>
+      <!-- column-name value -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+  <object class="GtkOffscreenWindow">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkGrid" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="row_spacing">8</property>
+        <property name="column_spacing">8</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">Look for:</property>
+            <property name="xalign">0</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSearchEntry">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hexpand">True</property>
+            <property name="primary_icon_name">edit-find-symbolic</property>
+            <property name="primary_icon_activatable">False</property>
+            <property name="primary_icon_sensitive">False</property>
+            <signal name="focus-in-event" handler="track_focus_change_in_text_area" swapped="no"/>
+            <signal name="focus-out-event" handler="track_focus_change_in_text_area" swapped="no"/>
+            <signal name="search-changed" handler="on_param_search_changed" swapped="no"/>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkTreeView" id="treeview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="model">store</property>
+                <signal name="button-press-event" handler="on_button_press_over_params" swapped="no"/>
+                <signal name="key-press-event" handler="on_key_pressed_over_params" swapped="no"/>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection"/>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn">
+                    <property name="title" translatable="yes">Access path</property>
+                    <property name="sort_column_id">2</property>
+                    <child>
+                      <object class="GtkCellRendererText"/>
+                      <attributes>
+                        <attribute name="text">2</attribute>
+                        <attribute name="weight">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn">
+                    <property name="title" translatable="yes">Status</property>
+                    <property name="sort_column_id">3</property>
+                    <child>
+                      <object class="GtkCellRendererText"/>
+                      <attributes>
+                        <attribute name="text">3</attribute>
+                        <attribute name="weight">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn">
+                    <property name="title" translatable="yes">Type</property>
+                    <property name="sort_column_id">4</property>
+                    <child>
+                      <object class="GtkCellRendererText"/>
+                      <attributes>
+                        <attribute name="text">4</attribute>
+                        <attribute name="weight">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn">
+                    <property name="title" translatable="yes">Value</property>
+                    <property name="sort_column_id">5</property>
+                    <child>
+                      <object class="GtkCellRendererText" id="vrenderer">
+                        <signal name="edited" handler="on_param_value_edited" swapped="no"/>
+                      </object>
+                      <attributes>
+                        <attribute name="text">5</attribute>
+                        <attribute name="weight">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>
-- 
cgit v0.11.2-87-g4458