diff options
| author | Markus Engel <markus.engel@tum.de> | 2012-08-21 14:16:41 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2012-08-21 14:16:41 +0000 |
| commit | bf048763ea2423a0975ecdb956bf1b83bbae2030 (patch) | |
| tree | c25cdf67163c658b453008164eae15860a7ca15b /src/sp-metadata.cpp | |
| parent | Added "virtual pad" to SPNamedView. (diff) | |
| download | inkscape-bf048763ea2423a0975ecdb956bf1b83bbae2030.tar.gz inkscape-bf048763ea2423a0975ecdb956bf1b83bbae2030.zip | |
Added "virtual pad" to SPMetadata.
(bzr r11608.1.41)
Diffstat (limited to 'src/sp-metadata.cpp')
| -rw-r--r-- | src/sp-metadata.cpp | 90 |
1 files changed, 60 insertions, 30 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) |
