diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-12-03 13:16:32 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-12-03 13:16:32 (GMT) |
commit | 7b9727379e1c3f2aefc4ac0db0e91d0cfb0a481f (patch) | |
tree | 7f9f7d53b93c188b57848cdc4b337808594a0723 /src/gui/dialogs | |
parent | d1df89e49a2e8723337570debcf36907b1eded62 (diff) |
Built a dialog box to change storage options.
Diffstat (limited to 'src/gui/dialogs')
-rw-r--r-- | src/gui/dialogs/Makefile.am | 4 | ||||
-rw-r--r-- | src/gui/dialogs/binadmin.ui | 183 | ||||
-rw-r--r-- | src/gui/dialogs/gresource.xml | 2 | ||||
-rw-r--r-- | src/gui/dialogs/storage.c | 195 | ||||
-rw-r--r-- | src/gui/dialogs/storage.h | 3 | ||||
-rw-r--r-- | src/gui/dialogs/storage.ui | 302 |
6 files changed, 477 insertions, 212 deletions
diff --git a/src/gui/dialogs/Makefile.am b/src/gui/dialogs/Makefile.am index bfda8ad..35dfb0a 100644 --- a/src/gui/dialogs/Makefile.am +++ b/src/gui/dialogs/Makefile.am @@ -4,9 +4,9 @@ BUILT_SOURCES = resources.h resources.c noinst_LTLIBRARIES = libguidialogs.la UI_FILES = \ - binadmin.ui \ bookmark.ui \ - identity.ui + identity.ui \ + storage.ui libguidialogs_la_SOURCES = \ about.h about.c \ diff --git a/src/gui/dialogs/binadmin.ui b/src/gui/dialogs/binadmin.ui deleted file mode 100644 index 0f68228..0000000 --- a/src/gui/dialogs/binadmin.ui +++ /dev/null @@ -1,183 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.18.3 --> -<interface> - <requires lib="gtk+" version="3.12"/> - <object class="GtkAdjustment" id="adjustment1"> - <property name="lower">1</property> - <property name="upper">65535</property> - <property name="value">1337</property> - <property name="step_increment">1</property> - <property name="page_increment">10</property> - </object> - <object class="GtkDialog" id="window"> - <property name="can_focus">False</property> - <property name="title" translatable="yes">Storage</property> - <property name="resizable">False</property> - <property name="modal">True</property> - <property name="default_width">700</property> - <property name="default_height">300</property> - <property name="type_hint">dialog</property> - <child internal-child="vbox"> - <object class="GtkBox" id="dialog-vbox1"> - <property name="can_focus">False</property> - <property name="margin_left">8</property> - <property name="margin_right">8</property> - <property name="margin_top">8</property> - <property name="margin_bottom">8</property> - <property name="orientation">vertical</property> - <property name="spacing">8</property> - <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area1"> - <property name="can_focus">False</property> - <property name="margin_top">8</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="button1"> - <property name="label" translatable="yes">Cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button2"> - <property name="label" translatable="yes">Apply</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">8</property> - <child> - <object class="GtkRadioButton" id="local_storage"> - <property name="label" translatable="yes">Use the internal local server.</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="server_storage"> - <property name="label" translatable="yes">Use a remote shared server:</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - <property name="group">local_storage</property> - <signal name="toggled" handler="on_server_use_toggled" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkBox" id="box2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_left">16</property> - <property name="spacing">8</property> - <child> - <object class="GtkLabel" id="server_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Server:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="server"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="text" translatable="yes">localhost</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="port_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Port:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="port"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="adjustment">adjustment1</property> - <property name="value">1337</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-6">button1</action-widget> - <action-widget response="-10">button2</action-widget> - </action-widgets> - </object> -</interface> diff --git a/src/gui/dialogs/gresource.xml b/src/gui/dialogs/gresource.xml index 4c2f30a..e44045c 100644 --- a/src/gui/dialogs/gresource.xml +++ b/src/gui/dialogs/gresource.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/org/chrysalide/gui/dialogs"> - <file compressed="true">binadmin.ui</file> <file compressed="true">bookmark.ui</file> <file compressed="true">identity.ui</file> + <file compressed="true">storage.ui</file> </gresource> </gresources> diff --git a/src/gui/dialogs/storage.c b/src/gui/dialogs/storage.c index 46ef675..4aed524 100644 --- a/src/gui/dialogs/storage.c +++ b/src/gui/dialogs/storage.c @@ -25,11 +25,26 @@ +/* Colonnes de la liste des collections */ +typedef enum _CollecFeatureColumn +{ + CFC_COLLECTION, /* Instance GLib */ + + CFC_NAME, /* Désignation humaine */ + CFC_LOCAL, /* Sauvegarde locale ? */ + CFC_REMOTE, /* Sauvegarde distante ? */ + +} CollecFeatureColumn; + + /* Réagit à un changement dans le choix du type de serveur. */ static void on_server_use_toggled(GtkToggleButton *, GtkBuilder *); -/* Applique les paramètres d'enregistrement pour un binaire. */ -static void update_binary_storage(GtkButton *, GtkBuilder *); +/* Bascule le lieu d'enregistrement d'un type de collection. */ +static void on_local_feature_toggled(GtkCellRendererToggle *, gchar *, GtkBuilder *); + +/* Bascule le lieu d'enregistrement d'un type de collection. */ +static void on_remote_feature_toggled(GtkCellRendererToggle *, gchar *, GtkBuilder *); @@ -51,30 +66,32 @@ GtkWidget *create_storage_dialog(GLoadedBinary *binary, GtkWindow *parent, GtkBu { GtkWidget *result; /* Fenêtre à renvoyer */ GtkBuilder *builder; /* Constructeur utilisé */ - GtkToggleButton *local_button; /* Choix du serveur local */ - GtkToggleButton *remote_button; /* Choix du serveur distant */ + GtkToggleButton *use_remote; /* Choix du serveur distant */ const char *host; /* Serveur distant à contacter */ unsigned short port; /* Port d'écoute du serveur */ GObject *widget; /* Composant à mettre à jour */ - - builder = gtk_builder_new_from_resource("/org/chrysalide/gui/dialogs/binadmin.ui"); + GtkListStore *store; /* Modèle de gestion */ + GDbCollection **collections; /* Ensemble de collections */ + size_t count; /* Taille de cet ensemble */ + size_t i; /* Boucle de parcours */ + uint32_t feature; /* Type d'éléments gérés */ + GtkTreeIter iter; /* Point d'insertion */ + + builder = gtk_builder_new_from_resource("/org/chrysalide/gui/dialogs/storage.ui"); *outb = builder; - g_object_set_data(G_OBJECT(builder), "binary", binary); - result = GTK_WIDGET(gtk_builder_get_object(builder, "window")); gtk_window_set_transient_for(GTK_WINDOW(result), parent); /* Mise à jour de l'interface */ - local_button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "local_storage")); - remote_button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "remote_storage")); + use_remote = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "use_remote")); - if (g_loaded_binary_get_local_storage(binary)) - gtk_toggle_button_set_active(local_button, TRUE); + if (g_loaded_binary_use_remote_storage(binary)) + gtk_toggle_button_set_active(use_remote, TRUE); else - gtk_toggle_button_set_active(remote_button, TRUE); + gtk_toggle_button_set_active(use_remote, FALSE); g_loaded_binary_get_remote_server(binary, &host, &port); @@ -84,13 +101,39 @@ GtkWidget *create_storage_dialog(GLoadedBinary *binary, GtkWindow *parent, GtkBu widget = gtk_builder_get_object(builder, "port"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), port); - on_server_use_toggled(remote_button, builder); + on_server_use_toggled(use_remote, builder); + + /* Intégration des différentes collections */ + + store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store")); + + collections = g_loaded_binary_get_all_collections(binary, &count); + + for (i = 0; i < count; i++) + { + feature = g_db_collection_get_feature(collections[i]); + + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, + CFC_COLLECTION, collections[i], + CFC_NAME, g_db_collection_get_name(collections[i]), + CFC_LOCAL, g_loaded_binary_get_storage(binary, feature) == DBS_ALL_LOCAL, + CFC_REMOTE, g_loaded_binary_get_storage(binary, feature) != DBS_ALL_LOCAL, + -1); + + g_object_unref(G_OBJECT(collections[i])); + + } + + if (collections != NULL) + free(collections); /* Connexion des signaux */ gtk_builder_add_callback_symbols(builder, "on_server_use_toggled", G_CALLBACK(on_server_use_toggled), - "update_binary_storage", G_CALLBACK(update_binary_storage), + "on_local_feature_toggled", G_CALLBACK(on_local_feature_toggled), + "on_remote_feature_toggled", G_CALLBACK(on_remote_feature_toggled), NULL); gtk_builder_connect_signals(builder, builder); @@ -137,8 +180,84 @@ static void on_server_use_toggled(GtkToggleButton *button, GtkBuilder *builder) /****************************************************************************** * * -* Paramètres : button = bouton à l'origine de la procédure. * -* builder = espace de référencement global. * +* Paramètres : renderer = rendu de cellule à l'origine de la procédure. * +* path = chemin d'accès à la ligne éditée. * +* builder = espace de référencement global. * +* * +* Description : Bascule le lieu d'enregistrement d'un type de collection. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void on_local_feature_toggled(GtkCellRendererToggle *renderer, gchar *path, GtkBuilder *builder) +{ + GtkTreePath *access; /* Véritable chemin d'accès */ + GtkTreeModel *model; /* Modèle de gestion utilisé */ + GtkTreeIter iter; /* Point d'actualisation */ + + access = gtk_tree_path_new_from_string(path); + + model = GTK_TREE_MODEL(gtk_builder_get_object(builder, "store")); + + if (gtk_tree_model_get_iter(model, &iter, access)) + { + gtk_list_store_set(GTK_LIST_STORE(model), &iter, + CFC_LOCAL, true, + CFC_REMOTE, false, + -1); + + } + + gtk_tree_path_free(access); + +} + + +/****************************************************************************** +* * +* Paramètres : renderer = rendu de cellule à l'origine de la procédure. * +* path = chemin d'accès à la ligne éditée. * +* builder = espace de référencement global. * +* * +* Description : Bascule le lieu d'enregistrement d'un type de collection. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void on_remote_feature_toggled(GtkCellRendererToggle *renderer, gchar *path, GtkBuilder *builder) +{ + GtkTreePath *access; /* Véritable chemin d'accès */ + GtkTreeModel *model; /* Modèle de gestion utilisé */ + GtkTreeIter iter; /* Point d'actualisation */ + + access = gtk_tree_path_new_from_string(path); + + model = GTK_TREE_MODEL(gtk_builder_get_object(builder, "store")); + + if (gtk_tree_model_get_iter(model, &iter, access)) + { + gtk_list_store_set(GTK_LIST_STORE(model), &iter, + CFC_LOCAL, false, + CFC_REMOTE, true, + -1); + + } + + gtk_tree_path_free(access); + +} + + +/****************************************************************************** +* * +* Paramètres : builder = espace de référencement global. * +* binary = binaire chargé en mémoire à traiter. * * * * Description : Applique les paramètres d'enregistrement pour un binaire. * * * @@ -148,16 +267,19 @@ static void on_server_use_toggled(GtkToggleButton *button, GtkBuilder *builder) * * ******************************************************************************/ -static void update_binary_storage(GtkButton *button, GtkBuilder *builder) +void update_binary_storage(GtkBuilder *builder, GLoadedBinary *binary) { - GLoadedBinary *binary; /* Binaire à mettre à jour */ GObject *widget; /* Composant à mettre à jour */ const gchar *host; /* Serveur distant à contacter */ gint port; /* Port d'écoute du serveur */ - GtkToggleButton *local_button; /* Choix du serveur local */ - gboolean active; /* Etat du choix du local */ - - binary = G_LOADED_BINARY(g_object_get_data(G_OBJECT(builder), "binary")); + GtkToggleButton *use_remote; /* Choix du serveur distant */ + gboolean active; /* Etat du choix du distant */ + GtkTreeModel *model; /* Modèle de gestion utilisé */ + GtkTreeIter iter; /* Itérateur de consultation */ + gboolean valid; /* Validité de l'itérateur */ + GDbCollection *collec; /* Collection à traiter */ + gboolean local; /* Conservation locale ? */ + uint32_t feature; /* Type d'éléments gérés */ /* Infos de connexions à distance */ @@ -171,10 +293,31 @@ static void update_binary_storage(GtkButton *button, GtkBuilder *builder) /* Choix final du serveur */ - local_button = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "local_storage")); + use_remote = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "use_remote")); + + active = gtk_toggle_button_get_active(use_remote); + + g_loaded_binary_set_remote_storage_usage(binary, active); + + /* Type de conservation des éléments */ + + model = GTK_TREE_MODEL(gtk_builder_get_object(builder, "store")); + + for (valid = gtk_tree_model_get_iter_first(model, &iter); + valid; + valid = gtk_tree_model_iter_next(model, &iter)) + { + gtk_tree_model_get(model, &iter, + CFC_COLLECTION, &collec, + CFC_LOCAL, &local, + -1); + + feature = g_db_collection_get_feature(collec); + + g_loaded_binary_set_storage(binary, feature, local ? DBS_ALL_LOCAL : DBS_ALL_REMOTE); - active = gtk_toggle_button_get_active(local_button); + g_object_unref(G_OBJECT(collec)); - g_loaded_binary_set_local_storage(binary, active); + } } diff --git a/src/gui/dialogs/storage.h b/src/gui/dialogs/storage.h index 6e0c9f0..f7cd65a 100644 --- a/src/gui/dialogs/storage.h +++ b/src/gui/dialogs/storage.h @@ -35,6 +35,9 @@ /* Propose une définition des propriétés d'enregistrement. */ GtkWidget *create_storage_dialog(GLoadedBinary *, GtkWindow *, GtkBuilder **); +/* Applique les paramètres d'enregistrement pour un binaire. */ +void update_binary_storage(GtkBuilder *, GLoadedBinary *); + #endif /* _GUI_DIALOGS_STORAGE_H */ diff --git a/src/gui/dialogs/storage.ui b/src/gui/dialogs/storage.ui new file mode 100644 index 0000000..0a65f47 --- /dev/null +++ b/src/gui/dialogs/storage.ui @@ -0,0 +1,302 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.21.0 --> +<interface> + <requires lib="gtk+" version="3.20"/> + <object class="GtkAdjustment" id="port_adj"> + <property name="lower">1</property> + <property name="upper">65535</property> + <property name="value">0.01</property> + <property name="step_increment">1</property> + <property name="page_increment">10</property> + </object> + <object class="GtkListStore" id="store"> + <columns> + <!-- column-name collec --> + <column type="GObject"/> + <!-- column-name name --> + <column type="gchararray"/> + <!-- column-name local --> + <column type="gboolean"/> + <!-- column-name remote --> + <column type="gboolean"/> + </columns> + </object> + <object class="GtkDialog" id="window"> + <property name="can_focus">False</property> + <property name="margin_left">4</property> + <property name="margin_right">4</property> + <property name="margin_top">4</property> + <property name="margin_bottom">4</property> + <property name="title" translatable="yes">Storage</property> + <property name="modal">True</property> + <property name="window_position">center-on-parent</property> + <property name="default_width">500</property> + <property name="default_height">350</property> + <property name="type_hint">dialog</property> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="button1"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button2"> + <property name="label">gtk-apply</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">8</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">8</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Note: DB items will use local storage as fallback if this server can not be contacted.</property> + <property name="wrap">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="spacing">8</property> + <child> + <object class="GtkLabel" id="server_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Server:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="server"> + <property name="visible">True</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="port_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Port:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="port"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_width_chars">5</property> + <property name="text" translatable="yes">1</property> + <property name="adjustment">port_adj</property> + <property name="value">1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkCheckButton" id="use_remote"> + <property name="label" translatable="yes">Use a remote shared server</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_server_use_toggled" swapped="no"/> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="left_padding">12</property> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">store</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> + <child> + <object class="GtkTreeViewColumn"> + <property name="title" translatable="yes">Name</property> + <property name="expand">True</property> + <child> + <object class="GtkCellRendererText" id="name"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn"> + <property name="title" translatable="yes">Local</property> + <child> + <object class="GtkCellRendererToggle" id="local"> + <property name="radio">True</property> + <signal name="toggled" handler="on_local_feature_toggled" swapped="no"/> + </object> + <attributes> + <attribute name="active">2</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn"> + <property name="title" translatable="yes">Remote</property> + <child> + <object class="GtkCellRendererToggle" id="remote"> + <property name="radio">True</property> + <signal name="toggled" handler="on_remote_feature_toggled" swapped="no"/> + </object> + <attributes> + <attribute name="active">3</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">DB items</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-6">button1</action-widget> + <action-widget response="-10">button2</action-widget> + </action-widgets> + <child> + <placeholder/> + </child> + </object> +</interface> |