Přemysl Janouch
616c49a505
This is required for gtkdoc-scangobj. So far it's much like it's been before, the main differences are that source files are in two directories from now on and the build process has two stages.
340 lines
8.3 KiB
C
340 lines
8.3 KiB
C
/*
|
|
* ld-symbol-category.c
|
|
*
|
|
* This file is a part of logdiag.
|
|
* Copyright Přemysl Janouch 2010 - 2011. All rights reserved.
|
|
*
|
|
* See the file LICENSE for licensing information.
|
|
*
|
|
*/
|
|
|
|
#include "liblogdiag.h"
|
|
#include "config.h"
|
|
|
|
|
|
/**
|
|
* SECTION:ld-symbol-category
|
|
* @short_description: A category of symbols.
|
|
* @see_also: #LdSymbol, #LdLibrary
|
|
*
|
|
* #LdSymbolCategory represents a category of #LdSymbol objects.
|
|
*/
|
|
|
|
/*
|
|
* LdSymbolCategoryPrivate:
|
|
* @name: The name of this category.
|
|
* @image_path: Path to the image for this category.
|
|
* @children: Children of this category.
|
|
*/
|
|
struct _LdSymbolCategoryPrivate
|
|
{
|
|
gchar *name;
|
|
gchar *human_name;
|
|
gchar *image_path;
|
|
GSList *children;
|
|
};
|
|
|
|
enum
|
|
{
|
|
PROP_0,
|
|
PROP_NAME,
|
|
PROP_HUMAN_NAME,
|
|
PROP_IMAGE_PATH
|
|
};
|
|
|
|
static void ld_symbol_category_get_property (GObject *object, guint property_id,
|
|
GValue *value, GParamSpec *pspec);
|
|
static void ld_symbol_category_set_property (GObject *object, guint property_id,
|
|
const GValue *value, GParamSpec *pspec);
|
|
static void ld_symbol_category_finalize (GObject *gobject);
|
|
|
|
|
|
G_DEFINE_TYPE (LdSymbolCategory, ld_symbol_category, G_TYPE_OBJECT);
|
|
|
|
static void
|
|
ld_symbol_category_class_init (LdSymbolCategoryClass *klass)
|
|
{
|
|
GObjectClass *object_class;
|
|
GParamSpec *pspec;
|
|
|
|
object_class = G_OBJECT_CLASS (klass);
|
|
object_class->get_property = ld_symbol_category_get_property;
|
|
object_class->set_property = ld_symbol_category_set_property;
|
|
object_class->finalize = ld_symbol_category_finalize;
|
|
|
|
/**
|
|
* LdSymbolCategory:name:
|
|
*
|
|
* The name of this symbol category.
|
|
*/
|
|
pspec = g_param_spec_string ("name", "Name",
|
|
"The name of this symbol category.",
|
|
"", G_PARAM_READWRITE);
|
|
g_object_class_install_property (object_class, PROP_NAME, pspec);
|
|
|
|
/**
|
|
* LdSymbolCategory:human-name:
|
|
*
|
|
* The localized human name of this symbol category.
|
|
*/
|
|
pspec = g_param_spec_string ("human-name", "Human name",
|
|
"The localized human name of this symbol category.",
|
|
"", G_PARAM_READWRITE);
|
|
g_object_class_install_property (object_class, PROP_HUMAN_NAME, pspec);
|
|
|
|
/**
|
|
* LdSymbolCategory:image-path:
|
|
*
|
|
* Path to an image file representing this category.
|
|
*/
|
|
pspec = g_param_spec_string ("image-path", "Image path",
|
|
"Path to an image file representing this category.",
|
|
"", G_PARAM_READWRITE);
|
|
g_object_class_install_property (object_class, PROP_IMAGE_PATH, pspec);
|
|
|
|
g_type_class_add_private (klass, sizeof (LdSymbolCategoryPrivate));
|
|
}
|
|
|
|
static void
|
|
ld_symbol_category_init (LdSymbolCategory *self)
|
|
{
|
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
|
(self, LD_TYPE_SYMBOL_CATEGORY, LdSymbolCategoryPrivate);
|
|
}
|
|
|
|
static void
|
|
ld_symbol_category_get_property (GObject *object, guint property_id,
|
|
GValue *value, GParamSpec *pspec)
|
|
{
|
|
LdSymbolCategory *self;
|
|
|
|
self = LD_SYMBOL_CATEGORY (object);
|
|
switch (property_id)
|
|
{
|
|
case PROP_NAME:
|
|
g_value_set_string (value, ld_symbol_category_get_name (self));
|
|
break;
|
|
case PROP_HUMAN_NAME:
|
|
g_value_set_string (value, ld_symbol_category_get_human_name (self));
|
|
break;
|
|
case PROP_IMAGE_PATH:
|
|
g_value_set_string (value, ld_symbol_category_get_image_path (self));
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
ld_symbol_category_set_property (GObject *object, guint property_id,
|
|
const GValue *value, GParamSpec *pspec)
|
|
{
|
|
LdSymbolCategory *self;
|
|
|
|
self = LD_SYMBOL_CATEGORY (object);
|
|
switch (property_id)
|
|
{
|
|
case PROP_NAME:
|
|
ld_symbol_category_set_name (self, g_value_get_string (value));
|
|
break;
|
|
case PROP_HUMAN_NAME:
|
|
ld_symbol_category_set_human_name (self, g_value_get_string (value));
|
|
break;
|
|
case PROP_IMAGE_PATH:
|
|
ld_symbol_category_set_image_path (self, g_value_get_string (value));
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
ld_symbol_category_finalize (GObject *gobject)
|
|
{
|
|
LdSymbolCategory *self;
|
|
|
|
self = LD_SYMBOL_CATEGORY (gobject);
|
|
|
|
if (self->priv->name)
|
|
g_free (self->priv->name);
|
|
if (self->priv->human_name)
|
|
g_free (self->priv->human_name);
|
|
if (self->priv->image_path)
|
|
g_free (self->priv->image_path);
|
|
|
|
g_slist_foreach (self->priv->children, (GFunc) g_object_unref, NULL);
|
|
g_slist_free (self->priv->children);
|
|
|
|
/* Chain up to the parent class. */
|
|
G_OBJECT_CLASS (ld_symbol_category_parent_class)->finalize (gobject);
|
|
}
|
|
|
|
|
|
/**
|
|
* ld_symbol_category_new:
|
|
* @name: The name of the new category.
|
|
* @human_name: The localized human name of the new category.
|
|
*
|
|
* Create an instance.
|
|
*/
|
|
LdSymbolCategory *
|
|
ld_symbol_category_new (const gchar *name, const gchar *human_name)
|
|
{
|
|
LdSymbolCategory *cat;
|
|
|
|
g_return_val_if_fail (name != NULL, NULL);
|
|
g_return_val_if_fail (human_name != NULL, NULL);
|
|
|
|
cat = g_object_new (LD_TYPE_SYMBOL_CATEGORY, NULL);
|
|
cat->priv->name = g_strdup (name);
|
|
cat->priv->human_name = g_strdup (human_name);
|
|
|
|
return cat;
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_set_name:
|
|
* @self: An #LdSymbolCategory object.
|
|
* @name: The new name for this category.
|
|
*/
|
|
void
|
|
ld_symbol_category_set_name (LdSymbolCategory *self, const gchar *name)
|
|
{
|
|
g_return_if_fail (LD_IS_SYMBOL_CATEGORY (self));
|
|
g_return_if_fail (name != NULL);
|
|
|
|
if (self->priv->name)
|
|
g_free (self->priv->name);
|
|
self->priv->name = g_strdup (name);
|
|
|
|
g_object_notify (G_OBJECT (self), "name");
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_get_name:
|
|
* @self: An #LdSymbolCategory object.
|
|
*
|
|
* Return the name of this category.
|
|
*/
|
|
const gchar *
|
|
ld_symbol_category_get_name (LdSymbolCategory *self)
|
|
{
|
|
g_return_val_if_fail (LD_IS_SYMBOL_CATEGORY (self), NULL);
|
|
return self->priv->name;
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_set_human_name:
|
|
* @self: An #LdSymbolCategory object.
|
|
* @human_name: The new localized human name for this category.
|
|
*/
|
|
void
|
|
ld_symbol_category_set_human_name (LdSymbolCategory *self,
|
|
const gchar *human_name)
|
|
{
|
|
g_return_if_fail (LD_IS_SYMBOL_CATEGORY (self));
|
|
g_return_if_fail (human_name != NULL);
|
|
|
|
if (self->priv->human_name)
|
|
g_free (self->priv->human_name);
|
|
self->priv->human_name = g_strdup (human_name);
|
|
|
|
g_object_notify (G_OBJECT (self), "human-name");
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_get_human_name:
|
|
* @self: An #LdSymbolCategory object.
|
|
*
|
|
* Return the localized human name of this category.
|
|
*/
|
|
const gchar *
|
|
ld_symbol_category_get_human_name (LdSymbolCategory *self)
|
|
{
|
|
g_return_val_if_fail (LD_IS_SYMBOL_CATEGORY (self), NULL);
|
|
return self->priv->human_name;
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_set_image_path:
|
|
* @self: An #LdSymbolCategory object.
|
|
* @image_path: The new path to the image for this category. May be NULL.
|
|
*/
|
|
void
|
|
ld_symbol_category_set_image_path (LdSymbolCategory *self,
|
|
const gchar *image_path)
|
|
{
|
|
g_return_if_fail (LD_IS_SYMBOL_CATEGORY (self));
|
|
|
|
if (self->priv->image_path)
|
|
g_free (self->priv->image_path);
|
|
self->priv->image_path = g_strdup (image_path);
|
|
|
|
g_object_notify (G_OBJECT (self), "image-path");
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_get_image_path:
|
|
* @self: An #LdSymbolCategory object.
|
|
*
|
|
* Return the filesystem path to the image for this category. May be NULL.
|
|
*/
|
|
const gchar *
|
|
ld_symbol_category_get_image_path (LdSymbolCategory *self)
|
|
{
|
|
g_return_val_if_fail (LD_IS_SYMBOL_CATEGORY (self), NULL);
|
|
return self->priv->image_path;
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_insert_child:
|
|
* @self: An #LdSymbolCategory object.
|
|
* @child: The child to be inserted.
|
|
* @pos: The position at which the child will be inserted.
|
|
* Negative values will append to the end of list.
|
|
*
|
|
* Insert a child into the category.
|
|
*/
|
|
void
|
|
ld_symbol_category_insert_child (LdSymbolCategory *self,
|
|
GObject *child, gint pos)
|
|
{
|
|
g_return_if_fail (LD_IS_SYMBOL_CATEGORY (self));
|
|
g_return_if_fail (G_IS_OBJECT (child));
|
|
|
|
g_object_ref (child);
|
|
self->priv->children = g_slist_insert (self->priv->children, child, pos);
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_remove_child:
|
|
* @self: An #LdSymbolCategory object.
|
|
* @child: The child to be removed.
|
|
*
|
|
* Removes a child from the category.
|
|
*/
|
|
void
|
|
ld_symbol_category_remove_child (LdSymbolCategory *self,
|
|
GObject *child)
|
|
{
|
|
g_return_if_fail (LD_IS_SYMBOL_CATEGORY (self));
|
|
g_return_if_fail (G_IS_OBJECT (child));
|
|
|
|
g_object_unref (child);
|
|
self->priv->children = g_slist_remove (self->priv->children, child);
|
|
}
|
|
|
|
/**
|
|
* ld_symbol_category_get_children:
|
|
* @self: An #LdSymbolCategory object.
|
|
*
|
|
* Return value: The internal list of children. Do not modify.
|
|
*/
|
|
const GSList *
|
|
ld_symbol_category_get_children (LdSymbolCategory *self)
|
|
{
|
|
g_return_val_if_fail (LD_IS_SYMBOL_CATEGORY (self), NULL);
|
|
return self->priv->children;
|
|
}
|
|
|