From 9156953cc95cd4d814ea0ad0e9407efc9a6a0a7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Wed, 27 Oct 2010 15:52:36 +0200 Subject: Add more properties to LdSymbol. Also move the actual storage of symbol properties to implementations of the abstract LdSymbol class. All the properties are read only. --- src/ld-symbol.c | 107 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 55 insertions(+), 52 deletions(-) (limited to 'src/ld-symbol.c') diff --git a/src/ld-symbol.c b/src/ld-symbol.c index c1d9abf..92e0baa 100644 --- a/src/ld-symbol.c +++ b/src/ld-symbol.c @@ -26,21 +26,14 @@ * drawn onto the #LdCanvas. */ -/* - * LdSymbolPrivate: - * @name: The name of this symbol. - */ -struct _LdSymbolPrivate -{ - gchar *name; -}; - G_DEFINE_ABSTRACT_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT); enum { PROP_0, - PROP_NAME + PROP_NAME, + PROP_HUMAN_NAME, + /* TODO: Property for the area. */ }; static void @@ -63,7 +56,6 @@ ld_symbol_class_init (LdSymbolClass *klass) object_class = G_OBJECT_CLASS (klass); object_class->get_property = ld_symbol_get_property; object_class->set_property = ld_symbol_set_property; - object_class->finalize = ld_symbol_finalize; /** * LdSymbol:name: @@ -72,17 +64,23 @@ ld_symbol_class_init (LdSymbolClass *klass) */ pspec = g_param_spec_string ("name", "Name", "The name of this symbol.", - "", G_PARAM_READWRITE); + "", G_PARAM_READABLE); g_object_class_install_property (object_class, PROP_NAME, pspec); - g_type_class_add_private (klass, sizeof (LdSymbolPrivate)); +/** + * LdSymbol:human-name: + * + * The localized human name of this symbol. + */ + pspec = g_param_spec_string ("human-name", "Human name", + "The localized human name of this symbol.", + "", G_PARAM_READABLE); + g_object_class_install_property (object_class, PROP_HUMAN_NAME, pspec); } static void ld_symbol_init (LdSymbol *self) { - self->priv = G_TYPE_INSTANCE_GET_PRIVATE - (self, LD_TYPE_SYMBOL, LdSymbolPrivate); } static void @@ -97,6 +95,9 @@ ld_symbol_get_property (GObject *object, guint property_id, case PROP_NAME: g_value_set_string (value, ld_symbol_get_name (self)); break; + case PROP_HUMAN_NAME: + g_value_set_string (value, ld_symbol_get_human_name (self)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } @@ -106,62 +107,64 @@ static void ld_symbol_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { - LdSymbol *self; - - self = LD_SYMBOL (object); - switch (property_id) - { - case PROP_NAME: - ld_symbol_set_name (self, g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } -static void -ld_symbol_finalize (GObject *gobject) -{ - LdSymbol *self; - self = LD_SYMBOL (gobject); +/** + * ld_symbol_get_name: + * @self: An #LdSymbol object. + * + * Return value: The name of the symbol. + */ +const gchar * +ld_symbol_get_name (LdSymbol *self) +{ + LdSymbolClass *klass; - if (self->priv->name) - g_free (self->priv->name); + g_return_if_fail (LD_IS_SYMBOL (self)); - /* Chain up to the parent class. */ - G_OBJECT_CLASS (ld_symbol_parent_class)->finalize (gobject); + klass = LD_SYMBOL_GET_CLASS (self); + g_return_val_if_fail (klass->get_name != NULL, NULL); + return klass->get_name (self); } /** - * ld_symbol_set_name: + * ld_symbol_get_human_name: * @self: An #LdSymbol object. - * @name: A new name for the symbol. * - * Set the name of a symbol. + * Return value: The localised human name of the symbol. */ -void -ld_symbol_set_name (LdSymbol *self, const gchar *name) +const gchar * +ld_symbol_get_human_name (LdSymbol *self) { + LdSymbolClass *klass; + g_return_if_fail (LD_IS_SYMBOL (self)); - g_return_if_fail (name != NULL); - if (self->priv->name) - g_free (self->priv->name); - self->priv->name = g_strdup (name); + klass = LD_SYMBOL_GET_CLASS (self); + g_return_val_if_fail (klass->get_human_name != NULL, NULL); + return klass->get_human_name (self); } /** - * ld_symbol_get_name: - * @self: An #LdSymbol object. + * ld_symbol_get_area: + * @self: A symbol object. + * @area: Where the area of the symbol will be returned. * - * Return value: The name of the symbol. + * Get the area of the symbol. */ -const gchar * -ld_symbol_get_name (LdSymbol *self) +void +ld_symbol_get_area (LdSymbol *self, LdSymbolArea *area) { + LdSymbolClass *klass; + g_return_if_fail (LD_IS_SYMBOL (self)); - return self->priv->name; + g_return_if_fail (area != NULL); + + klass = LD_SYMBOL_GET_CLASS (self); + g_return_if_fail (klass->get_area != NULL); + klass->get_area (self, area); } /** @@ -180,6 +183,6 @@ ld_symbol_draw (LdSymbol *self, cairo_t *cr) g_return_if_fail (cr != NULL); klass = LD_SYMBOL_GET_CLASS (self); - if (klass->draw) - klass->draw (self, cr); + g_return_if_fail (klass->draw != NULL); + klass->draw (self, cr); } -- cgit v1.2.3