Initial LdDocument implementation.
The document maintains a list of LdDocumentObject objects.
This commit is contained in:
parent
7a0b280854
commit
147cf2977a
@ -87,6 +87,8 @@ set (logdiag_SOURCES
|
|||||||
src/ld-marshal.c
|
src/ld-marshal.c
|
||||||
src/ld-window-main.c
|
src/ld-window-main.c
|
||||||
src/ld-document.c
|
src/ld-document.c
|
||||||
|
src/ld-document-object.c
|
||||||
|
src/ld-document-symbol.c
|
||||||
src/ld-canvas.c
|
src/ld-canvas.c
|
||||||
src/ld-library.c
|
src/ld-library.c
|
||||||
src/ld-symbol-category.c
|
src/ld-symbol-category.c
|
||||||
@ -98,6 +100,8 @@ set (logdiag_HEADERS
|
|||||||
src/ld-marshal.h
|
src/ld-marshal.h
|
||||||
src/ld-window-main.h
|
src/ld-window-main.h
|
||||||
src/ld-document.h
|
src/ld-document.h
|
||||||
|
src/ld-document-object.h
|
||||||
|
src/ld-document-symbol.h
|
||||||
src/ld-canvas.h
|
src/ld-canvas.h
|
||||||
src/ld-library.h
|
src/ld-library.h
|
||||||
src/ld-symbol-category.h
|
src/ld-symbol-category.h
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "ld-marshal.h"
|
#include "ld-marshal.h"
|
||||||
|
#include "ld-document-object.h"
|
||||||
#include "ld-document.h"
|
#include "ld-document.h"
|
||||||
#include "ld-symbol.h"
|
#include "ld-symbol.h"
|
||||||
#include "ld-library.h"
|
#include "ld-library.h"
|
||||||
|
183
src/ld-document-object.c
Normal file
183
src/ld-document-object.c
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
* ld-document-object.c
|
||||||
|
*
|
||||||
|
* This file is a part of logdiag.
|
||||||
|
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||||
|
*
|
||||||
|
* See the file LICENSE for licensing information.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "ld-document-object.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:ld-document-object
|
||||||
|
* @short_description: A document object.
|
||||||
|
* @see_also: #LdDocument, #LdCanvas
|
||||||
|
*
|
||||||
|
* #LdDocumentObject represents an object in an #LdDocument.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LdDocumentObjectPrivate:
|
||||||
|
* @x: The X coordinate of this object.
|
||||||
|
* @y: The Y coordinate of this object.
|
||||||
|
*/
|
||||||
|
struct _LdDocumentObjectPrivate
|
||||||
|
{
|
||||||
|
gdouble x;
|
||||||
|
gdouble y;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_ABSTRACT_TYPE (LdDocumentObject, ld_document_object, G_TYPE_OBJECT);
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_0,
|
||||||
|
PROP_X,
|
||||||
|
PROP_Y
|
||||||
|
};
|
||||||
|
|
||||||
|
static void ld_document_object_get_property (GObject *object, guint property_id,
|
||||||
|
GValue *value, GParamSpec *pspec);
|
||||||
|
static void ld_document_object_set_property (GObject *object, guint property_id,
|
||||||
|
const GValue *value, GParamSpec *pspec);
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_object_class_init (LdDocumentObjectClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class;
|
||||||
|
GParamSpec *pspec;
|
||||||
|
|
||||||
|
object_class = G_OBJECT_CLASS (klass);
|
||||||
|
object_class->get_property = ld_document_object_get_property;
|
||||||
|
object_class->set_property = ld_document_object_set_property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocumentObject:x:
|
||||||
|
*
|
||||||
|
* The X coordinate of the object.
|
||||||
|
*/
|
||||||
|
pspec = g_param_spec_double ("x", "X",
|
||||||
|
"The X coordinate of this object.",
|
||||||
|
-G_MAXDOUBLE, G_MAXDOUBLE, 0, G_PARAM_READWRITE);
|
||||||
|
g_object_class_install_property (object_class, PROP_X, pspec);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocumentObject:y:
|
||||||
|
*
|
||||||
|
* The Y coordinate of the object.
|
||||||
|
*/
|
||||||
|
pspec = g_param_spec_double ("y", "Y",
|
||||||
|
"The Y coordinate of this object.",
|
||||||
|
-G_MAXDOUBLE, G_MAXDOUBLE, 0, G_PARAM_READWRITE);
|
||||||
|
g_object_class_install_property (object_class, PROP_Y, pspec);
|
||||||
|
|
||||||
|
g_type_class_add_private (klass, sizeof (LdDocumentObjectPrivate));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_object_init (LdDocumentObject *self)
|
||||||
|
{
|
||||||
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||||
|
(self, LD_TYPE_DOCUMENT_OBJECT, LdDocumentObjectPrivate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_object_get_property (GObject *object, guint property_id,
|
||||||
|
GValue *value, GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
LdDocumentObject *self;
|
||||||
|
|
||||||
|
self = LD_DOCUMENT_OBJECT (object);
|
||||||
|
switch (property_id)
|
||||||
|
{
|
||||||
|
case PROP_X:
|
||||||
|
g_value_set_double (value, ld_document_object_get_x (self));
|
||||||
|
break;
|
||||||
|
case PROP_Y:
|
||||||
|
g_value_set_double (value, ld_document_object_get_y (self));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_object_set_property (GObject *object, guint property_id,
|
||||||
|
const GValue *value, GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
LdDocumentObject *self;
|
||||||
|
|
||||||
|
self = LD_DOCUMENT_OBJECT (object);
|
||||||
|
switch (property_id)
|
||||||
|
{
|
||||||
|
case PROP_X:
|
||||||
|
ld_document_object_set_x (self, g_value_get_double (value));
|
||||||
|
break;
|
||||||
|
case PROP_Y:
|
||||||
|
ld_document_object_set_y (self, g_value_get_double (value));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_object_get_x:
|
||||||
|
* @self: An #LdDocumentObject object.
|
||||||
|
*
|
||||||
|
* Return value: The X coordinate of the object.
|
||||||
|
*/
|
||||||
|
gdouble
|
||||||
|
ld_document_object_get_x (LdDocumentObject *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT_OBJECT (self), 0);
|
||||||
|
return self->priv->x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_object_get_y:
|
||||||
|
* @self: An #LdDocumentObject object.
|
||||||
|
*
|
||||||
|
* Return value: The Y coordinate of the object.
|
||||||
|
*/
|
||||||
|
gdouble
|
||||||
|
ld_document_object_get_y (LdDocumentObject *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT_OBJECT (self), 0);
|
||||||
|
return self->priv->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_object_get_x:
|
||||||
|
* @self: An #LdDocumentObject object.
|
||||||
|
*
|
||||||
|
* Set the X coordinate of the object.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_object_set_x (LdDocumentObject *self, gdouble x)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_OBJECT (self));
|
||||||
|
self->priv->x = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_object_get_x:
|
||||||
|
* @self: An #LdDocumentObject object.
|
||||||
|
*
|
||||||
|
* Set the Y coordinate of the object.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_object_set_y (LdDocumentObject *self, gdouble y)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_OBJECT (self));
|
||||||
|
self->priv->y = y;
|
||||||
|
}
|
65
src/ld-document-object.h
Normal file
65
src/ld-document-object.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* ld-document-object.h
|
||||||
|
*
|
||||||
|
* This file is a part of logdiag.
|
||||||
|
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||||
|
*
|
||||||
|
* See the file LICENSE for licensing information.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __LD_DOCUMENT_OBJECT_H__
|
||||||
|
#define __LD_DOCUMENT_OBJECT_H__
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
|
#define LD_TYPE_DOCUMENT_OBJECT (ld_document_object_get_type ())
|
||||||
|
#define LD_DOCUMENT_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
||||||
|
((obj), LD_TYPE_DOCUMENT_OBJECT, LdDocumentObject))
|
||||||
|
#define LD_DOCUMENT_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
||||||
|
((klass), LD_TYPE_DOCUMENT_OBJECT, LdDocumentObjectClass))
|
||||||
|
#define LD_IS_DOCUMENT_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||||
|
((obj), LD_TYPE_DOCUMENT_OBJECT))
|
||||||
|
#define LD_IS_DOCUMENT_OBJECT_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||||
|
((klass), LD_TYPE_DOCUMENT_OBJECT))
|
||||||
|
#define LD_DOCUMENT_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
|
||||||
|
((obj), LD_DOCUMENT_OBJECT, LdDocumentObjectClass))
|
||||||
|
|
||||||
|
typedef struct _LdDocumentObject LdDocumentObject;
|
||||||
|
typedef struct _LdDocumentObjectPrivate LdDocumentObjectPrivate;
|
||||||
|
typedef struct _LdDocumentObjectClass LdDocumentObjectClass;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocumentObject:
|
||||||
|
*/
|
||||||
|
struct _LdDocumentObject
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObject parent_instance;
|
||||||
|
LdDocumentObjectPrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocumentObjectClass:
|
||||||
|
*/
|
||||||
|
struct _LdDocumentObjectClass
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
GObjectClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
GType ld_document_object_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
gdouble ld_document_object_get_x (LdDocumentObject *self);
|
||||||
|
gdouble ld_document_object_get_y (LdDocumentObject *self);
|
||||||
|
void ld_document_object_set_x (LdDocumentObject *self, gdouble x);
|
||||||
|
void ld_document_object_set_y (LdDocumentObject *self, gdouble y);
|
||||||
|
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* ! __LD_DOCUMENT_OBJECT_H__ */
|
||||||
|
|
108
src/ld-document-symbol.c
Normal file
108
src/ld-document-symbol.c
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* ld-document-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 <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "ld-document-object.h"
|
||||||
|
#include "ld-document-symbol.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:ld-document-symbol
|
||||||
|
* @short_description: A symbol object.
|
||||||
|
* @see_also: #LdDocumentObject
|
||||||
|
*
|
||||||
|
* #LdDocumentSymbol is an implementation of #LdDocumentObject.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LdDocumentSymbolPrivate:
|
||||||
|
* @klass: The class of this symbol.
|
||||||
|
*/
|
||||||
|
struct _LdDocumentSymbolPrivate
|
||||||
|
{
|
||||||
|
gchar *klass;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (LdDocumentSymbol, ld_document_symbol, LD_TYPE_DOCUMENT_OBJECT);
|
||||||
|
|
||||||
|
static void ld_document_symbol_finalize (GObject *gobject);
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_symbol_class_init (LdDocumentSymbolClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class;
|
||||||
|
|
||||||
|
object_class = G_OBJECT_CLASS (klass);
|
||||||
|
object_class->finalize = ld_document_symbol_finalize;
|
||||||
|
|
||||||
|
/* TODO: A property for the class. */
|
||||||
|
|
||||||
|
g_type_class_add_private (klass, sizeof (LdDocumentSymbolPrivate));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_symbol_init (LdDocumentSymbol *self)
|
||||||
|
{
|
||||||
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||||
|
(self, LD_TYPE_DOCUMENT_SYMBOL, LdDocumentSymbolPrivate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_symbol_finalize (GObject *gobject)
|
||||||
|
{
|
||||||
|
LdDocumentSymbol *self;
|
||||||
|
|
||||||
|
self = LD_DOCUMENT_SYMBOL (gobject);
|
||||||
|
|
||||||
|
if (self->priv->klass)
|
||||||
|
g_free (self->priv->klass);
|
||||||
|
|
||||||
|
/* Chain up to the parent class. */
|
||||||
|
G_OBJECT_CLASS (ld_document_symbol_parent_class)->finalize (gobject);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_symbol_new:
|
||||||
|
* @klass: The class of the symbol (symbol identifier).
|
||||||
|
*
|
||||||
|
* Return value: A new #LdDocumentSymbol object.
|
||||||
|
*/
|
||||||
|
LdDocumentSymbol *
|
||||||
|
ld_document_symbol_new (const gchar *klass)
|
||||||
|
{
|
||||||
|
LdDocumentSymbol *self;
|
||||||
|
|
||||||
|
self = g_object_new (LD_TYPE_DOCUMENT_SYMBOL, NULL);
|
||||||
|
ld_document_symbol_set_class (self, klass);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const gchar *
|
||||||
|
ld_document_symbol_get_class (LdDocumentSymbol *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT_SYMBOL (self), NULL);
|
||||||
|
return self->priv->klass;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ld_document_symbol_set_class (LdDocumentSymbol *self, const gchar *klass)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_SYMBOL (self));
|
||||||
|
|
||||||
|
if (self->priv->klass)
|
||||||
|
g_free (self->priv->klass);
|
||||||
|
self->priv->klass = g_strdup (klass);
|
||||||
|
}
|
64
src/ld-document-symbol.h
Normal file
64
src/ld-document-symbol.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* ld-document-symbol.h
|
||||||
|
*
|
||||||
|
* This file is a part of logdiag.
|
||||||
|
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||||
|
*
|
||||||
|
* See the file LICENSE for licensing information.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __LD_DOCUMENT_SYMBOL_H__
|
||||||
|
#define __LD_DOCUMENT_SYMBOL_H__
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
|
#define LD_TYPE_DOCUMENT_SYMBOL (ld_document_symbol_get_type ())
|
||||||
|
#define LD_DOCUMENT_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
||||||
|
((obj), LD_TYPE_DOCUMENT_SYMBOL, LdDocumentSymbol))
|
||||||
|
#define LD_DOCUMENT_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
||||||
|
((klass), LD_TYPE_DOCUMENT_SYMBOL, LdDocumentSymbolClass))
|
||||||
|
#define LD_IS_DOCUMENT_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||||
|
((obj), LD_TYPE_DOCUMENT_SYMBOL))
|
||||||
|
#define LD_IS_DOCUMENT_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||||
|
((klass), LD_TYPE_DOCUMENT_SYMBOL))
|
||||||
|
#define LD_DOCUMENT_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
|
||||||
|
((obj), LD_DOCUMENT_SYMBOL, LdDocumentSymbolClass))
|
||||||
|
|
||||||
|
typedef struct _LdDocumentSymbol LdDocumentSymbol;
|
||||||
|
typedef struct _LdDocumentSymbolPrivate LdDocumentSymbolPrivate;
|
||||||
|
typedef struct _LdDocumentSymbolClass LdDocumentSymbolClass;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocumentSymbol:
|
||||||
|
*/
|
||||||
|
struct _LdDocumentSymbol
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
LdDocumentObject parent_instance;
|
||||||
|
LdDocumentSymbolPrivate *priv;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocumentSymbolClass:
|
||||||
|
*/
|
||||||
|
struct _LdDocumentSymbolClass
|
||||||
|
{
|
||||||
|
/*< private >*/
|
||||||
|
LdDocumentObjectClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
GType ld_document_symbol_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
|
LdDocumentSymbol *ld_document_symbol_new (const gchar *klass);
|
||||||
|
const gchar *ld_document_symbol_get_class (LdDocumentSymbol *self);
|
||||||
|
void ld_document_symbol_set_class (LdDocumentSymbol *self, const gchar *klass);
|
||||||
|
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* ! __LD_DOCUMENT_SYMBOL_H__ */
|
||||||
|
|
@ -0,0 +1,287 @@
|
|||||||
|
/*
|
||||||
|
* ld-document.c
|
||||||
|
*
|
||||||
|
* This file is a part of logdiag.
|
||||||
|
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||||
|
*
|
||||||
|
* See the file LICENSE for licensing information.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "ld-document-object.h"
|
||||||
|
#include "ld-document.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:ld-document
|
||||||
|
* @short_description: A document object.
|
||||||
|
* @see_also: #LdCanvas
|
||||||
|
*
|
||||||
|
* #LdDocument is a model for storing documents.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LdDocumentPrivate:
|
||||||
|
* @objects: All the objects in the document.
|
||||||
|
* @selection: All currently selected objects.
|
||||||
|
* @connections: Connections between objects.
|
||||||
|
*/
|
||||||
|
struct _LdDocumentPrivate
|
||||||
|
{
|
||||||
|
GSList *objects;
|
||||||
|
GSList *selection;
|
||||||
|
GSList *connections;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (LdDocument, ld_document, G_TYPE_OBJECT);
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_finalize (GObject *gobject);
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_class_init (LdDocumentClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *object_class;
|
||||||
|
|
||||||
|
object_class = G_OBJECT_CLASS (klass);
|
||||||
|
object_class->finalize = ld_document_finalize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LdDocument::changed:
|
||||||
|
* @document: The document object.
|
||||||
|
*
|
||||||
|
* Contents of the document have changed.
|
||||||
|
*/
|
||||||
|
klass->changed_signal = g_signal_new
|
||||||
|
("changed", G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
|
||||||
|
0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
|
||||||
|
|
||||||
|
g_type_class_add_private (klass, sizeof (LdDocumentPrivate));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_init (LdDocument *self)
|
||||||
|
{
|
||||||
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||||
|
(self, LD_TYPE_DOCUMENT, LdDocumentPrivate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ld_document_finalize (GObject *gobject)
|
||||||
|
{
|
||||||
|
LdDocument *self;
|
||||||
|
|
||||||
|
self = LD_DOCUMENT (gobject);
|
||||||
|
ld_document_clear (self);
|
||||||
|
|
||||||
|
/* Chain up to the parent class. */
|
||||||
|
G_OBJECT_CLASS (ld_document_parent_class)->finalize (gobject);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_new:
|
||||||
|
*
|
||||||
|
* Create an instance.
|
||||||
|
*/
|
||||||
|
LdDocument *
|
||||||
|
ld_document_new (void)
|
||||||
|
{
|
||||||
|
return g_object_new (LD_TYPE_DOCUMENT, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_clear:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
*
|
||||||
|
* Clear the whole document with it's objects and selection.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_clear (LdDocument *self)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT (self));
|
||||||
|
|
||||||
|
g_slist_free (self->priv->connections);
|
||||||
|
self->priv->connections = NULL;
|
||||||
|
|
||||||
|
g_slist_foreach (self->priv->selection, (GFunc) g_object_unref, NULL);
|
||||||
|
g_slist_free (self->priv->selection);
|
||||||
|
self->priv->selection = NULL;
|
||||||
|
|
||||||
|
g_slist_foreach (self->priv->objects, (GFunc) g_object_unref, NULL);
|
||||||
|
g_slist_free (self->priv->objects);
|
||||||
|
self->priv->objects = NULL;
|
||||||
|
|
||||||
|
g_signal_emit (self,
|
||||||
|
LD_DOCUMENT_GET_CLASS (self)->changed_signal, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_load_from_file:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
* @filename: A filename.
|
||||||
|
* @error: Return location for a GError, or NULL.
|
||||||
|
*
|
||||||
|
* Load a file into the document.
|
||||||
|
*
|
||||||
|
* Return value: TRUE if the file could be loaded, FALSE otherwise.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
ld_document_load_from_file (LdDocument *self,
|
||||||
|
const gchar *filename, GError *error)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT (self), FALSE);
|
||||||
|
|
||||||
|
/* TODO */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_save_to_file:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
* @filename: A filename.
|
||||||
|
* @error: Return location for a GError, or NULL.
|
||||||
|
*
|
||||||
|
* Save the document into a file.
|
||||||
|
*
|
||||||
|
* Return value: TRUE if the document could be saved, FALSE otherwise.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
ld_document_save_to_file (LdDocument *self,
|
||||||
|
const gchar *filename, GError *error)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT (self), FALSE);
|
||||||
|
|
||||||
|
/* TODO */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_get_objects:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
*
|
||||||
|
* Get a list of objects in the document.
|
||||||
|
* You mustn't make any changes to the list.
|
||||||
|
*/
|
||||||
|
GSList *
|
||||||
|
ld_document_get_objects (LdDocument *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT (self), NULL);
|
||||||
|
return self->priv->objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_insert_object:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
* @object: The object to be inserted.
|
||||||
|
* @pos: The position at which the object is to be inserted.
|
||||||
|
* Negative values will append to the end.
|
||||||
|
*
|
||||||
|
* Insert an object into the document.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_insert_object (LdDocument *self, LdDocumentObject *object, gint pos)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT (self));
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_OBJECT (object));
|
||||||
|
|
||||||
|
if (!g_slist_find (self->priv->objects, object))
|
||||||
|
{
|
||||||
|
self->priv->objects =
|
||||||
|
g_slist_insert (self->priv->objects, object, pos);
|
||||||
|
g_object_ref (object);
|
||||||
|
}
|
||||||
|
g_signal_emit (self,
|
||||||
|
LD_DOCUMENT_GET_CLASS (self)->changed_signal, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_remove_object:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
* @object: The object to be removed.
|
||||||
|
*
|
||||||
|
* Remove an object from the document.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_remove_object (LdDocument *self, LdDocumentObject *object)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT (self));
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_OBJECT (object));
|
||||||
|
|
||||||
|
if (g_slist_find (self->priv->objects, object))
|
||||||
|
{
|
||||||
|
ld_document_selection_remove (self, object);
|
||||||
|
|
||||||
|
self->priv->objects = g_slist_remove (self->priv->objects, object);
|
||||||
|
g_object_unref (object);
|
||||||
|
}
|
||||||
|
g_signal_emit (self,
|
||||||
|
LD_DOCUMENT_GET_CLASS (self)->changed_signal, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_get_selection:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
*
|
||||||
|
* Get a list of objects that are currently selected in the document.
|
||||||
|
* You mustn't make any changes to the list.
|
||||||
|
*/
|
||||||
|
GSList *
|
||||||
|
ld_document_get_selection (LdDocument *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (LD_IS_DOCUMENT (self), NULL);
|
||||||
|
return self->priv->selection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_selection_add:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
* @object: The object to be added to the selection.
|
||||||
|
* @pos: The position at which the object is to be inserted.
|
||||||
|
* Negative values will append to the end.
|
||||||
|
*
|
||||||
|
* Add an object to selection.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_selection_add (LdDocument *self, LdDocumentObject *object, gint pos)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT (self));
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_OBJECT (object));
|
||||||
|
|
||||||
|
if (!g_slist_find (self->priv->selection, object)
|
||||||
|
&& g_slist_find (self->priv->objects, object))
|
||||||
|
{
|
||||||
|
self->priv->selection =
|
||||||
|
g_slist_insert (self->priv->selection, object, pos);
|
||||||
|
g_object_ref (object);
|
||||||
|
}
|
||||||
|
g_signal_emit (self,
|
||||||
|
LD_DOCUMENT_GET_CLASS (self)->changed_signal, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ld_document_selection_remove:
|
||||||
|
* @self: An #LdDocument object.
|
||||||
|
* @object: The object to be removed from the selection.
|
||||||
|
*
|
||||||
|
* Remove an object from the selection.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ld_document_selection_remove (LdDocument *self, LdDocumentObject *object)
|
||||||
|
{
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT (self));
|
||||||
|
g_return_if_fail (LD_IS_DOCUMENT_OBJECT (object));
|
||||||
|
|
||||||
|
if (g_slist_find (self->priv->selection, object))
|
||||||
|
{
|
||||||
|
self->priv->selection = g_slist_remove (self->priv->selection, object);
|
||||||
|
g_object_unref (object);
|
||||||
|
}
|
||||||
|
g_signal_emit (self,
|
||||||
|
LD_DOCUMENT_GET_CLASS (self)->changed_signal, 0);
|
||||||
|
}
|
@ -14,7 +14,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
#define LD_TYPE_DOCUMENT (ld_library_get_type ())
|
#define LD_TYPE_DOCUMENT (ld_document_get_type ())
|
||||||
#define LD_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
#define LD_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
||||||
((obj), LD_TYPE_DOCUMENT, LdDocument))
|
((obj), LD_TYPE_DOCUMENT, LdDocument))
|
||||||
#define LD_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
#define LD_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
||||||
@ -28,6 +28,7 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
typedef struct _LdDocument LdDocument;
|
typedef struct _LdDocument LdDocument;
|
||||||
typedef struct _LdDocumentClass LdDocumentClass;
|
typedef struct _LdDocumentClass LdDocumentClass;
|
||||||
|
typedef struct _LdDocumentPrivate LdDocumentPrivate;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,62 +40,46 @@ struct _LdDocument
|
|||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
|
LdDocumentPrivate *priv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _LdDocumentClass
|
struct _LdDocumentClass
|
||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
guint changed_signal;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
GType ld_document_get_type (void) G_GNUC_CONST;
|
GType ld_document_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
LdDocument *ld_document_new (void);
|
LdDocument *ld_document_new (void);
|
||||||
gboolean ld_document_new_from_file (const char *file_name, GError *error);
|
void ld_document_clear (LdDocument *self);
|
||||||
gboolean ld_document_save_to_file (const char *file_name, GError *error);
|
gboolean ld_document_load_from_file (LdDocument *self,
|
||||||
|
const gchar *filename, GError *error);
|
||||||
|
gboolean ld_document_save_to_file (LdDocument *self,
|
||||||
|
const gchar *filename, GError *error);
|
||||||
|
|
||||||
#if 0
|
GSList *ld_document_get_objects (LdDocument *self);
|
||||||
/* ===== Data proposal ===================================================== */
|
void ld_document_insert_object (LdDocument *self,
|
||||||
typedef struct _LdDocumentPrivate LdDocumentPrivate;
|
LdDocumentObject *object, gint pos);
|
||||||
|
void ld_document_remove_object (LdDocument *self,
|
||||||
|
LdDocumentObject *object);
|
||||||
|
|
||||||
|
GSList *ld_document_get_selection (LdDocument *self);
|
||||||
|
void ld_document_selection_add (LdDocument *self,
|
||||||
|
LdDocumentObject *object, gint pos);
|
||||||
|
void ld_document_selection_remove (LdDocument *self,
|
||||||
|
LdDocumentObject *object);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* LdDocumentPrivate:
|
GSList *ld_document_get_connections (LdDocument *self);
|
||||||
* @objects: All the objects in the document.
|
void ld_document_connection_add (LdDocument *self,
|
||||||
* @selection: All currently selected objects.
|
LdConnection *connection, gint pos);
|
||||||
*/
|
void ld_document_connection_remove (LdDocument *self,
|
||||||
struct _LdDocumentPrivate
|
LdConnection *connection);
|
||||||
{
|
*/
|
||||||
GSList *objects;
|
|
||||||
GSList *selection;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* ===== Interface proposal ================================================ */
|
|
||||||
/* The contents of the document have changed. */
|
|
||||||
signal document-changed (...)
|
|
||||||
|
|
||||||
/* Add a symbol to the document at specified coordinates. */
|
|
||||||
/* TODO: Should the coordinates be double or int? */
|
|
||||||
void
|
|
||||||
ld_document_add_symbol (LdSymbol *symbol, x, y);
|
|
||||||
|
|
||||||
/* Parse a document in JSON and insert it into the document. */
|
|
||||||
gboolean
|
|
||||||
ld_document_insert_json (LdDocument *self, GError *error);
|
|
||||||
|
|
||||||
/* TODO: Create an interface for a list of this object: */
|
|
||||||
/* NOTE: In the future, labels will be also supported. */
|
|
||||||
LdDocumentSymbol
|
|
||||||
|
|
||||||
/* TODO: Create an interface for wires between pins of various symbols. */
|
|
||||||
|
|
||||||
/* TODO: Create an interface for object selection. */
|
|
||||||
ld_document_selection_...
|
|
||||||
|
|
||||||
gchar *
|
|
||||||
ld_document_selection_get_json (LdDocument *self);
|
|
||||||
|
|
||||||
#endif /* 0 */
|
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -18,7 +18,10 @@
|
|||||||
#include "ld-symbol-category.h"
|
#include "ld-symbol-category.h"
|
||||||
#include "ld-library.h"
|
#include "ld-library.h"
|
||||||
|
|
||||||
|
#include "ld-document-object.h"
|
||||||
|
#include "ld-document-symbol.h"
|
||||||
#include "ld-document.h"
|
#include "ld-document.h"
|
||||||
|
|
||||||
#include "ld-canvas.h"
|
#include "ld-canvas.h"
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user