static GtkTreeViewColumn * eprop_model_generate_column (GladeEditorProperty * eprop, gint colnum, GladeModelData * data) { GtkTreeViewColumn *column = gtk_tree_view_column_new (); GtkCellRenderer *renderer = NULL; GtkAdjustment *adjustment; GtkListStore *store; GType type = G_TYPE_INVALID; gtk_tree_view_column_set_title (column, data->name); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_expand (column, TRUE); type = G_VALUE_TYPE (&data->value); /* Support enum and flag types, and a hardcoded list of fundamental types */ if (type == G_TYPE_CHAR || type == G_TYPE_UCHAR || type == G_TYPE_STRING || type == GDK_TYPE_PIXBUF) { /* Text renderer */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", TRUE, "ellipsize", PANGO_ELLIPSIZE_END, "width", 90, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "text", NUM_COLUMNS + colnum, NULL); if (type == G_TYPE_CHAR || type == G_TYPE_UCHAR) { /* XXX restrict to 1 char !! */ } g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (value_text_edited), eprop); /* Trigger i18n dialog from here */ if (type == G_TYPE_STRING) { GtkCellRenderer *icon_renderer = glade_cell_renderer_icon_new (); g_object_set (G_OBJECT (icon_renderer), "activatable", TRUE, "icon-name", "gtk-edit", NULL); gtk_tree_view_column_pack_start (column, icon_renderer, FALSE); g_object_set_data (G_OBJECT (icon_renderer), "column-number", GINT_TO_POINTER (colnum)); g_signal_connect (G_OBJECT (icon_renderer), "activate", G_CALLBACK (value_i18n_activate), eprop); } } else if (type == G_TYPE_BOOLEAN) { /* Toggle renderer */ renderer = gtk_cell_renderer_toggle_new (); g_object_set (G_OBJECT (renderer), "activatable", TRUE, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "active", NUM_COLUMNS + colnum, NULL); g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (value_toggled), eprop); } /* Check renderer */ else if (type == G_TYPE_INT || type == G_TYPE_UINT || type == G_TYPE_LONG || type == G_TYPE_ULONG || type == G_TYPE_INT64 || type == G_TYPE_UINT64 || type == G_TYPE_FLOAT || type == G_TYPE_DOUBLE) { /* Spin renderer */ renderer = gtk_cell_renderer_spin_new (); adjustment = (GtkAdjustment *) gtk_adjustment_new (0, -G_MAXDOUBLE, G_MAXDOUBLE, 100, 100, 0); g_object_set (G_OBJECT (renderer), "editable", TRUE, "adjustment", adjustment, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", NUM_COLUMNS + colnum, NULL); if (type == G_TYPE_FLOAT || type == G_TYPE_DOUBLE) g_object_set (G_OBJECT (renderer), "digits", 2, NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (value_text_edited), eprop); } else if (G_TYPE_IS_ENUM (type)) { /* Combo renderer */ renderer = gtk_cell_renderer_combo_new (); store = glade_utils_liststore_from_enum_type (type, FALSE); g_object_set (G_OBJECT (renderer), "editable", TRUE, "text-column", 0, "has-entry", FALSE, "model", store, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", NUM_COLUMNS + colnum, NULL); gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (column), renderer, (GtkCellLayoutDataFunc) enum_flags_format_cell_data, NULL, NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (value_text_edited), eprop); } else if (G_TYPE_IS_FLAGS (type)) { /* Export a flags dialog from glade-editor-property... */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "text", NUM_COLUMNS + colnum, NULL); } else /* All uneditable types at this point (currently we dont do object data here, TODO) */ { /* text renderer and object dialog (or raw text for pixbuf) */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); } g_signal_connect (G_OBJECT (renderer), "editing-started", G_CALLBACK (data_editing_started), eprop); g_signal_connect (G_OBJECT (renderer), "editing-canceled", G_CALLBACK (data_editing_canceled), eprop); g_object_set_data (G_OBJECT (renderer), "column-number", GINT_TO_POINTER (colnum)); g_object_set_data_full (G_OBJECT (column), "column-type", g_memdup (&type, sizeof (GType)), g_free); return column; }
static GtkWidget * glade_eprop_string_list_create_input (GladeEditorProperty * eprop) { GladeEPropStringList *eprop_string_list = GLADE_EPROP_STRING_LIST (eprop); GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkWidget *swindow; eprop_string_list->view = gtk_tree_view_new (); column = gtk_tree_view_column_new (); /* Text renderer */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", TRUE, "ellipsize", PANGO_ELLIPSIZE_END, NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (string_edited), eprop); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", COLUMN_STRING, NULL); gtk_tree_view_column_set_cell_data_func (column, renderer, (GtkTreeCellDataFunc)cell_data_func, eprop, NULL); /* "id" renderer */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", TRUE, "ellipsize", PANGO_ELLIPSIZE_END, NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (id_edited), eprop); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_cell_data_func (column, renderer, (GtkTreeCellDataFunc)id_cell_data_func, eprop, NULL); /* i18n icon renderer */ renderer = glade_cell_renderer_icon_new (); g_object_set (G_OBJECT (renderer), "icon-name", "gtk-edit", NULL); g_signal_connect (G_OBJECT (renderer), "activate", G_CALLBACK (i18n_icon_activate), eprop); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_cell_data_func (column, renderer, (GtkTreeCellDataFunc)cell_data_func, eprop, NULL); eprop_string_list->model = (GtkTreeModel *)gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_BOOLEAN, G_TYPE_STRING); g_signal_connect (G_OBJECT (eprop_string_list->model), "row-deleted", G_CALLBACK (row_deleted), eprop); gtk_tree_view_append_column (GTK_TREE_VIEW (eprop_string_list->view), column); gtk_tree_view_set_model (GTK_TREE_VIEW (eprop_string_list->view), eprop_string_list->model); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (eprop_string_list->view), FALSE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (eprop_string_list->view), TRUE); g_signal_connect (eprop_string_list->view, "key-press-event", G_CALLBACK (treeview_key_press), eprop); swindow = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (swindow), get_tree_view_height ()); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow), GTK_SHADOW_IN); gtk_container_add (GTK_CONTAINER (swindow), eprop_string_list->view); gtk_widget_set_hexpand (swindow, TRUE); gtk_widget_show (eprop_string_list->view); gtk_widget_show (swindow); return swindow; }
static GtkWidget * glade_eprop_attrs_view (GladeEditorProperty *eprop) { GladeEPropAttrs *eprop_attrs = GLADE_EPROP_ATTRS (eprop); GtkWidget *view_widget; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkAdjustment *adjustment; eprop_attrs->model = (GtkTreeModel *) gtk_list_store_new (NUM_COLUMNS, /* Main Data */ G_TYPE_STRING, // COLUMN_NAME G_TYPE_INT, // COLUMN_NAME_WEIGHT G_TYPE_INT, // COLUMN_TYPE G_TYPE_INT, // COLUMN_EDIT_TYPE G_TYPE_POINTER, // COLUMN_VALUE G_TYPE_UINT, // COLUMN_START G_TYPE_UINT, // COLUMN_END /* Editor renderer related */ G_TYPE_BOOLEAN, // COLUMN_TOGGLE_ACTIVE G_TYPE_BOOLEAN, // COLUMN_TOGGLE_DOWN G_TYPE_BOOLEAN, // COLUMN_BUTTON_ACTIVE G_TYPE_STRING, // COLUMN_TEXT G_TYPE_INT, // COLUMN_TEXT_STYLE G_TYPE_STRING, // COLUMN_TEXT_FG G_TYPE_BOOLEAN, // COLUMN_COMBO_ACTIVE GTK_TYPE_LIST_STORE, // COLUMN_COMBO_MODEL G_TYPE_BOOLEAN, // COLUMN_SPIN_ACTIVE G_TYPE_UINT); // COLUMN_SPIN_DIGITS view_widget = gtk_tree_view_new_with_model (eprop_attrs->model); gtk_tree_view_set_show_expanders (GTK_TREE_VIEW (view_widget), FALSE); gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view_widget), FALSE); /********************* attribute name column *********************/ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); column = gtk_tree_view_column_new_with_attributes (_("Attribute"), renderer, "text", COLUMN_NAME, "weight", COLUMN_NAME_WEIGHT, NULL); gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column); /********************* attribute value column *********************/ column = gtk_tree_view_column_new (); gtk_tree_view_column_set_title (column, _("Value")); /* Toggle renderer */ renderer = gtk_cell_renderer_toggle_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "activatable", COLUMN_TOGGLE_ACTIVE, "visible", COLUMN_TOGGLE_ACTIVE, "active", COLUMN_TOGGLE_DOWN, NULL); g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (value_toggled), eprop); /* Text renderer */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "editable", FALSE, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "editable", COLUMN_BUTTON_ACTIVE, "visible", COLUMN_BUTTON_ACTIVE, "text", COLUMN_TEXT, "style", COLUMN_TEXT_STYLE, "foreground", COLUMN_TEXT_FG, NULL); /* Icon renderer */ renderer = glade_cell_renderer_icon_new (); g_object_set (G_OBJECT (renderer), "icon-name", GTK_STOCK_EDIT, NULL); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "activatable", COLUMN_BUTTON_ACTIVE, "visible", COLUMN_BUTTON_ACTIVE, NULL); g_signal_connect (G_OBJECT (renderer), "activate", G_CALLBACK (value_icon_activate), eprop); /* Combo renderer */ renderer = gtk_cell_renderer_combo_new (); g_object_set (G_OBJECT (renderer), "text-column", 0, "has-entry", FALSE, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "editable", COLUMN_COMBO_ACTIVE, "visible", COLUMN_COMBO_ACTIVE, "model", COLUMN_COMBO_MODEL, "text", COLUMN_TEXT, "style", COLUMN_TEXT_STYLE, "foreground", COLUMN_TEXT_FG, NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (value_combo_spin_edited), eprop); /* Spin renderer */ renderer = gtk_cell_renderer_spin_new (); adjustment = (GtkAdjustment *) gtk_adjustment_new (0, -G_MAXDOUBLE, G_MAXDOUBLE, 100, 100, 100); g_object_set (G_OBJECT (renderer), "adjustment", adjustment, NULL); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "visible", COLUMN_SPIN_ACTIVE, "editable", COLUMN_SPIN_ACTIVE, "text", COLUMN_TEXT, "style", COLUMN_TEXT_STYLE, "foreground", COLUMN_TEXT_FG, "digits", COLUMN_SPIN_DIGITS, NULL); g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (value_combo_spin_edited), eprop); g_signal_connect (G_OBJECT (renderer), "editing-started", G_CALLBACK (value_combo_spin_editing_started), NULL); gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (view_widget), column); return view_widget; }