Files
gimp/libgimpwidgets/gimpenumlabel.c
Michael Natterer 8005eea835 Remove the "GIMP" from all "Since: GIMP 2.x" API doc comments
because it confuses gtk-doc and breaks some links. Also change the
"Index of new symbols in GIMP 2.x" sections to be what seems to be the
modern standard (looked at the GLib and GTK+ docs), and update some
other stuff.
2015-05-31 21:18:09 +02:00

212 lines
5.7 KiB
C

/* LIBGIMP - The GIMP Library
* Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
*
* gimpenumlabel.c
* Copyright (C) 2005 Sven Neumann <sven@gimp.org>
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
#include "gimpwidgetstypes.h"
#include "gimpenumlabel.h"
/**
* SECTION: gimpenumlabel
* @title: GimpEnumLabel
* @short_description: A #GtkLabel subclass that displays an enum value.
*
* A #GtkLabel subclass that displays an enum value.
**/
enum
{
PROP_0,
PROP_ENUM_TYPE,
PROP_ENUM_VALUE
};
static void gimp_enum_label_finalize (GObject *object);
static void gimp_enum_label_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_enum_label_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
G_DEFINE_TYPE (GimpEnumLabel, gimp_enum_label, GTK_TYPE_LABEL)
#define parent_class gimp_enum_label_parent_class
static void
gimp_enum_label_class_init (GimpEnumLabelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gimp_enum_label_finalize;
object_class->get_property = gimp_enum_label_get_property;
object_class->set_property = gimp_enum_label_set_property;
/**
* GimpEnumLabel:enum-type:
*
* The #GType of the enum.
*
* Since: 2.8
**/
g_object_class_install_property (object_class, PROP_ENUM_TYPE,
g_param_spec_gtype ("enum-type", NULL, NULL,
G_TYPE_NONE,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* GimpEnumLabel:enum-value:
*
* The value to display.
*
* Since: 2.8
**/
g_object_class_install_property (object_class, PROP_ENUM_VALUE,
g_param_spec_int ("enum-value", NULL, NULL,
G_MININT, G_MAXINT, 0,
GIMP_PARAM_WRITABLE |
G_PARAM_CONSTRUCT));
}
static void
gimp_enum_label_init (GimpEnumLabel *enum_label)
{
}
static void
gimp_enum_label_finalize (GObject *object)
{
GimpEnumLabel *enum_label = GIMP_ENUM_LABEL (object);
if (enum_label->enum_class)
g_type_class_unref (enum_label->enum_class);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gimp_enum_label_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GimpEnumLabel *label = GIMP_ENUM_LABEL (object);
switch (property_id)
{
case PROP_ENUM_TYPE:
if (label->enum_class)
g_value_set_gtype (value, G_TYPE_FROM_CLASS (label->enum_class));
else
g_value_set_gtype (value, G_TYPE_NONE);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gimp_enum_label_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
GimpEnumLabel *label = GIMP_ENUM_LABEL (object);
switch (property_id)
{
case PROP_ENUM_TYPE:
label->enum_class = g_type_class_ref (g_value_get_gtype (value));
break;
case PROP_ENUM_VALUE:
gimp_enum_label_set_value (label, g_value_get_int (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
/**
* gimp_enum_label_new:
* @enum_type: the #GType of an enum.
* @value:
*
* Return value: a new #GimpEnumLabel.
*
* Since: 2.4
**/
GtkWidget *
gimp_enum_label_new (GType enum_type,
gint value)
{
g_return_val_if_fail (G_TYPE_IS_ENUM (enum_type), NULL);
return g_object_new (GIMP_TYPE_ENUM_LABEL,
"enum-type", enum_type,
"enum-value", value,
NULL);
}
/**
* gimp_enum_label_set_value
* @label: a #GimpEnumLabel
* @value:
*
* Since: 2.4
**/
void
gimp_enum_label_set_value (GimpEnumLabel *label,
gint value)
{
const gchar *desc;
g_return_if_fail (GIMP_IS_ENUM_LABEL (label));
if (! gimp_enum_get_value (G_TYPE_FROM_CLASS (label->enum_class), value,
NULL, NULL, &desc, NULL))
{
g_warning ("%s: %d is not valid for enum of type '%s'",
G_STRLOC, value,
g_type_name (G_TYPE_FROM_CLASS (label->enum_class)));
return;
}
gtk_label_set_text (GTK_LABEL (label), desc);
}