diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2015-08-13 00:35:42 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2015-08-13 00:35:42 (GMT) | 
| commit | 50a657889a32a6df365bf9880a6f56bf3a0e828c (patch) | |
| tree | cf6218848a0119aafa4610baee73adcc1ef6c10b /src/gui | |
| parent | 4c611d6f41d82603a5d37baf88b0bb213044eb60 (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.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;  } | 
