made non-abstract.

2006-11-03  Sven Neumann  <sven@gimp.org>

	* app/widgets/gimpimageparasiteview.[ch]: made non-abstract.

	* app/dialogs/image-properties-dialog.c: show a "Comment" tab if
	the image contains a "gimp-comment" parasite.
This commit is contained in:
Sven Neumann 2006-11-03 14:22:46 +00:00 committed by Sven Neumann
parent 4f4dea5645
commit 568bbb9558
5 changed files with 110 additions and 17 deletions

View file

@ -1,3 +1,10 @@
2006-11-03 Sven Neumann <sven@gimp.org>
* app/widgets/gimpimageparasiteview.[ch]: made non-abstract.
* app/dialogs/image-properties-dialog.c: show a "Comment" tab if
the image contains a "gimp-comment" parasite.
2006-11-03 Sven Neumann <sven@gimp.org>
* app/widgets/Makefile.am

View file

@ -23,6 +23,7 @@
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "dialogs-types.h"
@ -40,6 +41,10 @@
#include "gimp-intl.h"
static void image_comment_update (GtkWidget *page,
GtkWidget *label);
/* public functions */
GtkWidget *
@ -50,6 +55,7 @@ image_properties_dialog_new (GimpImage *image,
GtkWidget *dialog;
GtkWidget *notebook;
GtkWidget *view;
GtkWidget *label;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
@ -91,5 +97,60 @@ image_properties_dialog_new (GimpImage *image,
view, gtk_label_new (_("Color Profile")));
gtk_widget_show (view);
view = gimp_image_parasite_view_new (image, "gimp-comment");
gtk_container_set_border_width (GTK_CONTAINER (view), 12);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
view, gtk_label_new (_("Comment")));
label = g_object_new (GTK_TYPE_LABEL,
"wrap", TRUE,
"justify", GTK_JUSTIFY_LEFT,
"xalign", 0.0,
"yalign", 0.0,
"selectable", TRUE,
NULL);
gtk_container_add (GTK_CONTAINER (view), label);
gtk_widget_show (label);
g_signal_connect (view, "update",
G_CALLBACK (image_comment_update),
label);
image_comment_update (view, label);
return dialog;
}
static void
image_comment_update (GtkWidget *page,
GtkWidget *label)
{
GimpImageParasiteView *view = GIMP_IMAGE_PARASITE_VIEW (page);
const GimpParasite *parasite;
parasite = gimp_image_parasite_view_get_parasite (view);
if (parasite)
{
gchar *text = g_strndup (gimp_parasite_data (parasite),
gimp_parasite_data_size (parasite));
if (g_utf8_validate (text, -1, NULL))
{
gtk_label_set_text (GTK_LABEL (label), text);
}
else
{
gtk_label_set_text (GTK_LABEL (label), _("(invalid UTF-8 string)"));
}
g_free (text);
gtk_widget_show (page);
}
else
{
gtk_widget_hide (page);
gtk_label_set_text (GTK_LABEL (label), NULL);
}
}

View file

@ -40,8 +40,8 @@
enum
{
PROP_0,
PROP_PARASITE,
PROP_IMAGE
PROP_IMAGE,
PROP_PARASITE
};
enum
@ -97,16 +97,16 @@ gimp_image_parasite_view_class_init (GimpImageParasiteViewClass *klass)
klass->update = NULL;
g_object_class_install_property (object_class, PROP_PARASITE,
g_param_spec_string ("parasite", NULL, NULL,
NULL,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_IMAGE,
g_param_spec_object ("image", NULL, NULL,
GIMP_TYPE_IMAGE,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_PARASITE,
g_param_spec_string ("parasite", NULL, NULL,
NULL,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
}
static void
@ -125,12 +125,12 @@ gimp_image_parasite_view_set_property (GObject *object,
switch (property_id)
{
case PROP_PARASITE:
view->parasite = g_value_dup_string (value);
break;
case PROP_IMAGE:
view->image = GIMP_IMAGE (g_value_get_object (value));
break;
case PROP_PARASITE:
view->parasite = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@ -147,12 +147,12 @@ gimp_image_parasite_view_get_property (GObject *object,
switch (property_id)
{
case PROP_PARASITE:
g_value_set_string (value, view->parasite);
break;
case PROP_IMAGE:
g_value_set_object (value, view->image);
break;
case PROP_PARASITE:
g_value_set_string (value, view->parasite);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@ -203,6 +203,20 @@ gimp_image_parasite_view_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GtkWidget *
gimp_image_parasite_view_new (GimpImage *image,
const gchar *parasite)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
g_return_val_if_fail (parasite != NULL, NULL);
return g_object_new (GIMP_TYPE_IMAGE_PARASITE_VIEW,
"image", image,
"parasite", parasite,
NULL);
}
GimpImage *
gimp_image_parasite_view_get_image (GimpImageParasiteView *view)
{
@ -211,6 +225,14 @@ gimp_image_parasite_view_get_image (GimpImageParasiteView *view)
return view->image;
}
const GimpParasite *
gimp_image_parasite_view_get_parasite (GimpImageParasiteView *view)
{
g_return_val_if_fail (GIMP_IS_IMAGE_PARASITE_VIEW (view), NULL);
return gimp_image_parasite_find (view->image, view->parasite);
}
/* private functions */

View file

@ -40,8 +40,8 @@ struct _GimpImageParasiteView
{
GtkVBox parent_instance;
gchar *parasite;
GimpImage *image;
gchar *parasite;
};
struct _GimpImageParasiteViewClass
@ -53,9 +53,12 @@ struct _GimpImageParasiteViewClass
};
GType gimp_image_parasite_view_get_type (void) G_GNUC_CONST;
GType gimp_image_parasite_view_get_type (void) G_GNUC_CONST;
GimpImage * gimp_image_parasite_view_get_image (GimpImageParasiteView *view);
GtkWidget * gimp_image_parasite_view_new (GimpImage *image,
const gchar *parasite);
GimpImage * gimp_image_parasite_view_get_image (GimpImageParasiteView *view);
const GimpParasite * gimp_image_parasite_view_get_parasite (GimpImageParasiteView *view);
#endif /* __GIMP_IMAGE_PARASITE_VIEW_H__ */

View file

@ -120,8 +120,8 @@ gimp_image_profile_view_new (GimpImage *image)
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
return g_object_new (GIMP_TYPE_IMAGE_PROFILE_VIEW,
"parasite", "icc-profile",
"image", image,
"parasite", "icc-profile",
NULL);
}