glade3 r2051 - in trunk: . gladeui plugins/gtk+



Author: tvb
Date: Tue Nov 25 17:09:00 2008
New Revision: 2051
URL: http://svn.gnome.org/viewvc/glade3?rev=2051&view=rev

Log:

	* plugins/gtk+/glade-gtk.c, plugins/gtk+/gtk+.xml.in: Added editor support for Icon View.

	* plugins/gtk+/glade-cell-renderer-editor.c: Export a new function to get the model from
	the renderer regardless of the layout type.

	* plugins/gtk+/glade-treeview-editor.c: Now supports editing any view that can have a model,
	and pops up the store editor automatically on the right of the normal widget editor.



Modified:
   trunk/ChangeLog
   trunk/gladeui/glade-command.c
   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-treeview-editor.c
   trunk/plugins/gtk+/gtk+.xml.in

Modified: trunk/gladeui/glade-command.c
==============================================================================
--- trunk/gladeui/glade-command.c	(original)
+++ trunk/gladeui/glade-command.c	Tue Nov 25 17:09:00 2008
@@ -942,10 +942,12 @@
 	for (l = children; l; l = l->next)
 	{
 		if ((child = glade_widget_get_from_gobject (l->data)) != NULL)
+		{
 			if ((list = glade_widget_get_parentless_reffed_widgets (child)) != NULL)
 				reffed = g_list_concat (reffed, list);
 
-		reffed = get_all_parentless_reffed_widgets (reffed, child);
+			reffed = get_all_parentless_reffed_widgets (reffed, child);
+		}
 	}
 
 	return reffed;

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	Tue Nov 25 17:09:00 2008
@@ -521,11 +521,9 @@
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
-
-static GladeWidget *
-get_model (GladeProperty *property)
+GladeWidget *
+glade_cell_renderer_get_model (GladeWidget *renderer)
 {
-	GladeWidget *renderer = property->widget;
 	GladeWidget *model = NULL;
 
 	/* Keep inline with all new cell layouts !!! */
@@ -542,6 +540,15 @@
 				model = glade_widget_get_from_gobject (real_model);
 		}
 	}
+	else if (renderer->parent && GTK_IS_ICON_VIEW (renderer->parent->object))
+	{
+		GladeWidget *view = renderer->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;
 }
 
@@ -565,7 +572,7 @@
 		gtk_list_store_clear (store);
 
 		/* Generate model and set active iter */
-		if ((gmodel = get_model (property)) != NULL)
+		if ((gmodel = glade_cell_renderer_get_model (property->widget)) != NULL)
 		{
 			GList *columns = NULL, *l;
 

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	Tue Nov 25 17:09:00 2008
@@ -67,6 +67,8 @@
 						      GladeEditorPageType  type,
 						      GladeEditable       *editable);
 
+GladeWidget     *glade_cell_renderer_get_model       (GladeWidget         *renderer);
+
 G_END_DECLS
 
 #endif  /* _GLADE_CELL_RENDERER_EDITOR_H_ */

Modified: trunk/plugins/gtk+/glade-gtk.c
==============================================================================
--- trunk/plugins/gtk+/glade-gtk.c	(original)
+++ trunk/plugins/gtk+/glade-gtk.c	Tue Nov 25 17:09:00 2008
@@ -10045,8 +10045,8 @@
 
 	GtkCellLayout *layout;
 	GtkCellRenderer *cell;
-	GladeWidget *widget = glade_widget_get_from_gobject (object), *glayout;
-	GladeWidget *gmodel = NULL;
+	GladeWidget *widget = glade_widget_get_from_gobject (object);
+	GladeWidget *gmodel;
 	GladeProperty *property;
 	gchar *attr_prop_name;
 	GList *l;
@@ -10066,26 +10066,15 @@
 	 */
 	layout = GTK_CELL_LAYOUT (widget->parent->object);
 	cell = GTK_CELL_RENDERER (object);
-	glayout = glade_widget_get_from_gobject (layout);
 
 	if (!glade_gtk_cell_layout_has_renderer (layout, cell))
 		return;
 
-	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)
+	if ((gmodel = glade_cell_renderer_get_model (widget)) != NULL)
 	{
 		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);
@@ -10099,6 +10088,8 @@
 			attr_prop_name = &property->klass->id[attr_len];
 
 			/* XXX TODO: Check that the cell supports the data type in the indexed column.
+			 *
+			 * use: gtk_tree_model_get_column_type (icon_view->priv->model, column)
 			 */
 			if (g_value_get_int (property->value) >= 0 &&
 			    /* We have to set attributes before parenting when loading */
@@ -10214,8 +10205,18 @@
 				 GObject            *container,
 				 GObject            *child)
 {
+	GladeWidget *gmodel = NULL;
+	GladeWidget *grenderer = glade_widget_get_from_gobject (child);
+
+	if (GTK_IS_ICON_VIEW (container) &&
+	    (gmodel = glade_cell_renderer_get_model (grenderer)) != NULL)
+		gtk_icon_view_set_model (GTK_ICON_VIEW (container), NULL);
+
 	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (container), GTK_CELL_RENDERER (child), TRUE);
 
+	if (gmodel)
+		gtk_icon_view_set_model (GTK_ICON_VIEW (container), GTK_TREE_MODEL (gmodel->object));
+
 	glade_gtk_cell_renderer_sync_attributes (child);
 }
 
@@ -10457,38 +10458,10 @@
 	g_list_free (children);
 }
 
-/*--------------------------- GtkTreeViewColumn ---------------------------------*/
-void
-glade_gtk_treeview_column_action_activate (GladeWidgetAdaptor *adaptor,
-					   GObject *object,
-					   const gchar *action_path)
-{
-	if (strcmp (action_path, "launch_editor") == 0)
-	{
-		GladeWidget *w = glade_widget_get_from_gobject (object);
-		
-		while ((w = glade_widget_get_parent (w)))
-		{
-			if (GTK_IS_TREE_VIEW (w->object))
-			{
-				glade_gtk_treeview_launch_editor (w->object);
-				break;
-			}
-		}
-	}
-	else
-		GWA_GET_CLASS (G_TYPE_OBJECT)->action_activate (adaptor,
-								object,
-								action_path);
-}
-
-
-
-/*--------------------------- GtkTreeView ---------------------------------*/
 static gchar *
-glade_gtk_treeview_get_display_name (GladeBaseEditor *editor,
-				     GladeWidget *gchild,
-				     gpointer user_data)
+glade_gtk_cell_layout_get_display_name (GladeBaseEditor *editor,
+					GladeWidget *gchild,
+					gpointer user_data)
 {
 	GObject *child = glade_widget_get_object (gchild);
 	gchar *name;
@@ -10502,9 +10475,9 @@
 }
 
 static void
-glade_gtk_treeview_child_selected (GladeBaseEditor *editor,
-				  GladeWidget *gchild,
-				  gpointer data)
+glade_gtk_cell_layout_child_selected (GladeBaseEditor *editor,
+				      GladeWidget *gchild,
+				      gpointer data)
 {
 	GObject *child = glade_widget_get_object (gchild);
 	
@@ -10525,10 +10498,10 @@
 }
 
 static gboolean
-glade_gtk_treeview_move_child (GladeBaseEditor *editor,
-			       GladeWidget *gparent,
-			       GladeWidget *gchild,
-			       gpointer data)
+glade_gtk_cell_layout_move_child (GladeBaseEditor *editor,
+				  GladeWidget *gparent,
+				  GladeWidget *gchild,
+				  gpointer data)
 {	
 	GObject *parent = glade_widget_get_object (gparent);
 	GObject *child  = glade_widget_get_object (gchild);
@@ -10536,7 +10509,7 @@
 
 	if (GTK_IS_TREE_VIEW (parent) && !GTK_IS_TREE_VIEW_COLUMN (child))
 		return FALSE;
-	if (GTK_IS_TREE_VIEW_COLUMN (parent) && !GTK_IS_CELL_RENDERER (child))
+	if (GTK_IS_CELL_LAYOUT (parent) && !GTK_IS_CELL_RENDERER (child))
 		return FALSE;
 	if (GTK_IS_CELL_RENDERER (parent))
 		return FALSE;
@@ -10551,6 +10524,81 @@
 }
 
 static void
+glade_gtk_cell_layout_launch_editor (GObject  *layout)
+{
+	GladeWidget *widget = glade_widget_get_from_gobject (layout);
+	GladeBaseEditor *editor;
+	GladeEditable *layout_editor;
+	GtkWidget *window;
+
+	layout_editor = glade_widget_adaptor_create_editable (widget->adaptor, GLADE_PAGE_GENERAL);
+	layout_editor = (GladeEditable *)glade_tree_view_editor_new (widget->adaptor, layout_editor);
+
+	/* Editor */
+	editor = glade_base_editor_new (layout, layout_editor,
+					_("Text"), GTK_TYPE_CELL_RENDERER_TEXT,
+					_("Accelerator"), GTK_TYPE_CELL_RENDERER_ACCEL,
+					_("Combo"), GTK_TYPE_CELL_RENDERER_COMBO,
+					_("Spin"),  GTK_TYPE_CELL_RENDERER_SPIN,
+					_("Pixbuf"), GTK_TYPE_CELL_RENDERER_PIXBUF,
+					_("Progress"), GTK_TYPE_CELL_RENDERER_PROGRESS,
+					_("Toggle"), GTK_TYPE_CELL_RENDERER_TOGGLE,
+					NULL);
+
+	g_signal_connect (editor, "get-display-name", G_CALLBACK (glade_gtk_cell_layout_get_display_name), NULL);
+	g_signal_connect (editor, "child-selected", G_CALLBACK (glade_gtk_cell_layout_child_selected), NULL);
+	g_signal_connect (editor, "move-child", G_CALLBACK (glade_gtk_cell_layout_move_child), NULL);
+
+	gtk_widget_show (GTK_WIDGET (editor));
+	
+	window = glade_base_editor_pack_new_window (editor, 
+						    GTK_IS_ICON_VIEW (layout) ? 
+						    _("Icon View Editor") : _("Combo Editor"),
+						    NULL);
+	gtk_widget_show (window);
+}
+
+
+void
+glade_gtk_cell_layout_action_activate (GladeWidgetAdaptor *adaptor,
+				       GObject *object,
+				       const gchar *action_path)
+{
+	if (strcmp (action_path, "launch_editor") == 0)
+	{
+		GladeWidget *w = glade_widget_get_from_gobject (object);
+		
+		do
+		{
+			if (GTK_IS_TREE_VIEW (w->object))
+			{
+				glade_gtk_treeview_launch_editor (w->object);
+				break;
+			} 
+			else if (GTK_IS_ICON_VIEW (w->object))
+			{
+				glade_gtk_cell_layout_launch_editor (w->object);
+				break;
+			}
+			else if (GTK_IS_COMBO_BOX (w->object))
+			{
+				glade_gtk_cell_layout_launch_editor (w->object);
+				break;
+			}
+
+		} while ((w = glade_widget_get_parent (w)));
+
+	}
+	else
+		GWA_GET_CLASS (G_TYPE_OBJECT)->action_activate (adaptor,
+								object,
+								action_path);
+}
+
+
+
+/*--------------------------- GtkTreeView ---------------------------------*/
+static void
 glade_gtk_treeview_launch_editor (GObject  *treeview)
 {
 	GladeWidget *widget = glade_widget_get_from_gobject (treeview);
@@ -10577,9 +10625,9 @@
 					_("Toggle"), GTK_TYPE_CELL_RENDERER_TOGGLE,
 					NULL);
 
-	g_signal_connect (editor, "get-display-name", G_CALLBACK (glade_gtk_treeview_get_display_name), NULL);
-	g_signal_connect (editor, "child-selected", G_CALLBACK (glade_gtk_treeview_child_selected), NULL);
-	g_signal_connect (editor, "move-child", G_CALLBACK (glade_gtk_treeview_move_child), NULL);
+	g_signal_connect (editor, "get-display-name", G_CALLBACK (glade_gtk_cell_layout_get_display_name), NULL);
+	g_signal_connect (editor, "child-selected", G_CALLBACK (glade_gtk_cell_layout_child_selected), NULL);
+	g_signal_connect (editor, "move-child", G_CALLBACK (glade_gtk_cell_layout_move_child), NULL);
 
 	gtk_widget_show (GTK_WIDGET (editor));
 	

Modified: trunk/plugins/gtk+/glade-treeview-editor.c
==============================================================================
--- trunk/plugins/gtk+/glade-treeview-editor.c	(original)
+++ trunk/plugins/gtk+/glade-treeview-editor.c	Tue Nov 25 17:09:00 2008
@@ -83,8 +83,15 @@
 static GladeWidget *
 get_model_widget (GladeWidget *view)
 {
-	GtkTreeView *treeview = GTK_TREE_VIEW (view->object);
-	GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+
+	GtkTreeModel *model = NULL;
+
+	if (GTK_IS_TREE_VIEW (view->object))
+		model = gtk_tree_view_get_model (GTK_TREE_VIEW (view->object));
+	else if (GTK_IS_ICON_VIEW (view->object))	
+		model = gtk_icon_view_get_model (GTK_ICON_VIEW (view->object));
+	else if (GTK_IS_COMBO_BOX (view->object))
+		model = gtk_combo_box_get_model (GTK_COMBO_BOX (view->object));
 
 	if (model)
 		return glade_widget_get_from_gobject (model);
@@ -232,7 +239,7 @@
 	vbox = gtk_vbox_new (FALSE, 0);
 	gtk_box_pack_start (GTK_BOX (view_editor), vbox, FALSE, FALSE, 8);
 
-	str = g_strdup_printf ("<b>%s</b>", _("Choose a Tree Model and define some\n"
+	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);

Modified: trunk/plugins/gtk+/gtk+.xml.in
==============================================================================
--- trunk/plugins/gtk+/gtk+.xml.in	(original)
+++ trunk/plugins/gtk+/gtk+.xml.in	Tue Nov 25 17:09:00 2008
@@ -1668,7 +1668,7 @@
 	    <value id="GTK_ASSISTANT_PAGE_PROGRESS" _name="Progress"/>
 	  </displayable-values>
 	</property>
-        <property save="False" id="position" name="Position">
+        <property save="False" id="position" _name="Position">
 	  <parameter-spec>
 	    <type>GParamInt</type>
 	  </parameter-spec>
@@ -1791,48 +1791,6 @@
       </properties>
     </glade-widget-class>
 
-    <glade-widget-class name="GtkTreeView" generic-name="treeview" _title="Tree View">
-      <post-create-function>empty</post-create-function>
-      <child-set-property-function>glade_gtk_treeview_set_child_property</child-set-property-function>
-      <child-get-property-function>glade_gtk_treeview_get_child_property</child-get-property-function>
-      <get-children-function>glade_gtk_treeview_get_children</get-children-function>
-      <add-child-function>glade_gtk_treeview_add_child</add-child-function>
-      <remove-child-function>glade_gtk_treeview_remove_child</remove-child-function>
-      <action-activate-function>glade_gtk_treeview_action_activate</action-activate-function>
-      <depends-function>glade_gtk_treeview_depends</depends-function>
-
-      <actions>
-        <action id="launch_editor" _name="Edit&#8230;" stock="gtk-edit" important="True"/>
-      </actions>
-
-      <properties>
-        <property id="level-indentation" since="2.12"/>
-        <property id="show-expanders" since="2.12"/>
-        <property id="enable-grid-lines" ignore="True">
-  	  <displayable-values>
-	    <value id="GTK_TREE_VIEW_GRID_LINES_NONE" _name="None"/>
-	    <value id="GTK_TREE_VIEW_GRID_LINES_HORIZONTAL" _name="Horizontal"/>
-	    <value id="GTK_TREE_VIEW_GRID_LINES_VERTICAL" _name="Vertical"/>
-	    <value id="GTK_TREE_VIEW_GRID_LINES_BOTH" _name="Horizontal and Vertical"/>
-	  </displayable-values>
-	</property>
-        <property id="hadjustment" libglade-unsupported="True"/>
-	<property id="vadjustment" libglade-unsupported="True"/>
-        <property id="model" create-type="GtkListStore" query="True" libglade-unsupported="True"/>
-      </properties>
-      
-      <packing-properties>
-        <property save="False" id="position" name="Position" visible="False">
-	  <parameter-spec>
-	    <type>GParamInt</type>
-	  </parameter-spec>
-	  <_tooltip>The column position in the Tree View</_tooltip>
-	</property>
-      </packing-properties>
-    </glade-widget-class>
-
-    <glade-widget-class name="GtkIconView" generic-name="iconview" _title="Icon View"/>
-
     <glade-widget-class name="GtkListStore" generic-name="liststore" _title="List Store" 
 			libglade-unsupported="True" toplevel="True">
       <set-property-function>glade_gtk_store_set_property</set-property-function>
@@ -1893,6 +1851,45 @@
 			libglade-unsupported="True" toplevel="True"/>
 
 
+    <glade-widget-class name="GtkTreeView" generic-name="treeview" _title="Tree View">
+      <post-create-function>empty</post-create-function>
+      <child-set-property-function>glade_gtk_treeview_set_child_property</child-set-property-function>
+      <child-get-property-function>glade_gtk_treeview_get_child_property</child-get-property-function>
+      <get-children-function>glade_gtk_treeview_get_children</get-children-function>
+      <add-child-function>glade_gtk_treeview_add_child</add-child-function>
+      <remove-child-function>glade_gtk_treeview_remove_child</remove-child-function>
+      <action-activate-function>glade_gtk_treeview_action_activate</action-activate-function>
+      <depends-function>glade_gtk_treeview_depends</depends-function>
+
+      <actions>
+        <action id="launch_editor" _name="Edit&#8230;" stock="gtk-edit" important="True"/>
+      </actions>
+
+      <properties>
+        <property id="level-indentation" since="2.12"/>
+        <property id="show-expanders" since="2.12"/>
+        <property id="enable-grid-lines" ignore="True">
+  	  <displayable-values>
+	    <value id="GTK_TREE_VIEW_GRID_LINES_NONE" _name="None"/>
+	    <value id="GTK_TREE_VIEW_GRID_LINES_HORIZONTAL" _name="Horizontal"/>
+	    <value id="GTK_TREE_VIEW_GRID_LINES_VERTICAL" _name="Vertical"/>
+	    <value id="GTK_TREE_VIEW_GRID_LINES_BOTH" _name="Horizontal and Vertical"/>
+	  </displayable-values>
+	</property>
+        <property id="hadjustment" libglade-unsupported="True"/>
+	<property id="vadjustment" libglade-unsupported="True"/>
+        <property id="model" create-type="GtkListStore" query="True" libglade-unsupported="True"/>
+      </properties>
+      
+      <packing-properties>
+        <property save="False" id="position" visible="False">
+	  <parameter-spec>
+	    <type>GParamInt</type>
+	  </parameter-spec>
+	</property>
+      </packing-properties>
+    </glade-widget-class>
+
     <glade-widget-class name="GtkTreeViewColumn" generic-name="treeviewcolumn" _title="Tree View Column" 
 			libglade-unsupported="True">
       <add-child-function>glade_gtk_cell_layout_add_child</add-child-function>
@@ -1913,15 +1910,46 @@
       </properties>
 
       <packing-properties>
-        <property save="False" id="position" name="Position" visible="False">
+        <property save="False" id="position" visible="False">
 	  <parameter-spec>
 	    <type>GParamInt</type>
 	  </parameter-spec>
-	  <_tooltip>The Cell Renderer position in the Tree View Column</_tooltip>
 	</property>
       </packing-properties>
     </glade-widget-class>
 
+    <glade-widget-class name="GtkIconView" generic-name="iconview" _title="Icon View">
+      <post-create-function>empty</post-create-function>
+      <add-child-function>glade_gtk_cell_layout_add_child</add-child-function>
+      <remove-child-function>glade_gtk_cell_layout_remove_child</remove-child-function> 
+      <get-children-function>glade_gtk_cell_layout_get_children</get-children-function>
+      <read-child-function>glade_gtk_cell_layout_read_child</read-child-function>
+      <write-child-function>glade_gtk_cell_layout_write_child</write-child-function>
+      <action-activate-function>glade_gtk_cell_layout_action_activate</action-activate-function>
+      <child-set-property-function>glade_gtk_cell_layout_set_child_property</child-set-property-function>
+      <child-get-property-function>glade_gtk_cell_layout_get_child_property</child-get-property-function>
+      
+      <actions>
+        <action id="launch_editor" _name="Edit&#8230;" stock="gtk-edit" important="True"/>
+      </actions>
+
+      <properties>
+        <property id="text-column" disabled="True"/>
+        <property id="markup-column" disabled="True"/>
+        <property id="pixbuf-column" disabled="True"/>
+        <property id="reorderable" ignore="True"/>
+      </properties>
+
+      <packing-properties>
+        <property save="False" id="position" visible="False">
+	  <parameter-spec>
+	    <type>GParamInt</type>
+	  </parameter-spec>
+	</property>
+      </packing-properties>
+    </glade-widget-class>
+
+
     <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>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]