glade3 r1791 - in trunk: . gladeui



Author: tvb
Date: Thu Apr 10 22:32:44 2008
New Revision: 1791
URL: http://svn.gnome.org/viewvc/glade3?rev=1791&view=rev

Log:

	* gladeui/glade-palette-item.c, gladeui/glade-palette.c,
	gladeui/glade-palette-item.h, gladeui/glade-palette.h:
	Now load insensitive when widgets are unsupported, and use
	a warning icon when they are deprecated, use tooltips from
	glade_project_verify_adaptor ().

	* gladeui/glade-app.[ch]: Added glade_app_check_get_project ()

	* gladeui/glade-project.c, gladeui/glade-project.h: fix some mistakes



Modified:
   trunk/ChangeLog
   trunk/gladeui/glade-app.c
   trunk/gladeui/glade-app.h
   trunk/gladeui/glade-palette-item.c
   trunk/gladeui/glade-palette-item.h
   trunk/gladeui/glade-palette.c
   trunk/gladeui/glade-palette.h
   trunk/gladeui/glade-project.c
   trunk/gladeui/glade-project.h

Modified: trunk/gladeui/glade-app.c
==============================================================================
--- trunk/gladeui/glade-app.c	(original)
+++ trunk/gladeui/glade-app.c	Thu Apr 10 22:32:44 2008
@@ -792,6 +792,14 @@
 	return app->priv->active_project;
 }
 
+GladeProject *
+glade_app_check_get_project (void)
+{
+	if (singleton_app)
+		return glade_app_get_project ();
+	return NULL;
+}
+
 GList *
 glade_app_get_projects (void)
 {
@@ -1061,6 +1069,9 @@
 	/* (XXX really ?) trigger the selection changed signal to update the editor */
 	glade_project_selection_changed (project);
 	
+	/* refresh palette for active project */
+	glade_palette_refresh (glade_app_get_palette ());
+
 	/* Update UI */
 	glade_app_update_ui ();
 

Modified: trunk/gladeui/glade-app.h
==============================================================================
--- trunk/gladeui/glade-app.h	(original)
+++ trunk/gladeui/glade-app.h	Thu Apr 10 22:32:44 2008
@@ -111,6 +111,8 @@
 GtkWidget*         glade_app_get_clipboard_view (void);
 
 GladeProject*      glade_app_get_project (void);
+
+GladeProject*      glade_app_check_get_project (void);
  
 void               glade_app_set_project (GladeProject *project);
 

Modified: trunk/gladeui/glade-palette-item.c
==============================================================================
--- trunk/gladeui/glade-palette-item.c	(original)
+++ trunk/gladeui/glade-palette-item.c	Thu Apr 10 22:32:44 2008
@@ -33,6 +33,7 @@
 #include "glade.h"
 #include "glade-palette-item.h"
 
+
 #define GLADE_PALETTE_ITEM_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object),\
 					       GLADE_TYPE_PALETTE_ITEM,              \
 					       GladePaletteItemPrivate))
@@ -131,6 +132,87 @@
 	}
 }
 
+#if 0
+/* XXX Code doesnt work well, think they are not transperent ? */
+static GdkPixbuf *
+render_deprecated_pixbuf (GladeWidgetAdaptor *adaptor,
+			  gint                size)
+{
+
+	GdkPixbuf *widget_icon, *deprecated_icon;
+
+	if ((widget_icon =
+	     gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+				       adaptor->icon_name, size, 
+				       GTK_ICON_LOOKUP_USE_BUILTIN, NULL)) != NULL)
+	{
+		if ((deprecated_icon =
+		     gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+					       "media-record", size, 
+					       GTK_ICON_LOOKUP_USE_BUILTIN, NULL)) != NULL)
+		{
+			g_print ("rendering deprecated\n");
+			gdk_pixbuf_composite (deprecated_icon, widget_icon,
+					      0, 0, 
+					      gdk_pixbuf_get_width (widget_icon),
+					      gdk_pixbuf_get_height (widget_icon),
+					      0.0, 0.0, 1.0, 1.0, GDK_INTERP_HYPER, 0);
+
+			g_object_unref (G_OBJECT (deprecated_icon));
+		}
+	}
+	return widget_icon;
+}
+#endif
+
+void
+glade_palette_item_refresh (GladePaletteItem *item)
+{
+	GladePaletteItemPrivate *priv;
+	GladeProject            *project;
+	GladeSupportMask         support;
+	gint                     size;
+	gchar                   *warning, *text;
+	
+	priv = GLADE_PALETTE_ITEM_GET_PRIVATE (item);
+	
+	size = priv->use_small_icon ? GTK_ICON_SIZE_MENU : GTK_ICON_SIZE_BUTTON;
+
+	if ((project = glade_app_check_get_project ()) &&
+	    (warning = 
+	     glade_project_verify_widget_adaptor (project, priv->adaptor, &support)) != NULL)
+	{
+
+		/* set sensitivity */
+		gtk_widget_set_sensitive (GTK_WIDGET (item), 
+					  !(support & (GLADE_SUPPORT_BUILDER_UNSUPPORTED | 
+						       GLADE_SUPPORT_MISMATCH)));
+
+		if (support & GLADE_SUPPORT_DEPRECATED)
+			/* XXX Todo, draw a cross overlaying the widget icon */
+			gtk_image_set_from_stock (GTK_IMAGE (priv->icon), 
+						  GTK_STOCK_DIALOG_WARNING, 
+						  size);
+		else
+			gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), 
+						      priv->adaptor->icon_name, 
+						      size);
+		/* prepend widget title */
+		text = g_strdup_printf ("%s: %s", priv->adaptor->title, warning);
+		gtk_widget_set_tooltip_text (priv->icon, text);
+		g_free (text);
+		g_free (warning);
+	} 
+	else 
+	{
+		gtk_widget_set_tooltip_text (GTK_WIDGET (item), priv->adaptor->title);
+		gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE);
+		gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), 
+					      priv->adaptor->icon_name, 
+					      size);
+	}
+}
+
 void
 glade_palette_item_set_use_small_icon (GladePaletteItem *item, gboolean use_small_icon)
 {
@@ -143,11 +225,8 @@
 	{
 		priv->use_small_icon = use_small_icon;		
 
-		if (use_small_icon != FALSE)
-			gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), priv->adaptor->icon_name, GTK_ICON_SIZE_MENU);
-		else
-			gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), priv->adaptor->icon_name, GTK_ICON_SIZE_BUTTON);
-		
+		glade_palette_item_refresh (item);
+
 		g_object_notify (G_OBJECT (item), "use-small-icon");
 	}
 }
@@ -163,7 +242,7 @@
 	
 	gtk_label_set_text (GTK_LABEL (priv->label), adaptor->title);
 
-	gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), adaptor->icon_name, GTK_ICON_SIZE_BUTTON);
+	glade_palette_item_refresh (item);
 }
 
 static void 

Modified: trunk/gladeui/glade-palette-item.h
==============================================================================
--- trunk/gladeui/glade-palette-item.h	(original)
+++ trunk/gladeui/glade-palette-item.h	Thu Apr 10 22:32:44 2008
@@ -78,6 +78,7 @@
 void		      glade_palette_item_set_use_small_icon (GladePaletteItem *item,
 							     gboolean          use_small_icon);
 
+void                  glade_palette_item_refresh            (GladePaletteItem *item);
 
 G_END_DECLS
 

Modified: trunk/gladeui/glade-palette.c
==============================================================================
--- trunk/gladeui/glade-palette.c	(original)
+++ trunk/gladeui/glade-palette.c	Thu Apr 10 22:32:44 2008
@@ -455,8 +455,6 @@
 
 	glade_palette_item_set_appearance (GLADE_PALETTE_ITEM (item), priv->item_appearance);
 
-        gtk_widget_set_tooltip_text (item, adaptor->title);
-
 	g_signal_connect (G_OBJECT (item), "toggled",
 			  G_CALLBACK (glade_palette_on_button_toggled), palette);
 
@@ -531,12 +529,9 @@
 	GtkWidget *viewport;
 	GSList *sections;
 	GList *items, *i;
-        gboolean show_tooltips;
 
 	priv = GLADE_PALETTE_GET_PRIVATE (palette);
 
-        show_tooltips = priv->item_appearance == GLADE_ITEM_ICON_ONLY;
-
 	for (sections = priv->sections; sections; sections = sections->next)
 	{
 		items = gtk_container_get_children (GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (sections->data))));
@@ -545,8 +540,6 @@
 		{
 			glade_palette_item_set_appearance (GLADE_PALETTE_ITEM (i->data), priv->item_appearance);
 			glade_palette_item_set_use_small_icon (GLADE_PALETTE_ITEM (i->data), priv->use_small_item_icons);
-
-                        g_object_set (i->data, "has-tooltip", show_tooltips, NULL);
 		}
 		g_list_free (items);
 	}
@@ -765,3 +758,32 @@
 	return GTK_WIDGET_VISIBLE (palette->priv->selector_hbox);
 }
 
+/**
+ * glade_palette_refresh:
+ * @palette: a #GladePalette
+ *
+ * Refreshes project dependant states of palette buttons
+ */
+void
+glade_palette_refresh (GladePalette *palette)
+{
+	GladePalettePrivate *priv;
+	GSList *sections;
+	GList *items, *i;
+
+	g_return_if_fail (GLADE_IS_PALETTE (palette));
+
+	priv = GLADE_PALETTE_GET_PRIVATE (palette);
+
+	for (sections = priv->sections; sections; sections = sections->next)
+	{
+		items = gtk_container_get_children 
+			(GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (sections->data))));
+
+		for (i = items; i; i = i->next)
+			glade_palette_item_refresh (GLADE_PALETTE_ITEM (i->data));
+
+		g_list_free (items);
+	}
+}
+

Modified: trunk/gladeui/glade-palette.h
==============================================================================
--- trunk/gladeui/glade-palette.h	(original)
+++ trunk/gladeui/glade-palette.h	Thu Apr 10 22:32:44 2008
@@ -92,6 +92,8 @@
 							     
 gboolean             glade_palette_get_show_selector_button (GladePalette *palette);
 
+void                 glade_palette_refresh                  (GladePalette *palette);
+
 G_END_DECLS
 
 #endif /* __GLADE_PALETTE_H__ */

Modified: trunk/gladeui/glade-project.c
==============================================================================
--- trunk/gladeui/glade-project.c	(original)
+++ trunk/gladeui/glade-project.c	Thu Apr 10 22:32:44 2008
@@ -499,8 +499,10 @@
 			      const gchar        *path_name,
 			      GString            *string,
 			      gboolean            saving,
-			      gboolean            forwidget)
+			      gboolean            forwidget,
+			      GladeSupportMask   *mask)
 {
+	GladeSupportMask    support_mask = GLADE_SUPPORT_OK;
 	GladeWidgetAdaptor *adaptor_iter;
 	gint                target_major, target_minor;
 	gchar              *catalog = NULL;
@@ -536,6 +538,8 @@
 					 path_name, adaptor_iter->title, catalog,
 					 GWA_VERSION_SINCE_MAJOR (adaptor_iter),
 					 GWA_VERSION_SINCE_MINOR (adaptor_iter));
+
+			support_mask |= GLADE_SUPPORT_MISMATCH;
 		}
 
 		if (project->priv->format == GLADE_PROJECT_FORMAT_GTKBUILDER &&
@@ -556,6 +560,8 @@
 					   "is not supported by GtkBuilder\n"),
 					 path_name, adaptor_iter->title, catalog,
 					 target_major, target_minor);
+
+			support_mask |= GLADE_SUPPORT_BUILDER_UNSUPPORTED;
 		}
 
 		if (!saving && GWA_DEPRECATED (adaptor_iter))
@@ -574,29 +580,48 @@
 					   "is deprecated\n"),
 					 path_name, adaptor_iter->title, catalog,
 					 target_major, target_minor);
+
+			support_mask |= GLADE_SUPPORT_DEPRECATED;
 		}
 		g_free (catalog);
 	}
+	if (mask)
+		*mask = support_mask;
 }
 
-static void
-glade_project_verify_widget_for_ui (GladeWidget *widget)
+/**
+ * glade_project_verify_widget_adaptor:
+ * @project: A #GladeProject
+ * @adaptor: the #GladeWidgetAdaptor to verify
+ * @mask: a return location for a #GladeSupportMask
+ * 
+ * Checks the supported state of this widget adaptor
+ * and generates a string to show in the UI describing why.
+ *
+ * Returns: A newly allocated string 
+ */
+gchar *
+glade_project_verify_widget_adaptor (GladeProject       *project,
+				     GladeWidgetAdaptor *adaptor,
+				     GladeSupportMask   *mask)
 {
 	GString *string = g_string_new (NULL);
+	gchar   *ret = NULL;
 
-	glade_project_verify_adaptor (widget->project,
-				      widget->adaptor,
-				      NULL,
-				      string,
-				      FALSE,
-				      TRUE);
+	glade_project_verify_adaptor (project, adaptor, NULL,
+				      string, FALSE, TRUE, mask);
 
+	/* there was a '\0' byte... */
 	if (string->len > 0)
-		glade_widget_set_support_warning (widget, string->str);
+	{
+		ret = string->str;
+		g_string_free (string, FALSE);
+	}
 	else
-		glade_widget_set_support_warning (widget, NULL);
+		g_string_free (string, TRUE);
 
-	g_string_free (string, TRUE);
+
+	return ret;
 }
 
 static void
@@ -604,16 +629,25 @@
 {
 	GList *list;
 	GladeWidget *widget;
+	gchar *warning;
 
 	/* Sync displayable info here */
 	for (list = project->priv->objects; list; list = list->next)
 	{
 		widget = glade_widget_get_from_gobject (list->data);
 
-		glade_project_verify_widget_for_ui (widget);
-		glade_project_verify_properties (widget);
+		warning = glade_project_verify_widget_adaptor (project, widget->adaptor, NULL);
+		glade_widget_set_support_warning (widget, warning);
+
+		if (warning)
+			g_free (warning);
 
+		glade_project_verify_properties (widget);
 	}
+
+	/* refresh palette if this is the active project */
+	if (project == glade_app_get_project ())
+		glade_palette_refresh (glade_app_get_palette ());
 }
 
 static void
@@ -1397,7 +1431,7 @@
 		path_name = glade_widget_generate_path_name (widget);
 
 		glade_project_verify_adaptor (project, widget->adaptor, 
-					      path_name, string, saving, FALSE);
+					      path_name, string, saving, FALSE, NULL);
 		glade_project_verify_properties_internal (widget, path_name, string, FALSE);
 		glade_project_verify_signals (widget, path_name, string);
 

Modified: trunk/gladeui/glade-project.h
==============================================================================
--- trunk/gladeui/glade-project.h	(original)
+++ trunk/gladeui/glade-project.h	Thu Apr 10 22:32:44 2008
@@ -25,6 +25,14 @@
 	GLADE_PROJECT_FORMAT_GTKBUILDER
 } GladeProjectFormat;
 
+typedef enum
+{
+	GLADE_SUPPORT_OK                   = 0x00,
+	GLADE_SUPPORT_DEPRECATED           = 0x01,
+	GLADE_SUPPORT_MISMATCH             = 0x02,
+	GLADE_SUPPORT_BUILDER_UNSUPPORTED  = 0x04
+} GladeSupportMask;
+
 struct _GladeProject
 {
 	GObject parent_instance;
@@ -174,6 +182,9 @@
 
 void           glade_project_verify_properties    (GladeWidget  *widget);
 
+gchar         *glade_project_verify_widget_adaptor (GladeProject       *project,
+						    GladeWidgetAdaptor *adaptor,
+						    GladeSupportMask   *mask);
 
 G_END_DECLS
 



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