/* * Copyright (C) 2014 - Juan Ferrer Toribio * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "glade-db-model-editor.h" //+++++++++++++++++++++++++++++++++++++++++++++++++++ GladeModelEditor static void glade_model_editor_add_eprop (GladeModelEditor * obj, GladeWidgetAdaptor * adaptor, const gchar * name, const gchar * tooltip) { GtkWidget * frame, * alignment, * vbox; GladeEditorProperty * eprop = glade_widget_adaptor_create_eprop_by_name (adaptor, name, FALSE, TRUE); obj->props = g_list_prepend (obj->props, eprop); frame = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME (frame), glade_editor_property_get_item_label (eprop)); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); gtk_box_pack_start (GTK_BOX (obj), frame, FALSE, FALSE, 12); alignment = gtk_alignment_new (0.5F, 0.5F, 1.0F, 1.0F); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 6, 0, 12, 0); gtk_container_add (GTK_CONTAINER (frame), alignment); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (alignment), vbox); gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (eprop), FALSE, FALSE, 4); gtk_widget_set_tooltip_text (vbox, tooltip); } GtkWidget * glade_model_editor_new (GladeWidgetAdaptor * adaptor, GladeEditable * editable) { GladeModelEditor * obj; g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL); g_return_val_if_fail (GLADE_IS_EDITABLE (editable), NULL); obj = g_object_new (GLADE_TYPE_MODEL_EDITOR, "orientation", GTK_ORIENTATION_VERTICAL, NULL); obj->base = GTK_WIDGET (editable); gtk_box_pack_start (GTK_BOX (obj), GTK_WIDGET (editable), FALSE, FALSE, 0); glade_model_editor_add_eprop (obj, adaptor, "links", _("List of parameters linked to the model")); glade_model_editor_add_eprop (obj, adaptor, "batch", _("List of SqlHolders and identifiers")); gtk_widget_show_all (GTK_WIDGET (obj)); return GTK_WIDGET (obj); } static void glade_model_editor_load (GladeEditable * editable, GladeWidget * widget) { GList *l; GladeModelEditor * obj = GLADE_MODEL_EDITOR (editable); GladeEditableIface * iface = g_type_default_interface_peek (GLADE_TYPE_EDITABLE); iface->load (editable, widget); if (obj->base) glade_editable_load (GLADE_EDITABLE (obj->base), widget); for (l = obj->props; l; l = l->next) glade_editor_property_load_by_widget (GLADE_EDITOR_PROPERTY (l->data), widget); } static void glade_model_editor_set_show_name (GladeEditable * editable, gboolean show_name) { GladeModelEditor * obj = GLADE_MODEL_EDITOR (editable); glade_editable_set_show_name (GLADE_EDITABLE (obj->base), show_name); } static void glade_model_editor_finalize (GObject * object) { GladeModelEditor * obj = GLADE_MODEL_EDITOR (object); GObjectClass * parent = g_type_class_peek_parent (GLADE_MODEL_EDITOR_GET_CLASS (obj)); if (obj->props) g_list_free (obj->props); obj->props = NULL; obj->base = NULL; glade_editable_load (GLADE_EDITABLE (obj), NULL); parent->finalize (G_OBJECT (obj)); } static void glade_model_editor_class_init (GladeModelEditorClass * k) { GObjectClass * klass = G_OBJECT_CLASS (k); klass->finalize = glade_model_editor_finalize; } static void glade_model_editor_init (GladeModelEditor * obj) { } static void glade_model_editor_editable_init (GladeEditableIface * iface) { iface->load = glade_model_editor_load; iface->set_show_name = glade_model_editor_set_show_name; } G_DEFINE_TYPE_WITH_CODE (GladeModelEditor, glade_model_editor, GTK_TYPE_BOX, G_IMPLEMENT_INTERFACE (GLADE_TYPE_EDITABLE, glade_model_editor_editable_init)); //+++++++++++++++++++++++++++++++++++++++++++++++++++ GladeDbList G_DEFINE_BOXED_TYPE (GladeDbList, glade_db_list, glade_db_list_copy, glade_db_list_free); void glade_db_list_free (GladeDbList * list) { if (!list) return; if (list->list) g_object_unref (list->list); g_free (list); list = NULL; } GladeDbList * glade_db_list_copy (const GladeDbList * list) { GladeDbList * l = g_new (GladeDbList, 1); l->list = list->list ? g_object_ref (list->list) : NULL; return l; }