diff options
Diffstat (limited to 'src/gui/panels')
-rw-r--r-- | src/gui/panels/bookmarks.c | 163 | ||||
-rw-r--r-- | src/gui/panels/panel.c | 108 | ||||
-rw-r--r-- | src/gui/panels/strings.c | 137 |
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; } |