diff --git a/CMakeLists.txt b/CMakeLists.txt index 18cd642..d602087 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,8 @@ set (logdiag_SOURCES src/ld-window-main.c src/ld-document.c src/ld-canvas.c + src/ld-symbol.c + src/ld-symbol-category.c src/ld-symbol-library.c) set (logdiag_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/config.h diff --git a/src/ld-symbol-category.c b/src/ld-symbol-category.c new file mode 100644 index 0000000..8bfe419 --- /dev/null +++ b/src/ld-symbol-category.c @@ -0,0 +1,90 @@ +/* + * ld-symbol-category.c + * + * This file is a part of logdiag. + * Copyright Přemysl Janouch 2010. All rights reserved. + * + * See the file LICENSE for licensing information. + * + */ + +#include + +#include "config.h" + +#include "ld-symbol-library.h" +#include "ld-symbol-category.h" +#include "ld-symbol.h" + + +/** + * SECTION:ld-symbol-category + * @short_description: A category of symbols. + * @see_also: #LdSymbol, #LdSymbolLibrary + * + * #LdSymbolCategory represents a category of #LdSymbol objects. + */ + +G_DEFINE_TYPE (LdSymbolCategory, ld_symbol_category, G_TYPE_OBJECT); + +static void +ld_symbol_category_finalize (GObject *gobject); + + +static void +ld_symbol_category_class_init (LdSymbolCategoryClass *klass) +{ + GObjectClass *object_class; + + object_class = G_OBJECT_CLASS (klass); + object_class->finalize = ld_symbol_category_finalize; +} + +static void +ld_symbol_category_init (LdSymbolCategory *self) +{ + /* TODO: use _new_full, correct equal and specify destroy functions. */ + /* XXX: How's the situation with subcategory names and symbol names + * within the same hashtable? + */ + self->children = g_hash_table_new (g_str_hash, g_str_equal); +} + +static void +ld_symbol_category_finalize (GObject *gobject) +{ + LdSymbolCategory *self; + + self = LD_SYMBOL_CATEGORY (gobject); + + if (self->name) + g_free (self->name); + if (self->image_path) + g_free (self->image_path); + + g_object_unref (self->parent); + g_hash_table_destroy (self->children); + + /* Chain up to the parent class. */ + G_OBJECT_CLASS (ld_symbol_category_parent_class)->finalize (gobject); +} + +/** + * ld_symbol_category_new: + * @parent: The parent library for this category. + * + * Create an instance. + */ +LdSymbolCategory * +ld_symbol_category_new (LdSymbolLibrary *parent) +{ + LdSymbolCategory *cat; + + cat = g_object_new (LD_TYPE_SYMBOL_CATEGORY, NULL); + + cat->parent = parent; + g_object_ref (parent); + + return cat; +} + diff --git a/src/ld-symbol-category.h b/src/ld-symbol-category.h index 6482c52..f2451d7 100644 --- a/src/ld-symbol-category.h +++ b/src/ld-symbol-category.h @@ -32,8 +32,8 @@ typedef struct _LdSymbolCategoryClass LdSymbolCategoryClass; /** * LdSymbolCategory: - * @parent: The parent object, may be LdSymbolLibrary - * or another LdSymbolCategory. + * @parent: The parent object, may be #LdSymbolLibrary + * or another #LdSymbolCategory. * @name: The name of the category. * @image_path: Path to the image for this category. * @children: Children of this category. diff --git a/src/ld-symbol-library.c b/src/ld-symbol-library.c index 09b7b56..2b6738a 100644 --- a/src/ld-symbol-library.c +++ b/src/ld-symbol-library.c @@ -18,7 +18,6 @@ #include "ld-symbol-category.h" #include "ld-symbol.h" -/* ===== Symbol library ==================================================== */ /** * SECTION:ld-symbol-library @@ -190,184 +189,3 @@ ld_symbol_library_clear (LdSymbolLibrary *self) return; } - -/* ===== Symbol category =================================================== */ - -/** - * SECTION:ld-symbol-category - * @short_description: A category of symbols. - * @see_also: #LdSymbol, #LdSymbolLibrary - * - * #LdSymbolCategory represents a category of #LdSymbol objects. - */ - -G_DEFINE_TYPE (LdSymbolCategory, ld_symbol_category, G_TYPE_OBJECT); - -static void -ld_symbol_category_finalize (GObject *gobject); - - -static void -ld_symbol_category_class_init (LdSymbolCategoryClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - object_class->finalize = ld_symbol_category_finalize; -} - -static void -ld_symbol_category_init (LdSymbolCategory *self) -{ - /* TODO: use _new_full, correct equal and specify destroy functions. */ - /* XXX: How's the situation with subcategory names and symbol names - * within the same hashtable? - */ - self->children = g_hash_table_new (g_str_hash, g_str_equal); -} - -static void -ld_symbol_category_finalize (GObject *gobject) -{ - LdSymbolCategory *self; - - self = LD_SYMBOL_CATEGORY (gobject); - - if (self->name) - g_free (self->name); - if (self->image_path) - g_free (self->image_path); - - g_object_unref (self->parent); - g_hash_table_destroy (self->children); - - /* Chain up to the parent class. */ - G_OBJECT_CLASS (ld_symbol_category_parent_class)->finalize (gobject); -} - -/** - * ld_symbol_category_new: - * @parent: The parent library for this category. - * - * Create an instance. - */ -LdSymbolCategory * -ld_symbol_category_new (LdSymbolLibrary *parent) -{ - LdSymbolCategory *cat; - - cat = g_object_new (LD_TYPE_SYMBOL_CATEGORY, NULL); - - cat->parent = parent; - g_object_ref (parent); - - return cat; -} - - -/* ===== Symbol ============================================================ */ - -/** - * SECTION:ld-symbol - * @short_description: A symbol. - * @see_also: #LdDocument, #LdCanvas - * - * #LdSymbol represents a symbol in the #LdDocument that is in turn - * drawn onto the #LdCanvas. - */ - -/* - * LdSymbolPrivate: - * @library: The parent LdSymbolLibrary. - * The library contains the real function for rendering. - */ -struct _LdSymbolPrivate -{ - LdSymbolLibrary *library; -}; - -G_DEFINE_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT); - -static void -ld_symbol_finalize (GObject *gobject); - - -static void -ld_symbol_class_init (LdSymbolClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - object_class->finalize = ld_symbol_finalize; - - g_type_class_add_private (klass, sizeof (LdSymbolPrivate)); -} - -static void -ld_symbol_init (LdSymbol *self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE - (self, LD_TYPE_SYMBOL_LIBRARY, LdSymbolPrivate); -} - -static void -ld_symbol_finalize (GObject *gobject) -{ - LdSymbol *self; - - self = LD_SYMBOL (gobject); - g_object_unref (self->priv->library); - - /* Chain up to the parent class. */ - G_OBJECT_CLASS (ld_symbol_parent_class)->finalize (gobject); -} - -/** - * ld_symbol_new: - * @library: A library object. - * @filename: The file from which the symbol will be loaded. - * - * Load a symbol from a file into the library. - */ -LdSymbol *ld_symbol_new (LdSymbolLibrary *library, - const gchar *filename) -{ - LdSymbol *symbol; - - symbol = g_object_new (LD_TYPE_SYMBOL, NULL); - /* TODO: Use the filename, Luke. */ - - symbol->priv->library = library; - g_object_ref (library); -} - -/** - * ld_symbol_build_identifier: - * @self: A symbol object. - * - * Build an identifier for the symbol. - * The identifier is in the format "Category/Category/Symbol". - */ -char * -ld_symbol_build_identifier (LdSymbol *self) -{ - return NULL; -} - -/** - * ld_symbol_draw: - * @self: A symbol object. - * @surface: A cairo surface to be drawn on. - * @param: Parameters for the symbol in a table. - * @x: The X coordinate on the surface. - * @y: The Y coordinate on the surface. - * @zoom: Zoom ratio. - * - * Draw the symbol onto a Cairo surface. - */ -void -ld_symbol_draw (LdSymbol *self, cairo_t *surface, - GHashTable *param, gint x, gint y, gdouble zoom) -{ - return; -} diff --git a/src/ld-symbol.c b/src/ld-symbol.c new file mode 100644 index 0000000..15b9ab5 --- /dev/null +++ b/src/ld-symbol.c @@ -0,0 +1,123 @@ +/* + * ld-symbol.c + * + * This file is a part of logdiag. + * Copyright Přemysl Janouch 2010. All rights reserved. + * + * See the file LICENSE for licensing information. + * + */ + +#include + +#include "config.h" + +#include "ld-symbol-library.h" +#include "ld-symbol-category.h" +#include "ld-symbol.h" + + +/** + * SECTION:ld-symbol + * @short_description: A symbol. + * @see_also: #LdDocument, #LdCanvas + * + * #LdSymbol represents a symbol in the #LdDocument that is in turn + * drawn onto the #LdCanvas. + */ + +/* + * LdSymbolPrivate: + * @library: The parent LdSymbolLibrary. + * The library contains the real function for rendering. + */ +struct _LdSymbolPrivate +{ + LdSymbolLibrary *library; +}; + +G_DEFINE_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT); + +static void +ld_symbol_finalize (GObject *gobject); + + +static void +ld_symbol_class_init (LdSymbolClass *klass) +{ + GObjectClass *object_class; + + object_class = G_OBJECT_CLASS (klass); + object_class->finalize = ld_symbol_finalize; + + g_type_class_add_private (klass, sizeof (LdSymbolPrivate)); +} + +static void +ld_symbol_init (LdSymbol *self) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE + (self, LD_TYPE_SYMBOL_LIBRARY, LdSymbolPrivate); +} + +static void +ld_symbol_finalize (GObject *gobject) +{ + LdSymbol *self; + + self = LD_SYMBOL (gobject); + g_object_unref (self->priv->library); + + /* Chain up to the parent class. */ + G_OBJECT_CLASS (ld_symbol_parent_class)->finalize (gobject); +} + +/** + * ld_symbol_new: + * @library: A library object. + * @filename: The file from which the symbol will be loaded. + * + * Load a symbol from a file into the library. + */ +LdSymbol *ld_symbol_new (LdSymbolLibrary *library, + const gchar *filename) +{ + LdSymbol *symbol; + + symbol = g_object_new (LD_TYPE_SYMBOL, NULL); + /* TODO: Use the filename, Luke. */ + + symbol->priv->library = library; + g_object_ref (library); +} + +/** + * ld_symbol_build_identifier: + * @self: A symbol object. + * + * Build an identifier for the symbol. + * The identifier is in the format "Category/Category/Symbol". + */ +char * +ld_symbol_build_identifier (LdSymbol *self) +{ + return NULL; +} + +/** + * ld_symbol_draw: + * @self: A symbol object. + * @surface: A cairo surface to be drawn on. + * @param: Parameters for the symbol in a table. + * @x: The X coordinate on the surface. + * @y: The Y coordinate on the surface. + * @zoom: Zoom ratio. + * + * Draw the symbol onto a Cairo surface. + */ +void +ld_symbol_draw (LdSymbol *self, cairo_t *surface, + GHashTable *param, gint x, gint y, gdouble zoom) +{ + return; +}