summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-08-13 00:35:42 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-08-13 00:35:42 (GMT)
commit50a657889a32a6df365bf9880a6f56bf3a0e828c (patch)
treecf6218848a0119aafa4610baee73adcc1ef6c10b /src/gui
parent4c611d6f41d82603a5d37baf88b0bb213044eb60 (diff)
Improved the look of dock stations and saved screen space.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@571 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/panels/bookmarks.c163
-rw-r--r--src/gui/panels/panel.c108
-rw-r--r--src/gui/panels/strings.c137
3 files changed, 230 insertions, 178 deletions
diff --git a/src/gui/panels/bookmarks.c b/src/gui/panels/bookmarks.c
index 977cbc9..e06b891 100644
--- a/src/gui/panels/bookmarks.c
+++ b/src/gui/panels/bookmarks.c
@@ -28,7 +28,6 @@
#include <assert.h>
#include <cairo-gobject.h>
#include <malloc.h>
-#include <regex.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -44,6 +43,7 @@
#include "../../glibext/chrysamarshal.h"
#include "../../glibext/signal.h"
#include "../../gtkext/easygtk.h"
+#include "../../gtkext/gtkdockable-int.h"
#include "../../gtkext/support.h"
@@ -57,7 +57,7 @@ struct _GBookmarksPanel
GPanelItem parent; /* A laisser en premier */
GtkTreeView *treeview; /* Composant d'affichage */
- regex_t *filter; /* Filtre appliqué ou NULL */
+ const regex_t *filter; /* Filtre appliqué ou NULL */
GtkMenu *menu; /* Menu contextuel pour param. */
@@ -98,6 +98,9 @@ static void g_bookmarks_panel_class_init(GBookmarksPanelClass *);
/* Initialise une instance de panneau de paramètres de config. */
static void g_bookmarks_panel_init(GBookmarksPanel *);
+/* Procède à l'initialisation de l'interface de rassemblement. */
+static void g_bookmarks_panel_dockable_interface_init(GtkDockableInterface *);
+
/* Supprime toutes les références externes. */
static void g_bookmarks_panel_dispose(GBookmarksPanel *);
@@ -141,10 +144,10 @@ static void on_param_value_edited(GtkCellRendererText *, gchar *, gchar *, GtkTr
/* Démarre l'actualisation du filtrage des paramètres. */
-static void on_param_search_changed(GtkSearchEntry *, GBookmarksPanel *);
+static void update_filtered_bookmarks(GBookmarksPanel *, const regex_t *);
-/* Détermine si un paramètre doit être filtré ou non. */
-static bool is_param_filtered(GBookmarksPanel *, const char *);
+/* Détermine si un signet doit être filtré ou non. */
+static bool is_bookmark_filtered(GBookmarksPanel *, const char *, const char *, const char *);
@@ -177,7 +180,8 @@ static void mcb_bookmarks_panel_filter(GtkMenuItem *, GBookmarksPanel *);
/* Indique le type définit pour un panneau d'affichage des signets liés à un binaire. */
-G_DEFINE_TYPE(GBookmarksPanel, g_bookmarks_panel, G_TYPE_PANEL_ITEM);
+G_DEFINE_TYPE_WITH_CODE(GBookmarksPanel, g_bookmarks_panel, G_TYPE_PANEL_ITEM,
+ G_IMPLEMENT_INTERFACE(GTK_TYPE_DOCKABLE, g_bookmarks_panel_dockable_interface_init))
/******************************************************************************
@@ -233,9 +237,6 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
{
GEditorItem *base; /* Version basique d'instance */
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 */
@@ -245,35 +246,16 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
base = G_EDITOR_ITEM(panel);
- base->widget = gtk_grid_new();
+ base->widget = gtk_scrolled_window_new(NULL, NULL);
gtk_widget_show(base->widget);
- gtk_grid_set_row_spacing(GTK_GRID(base->widget), 8);
+ 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 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);
- 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);
+ /* 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);
@@ -287,7 +269,7 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
G_CALLBACK(on_key_pressed_over_params), panel);
gtk_widget_show(treeview);
- gtk_container_add(GTK_CONTAINER(scrolled), treeview);
+ gtk_container_add(GTK_CONTAINER(base->widget), treeview);
g_object_unref(G_OBJECT(store));
@@ -352,6 +334,35 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel)
/******************************************************************************
* *
+* Paramètres : iface = interface GTK à initialiser. *
+* *
+* Description : Procède à l'initialisation de l'interface de rassemblement. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_bookmarks_panel_dockable_interface_init(GtkDockableInterface *iface)
+{
+ GtkDockableInterface *parent_iface; /* Définition précédente */
+
+ parent_iface = (GtkDockableInterface *)g_type_interface_peek_parent(iface);
+
+ iface->can_search = true;
+ iface->can_be_closed = true;
+
+ iface->get_name = parent_iface->get_name;
+ iface->get_desc = parent_iface->get_desc;
+ iface->get_widget = parent_iface->get_widget;
+ iface->update_filtered = (update_filtered_data_fc)update_filtered_bookmarks;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : panel = instance d'objet GLib à traiter. *
* *
* Description : Supprime toutes les références externes. *
@@ -385,10 +396,7 @@ static void g_bookmarks_panel_dispose(GBookmarksPanel *panel)
******************************************************************************/
static void g_bookmarks_panel_finalize(GBookmarksPanel *panel)
-{
- if (panel->filter != NULL)
- regfree(panel->filter);
-
+{
G_OBJECT_CLASS(g_bookmarks_panel_parent_class)->finalize(G_OBJECT(panel));
}
@@ -485,6 +493,7 @@ static void reload_bookmarks_into_treeview(GBookmarksPanel *panel, GLoadedBinary
const vmpa2t *addr; /* Adressse associée au signet */
VMPA_BUFFER(phys); /* Position physique */
VMPA_BUFFER(virt); /* Adresse virtuelle */
+ const char *comment; /* Commentaire associé */
GtkTreeIter iter; /* Point d'insertion */
/* Basculement du binaire utilisé */
@@ -537,13 +546,18 @@ static void reload_bookmarks_into_treeview(GBookmarksPanel *panel, GLoadedBinary
vmpa2_phys_to_string(addr, msize, phys, NULL);
vmpa2_virt_to_string(addr, msize, virt, NULL);
+ comment = g_db_bookmark_get_comment(bookmark);
+
+ if (is_bookmark_filtered(panel, phys, virt, comment))
+ continue;
+
gtk_tree_store_append(store, &iter, NULL);
gtk_tree_store_set(store, &iter,
BMC_BOOKMARK, bookmark,
BMC_PICTURE, G_BOOKMARKS_PANEL_GET_CLASS(panel)->bookmark_img,
BMC_PHYSICAL, phys,
BMC_VIRTUAL, virt,
- BMC_COMMENT, g_db_bookmark_get_comment(bookmark),
+ BMC_COMMENT, comment,
-1);
}
@@ -970,8 +984,8 @@ static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gc
/******************************************************************************
* *
-* Paramètres : entry = entrée de texte contenant le filtre brut. *
-* panel = panneau assurant l'affichage des paramètres. *
+* Paramètres : panel = panneau assurant l'affichage des paramètres. *
+* preg = expression régulière compilée à utiliser. *
* *
* Description : Démarre l'actualisation du filtrage des paramètres. *
* *
@@ -981,76 +995,51 @@ static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gc
* *
******************************************************************************/
-static void on_param_search_changed(GtkSearchEntry *entry, GBookmarksPanel *panel)
+static void update_filtered_bookmarks(GBookmarksPanel *panel, const regex_t *preg)
{
- const gchar *text; /* Texte de l'utilisateur */
- int ret; /* Bilan de mise en place */
- GdkRGBA error; /* Couleur d'erreur */
-
- if (panel->filter != NULL)
- {
- regfree(panel->filter);
- free(panel->filter);
- panel->filter = NULL;
- }
-
- text = gtk_entry_get_text(GTK_ENTRY(entry));
-
- if (strlen(text) > 0)
- {
- panel->filter = (regex_t *)calloc(1, sizeof(regex_t));
- ret = regcomp(panel->filter, text, REG_EXTENDED);
-
- if (ret != 0)
- {
- free(panel->filter);
- panel->filter = NULL;
+ panel->filter = preg;
- error.red = 1.0;
- error.green = 0.0;
- error.blue = 0.0;
- error.alpha = 1.0;
- gtk_widget_override_color(GTK_WIDGET(entry), GTK_STATE_NORMAL, &error);
-
- return;
-
- }
-
- }
-
- gtk_widget_override_color(GTK_WIDGET(entry), GTK_STATE_NORMAL, NULL);
-
- //reload_config_into_treeview(panel, get_main_configuration());
+ reload_bookmarks_into_treeview(panel, panel->binary);
}
/******************************************************************************
* *
-* Paramètres : panel = panneau assurant l'affichage des paramètres. *
-* name = chemin d'accès au paramètre à traiter. *
+* Paramètres : panel = panneau assurant l'affichage des paramètres. *
+* phys = position physique du signet. *
+* virt = adresse virtuelle du signet. *
+* comment = commentaire lisible associé au signet. *
* *
-* Description : Détermine si un paramètre doit être filtré ou non. *
+* Description : Détermine si un signet doit être filtré ou non. *
* *
-* Retour : true si le paramètre ne doit pas être affiché, false sinon. *
+* Retour : true si le signet ne doit pas être affiché, false sinon. *
* *
* Remarques : - *
* *
******************************************************************************/
-static bool is_param_filtered(GBookmarksPanel *panel, const char *name)
+static bool is_bookmark_filtered(GBookmarksPanel *panel, const char *phys, const char *virt, const char *comment)
{
+ bool result; /* Bilan à retourner */
regmatch_t match; /* Récupération des trouvailles*/
int ret; /* Bilan du filtrage */
if (panel->filter == NULL)
return false;
- ret = regexec(panel->filter, name, 1, &match, 0);
- if (ret == REG_NOMATCH)
- return true;
+ result = true;
+
+ ret = regexec(panel->filter, phys, 1, &match, 0);
+ result &= (ret == REG_NOMATCH);
- return false;
+ ret = regexec(panel->filter, virt, 1, &match, 0);
+ result &= (ret == REG_NOMATCH);
+
+ ret = regexec(panel->filter, comment, 1, &match, 0);
+ result &= (ret == REG_NOMATCH);
+
+ return result;
}
diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c
index 8a46025..7f18fea 100644
--- a/src/gui/panels/panel.c
+++ b/src/gui/panels/panel.c
@@ -40,6 +40,7 @@
#include "symbols.h"
#include "welcome.h"
#include "../../gtkext/easygtk.h"
+#include "../../gtkext/gtkdockable-int.h"
#include "../../gtkext/gtkdockstation.h"
@@ -67,6 +68,18 @@ static void g_panel_item_class_init(GPanelItemClass *);
/* Initialise une instance d'élément réactif pour l'éditeur. */
static void g_panel_item_init(GPanelItem *);
+/* Procède à l'initialisation de l'interface de rassemblement. */
+static void g_panel_item_dockable_interface_init(GtkDockableInterface *);
+
+/* Fournit le nom court du composant encapsulable. */
+static const char *gtk_panel_item_get_name(const GPanelItem *);
+
+/* Fournit le nom long du composant encapsulable. */
+static const char *gtk_panel_item_get_desc(const GPanelItem *);
+
+/* Fournit le composant graphique intégrable dans un ensemble. */
+static GtkWidget *gtk_panel_item_get_widget(GPanelItem *);
+
/* ---------------------- MECANISMES DE PLACEMENT DES PANNEAUX ---------------------- */
@@ -129,7 +142,8 @@ static void on_docking_to_main_panel(GtkDockStation *, GtkWidget *, gpointer);
/* Indique le type défini pour un élément destiné à un panneau. */
-G_DEFINE_TYPE(GPanelItem, g_panel_item, G_TYPE_EDITOR_ITEM);
+G_DEFINE_TYPE_WITH_CODE(GPanelItem, g_panel_item, G_TYPE_EDITOR_ITEM,
+ G_IMPLEMENT_INTERFACE(GTK_TYPE_DOCKABLE, g_panel_item_dockable_interface_init))
/******************************************************************************
@@ -171,6 +185,31 @@ static void g_panel_item_init(GPanelItem *item)
/******************************************************************************
* *
+* Paramètres : iface = interface GTK à initialiser. *
+* *
+* Description : Procède à l'initialisation de l'interface de rassemblement. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface)
+{
+ iface->can_search = false;
+ iface->can_be_closed = true;
+
+ iface->get_name = (get_dockable_name_fc)gtk_panel_item_get_name;
+ iface->get_desc = (get_dockable_desc_fc)gtk_panel_item_get_desc;
+ iface->get_widget = (get_dockable_widget_fc)gtk_panel_item_get_widget;
+ iface->update_filtered = (update_filtered_data_fc)NULL;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : item = composant à présenter à l'affichage. *
* ref = espace de référencement global. *
* name = nom associé à l'élément. *
@@ -240,6 +279,63 @@ GEditorItem *g_panel_item_new(GObject *ref, const char *name, const char *lname,
/******************************************************************************
* *
+* Paramètres : item = instance GTK dont l'interface est à consulter. *
+* *
+* Description : Fournit le nom court du composant encapsulable. *
+* *
+* Retour : Désignation humaine pour titre d'onglet ou de fenêtre. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static const char *gtk_panel_item_get_name(const GPanelItem *item)
+{
+ return G_EDITOR_ITEM(item)->name;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : item = instance GTK dont l'interface est à consulter. *
+* *
+* Description : Fournit le nom long du composant encapsulable. *
+* *
+* Retour : Désignation humaine pour titre d'onglet ou de fenêtre. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static const char *gtk_panel_item_get_desc(const GPanelItem *item)
+{
+ return item->lname;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : item = instance GTK dont l'interface est à consulter. *
+* *
+* Description : Fournit le composant graphique intégrable dans un ensemble. *
+* *
+* Retour : Composant graphique prêt à emploi. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static GtkWidget *gtk_panel_item_get_widget(GPanelItem *item)
+{
+ return G_EDITOR_ITEM(item)->widget;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : name = désignation courte servant de clef. *
* *
* Description : Recherche un panneau à partir de son nom court. *
@@ -423,7 +519,6 @@ static panel_node *create_simple_panel_node_for_item(GPanelItem *item, const cha
{
panel_node *result; /* Structure à retourner */
GtkWidget *station; /* Premier support concentré */
- GEditorItem *editem; /* Autre vision des choses */
result = (panel_node *)calloc(1, sizeof(panel_node));
@@ -438,9 +533,7 @@ static panel_node *create_simple_panel_node_for_item(GPanelItem *item, const cha
result->station = station;
- editem = G_EDITOR_ITEM(item);
- gtk_dock_panel_add_widget(GTK_DOCK_STATION(station),
- editem->widget, editem->name, item->lname);
+ gtk_dock_station_add_dockable(GTK_DOCK_STATION(station), GTK_DOCKABLE(item));
return result;
@@ -695,10 +788,7 @@ static void insert_item_as_panel_node(GPanelItem *item, panel_node *node, const
{
/* Le parcours s'arrête ici ! */
if (strcmp(node->path, path) == 0)
- gtk_dock_panel_add_widget(GTK_DOCK_STATION(node->station),
- G_EDITOR_ITEM(item)->widget,
- G_EDITOR_ITEM(item)->name,
- item->lname);
+ gtk_dock_station_add_dockable(GTK_DOCK_STATION(node->station), GTK_DOCKABLE(item));
/* On ne peut aller plus loin, on doit diviser... */
else
diff --git a/src/gui/panels/strings.c b/src/gui/panels/strings.c
index 8d41165..4d7d077 100644
--- a/src/gui/panels/strings.c
+++ b/src/gui/panels/strings.c
@@ -26,7 +26,6 @@
#include <inttypes.h>
-#include <regex.h>
#include "panel-int.h"
@@ -34,6 +33,7 @@
#include "../../core/params.h"
#include "../../dialogs/gotox.h"
#include "../../gtkext/easygtk.h"
+#include "../../gtkext/gtkdockable-int.h"
@@ -46,7 +46,7 @@ struct _GStringsPanel
GPanelItem parent; /* A laisser en premier */
GtkTreeView *treeview; /* Composant d'affichage */
- regex_t *filter; /* Filtre appliqué ou NULL */
+ const regex_t *filter; /* Filtre appliqué ou NULL */
GtkMenu *menu; /* Menu contextuel pour param. */
@@ -84,22 +84,23 @@ static void g_strings_panel_class_init(GStringsPanelClass *);
/* Initialise une instance de panneau d'affichage des chaînes. */
static void g_strings_panel_init(GStringsPanel *);
+/* Procède à l'initialisation de l'interface de rassemblement. */
+static void g_strings_panel_dockable_interface_init(GtkDockableInterface *);
+
/* Supprime toutes les références externes. */
static void g_strings_panel_dispose(GStringsPanel *);
/* Procède à la libération totale de la mémoire. */
static void g_strings_panel_finalize(GStringsPanel *);
-/* Réagit à un changement d'affichage principal de contenu. */
-static void change_strings_panel_current_binary(GStringsPanel *, GLoadedBinary *);
-
-
-
/* ------------------------- AFFICHAGE A L'AIDE D'UNE LISTE ------------------------- */
+/* Réagit à un changement d'affichage principal de contenu. */
+static void change_strings_panel_current_binary(GStringsPanel *, GLoadedBinary *);
+
/* Réagit au changement de sélection des chaînes textuelles. */
static void on_strings_selection_change(GtkTreeSelection *, GStringsPanel *);
@@ -117,8 +118,8 @@ static void on_string_value_edited(GtkCellRendererText *, gchar *, gchar *, GtkT
/* ------------------------- FILTRAGE DES SYMBOLES PRESENTS ------------------------- */
-/* Démarre l'actualisation du filtrage des paramètres. */
-static void on_string_search_changed(GtkSearchEntry *, GStringsPanel *);
+/* Démarre l'actualisation du filtrage des chaînes. */
+static void update_filtered_strings(GStringsPanel *, const regex_t *);
/* Détermine si une chaîne textuelle doit être filtrée ou non. */
static bool is_string_filtered(GStringsPanel *, const char *, const char *);
@@ -151,14 +152,14 @@ static void mcb_strings_panel_filter(GtkMenuItem *, GStringsPanel *);
-
/* ---------------------------------------------------------------------------------- */
/* PARTIE PRINCIPALE DU PANNEAU */
/* ---------------------------------------------------------------------------------- */
/* Indique le type définit pour un panneau d'affichage des chaînes. */
-G_DEFINE_TYPE(GStringsPanel, g_strings_panel, G_TYPE_PANEL_ITEM);
+G_DEFINE_TYPE_WITH_CODE(GStringsPanel, g_strings_panel, G_TYPE_PANEL_ITEM,
+ G_IMPLEMENT_INTERFACE(GTK_TYPE_DOCKABLE, g_strings_panel_dockable_interface_init))
/******************************************************************************
@@ -206,9 +207,6 @@ static void g_strings_panel_init(GStringsPanel *panel)
{
GEditorItem *base; /* Version basique d'instance */
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 */
@@ -219,35 +217,16 @@ static void g_strings_panel_init(GStringsPanel *panel)
base = G_EDITOR_ITEM(panel);
- base->widget = gtk_grid_new();
+ base->widget = gtk_scrolled_window_new(NULL, NULL);
gtk_widget_show(base->widget);
- gtk_grid_set_row_spacing(GTK_GRID(base->widget), 8);
+ 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 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_string_search_changed), panel);
- 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);
+ /* Partie chaînes */
store = gtk_tree_store_new(STC_COUNT, G_TYPE_OBJECT,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
@@ -263,7 +242,7 @@ static void g_strings_panel_init(GStringsPanel *panel)
G_CALLBACK(on_key_pressed_over_strings), panel);
gtk_widget_show(treeview);
- gtk_container_add(GTK_CONTAINER(scrolled), treeview);
+ gtk_container_add(GTK_CONTAINER(base->widget), treeview);
g_object_unref(G_OBJECT(store));
@@ -336,6 +315,35 @@ static void g_strings_panel_init(GStringsPanel *panel)
/******************************************************************************
* *
+* Paramètres : iface = interface GTK à initialiser. *
+* *
+* Description : Procède à l'initialisation de l'interface de rassemblement. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_strings_panel_dockable_interface_init(GtkDockableInterface *iface)
+{
+ GtkDockableInterface *parent_iface; /* Définition précédente */
+
+ parent_iface = (GtkDockableInterface *)g_type_interface_peek_parent(iface);
+
+ iface->can_search = true;
+ iface->can_be_closed = true;
+
+ iface->get_name = parent_iface->get_name;
+ iface->get_desc = parent_iface->get_desc;
+ iface->get_widget = parent_iface->get_widget;
+ iface->update_filtered = (update_filtered_data_fc)update_filtered_strings;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : panel = instance d'objet GLib à traiter. *
* *
* Description : Supprime toutes les références externes. *
@@ -708,10 +716,10 @@ static void on_string_value_edited(GtkCellRendererText *renderer, gchar *path, g
/******************************************************************************
* *
-* Paramètres : entry = entrée de texte contenant le filtre brut. *
-* panel = panneau assurant l'affichage des paramètres. *
+* Paramètres : panel = panneau assurant l'affichage des paramètres. *
+* preg = expression régulière compilée à utiliser. *
* *
-* Description : Démarre l'actualisation du filtrage des paramètres. *
+* Description : Démarre l'actualisation du filtrage des chaînes. *
* *
* Retour : - *
* *
@@ -719,44 +727,9 @@ static void on_string_value_edited(GtkCellRendererText *renderer, gchar *path, g
* *
******************************************************************************/
-static void on_string_search_changed(GtkSearchEntry *entry, GStringsPanel *panel)
+static void update_filtered_strings(GStringsPanel *panel, const regex_t *preg)
{
- const gchar *text; /* Texte de l'utilisateur */
- int ret; /* Bilan de mise en place */
- GdkRGBA error; /* Couleur d'erreur */
-
- if (panel->filter != NULL)
- {
- regfree(panel->filter);
- free(panel->filter);
- panel->filter = NULL;
- }
-
- text = gtk_entry_get_text(GTK_ENTRY(entry));
-
- if (strlen(text) > 0)
- {
- panel->filter = (regex_t *)calloc(1, sizeof(regex_t));
- ret = regcomp(panel->filter, text, REG_EXTENDED);
-
- if (ret != 0)
- {
- free(panel->filter);
- panel->filter = NULL;
-
- error.red = 1.0;
- error.green = 0.0;
- error.blue = 0.0;
- error.alpha = 1.0;
- gtk_widget_override_color(GTK_WIDGET(entry), GTK_STATE_NORMAL, &error);
-
- return;
-
- }
-
- }
-
- gtk_widget_override_color(GTK_WIDGET(entry), GTK_STATE_NORMAL, NULL);
+ panel->filter = preg;
change_strings_panel_current_binary(panel, panel->binary);
@@ -786,18 +759,18 @@ static bool is_string_filtered(GStringsPanel *panel, const char *label, const ch
if (panel->filter == NULL)
return false;
- result = false;
+ result = true;
if (label != NULL)
{
ret = regexec(panel->filter, label, 1, &match, 0);
- result |= (ret != REG_NOMATCH);
+ result &= (ret == REG_NOMATCH);
}
ret = regexec(panel->filter, value, 1, &match, 0);
- result |= (ret != REG_NOMATCH);
+ result &= (ret == REG_NOMATCH);
- return !result;
+ return result;
}