forked from AuroraMiddleware/gtk
inspector: Use a dropdown for attribute mapping
Use a GtkDropDown for the attribute mapping editor.
This commit is contained in:
parent
99c98d0736
commit
6346fa960c
@ -1160,7 +1160,8 @@ model_properties (GtkButton *button,
|
||||
}
|
||||
|
||||
static void
|
||||
attribute_mapping_changed (GtkComboBox *combo,
|
||||
attribute_mapping_changed (GtkDropDown *dropdown,
|
||||
GParamSpec *pspec,
|
||||
GtkInspectorPropEditor *self)
|
||||
{
|
||||
gint col;
|
||||
@ -1168,7 +1169,7 @@ attribute_mapping_changed (GtkComboBox *combo,
|
||||
GtkCellRenderer *cell;
|
||||
GtkCellArea *area;
|
||||
|
||||
col = gtk_combo_box_get_active (combo) - 1;
|
||||
col = gtk_drop_down_get_selected (dropdown) - 1;
|
||||
layout = g_object_get_data (self->object, "gtk-inspector-cell-layout");
|
||||
if (GTK_IS_CELL_LAYOUT (layout))
|
||||
{
|
||||
@ -1183,6 +1184,72 @@ attribute_mapping_changed (GtkComboBox *combo,
|
||||
}
|
||||
}
|
||||
|
||||
#define ATTRIBUTE_TYPE_HOLDER (attribute_holder_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (AttributeHolder, attribute_holder, ATTRIBUTE, HOLDER, GObject)
|
||||
|
||||
struct _AttributeHolder {
|
||||
GObject parent_instance;
|
||||
int column;
|
||||
gboolean sensitive;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (AttributeHolder, attribute_holder, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
attribute_holder_init (AttributeHolder *holder)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
attribute_holder_class_init (AttributeHolderClass *class)
|
||||
{
|
||||
}
|
||||
|
||||
static AttributeHolder *
|
||||
attribute_holder_new (int column,
|
||||
gboolean sensitive)
|
||||
{
|
||||
AttributeHolder *holder = g_object_new (ATTRIBUTE_TYPE_HOLDER, NULL);
|
||||
holder->column = column;
|
||||
holder->sensitive = sensitive;
|
||||
return holder;
|
||||
}
|
||||
|
||||
static void
|
||||
attribute_setup_item (GtkSignalListItemFactory *factory,
|
||||
GtkListItem *item)
|
||||
{
|
||||
GtkWidget *label;
|
||||
|
||||
label = gtk_label_new ("");
|
||||
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
||||
|
||||
gtk_list_item_set_child (item, label);
|
||||
}
|
||||
|
||||
static void
|
||||
attribute_bind_item (GtkSignalListItemFactory *factory,
|
||||
GtkListItem *item)
|
||||
{
|
||||
GtkWidget *label;
|
||||
AttributeHolder *holder;
|
||||
|
||||
holder = gtk_list_item_get_item (item);
|
||||
label = gtk_list_item_get_child (item);
|
||||
|
||||
if (holder->column >= 0)
|
||||
{
|
||||
char *text = g_strdup_printf ("%d", holder->column);
|
||||
gtk_label_set_label (GTK_LABEL (label), text);
|
||||
g_free (text);
|
||||
}
|
||||
else
|
||||
gtk_label_set_label (GTK_LABEL (label), _("None"));
|
||||
|
||||
gtk_list_item_set_selectable (item, holder->sensitive);
|
||||
gtk_widget_set_sensitive (label, holder->sensitive);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
attribute_editor (GObject *object,
|
||||
GParamSpec *spec,
|
||||
@ -1195,13 +1262,12 @@ attribute_editor (GObject *object,
|
||||
GtkWidget *label;
|
||||
GtkWidget *button;
|
||||
GtkWidget *box;
|
||||
GtkWidget *combo;
|
||||
gchar *text;
|
||||
GtkWidget *dropdown;
|
||||
GListStore *store;
|
||||
GtkListItemFactory *factory;
|
||||
gint i;
|
||||
AttributeHolder *holder;
|
||||
gboolean sensitive;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
|
||||
layout = g_object_get_data (object, "gtk-inspector-cell-layout");
|
||||
if (GTK_IS_CELL_LAYOUT (layout))
|
||||
@ -1224,30 +1290,36 @@ attribute_editor (GObject *object,
|
||||
gtk_box_append (GTK_BOX (box), button);
|
||||
|
||||
gtk_box_append (GTK_BOX (box), gtk_label_new (_("Column:")));
|
||||
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
|
||||
combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
|
||||
renderer = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
|
||||
"text", 0,
|
||||
"sensitive", 1,
|
||||
NULL);
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter, 0, C_("property name", "None"), 1, TRUE, -1);
|
||||
dropdown = gtk_drop_down_new ();
|
||||
|
||||
store = g_list_store_new (ATTRIBUTE_TYPE_HOLDER);
|
||||
holder = attribute_holder_new (-1, TRUE);
|
||||
g_list_store_append (store, holder);
|
||||
g_object_unref (holder);
|
||||
|
||||
for (i = 0; i < gtk_tree_model_get_n_columns (model); i++)
|
||||
{
|
||||
text = g_strdup_printf ("%d", i);
|
||||
sensitive = g_value_type_transformable (gtk_tree_model_get_column_type (model, i),
|
||||
spec->value_type);
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter, 0, text, 1, sensitive, -1);
|
||||
g_free (text);
|
||||
holder = attribute_holder_new (i, sensitive);
|
||||
g_list_store_append (store, holder);
|
||||
g_object_unref (holder);
|
||||
}
|
||||
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), col + 1);
|
||||
attribute_mapping_changed (GTK_COMBO_BOX (combo), self);
|
||||
g_signal_connect (combo, "changed",
|
||||
gtk_drop_down_set_model (GTK_DROP_DOWN (dropdown), G_LIST_MODEL (store));
|
||||
g_object_unref (store);
|
||||
|
||||
factory = gtk_signal_list_item_factory_new ();
|
||||
g_signal_connect (factory, "setup", G_CALLBACK (attribute_setup_item), NULL);
|
||||
g_signal_connect (factory, "bind", G_CALLBACK (attribute_bind_item), NULL);
|
||||
gtk_drop_down_set_factory (GTK_DROP_DOWN (dropdown), factory);
|
||||
g_object_unref (factory);
|
||||
|
||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (dropdown), col + 1);
|
||||
attribute_mapping_changed (GTK_DROP_DOWN (dropdown), NULL, self);
|
||||
g_signal_connect (dropdown, "notify::selected",
|
||||
G_CALLBACK (attribute_mapping_changed), self);
|
||||
gtk_box_append (GTK_BOX (box), combo);
|
||||
|
||||
gtk_box_append (GTK_BOX (box), dropdown);
|
||||
|
||||
return box;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user