summaryrefslogtreecommitdiff
path: root/src/gui/panels/bookmarks.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-11-27 23:08:36 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-11-27 23:08:36 (GMT)
commit425f8ce0e40592287431bd1d3d71e03f5bdcbdd5 (patch)
treea8a555a4708dbb35dc3892648c30358fbf8e010f /src/gui/panels/bookmarks.c
parentce4b859adf12e1be6e13ea33b5afb1ce773ff1b3 (diff)
Used Glade to build all GUI panels.
Diffstat (limited to 'src/gui/panels/bookmarks.c')
-rw-r--r--src/gui/panels/bookmarks.c156
1 files changed, 58 insertions, 98 deletions
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));