/** * glade_editable_load: * @editable: A #GladeEditable * @widget: the #GladeWidget to load * * Loads @widget property values into @editable * (the editable will watch the widgets properties * until its loaded with another widget or %NULL) */ void glade_editable_load (GladeEditable *editable, GladeWidget *widget) { GladeEditableIface *iface; g_return_if_fail (GLADE_IS_EDITABLE (editable)); g_return_if_fail (widget == NULL || GLADE_IS_WIDGET (widget)); /* Connect to the destroy signal once, make sure we unload the widget and disconnect * to any signals when destroying */ if (!GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (editable), glade_editable_destroy_quark))) { g_signal_connect (editable, "destroy", G_CALLBACK (editable_destroyed), NULL); g_object_set_qdata (G_OBJECT (editable), glade_editable_destroy_quark, GINT_TO_POINTER (TRUE)); } iface = GLADE_EDITABLE_GET_IFACE (editable); g_object_set_qdata (G_OBJECT (editable), glade_editable_loading_quark, GINT_TO_POINTER (TRUE)); if (iface->load) iface->load (editable, widget); else g_critical ("No GladeEditable::load() support on type %s", G_OBJECT_TYPE_NAME (editable)); g_object_set_qdata (G_OBJECT (editable), glade_editable_loading_quark, GINT_TO_POINTER (FALSE)); }
GtkWidget * glade_tree_view_editor_new (GladeWidgetAdaptor * adaptor, GladeEditable * embed) { GladeTreeViewEditor *view_editor; GtkWidget *vbox, *separator; gchar *str; g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL); g_return_val_if_fail (GLADE_IS_EDITABLE (embed), NULL); view_editor = g_object_new (GLADE_TYPE_TREE_VIEW_EDITOR, NULL); view_editor->embed = GTK_WIDGET (embed); /* Pack the parent on the left... */ gtk_box_pack_start (GTK_BOX (view_editor), GTK_WIDGET (embed), TRUE, TRUE, 8); separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL); gtk_box_pack_start (GTK_BOX (view_editor), separator, FALSE, FALSE, 0); /* ...and the vbox with datastore/label on the right */ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (view_editor), vbox, TRUE, TRUE, 8); str = g_strdup_printf ("<b>%s</b>", _("Choose a Data Model and define some\n" "columns in the data store first")); view_editor->no_model_message = gtk_label_new (str); gtk_label_set_use_markup (GTK_LABEL (view_editor->no_model_message), TRUE); gtk_label_set_justify (GTK_LABEL (view_editor->no_model_message), GTK_JUSTIFY_CENTER); g_free (str); gtk_box_pack_start (GTK_BOX (vbox), view_editor->no_model_message, TRUE, TRUE, 0); view_editor->embed_list_store = (GtkWidget *) glade_widget_adaptor_create_editable (glade_widget_adaptor_get_by_type (GTK_TYPE_LIST_STORE), GLADE_PAGE_GENERAL); glade_editable_set_show_name (GLADE_EDITABLE (view_editor->embed_list_store), FALSE); gtk_box_pack_start (GTK_BOX (vbox), view_editor->embed_list_store, TRUE, TRUE, 0); view_editor->embed_tree_store = (GtkWidget *) glade_widget_adaptor_create_editable (glade_widget_adaptor_get_by_type (GTK_TYPE_TREE_STORE), GLADE_PAGE_GENERAL); glade_editable_set_show_name (GLADE_EDITABLE (view_editor->embed_tree_store), FALSE); gtk_box_pack_start (GTK_BOX (vbox), view_editor->embed_tree_store, TRUE, TRUE, 0); gtk_widget_show_all (GTK_WIDGET (view_editor)); return GTK_WIDGET (view_editor); }
/** * glade_editable_set_show_name: * @editable: A #GladeEditable * @show_name: Whether or not to show the name entry * * This only applies for the general page in the property * editor, editables that embed the #GladeEditorTable implementation * for the general page should use this to forward the message * to its embedded editable. */ void glade_editable_set_show_name (GladeEditable *editable, gboolean show_name) { GladeEditableIface *iface; g_return_if_fail (GLADE_IS_EDITABLE (editable)); iface = GLADE_EDITABLE_GET_IFACE (editable); if (iface->set_show_name) iface->set_show_name (editable, show_name); }
void glade_editable_unblock (GladeEditable *editable) { GladeProject *project; g_return_if_fail (GLADE_IS_EDITABLE (editable)); project = g_object_get_qdata (G_OBJECT (editable), glade_editable_project_quark); g_return_if_fail (GLADE_IS_PROJECT (project)); g_signal_handlers_unblock_by_func (project, G_CALLBACK (project_changed), editable); }
GtkWidget * glade_tool_item_group_editor_new (GladeWidgetAdaptor *adaptor, GladeEditable *embed) { GladeToolItemGroupEditor *group_editor; GladeEditorProperty *eprop; GtkWidget *table, *frame, *label, *hbox; gchar *str; gint row = 0; g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL); g_return_val_if_fail (GLADE_IS_EDITABLE (embed), NULL); group_editor = g_object_new (GLADE_TYPE_TOOL_ITEM_GROUP_EDITOR, NULL); group_editor->embed = GTK_WIDGET (embed); /* Pack the parent on top... */ gtk_box_pack_start (GTK_BOX (group_editor), GTK_WIDGET (embed), FALSE, FALSE, 0); str = g_strdup_printf ("<b>%s</b>", _("Group Header")); label = gtk_label_new (str); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); g_free (str); frame = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); gtk_box_pack_start (GTK_BOX (group_editor), frame, FALSE, FALSE, 0); table = gtk_grid_new (); gtk_widget_set_margin_top (table, 6); gtk_widget_set_margin_start (table, 12); gtk_orientable_set_orientation (GTK_ORIENTABLE (table), GTK_ORIENTATION_VERTICAL); gtk_grid_set_row_spacing (GTK_GRID (table), 4); gtk_container_add (GTK_CONTAINER (frame), table); /* label */ eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, "label", FALSE, TRUE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); group_editor->label_radio = gtk_radio_button_new (NULL); gtk_box_pack_start (GTK_BOX (hbox), group_editor->label_radio, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), glade_editor_property_get_item_label (eprop), TRUE, TRUE, 2); table_attach (table, hbox, 0, row); table_attach (table, GTK_WIDGET (eprop), 1, row++); group_editor->properties = g_list_prepend (group_editor->properties, eprop); /* label-widget ... */ eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, "label-widget", FALSE, TRUE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); group_editor->label_widget_radio = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON (group_editor->label_radio)); gtk_box_pack_start (GTK_BOX (hbox), group_editor->label_widget_radio, FALSE, FALSE, 2); gtk_box_pack_start (GTK_BOX (hbox), glade_editor_property_get_item_label (eprop), TRUE, TRUE, 2); table_attach (table, hbox, 0, row); table_attach (table, GTK_WIDGET (eprop), 1, row++); group_editor->properties = g_list_prepend (group_editor->properties, eprop); g_signal_connect (G_OBJECT (group_editor->label_widget_radio), "toggled", G_CALLBACK (label_widget_toggled), group_editor); g_signal_connect (G_OBJECT (group_editor->label_radio), "toggled", G_CALLBACK (label_toggled), group_editor); gtk_widget_show_all (GTK_WIDGET (group_editor)); return GTK_WIDGET (group_editor); }