app/widgets/Makefile.am app/widgets/widgets-types.h new abstract base

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

	* app/widgets/Makefile.am
	* app/widgets/widgets-types.h
	* app/widgets/gimpimageparasiteview.[ch]: new abstract base class.

	* app/widgets/gimpimageprofileview.[ch]: derive from
	GimpImageParasiteView.
This commit is contained in:
Sven Neumann 2006-11-03 13:52:17 +00:00 committed by Sven Neumann
parent 3788521a04
commit 4f4dea5645
7 changed files with 350 additions and 141 deletions

View File

@ -1,3 +1,12 @@
2006-11-03 Sven Neumann <sven@gimp.org>
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpimageparasiteview.[ch]: new abstract base class.
* app/widgets/gimpimageprofileview.[ch]: derive from
GimpImageParasiteView.
2006-11-03 Sven Neumann <sven@gimp.org>
* plug-ins/common/screenshot.c: pass the number of bytes to

View File

@ -169,6 +169,8 @@ libappwidgets_a_sources = \
gimpimagedock.h \
gimpimageeditor.c \
gimpimageeditor.h \
gimpimageparasiteview.c \
gimpimageparasiteview.h \
gimpimageprofileview.c \
gimpimageprofileview.h \
gimpimagepropview.c \

View File

@ -0,0 +1,229 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* GimpImageParasiteView
* Copyright (C) 2006 Sven Neumann <sven@gimp.org>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "config.h"
#include <string.h>
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "widgets-types.h"
#include "core/gimp.h"
#include "core/gimpimage.h"
#include "core/gimpmarshal.h"
#include "gimpimageparasiteview.h"
enum
{
PROP_0,
PROP_PARASITE,
PROP_IMAGE
};
enum
{
UPDATE,
LAST_SIGNAL
};
static GObject * gimp_image_parasite_view_constructor (GType type,
guint n_params,
GObjectConstructParam *params);
static void gimp_image_parasite_view_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_image_parasite_view_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_image_parasite_view_finalize (GObject *object);
static void gimp_image_parasite_view_parasite_changed (GimpImageParasiteView *view,
const gchar *name);
static void gimp_image_parasite_view_update (GimpImageParasiteView *view);
G_DEFINE_TYPE (GimpImageParasiteView, gimp_image_parasite_view, GTK_TYPE_VBOX)
#define parent_class gimp_image_parasite_view_parent_class
static guint view_signals[LAST_SIGNAL] = { 0 };
static void
gimp_image_parasite_view_class_init (GimpImageParasiteViewClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
view_signals[UPDATE] =
g_signal_new ("update",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpImageParasiteViewClass, update),
NULL, NULL,
gimp_marshal_VOID__VOID,
G_TYPE_NONE, 0);
object_class->constructor = gimp_image_parasite_view_constructor;
object_class->set_property = gimp_image_parasite_view_set_property;
object_class->get_property = gimp_image_parasite_view_get_property;
object_class->finalize = gimp_image_parasite_view_finalize;
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));
}
static void
gimp_image_parasite_view_init (GimpImageParasiteView *view)
{
view->parasite = NULL;
}
static void
gimp_image_parasite_view_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
GimpImageParasiteView *view = GIMP_IMAGE_PARASITE_VIEW (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;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gimp_image_parasite_view_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GimpImageParasiteView *view = GIMP_IMAGE_PARASITE_VIEW (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;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static GObject *
gimp_image_parasite_view_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GimpImageParasiteView *view;
GObject *object;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
view = GIMP_IMAGE_PARASITE_VIEW (object);
g_assert (view->parasite != NULL);
g_assert (view->image != NULL);
g_signal_connect_object (view->image, "parasite-attached",
G_CALLBACK (gimp_image_parasite_view_parasite_changed),
G_OBJECT (view),
G_CONNECT_SWAPPED);
g_signal_connect_object (view->image, "parasite-detached",
G_CALLBACK (gimp_image_parasite_view_parasite_changed),
G_OBJECT (view),
G_CONNECT_SWAPPED);
gimp_image_parasite_view_update (view);
return object;
}
static void
gimp_image_parasite_view_finalize (GObject *object)
{
GimpImageParasiteView *view = GIMP_IMAGE_PARASITE_VIEW (object);
if (view->parasite)
{
g_free (view->parasite);
view->parasite = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GimpImage *
gimp_image_parasite_view_get_image (GimpImageParasiteView *view)
{
g_return_val_if_fail (GIMP_IS_IMAGE_PARASITE_VIEW (view), NULL);
return view->image;
}
/* private functions */
static void
gimp_image_parasite_view_parasite_changed (GimpImageParasiteView *view,
const gchar *name)
{
if (name && view->parasite && strcmp (name, view->parasite) == 0)
gimp_image_parasite_view_update (view);
}
static void
gimp_image_parasite_view_update (GimpImageParasiteView *view)
{
g_signal_emit (view, view_signals[UPDATE], 0);
}

View File

@ -0,0 +1,61 @@
/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* GimpImageParasiteView
* Copyright (C) 2006 Sven Neumann <sven@gimp.org>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __GIMP_IMAGE_PARASITE_VIEW_H__
#define __GIMP_IMAGE_PARASITE_VIEW_H__
#include <gtk/gtkvbox.h>
#define GIMP_TYPE_IMAGE_PARASITE_VIEW (gimp_image_parasite_view_get_type ())
#define GIMP_IMAGE_PARASITE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_IMAGE_PARASITE_VIEW, GimpImageParasiteView))
#define GIMP_IMAGE_PARASITE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_IMAGE_PARASITE_VIEW, GimpImageParasiteViewClass))
#define GIMP_IS_IMAGE_PARASITE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_IMAGE_PARASITE_VIEW))
#define GIMP_IS_IMAGE_PARASITE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_IMAGE_PARASITE_VIEW))
#define GIMP_IMAGE_PARASITE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_IMAGE_PARASITE_VIEW, GimpImageParasiteViewClass))
typedef struct _GimpImageParasiteViewClass GimpImageParasiteViewClass;
struct _GimpImageParasiteView
{
GtkVBox parent_instance;
gchar *parasite;
GimpImage *image;
};
struct _GimpImageParasiteViewClass
{
GtkVBoxClass parent_class;
/* signals */
void (* update) (GimpImageParasiteView *view);
};
GType gimp_image_parasite_view_get_type (void) G_GNUC_CONST;
GimpImage * gimp_image_parasite_view_get_image (GimpImageParasiteView *view);
#endif /* __GIMP_IMAGE_PARASITE_VIEW_H__ */

View File

@ -40,36 +40,17 @@
#include "gimp-intl.h"
enum
{
PROP_0,
PROP_IMAGE
};
static void gimp_image_profile_view_dispose (GObject *object);
static GtkWidget * gimp_image_profile_view_add_label (GtkTable *table,
gint row,
const gchar *text);
static void gimp_image_profile_view_update (GimpImageParasiteView *view);
static GObject * gimp_image_profile_view_constructor (GType type,
guint n_params,
GObjectConstructParam *params);
static void gimp_image_profile_view_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_image_profile_view_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_image_profile_view_dispose (GObject *object);
static GtkWidget * gimp_image_profile_view_add_label (GtkTable *table,
gint row,
const gchar *text);
static void gimp_image_profile_view_parasite_changed (GimpImageProfileView *view,
const gchar *name);
static void gimp_image_profile_view_update (GimpImageProfileView *view);
G_DEFINE_TYPE (GimpImageProfileView, gimp_image_profile_view, GTK_TYPE_VBOX)
G_DEFINE_TYPE (GimpImageProfileView,
gimp_image_profile_view, GIMP_TYPE_IMAGE_PARASITE_VIEW)
#define parent_class gimp_image_profile_view_parent_class
@ -77,18 +58,14 @@ G_DEFINE_TYPE (GimpImageProfileView, gimp_image_profile_view, GTK_TYPE_VBOX)
static void
gimp_image_profile_view_class_init (GimpImageProfileViewClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpImageParasiteViewClass *view_class;
object_class->constructor = gimp_image_profile_view_constructor;
object_class->set_property = gimp_image_profile_view_set_property;
object_class->get_property = gimp_image_profile_view_get_property;
object_class->dispose = gimp_image_profile_view_dispose;
view_class = GIMP_IMAGE_PARASITE_VIEW_CLASS (klass);
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));
object_class->dispose = gimp_image_profile_view_dispose;
view_class->update = gimp_image_profile_view_update;
}
static void
@ -120,72 +97,6 @@ gimp_image_profile_view_init (GimpImageProfileView *view)
view->idle_id = 0;
}
static void
gimp_image_profile_view_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
GimpImageProfileView *view = GIMP_IMAGE_PROFILE_VIEW (object);
switch (property_id)
{
case PROP_IMAGE:
view->image = GIMP_IMAGE (g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gimp_image_profile_view_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GimpImageProfileView *view = GIMP_IMAGE_PROFILE_VIEW (object);
switch (property_id)
{
case PROP_IMAGE:
g_value_set_object (value, view->image);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static GObject *
gimp_image_profile_view_constructor (GType type,
guint n_params,
GObjectConstructParam *params)
{
GimpImageProfileView *view;
GObject *object;
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
view = GIMP_IMAGE_PROFILE_VIEW (object);
g_assert (view->image != NULL);
g_signal_connect_object (view->image, "parasite-attached",
G_CALLBACK (gimp_image_profile_view_parasite_changed),
G_OBJECT (view),
G_CONNECT_SWAPPED);
g_signal_connect_object (view->image, "parasite-detached",
G_CALLBACK (gimp_image_profile_view_parasite_changed),
G_OBJECT (view),
G_CONNECT_SWAPPED);
gimp_image_profile_view_update (view);
return object;
}
static void
gimp_image_profile_view_dispose (GObject *object)
{
@ -209,7 +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,
"image", image,
"parasite", "icc-profile",
"image", image,
NULL);
}
@ -248,24 +160,19 @@ gimp_image_profile_view_add_label (GtkTable *table,
return label;
}
static void
gimp_image_profile_view_parasite_changed (GimpImageProfileView *view,
const gchar *name)
{
if (name && strcmp (name, "icc-profile") == 0)
gimp_image_profile_view_update (view);
}
static gboolean
gimp_image_profile_view_query (GimpImageProfileView *view)
{
gchar *name = NULL;
gchar *desc = NULL;
gchar *info = NULL;
GError *error = NULL;
GimpImage *image;
gchar *name = NULL;
gchar *desc = NULL;
gchar *info = NULL;
GError *error = NULL;
if (plug_in_icc_profile_info (view->image,
gimp_get_user_context (view->image->gimp),
image = gimp_image_parasite_view_get_image (GIMP_IMAGE_PARASITE_VIEW (view));
if (plug_in_icc_profile_info (image,
gimp_get_user_context (image->gimp),
NULL,
&name, &desc, &info,
&error))
@ -292,19 +199,21 @@ gimp_image_profile_view_query (GimpImageProfileView *view)
}
static void
gimp_image_profile_view_update (GimpImageProfileView *view)
gimp_image_profile_view_update (GimpImageParasiteView *view)
{
gtk_label_set_text (GTK_LABEL (view->name_label), NULL);
gtk_label_set_text (GTK_LABEL (view->desc_label), NULL);
gtk_label_set_text (GTK_LABEL (view->info_label), NULL);
gtk_widget_hide (view->table);
GimpImageProfileView *profile_view = GIMP_IMAGE_PROFILE_VIEW (view);
gtk_label_set_text (GTK_LABEL (view->message), _("Querying..."));
gtk_widget_show (view->message);
gtk_label_set_text (GTK_LABEL (profile_view->name_label), NULL);
gtk_label_set_text (GTK_LABEL (profile_view->desc_label), NULL);
gtk_label_set_text (GTK_LABEL (profile_view->info_label), NULL);
gtk_widget_hide (profile_view->table);
if (view->idle_id)
g_source_remove (view->idle_id);
gtk_label_set_text (GTK_LABEL (profile_view->message), _("Querying..."));
gtk_widget_show (profile_view->message);
view->idle_id = g_idle_add ((GSourceFunc) gimp_image_profile_view_query,
view);
if (profile_view->idle_id)
g_source_remove (profile_view->idle_id);
profile_view->idle_id =
g_idle_add ((GSourceFunc) gimp_image_profile_view_query, profile_view);
}

View File

@ -23,7 +23,7 @@
#define __GIMP_IMAGE_PROFILE_VIEW_H__
#include <gtk/gtkvbox.h>
#include "gimpimageparasiteview.h"
#define GIMP_TYPE_IMAGE_PROFILE_VIEW (gimp_image_profile_view_get_type ())
@ -38,23 +38,21 @@ typedef struct _GimpImageProfileViewClass GimpImageProfileViewClass;
struct _GimpImageProfileView
{
GtkVBox parent_instance;
GimpImageParasiteView parent_instance;
GimpImage *image;
GtkWidget *table;
GtkWidget *name_label;
GtkWidget *desc_label;
GtkWidget *info_label;
GtkWidget *table;
GtkWidget *name_label;
GtkWidget *desc_label;
GtkWidget *info_label;
GtkWidget *message;
GtkWidget *message;
guint idle_id;
guint idle_id;
};
struct _GimpImageProfileViewClass
{
GtkVBoxClass parent_class;
GimpImageParasiteViewClass parent_class;
};

View File

@ -163,6 +163,7 @@ typedef struct _GimpFileProcView GimpFileProcView;
typedef struct _GimpGridEditor GimpGridEditor;
typedef struct _GimpHistogramBox GimpHistogramBox;
typedef struct _GimpHistogramView GimpHistogramView;
typedef struct _GimpImageParasiteView GimpImageParasiteView;
typedef struct _GimpImagePropView GimpImagePropView;
typedef struct _GimpImageProfileView GimpImageProfileView;
typedef struct _GimpMessageBox GimpMessageBox;