diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-11-27 23:08:36 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-11-27 23:08:36 (GMT) |
commit | 425f8ce0e40592287431bd1d3d71e03f5bdcbdd5 (patch) | |
tree | a8a555a4708dbb35dc3892648c30358fbf8e010f /src/gui/panels/regedit.c | |
parent | ce4b859adf12e1be6e13ea33b5afb1ce773ff1b3 (diff) |
Used Glade to build all GUI panels.
Diffstat (limited to 'src/gui/panels/regedit.c')
-rw-r--r-- | src/gui/panels/regedit.c | 181 |
1 files changed, 71 insertions, 110 deletions
diff --git a/src/gui/panels/regedit.c b/src/gui/panels/regedit.c index 7ec05c0..8ecc99b 100644 --- a/src/gui/panels/regedit.c +++ b/src/gui/panels/regedit.c @@ -52,7 +52,6 @@ struct _GRegeditPanel { GPanelItem parent; /* A laisser en premier */ - GtkTreeView *treeview; /* Composant d'affichage */ regex_t *filter; /* Filtre appliqué ou NULL */ GtkMenu *menu; /* Menu contextuel pour param. */ @@ -109,7 +108,7 @@ static void reload_config_into_treeview(GRegeditPanel *, GGenConfig *); static void on_config_param_modified(GCfgParam *, GRegeditPanel *); /* Actualise la valeur affichée d'un paramètre de configuration. */ -static void update_config_param_value(GtkTreeStore *, GtkTreeIter *); +static void update_config_param_value(GtkListStore *, GtkTreeIter *); /* Etablit une comparaison entre deux lignes de paramètres. */ static gint compare_config_list_columns(GtkTreeModel *, GtkTreeIter *, GtkTreeIter *, gpointer); @@ -118,7 +117,7 @@ static gint compare_config_list_columns(GtkTreeModel *, GtkTreeIter *, GtkTreeIt static gboolean on_key_pressed_over_params(GtkTreeView *, GdkEventKey *, GRegeditPanel *); /* Réagit à une édition de la valeur d'un paramètre. */ -static void on_param_value_edited(GtkCellRendererText *, gchar *, gchar *, GtkTreeStore *); +static void on_param_value_edited(GtkCellRendererText *, gchar *, gchar *, GRegeditPanel *); @@ -206,14 +205,8 @@ static void g_regedit_panel_init(GRegeditPanel *panel) { GEditorItem *base; /* Version basique d'instance */ GPanelItem *pitem; /* Version parente du panneau */ - GObject *ref; /* Espace de référencement */ - GtkWidget *label; /* Etiquette à utiliser */ - GtkWidget *search; /* Zone de recherche */ - GtkWidget *scrolled; /* Fenêtre défilante */ - GtkTreeStore *store; /* Modèle de gestion */ - GtkWidget *treeview; /* Affichage de la liste */ - GtkCellRenderer *renderer; /* Moteur de rendu de colonne */ - GtkTreeViewColumn *column; /* Colonne de la liste */ + GtkBuilder *builder; /* Constructeur utilisé */ + GObject *vrenderer; /* Moteur de rendu de colonne */ GtkTreeSortable *sortable; /* Autre vision de la liste */ /* Eléments de base */ @@ -231,93 +224,15 @@ static void g_regedit_panel_init(GRegeditPanel *panel) /* Représentation graphique */ - base->widget = gtk_grid_new(); - gtk_widget_show(base->widget); - - gtk_grid_set_row_spacing(GTK_GRID(base->widget), 8); - - ref = G_OBJECT(base->widget); - g_object_set_data(ref, "panel", panel); - - /* Partie recherche */ - - label = qck_create_label(NULL, NULL, _("Look for:")); - g_object_set(label, "margin", 8, NULL); - gtk_grid_attach(GTK_GRID(base->widget), label, 0, 0, 1, 1); - - search = gtk_search_entry_new(); - g_signal_connect(search, "search-changed", G_CALLBACK(on_param_search_changed), panel); - g_signal_connect(search, "focus-in-event", G_CALLBACK(track_focus_change_in_text_area), NULL); - g_signal_connect(search, "focus-out-event", G_CALLBACK(track_focus_change_in_text_area), NULL); - gtk_widget_show(search); - gtk_widget_set_hexpand(search, TRUE); - gtk_grid_attach_next_to(GTK_GRID(base->widget), search, label, GTK_POS_RIGHT, 1, 1); - - /* Partie paramètres */ - - scrolled = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolled); - gtk_widget_set_vexpand(scrolled, TRUE); - gtk_grid_attach_next_to(GTK_GRID(base->widget), scrolled, label, GTK_POS_BOTTOM, 2, 1); - - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), GTK_SHADOW_IN); - - store = gtk_tree_store_new(LGC_COUNT, G_TYPE_OBJECT, G_TYPE_INT, - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); - - treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - panel->treeview = GTK_TREE_VIEW(treeview); - - g_signal_connect(G_OBJECT(treeview), "button-press-event", - G_CALLBACK(on_button_press_over_params), panel); - g_signal_connect(G_OBJECT(treeview), "key-press-event", - G_CALLBACK(on_key_pressed_over_params), panel); - - gtk_widget_show(treeview); - gtk_container_add(GTK_CONTAINER(scrolled), treeview); - - g_object_unref(G_OBJECT(store)); - - /* Cellules d'affichage */ - - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Access path"), renderer, - "text", CPC_PATH, - "weight", CPC_BOLD, - NULL); - gtk_tree_view_column_set_sort_column_id(column, CPC_PATH); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); - - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Status"), renderer, - "text", CPC_STATUS, - "weight", CPC_BOLD, - NULL); - gtk_tree_view_column_set_sort_column_id(column, CPC_STATUS); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); - - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes(_("Type"), renderer, - "text", CPC_TYPE, - "weight", CPC_BOLD, - NULL); - gtk_tree_view_column_set_sort_column_id(column, CPC_TYPE); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); - - renderer = gtk_cell_renderer_text_new(); - g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL); - g_signal_connect(renderer, "edited", G_CALLBACK(on_param_value_edited), store); - column = gtk_tree_view_column_new_with_attributes(_("Value"), renderer, - "text", CPC_VALUE, - "weight", CPC_BOLD, - NULL); - gtk_tree_view_column_set_sort_column_id(column, CPC_VALUE); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); + builder = g_panel_item_build(pitem, "regedit"); + + vrenderer = G_OBJECT(gtk_builder_get_object(builder, "vrenderer")); + + g_object_set(vrenderer, "editable", TRUE, NULL); /* Tri de la liste */ - sortable = GTK_TREE_SORTABLE(store); + sortable = GTK_TREE_SORTABLE(gtk_builder_get_object(builder, "store")); gtk_tree_sortable_set_sort_func(sortable, CPC_PATH, compare_config_list_columns, GINT_TO_POINTER(CPC_PATH), NULL); @@ -337,6 +252,18 @@ static void g_regedit_panel_init(GRegeditPanel *panel) panel->menu = build_param_panel_menu(panel); + /* Connexion des signaux */ + + gtk_builder_add_callback_symbols(builder, + "on_param_search_changed", G_CALLBACK(on_param_search_changed), + "track_focus_change_in_text_area", G_CALLBACK(track_focus_change_in_text_area), + "on_button_press_over_params", G_CALLBACK(on_button_press_over_params), + "on_key_pressed_over_params", G_CALLBACK(on_key_pressed_over_params), + "on_param_value_edited", G_CALLBACK(on_param_value_edited), + NULL); + + gtk_builder_connect_signals(builder, panel); + } @@ -430,15 +357,19 @@ GPanelItem *g_regedit_panel_new(void) static void reload_config_into_treeview(GRegeditPanel *panel, GGenConfig *config) { - GtkTreeStore *store; /* Modèle de gestion */ + GtkBuilder *builder; /* Constructeur utilisé */ + GtkListStore *store; /* Modèle de gestion */ GList *params; /* Paramètres de configuration */ GCfgParam *param; /* Paramètre en cours d'étude */ GList *p; /* Boucle de parcours */ char *type_desc; /* Type de paramètre */ GtkTreeIter iter; /* Point d'insertion */ - store = GTK_TREE_STORE(gtk_tree_view_get_model(panel->treeview)); - gtk_tree_store_clear(store); + builder = G_PANEL_ITEM(panel)->builder; + + store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store")); + + gtk_list_store_clear(store); g_generic_config_rlock(config); @@ -475,8 +406,8 @@ static void reload_config_into_treeview(GRegeditPanel *panel, GGenConfig *config } - gtk_tree_store_append(store, &iter, NULL); - gtk_tree_store_set(store, &iter, + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, CPC_PARAM, param, CPC_PATH, g_config_param_get_path(param), CPC_TYPE, type_desc, @@ -508,14 +439,20 @@ static void reload_config_into_treeview(GRegeditPanel *panel, GGenConfig *config static void on_config_param_modified(GCfgParam *param, GRegeditPanel *panel) { + GtkBuilder *builder; /* Constructeur utilisé */ + GtkTreeView *treeview; /* Affichage de la liste */ GtkTreeModel *model; /* Gestionnaire de données */ GtkTreeIter iter; /* Point de recherche */ gboolean looping; /* Autorisation de bouclage */ GCfgParam *item; /* Elément de la liste */ - model = gtk_tree_view_get_model(panel->treeview); + builder = G_PANEL_ITEM(panel)->builder; + + treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview")); + + model = gtk_tree_view_get_model(treeview); - for (looping = gtk_tree_model_get_iter_first (model, &iter); + for (looping = gtk_tree_model_get_iter_first(model, &iter); looping; looping = gtk_tree_model_iter_next(model, &iter)) { @@ -523,7 +460,7 @@ static void on_config_param_modified(GCfgParam *param, GRegeditPanel *panel) if (item == param) { - update_config_param_value(GTK_TREE_STORE(model), &iter); + update_config_param_value(GTK_LIST_STORE(model), &iter); break; } @@ -546,7 +483,7 @@ static void on_config_param_modified(GCfgParam *param, GRegeditPanel *panel) * * ******************************************************************************/ -static void update_config_param_value(GtkTreeStore *store, GtkTreeIter *iter) +static void update_config_param_value(GtkListStore *store, GtkTreeIter *iter) { GCfgParam *param; /* Paramètre à consulter */ ConfigParamState state; /* Etat du paramètre */ @@ -606,7 +543,7 @@ static void update_config_param_value(GtkTreeStore *store, GtkTreeIter *iter) } - gtk_tree_store_set(store, iter, + gtk_list_store_set(store, iter, CPC_BOLD, state & CPS_DEFAULT ? 400 : 800, CPC_STATUS, state_desc, CPC_VALUE, desc, -1); @@ -718,7 +655,7 @@ static gboolean on_key_pressed_over_params(GtkTreeView *treeview, GdkEventKey *e * Paramètres : renderer = moteur de rendu pour la cellule. * * path = chemin d'accès vers la cellule éditée. * * new = nouvelle valeur sous forme de texte à valider. * -* store = gestionnaire des données de la liste affichée. * +* panel = panneau d'affichage sur lequel s'appuyer. * * * * Description : Réagit à une édition de la valeur d'un paramètre. * * * @@ -728,8 +665,10 @@ static gboolean on_key_pressed_over_params(GtkTreeView *treeview, GdkEventKey *e * * ******************************************************************************/ -static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gchar *new, GtkTreeStore *store) +static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gchar *new, GRegeditPanel *panel) { + GtkBuilder *builder; /* Constructeur utilisé */ + GtkListStore *store; /* Modèle de gestion */ GtkTreePath *tree_path; /* Chemin d'accès natif */ GtkTreeIter iter; /* Point de la modification */ GCfgParam *param; /* Paramètre à actualiser */ @@ -738,6 +677,10 @@ static void on_param_value_edited(GtkCellRendererText *renderer, gchar *path, gc int ulong; /* Valeur entière positive */ char *end; /* Pointeur vers '\0' final ? */ + builder = G_PANEL_ITEM(panel)->builder; + + store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store")); + tree_path = gtk_tree_path_new_from_string(path); if (tree_path == NULL) return; @@ -1004,12 +947,18 @@ static GCfgParam *get_selected_panel_param(GtkTreeView *treeview, GtkTreeIter *s static void mcb_param_panel_copy(GtkMenuItem *menuitem, GRegeditPanel *panel) { + GtkBuilder *builder; /* Constructeur utilisé */ + GtkTreeView *treeview; /* Affichage de la liste */ GCfgParam *param; /* Paramètre sélectionné */ const char *content; /* Prochain contenu à diffuser */ gint clen; /* Taille de ce contenu */ GtkClipboard *clipboard; /* Presse-papiers à remplir */ - param = get_selected_panel_param(panel->treeview, NULL); + builder = G_PANEL_ITEM(panel)->builder; + + treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview")); + + param = get_selected_panel_param(treeview, NULL); if (param == NULL) return; content = g_config_param_get_path(param); @@ -1041,9 +990,15 @@ static void mcb_param_panel_copy(GtkMenuItem *menuitem, GRegeditPanel *panel) static void mcb_param_panel_empty(GtkMenuItem *menuitem, GRegeditPanel *panel) { + GtkBuilder *builder; /* Constructeur utilisé */ + GtkTreeView *treeview; /* Affichage de la liste */ GCfgParam *param; /* Paramètre sélectionné */ - param = get_selected_panel_param(panel->treeview, NULL); + builder = G_PANEL_ITEM(panel)->builder; + + treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview")); + + param = get_selected_panel_param(treeview, NULL); if (param == NULL) return; g_config_param_make_empty(param); @@ -1068,9 +1023,15 @@ static void mcb_param_panel_empty(GtkMenuItem *menuitem, GRegeditPanel *panel) static void mcb_param_panel_reset(GtkMenuItem *menuitem, GRegeditPanel *panel) { + GtkBuilder *builder; /* Constructeur utilisé */ + GtkTreeView *treeview; /* Affichage de la liste */ GCfgParam *param; /* Paramètre sélectionné */ - param = get_selected_panel_param(panel->treeview, NULL); + builder = G_PANEL_ITEM(panel)->builder; + + treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview")); + + param = get_selected_panel_param(treeview, NULL); if (param == NULL) return; g_config_param_reset(param); |