glade3 r2038 - in trunk: . gladeui plugins/gtk+
- From: tvb svn gnome org
- To: svn-commits-list gnome org
- Subject: glade3 r2038 - in trunk: . gladeui plugins/gtk+
- Date: Thu, 20 Nov 2008 20:54:03 +0000 (UTC)
Author: tvb
Date: Thu Nov 20 20:54:03 2008
New Revision: 2038
URL: http://svn.gnome.org/viewvc/glade3?rev=2038&view=rev
Log:
* plugins/gtk+/glade-cell-renderer-editor.c: Added GladeEPropCellAttribute
* plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in: Integrated new eprop
for cell renderer attributes, avoid setting attributes for columns that
exceed model bounds (except on load).
Modified:
trunk/ChangeLog
trunk/gladeui/glade-property-class.c
trunk/plugins/gtk+/glade-button-editor.h
trunk/plugins/gtk+/glade-cell-renderer-editor.c
trunk/plugins/gtk+/glade-cell-renderer-editor.h
trunk/plugins/gtk+/glade-gtk.c
trunk/plugins/gtk+/glade-icon-factory-editor.h
trunk/plugins/gtk+/glade-image-editor.h
trunk/plugins/gtk+/glade-image-item-editor.h
trunk/plugins/gtk+/glade-label-editor.h
trunk/plugins/gtk+/glade-store-editor.h
trunk/plugins/gtk+/glade-tool-button-editor.h
trunk/plugins/gtk+/gtk+.xml.in
Modified: trunk/gladeui/glade-property-class.c
==============================================================================
--- trunk/gladeui/glade-property-class.c (original)
+++ trunk/gladeui/glade-property-class.c Thu Nov 20 20:54:03 2008
@@ -49,9 +49,9 @@
#include "glade-displayable-values.h"
#include "glade-debug.h"
-#define NUMERICAL_STEP_INCREMENT 1
-#define NUMERICAL_PAGE_INCREMENT 10
-#define NUMERICAL_PAGE_SIZE 1
+#define NUMERICAL_STEP_INCREMENT 1.0F
+#define NUMERICAL_PAGE_INCREMENT 10.0F
+#define NUMERICAL_PAGE_SIZE 1.0F
#define FLOATING_STEP_INCREMENT 0.01F
#define FLOATING_PAGE_INCREMENT 0.1F
Modified: trunk/plugins/gtk+/glade-button-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-button-editor.h (original)
+++ trunk/plugins/gtk+/glade-button-editor.h Thu Nov 20 20:54:03 2008
@@ -70,7 +70,7 @@
GtkVBoxClass parent;
};
-GType glade_button_editor_get_type (void);
+GType glade_button_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_button_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-cell-renderer-editor.c
==============================================================================
--- trunk/plugins/gtk+/glade-cell-renderer-editor.c (original)
+++ trunk/plugins/gtk+/glade-cell-renderer-editor.c Thu Nov 20 20:54:03 2008
@@ -26,6 +26,7 @@
#include <gdk/gdkkeysyms.h>
#include "glade-cell-renderer-editor.h"
+#include "glade-column-types.h"
static void glade_cell_renderer_editor_finalize (GObject *object);
@@ -489,3 +490,180 @@
return GTK_WIDGET (renderer_editor);
}
+
+/***************************************************************************
+ * Editor Property *
+ ***************************************************************************/
+typedef struct
+{
+ GladeEditorProperty parent_instance;
+
+ GtkTreeModel *columns;
+
+ GtkWidget *spin;
+ GtkWidget *combo;
+} GladeEPropCellAttribute;
+
+GLADE_MAKE_EPROP (GladeEPropCellAttribute, glade_eprop_cell_attribute)
+#define GLADE_EPROP_CELL_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_EPROP_CELL_ATTRIBUTE, GladeEPropCellAttribute))
+#define GLADE_EPROP_CELL_ATTRIBUTE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_EPROP_CELL_ATTRIBUTE, GladeEPropCellAttributeClass))
+#define GLADE_IS_EPROP_CELL_ATTRIBUTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_CELL_ATTRIBUTE))
+#define GLADE_IS_EPROP_CELL_ATTRIBUTE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_CELL_ATTRIBUTE))
+#define GLADE_EPROP_CELL_ATTRIBUTE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_EPROP_CELL_ATTRIBUTE, GladeEPropCellAttributeClass))
+
+static void
+glade_eprop_cell_attribute_finalize (GObject *object)
+{
+ /* Chain up */
+ GObjectClass *parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (object));
+ //GladeEPropCellAttribute *eprop_attribute = GLADE_EPROP_CELL_ATTRIBUTE (object);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+
+static GladeWidget *
+get_model (GladeProperty *property)
+{
+ GladeWidget *renderer = property->widget;
+ GladeWidget *model = NULL;
+
+ /* Keep inline with all new cell layouts !!! */
+ if (renderer->parent && GTK_IS_TREE_VIEW_COLUMN (renderer->parent->object))
+ {
+ GladeWidget *column = renderer->parent;
+
+ if (column->parent && GTK_IS_TREE_VIEW (column->parent->object))
+ {
+ GladeWidget *view = column->parent;
+ GtkTreeModel *real_model = NULL;
+ glade_widget_property_get (view, "model", &real_model);
+ if (real_model)
+ model = glade_widget_get_from_gobject (real_model);
+ }
+ }
+ return model;
+}
+
+static void
+glade_eprop_cell_attribute_load (GladeEditorProperty *eprop,
+ GladeProperty *property)
+{
+ GladeEditorPropertyClass *parent_class =
+ g_type_class_peek_parent (GLADE_EDITOR_PROPERTY_GET_CLASS (eprop));
+ GladeEPropCellAttribute *eprop_attribute = GLADE_EPROP_CELL_ATTRIBUTE (eprop);
+
+ /* Chain up in a clean state... */
+ parent_class->load (eprop, property);
+
+ if (property)
+ {
+ GladeWidget *gmodel;
+ GtkListStore *store = GTK_LIST_STORE (eprop_attribute->columns);
+ GtkTreeIter iter;
+
+ gtk_list_store_clear (store);
+
+ /* Generate model and set active iter */
+ if ((gmodel = get_model (property)) != NULL)
+ {
+ GList *columns = NULL, *l;
+
+ glade_widget_property_get (gmodel, "columns", &columns);
+
+ gtk_list_store_append (store, &iter);
+ /* translators: the adjective not the verb */
+ gtk_list_store_set (store, &iter, 0, _("unset"), -1);
+
+ for (l = columns; l; l = l->next)
+ {
+ GladeColumnType *column = l->data;
+ gchar *str = g_strdup_printf ("%s (%s)", column->column_name,
+ g_type_name (column->type));
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, str, -1);
+
+ g_free (str);
+ }
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (eprop_attribute->combo),
+ CLAMP (g_value_get_int (property->value) + 1,
+ 0, g_list_length (columns) + 1));
+
+ gtk_widget_set_sensitive (eprop_attribute->combo, TRUE);
+ }
+ else
+ {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, _("no model"), -1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (eprop_attribute->combo), 0);
+ gtk_widget_set_sensitive (eprop_attribute->combo, FALSE);
+ }
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_attribute->spin),
+ (gdouble)g_value_get_int (property->value));
+ }
+}
+
+static void
+combo_changed (GtkWidget *combo,
+ GladeEditorProperty *eprop)
+{
+ GValue val = { 0, };
+
+ if (eprop->loading) return;
+
+ g_value_init (&val, G_TYPE_INT);
+ g_value_set_int (&val, (gint)gtk_combo_box_get_active (GTK_COMBO_BOX (combo)) - 1);
+ glade_editor_property_commit (eprop, &val);
+ g_value_unset (&val);
+}
+
+
+static void
+spin_changed (GtkWidget *spin,
+ GladeEditorProperty *eprop)
+{
+ GValue val = { 0, };
+
+ if (eprop->loading) return;
+
+ g_value_init (&val, G_TYPE_INT);
+ g_value_set_int (&val, gtk_spin_button_get_value (GTK_SPIN_BUTTON (spin)));
+ glade_editor_property_commit (eprop, &val);
+ g_value_unset (&val);
+}
+
+static GtkWidget *
+glade_eprop_cell_attribute_create_input (GladeEditorProperty *eprop)
+{
+ GladeEPropCellAttribute *eprop_attribute = GLADE_EPROP_CELL_ATTRIBUTE (eprop);
+ GtkWidget *hbox;
+ GtkAdjustment *adjustment;
+ GtkCellRenderer *cell;
+
+ hbox = gtk_hbox_new (FALSE, 2);
+
+ adjustment = glade_property_class_make_adjustment (eprop->klass);
+ eprop_attribute->spin = gtk_spin_button_new (adjustment, 1.0, 0);
+
+ eprop_attribute->columns = (GtkTreeModel *)gtk_list_store_new (1, G_TYPE_STRING);
+ eprop_attribute->combo = gtk_combo_box_new_with_model (eprop_attribute->columns);
+
+ /* Add cell renderer */
+ cell = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (eprop_attribute->combo), cell, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (eprop_attribute->combo), cell,
+ "text", 0, NULL);
+
+ gtk_box_pack_start (GTK_BOX (hbox), eprop_attribute->spin, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), eprop_attribute->combo, TRUE, TRUE, 0);
+
+ g_signal_connect (G_OBJECT (eprop_attribute->combo), "changed",
+ G_CALLBACK (combo_changed), eprop);
+ g_signal_connect (G_OBJECT (eprop_attribute->spin), "value-changed",
+ G_CALLBACK (spin_changed), eprop);
+
+ return hbox;
+}
Modified: trunk/plugins/gtk+/glade-cell-renderer-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-cell-renderer-editor.h (original)
+++ trunk/plugins/gtk+/glade-cell-renderer-editor.h Thu Nov 20 20:54:03 2008
@@ -34,6 +34,9 @@
#define GLADE_IS_CELL_RENDERER_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_CELL_RENDERER_EDITOR))
#define GLADE_CELL_RENDERER_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GLADE_TYPE_CELL_RENDERER_EDITOR, GladeCellRendererEditorClass))
+#define GLADE_TYPE_EPROP_CELL_ATTRIBUTE (glade_eprop_cell_attribute_get_type())
+
+
typedef struct _GladeCellRendererEditor GladeCellRendererEditor;
typedef struct _GladeCellRendererEditorClass GladeCellRendererEditorClass;
@@ -58,7 +61,8 @@
GtkVBoxClass parent;
};
-GType glade_cell_renderer_editor_get_type (void);
+GType glade_eprop_cell_attribute_get_type (void) G_GNUC_CONST;
+GType glade_cell_renderer_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_cell_renderer_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditorPageType type,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-gtk.c
==============================================================================
--- trunk/plugins/gtk+/glade-gtk.c (original)
+++ trunk/plugins/gtk+/glade-gtk.c Thu Nov 20 20:54:03 2008
@@ -10208,6 +10208,29 @@
}
+
+
+GladeEditorProperty *
+glade_gtk_cell_renderer_create_eprop (GladeWidgetAdaptor *adaptor,
+ GladePropertyClass *klass,
+ gboolean use_command)
+{
+ GladeEditorProperty *eprop;
+
+ if (strncmp (klass->id, "attr-", strlen ("attr-")) == 0)
+ eprop = g_object_new (GLADE_TYPE_EPROP_CELL_ATTRIBUTE,
+ "property-class", klass,
+ "use-command", use_command,
+ NULL);
+ else
+ eprop = GWA_GET_CLASS
+ (G_TYPE_OBJECT)->create_eprop (adaptor,
+ klass,
+ use_command);
+ return eprop;
+}
+
+
GladeEditable *
glade_gtk_cell_renderer_create_editable (GladeWidgetAdaptor *adaptor,
GladeEditorPageType type)
@@ -10259,10 +10282,12 @@
{
GtkCellLayout *layout;
GtkCellRenderer *cell;
- GladeWidget *widget = glade_widget_get_from_gobject (object);
+ GladeWidget *widget = glade_widget_get_from_gobject (object), *glayout;
+ GladeWidget *gmodel = NULL;
GladeProperty *property;
gchar *attr_prop_name;
GList *l;
+ gint columns = 0;
static gint attr_len = 0;
if (!attr_len)
@@ -10275,6 +10300,24 @@
layout = GTK_CELL_LAYOUT (widget->parent->object);
cell = GTK_CELL_RENDERER (object);
+ glayout = glade_widget_get_from_gobject (layout);
+
+ if (glayout->parent && GTK_IS_TREE_VIEW (glayout->parent->object))
+ {
+ GtkTreeModel *model = NULL;
+
+ glade_widget_property_get (glayout->parent, "model", &model);
+ if (model)
+ gmodel = glade_widget_get_from_gobject (model);
+ }
+
+ if (gmodel)
+ {
+ GList *column_list = NULL;
+ glade_widget_property_get (gmodel, "columns", &column_list);
+ columns = g_list_length (column_list);
+
+ }
gtk_cell_layout_clear_attributes (layout, cell);
@@ -10286,10 +10329,11 @@
{
attr_prop_name = &property->klass->id[attr_len];
- /* XXX TODO: Check that column doesnt exceed model bounds, and that
- * cell supports the data type in the indexed column.
+ /* XXX TODO: Check that the cell supports the data type in the indexed column.
*/
- if (g_value_get_int (property->value) >= 0)
+ if (g_value_get_int (property->value) >= 0 &&
+ /* We have to set attributes before parenting when loading */
+ (glade_util_object_is_loading (object) || g_value_get_int (property->value) < columns))
gtk_cell_layout_add_attribute (layout, cell,
attr_prop_name,
g_value_get_int (property->value));
@@ -10325,29 +10369,6 @@
value);
}
-
-GladeEditorProperty *
-glade_gtk_cell_renderer_create_eprop (GladeWidgetAdaptor *adaptor,
- GladePropertyClass *klass,
- gboolean use_command)
-{
- GladeEditorProperty *eprop;
-
- /* chain up.. */
-/* if (klass->pspec->value_type == GLADE_TYPE_CELL_ATTRIBUTE_LIST) */
-/* eprop = g_object_new (GLADE_TYPE_EPROP_CELL_ATTRIBUTE_LIST, */
-/* "property-class", klass, */
-/* "use-command", use_command, */
-/* NULL); */
-/* else */
- eprop = GWA_GET_CLASS
- (G_TYPE_OBJECT)->create_eprop (adaptor,
- klass,
- use_command);
- return eprop;
-}
-
-
static void
glade_gtk_cell_renderer_write_properties (GladeWidget *widget,
GladeXmlContext *context,
Modified: trunk/plugins/gtk+/glade-icon-factory-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-icon-factory-editor.h (original)
+++ trunk/plugins/gtk+/glade-icon-factory-editor.h Thu Nov 20 20:54:03 2008
@@ -52,7 +52,7 @@
GtkVBoxClass parent;
};
-GType glade_icon_factory_editor_get_type (void);
+GType glade_icon_factory_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_icon_factory_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-image-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-image-editor.h (original)
+++ trunk/plugins/gtk+/glade-image-editor.h Thu Nov 20 20:54:03 2008
@@ -68,7 +68,7 @@
GtkVBoxClass parent;
};
-GType glade_image_editor_get_type (void);
+GType glade_image_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_image_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-image-item-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-image-item-editor.h (original)
+++ trunk/plugins/gtk+/glade-image-item-editor.h Thu Nov 20 20:54:03 2008
@@ -61,7 +61,7 @@
GtkVBoxClass parent;
};
-GType glade_image_item_editor_get_type (void);
+GType glade_image_item_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_image_item_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-label-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-label-editor.h (original)
+++ trunk/plugins/gtk+/glade-label-editor.h Thu Nov 20 20:54:03 2008
@@ -82,7 +82,7 @@
GtkVBoxClass parent;
};
-GType glade_label_editor_get_type (void);
+GType glade_label_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_label_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-store-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-store-editor.h (original)
+++ trunk/plugins/gtk+/glade-store-editor.h Thu Nov 20 20:54:03 2008
@@ -52,7 +52,7 @@
GtkVBoxClass parent;
};
-GType glade_store_editor_get_type (void);
+GType glade_store_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_store_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/glade-tool-button-editor.h
==============================================================================
--- trunk/plugins/gtk+/glade-tool-button-editor.h (original)
+++ trunk/plugins/gtk+/glade-tool-button-editor.h Thu Nov 20 20:54:03 2008
@@ -72,7 +72,7 @@
GtkVBoxClass parent;
};
-GType glade_tool_button_editor_get_type (void);
+GType glade_tool_button_editor_get_type (void) G_GNUC_CONST;
GtkWidget *glade_tool_button_editor_new (GladeWidgetAdaptor *adaptor,
GladeEditable *editable);
Modified: trunk/plugins/gtk+/gtk+.xml.in
==============================================================================
--- trunk/plugins/gtk+/gtk+.xml.in (original)
+++ trunk/plugins/gtk+/gtk+.xml.in Thu Nov 20 20:54:03 2008
@@ -1922,6 +1922,7 @@
<glade-widget-class name="GtkCellRenderer" _title="Cell Renderer">
<post-create-function>glade_gtk_cell_renderer_post_create</post-create-function>
+ <create-editor-property-function>glade_gtk_cell_renderer_create_eprop</create-editor-property-function>
<create-editable-function>glade_gtk_cell_renderer_create_editable</create-editable-function>
<set-property-function>glade_gtk_cell_renderer_set_property</set-property-function>
<write-widget-function>glade_gtk_cell_renderer_write_widget</write-widget-function>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]