summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2012-08-21 14:16:41 +0000
committerMarkus Engel <markus.engel@tum.de>2012-08-21 14:16:41 +0000
commitbf048763ea2423a0975ecdb956bf1b83bbae2030 (patch)
treec25cdf67163c658b453008164eae15860a7ca15b /src
parentAdded "virtual pad" to SPNamedView. (diff)
downloadinkscape-bf048763ea2423a0975ecdb956bf1b83bbae2030.tar.gz
inkscape-bf048763ea2423a0975ecdb956bf1b83bbae2030.zip
Added "virtual pad" to SPMetadata.
(bzr r11608.1.41)
Diffstat (limited to 'src')
-rw-r--r--src/sp-metadata.cpp90
-rw-r--r--src/sp-metadata.h23
2 files changed, 82 insertions, 31 deletions
diff --git a/src/sp-metadata.cpp b/src/sp-metadata.cpp
index 831bb5a70..7f0503ce2 100644
--- a/src/sp-metadata.cpp
+++ b/src/sp-metadata.cpp
@@ -80,9 +80,19 @@ sp_metadata_class_init (SPMetadataClass *klass)
sp_object_class->update = sp_metadata_update;
}
+CMetadata::CMetadata(SPMetadata* metadata) : CObject(metadata) {
+ this->spmetadata = metadata;
+}
+
+CMetadata::~CMetadata() {
+}
+
static void
sp_metadata_init (SPMetadata *metadata)
{
+ metadata->cmetadata = new CMetadata(metadata);
+ metadata->cobject = metadata->cmetadata;
+
(void)metadata;
debug("0x%08x",(unsigned int)metadata);
}
@@ -101,15 +111,8 @@ void strip_ids_recursively(Inkscape::XML::Node *node) {
}
-/**
- * Reads the Inkscape::XML::Node, and initializes SPMetadata variables.
- *
- * For this to get called, our name must be associated with
- * a repr via "sp_object_type_register". Best done through
- * sp-object-repr.cpp's repr_name_entries array.
- */
-static void sp_metadata_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
+
+void CMetadata::onBuild(SPDocument* doc, Inkscape::XML::Node* repr) {
using Inkscape::XML::NodeSiblingIterator;
debug("0x%08x",(unsigned int)object);
@@ -123,43 +126,55 @@ static void sp_metadata_build(SPObject *object, SPDocument *document, Inkscape::
}
}
- if (((SPObjectClass *) metadata_parent_class)->build)
- ((SPObjectClass *) metadata_parent_class)->build (object, document, repr);
+ CObject::onBuild(doc, repr);
}
/**
- * Drops any allocated memory.
+ * Reads the Inkscape::XML::Node, and initializes SPMetadata variables.
+ *
+ * For this to get called, our name must be associated with
+ * a repr via "sp_object_type_register". Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
*/
-static void sp_metadata_release(SPObject *object)
+static void sp_metadata_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
+ ((SPMetadata*)object)->cmetadata->onBuild(document, repr);
+}
+
+void CMetadata::onRelease() {
debug("0x%08x",(unsigned int)object);
// handle ourself
- if (((SPObjectClass *) metadata_parent_class)->release)
- ((SPObjectClass *) metadata_parent_class)->release (object);
+ CObject::onRelease();
}
/**
- * Sets a specific value in the SPMetadata.
+ * Drops any allocated memory.
*/
-static void sp_metadata_set(SPObject *object, unsigned int key, const gchar *value)
+static void sp_metadata_release(SPObject *object)
{
+ ((SPMetadata*)object)->cmetadata->onRelease();
+}
+
+void CMetadata::onSet(unsigned int key, const gchar* value) {
debug("0x%08x %s(%u): '%s'",(unsigned int)object,
sp_attribute_name(key),key,value);
- SP_METADATA(object); // ensures the object is of the proper type.
+ //SP_METADATA(object); // ensures the object is of the proper type.
// see if any parents need this value
- if (reinterpret_cast<SPObjectClass *>(metadata_parent_class)->set) {
- reinterpret_cast<SPObjectClass *>(metadata_parent_class)->set(object, key, value);
- }
+ CObject::onSet(key, value);
}
/**
- * Receives update notifications.
+ * Sets a specific value in the SPMetadata.
*/
-static void sp_metadata_update(SPObject *object, SPCtx *ctx, guint flags)
+static void sp_metadata_set(SPObject *object, unsigned int key, const gchar *value)
{
+ ((SPMetadata*)object)->cmetadata->onSet(key, value);
+}
+
+void CMetadata::onUpdate(SPCtx* ctx, unsigned int flags) {
debug("0x%08x",(unsigned int)object);
//SPMetadata *metadata = SP_METADATA(object);
@@ -170,15 +185,24 @@ static void sp_metadata_update(SPObject *object, SPCtx *ctx, guint flags)
}
- if (((SPObjectClass *) metadata_parent_class)->update)
- ((SPObjectClass *) metadata_parent_class)->update(object, ctx, flags);
+ // CPPIFY: As CMetadata is derived directly from CObject, this doesn't make no sense.
+ // CObject::onUpdate is pure. What was the idea behind these lines?
+// if (((SPObjectClass *) metadata_parent_class)->update)
+// ((SPObjectClass *) metadata_parent_class)->update(object, ctx, flags);
+// CObject::onUpdate(ctx, flags);
}
/**
- * Writes it's settings to an incoming repr object, if any.
+ * Receives update notifications.
*/
-static Inkscape::XML::Node *sp_metadata_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+static void sp_metadata_update(SPObject *object, SPCtx *ctx, guint flags)
{
+ ((SPMetadata*)object)->cmetadata->onUpdate(ctx, flags);
+}
+
+Inkscape::XML::Node* CMetadata::onWrite(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) {
+ SPMetadata* object = this->spmetadata;
+
debug("0x%08x",(unsigned int)object);
//SPMetadata *metadata = SP_METADATA(object);
@@ -190,14 +214,20 @@ static Inkscape::XML::Node *sp_metadata_write(SPObject *object, Inkscape::XML::D
}
}
- if (((SPObjectClass *) metadata_parent_class)->write) {
- ((SPObjectClass *) metadata_parent_class)->write(object, doc, repr, flags);
- }
+ CObject::onWrite(doc, repr, flags);
return repr;
}
/**
+ * Writes it's settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *sp_metadata_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+ return ((SPMetadata*)object)->cmetadata->onWrite(doc, repr, flags);
+}
+
+/**
* Retrieves the metadata object associated with a document.
*/
SPMetadata *sp_document_metadata(SPDocument *document)
diff --git a/src/sp-metadata.h b/src/sp-metadata.h
index 82b7c4fc5..7cae45804 100644
--- a/src/sp-metadata.h
+++ b/src/sp-metadata.h
@@ -23,14 +23,35 @@
class SPMetadata;
class SPMetadataClass;
+class CMetadata;
-struct SPMetadata : public SPObject {
+class SPMetadata : public SPObject {
+public:
+ CMetadata* cmetadata;
};
struct SPMetadataClass {
SPObjectClass parent_class;
};
+
+class CMetadata : public CObject {
+public:
+ CMetadata(SPMetadata* metadata);
+ virtual ~CMetadata();
+
+ virtual void onBuild(SPDocument* doc, Inkscape::XML::Node* repr);
+ virtual void onRelease();
+
+ virtual void onSet(unsigned int key, const gchar* value);
+ virtual void onUpdate(SPCtx* ctx, unsigned int flags);
+ virtual Inkscape::XML::Node* onWrite(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags);
+
+protected:
+ SPMetadata* spmetadata;
+};
+
+
GType sp_metadata_get_type (void);
SPMetadata * sp_document_metadata (SPDocument *document);