diff options
Diffstat (limited to 'src/sp-metadata.cpp')
| -rw-r--r-- | src/sp-metadata.cpp | 104 |
1 files changed, 30 insertions, 74 deletions
diff --git a/src/sp-metadata.cpp b/src/sp-metadata.cpp index 79953b708..a093107ac 100644 --- a/src/sp-metadata.cpp +++ b/src/sp-metadata.cpp @@ -33,31 +33,20 @@ /* Metadata base class */ -static void sp_metadata_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr); -static void sp_metadata_release (SPObject *object); -static void sp_metadata_set (SPObject *object, unsigned int key, const gchar *value); -static void sp_metadata_update(SPObject *object, SPCtx *ctx, guint flags); -static Inkscape::XML::Node *sp_metadata_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); +#include "sp-factory.h" -G_DEFINE_TYPE(SPMetadata, sp_metadata, SP_TYPE_OBJECT); +namespace { + SPObject* createMetadata() { + return new SPMetadata(); + } -static void -sp_metadata_class_init (SPMetadataClass *klass) -{ - SPObjectClass *sp_object_class = (SPObjectClass *)klass; + bool metadataRegistered = SPFactory::instance().registerObject("svg:metadata", createMetadata); +} - sp_object_class->build = sp_metadata_build; - sp_object_class->release = sp_metadata_release; - sp_object_class->write = sp_metadata_write; - sp_object_class->set = sp_metadata_set; - sp_object_class->update = sp_metadata_update; +SPMetadata::SPMetadata() : SPObject() { } -static void -sp_metadata_init (SPMetadata *metadata) -{ - (void)metadata; - debug("0x%08x",(unsigned int)metadata); +SPMetadata::~SPMetadata() { } namespace { @@ -74,68 +63,43 @@ 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 SPMetadata::build(SPDocument* doc, Inkscape::XML::Node* repr) { using Inkscape::XML::NodeSiblingIterator; - debug("0x%08x",(unsigned int)object); + debug("0x%08x",(unsigned int)this); /* clean up our mess from earlier versions; elements under rdf:RDF should not * have id= attributes... */ - static GQuark const rdf_root_name=g_quark_from_static_string("rdf:RDF"); + static GQuark const rdf_root_name = g_quark_from_static_string("rdf:RDF"); + for ( NodeSiblingIterator iter=repr->firstChild() ; iter ; ++iter ) { if ( (GQuark)iter->code() == rdf_root_name ) { strip_ids_recursively(iter); } } - if (((SPObjectClass *) sp_metadata_parent_class)->build) - ((SPObjectClass *) sp_metadata_parent_class)->build (object, document, repr); + SPObject::build(doc, repr); } -/** - * Drops any allocated memory. - */ -static void sp_metadata_release(SPObject *object) -{ - debug("0x%08x",(unsigned int)object); +void SPMetadata::release() { + debug("0x%08x",(unsigned int)this); // handle ourself - if (((SPObjectClass *) sp_metadata_parent_class)->release) - ((SPObjectClass *) sp_metadata_parent_class)->release (object); + SPObject::release(); } -/** - * Sets a specific value in the SPMetadata. - */ -static void -sp_metadata_set(SPObject *object, - unsigned int key, - const gchar *value) -{ - debug("0x%08x %s(%u): '%s'",(unsigned int)object, +void SPMetadata::set(unsigned int key, const gchar* value) { + debug("0x%08x %s(%u): '%s'",(unsigned int)this, sp_attribute_name(key),key,value); // see if any parents need this value - if (SP_OBJECT_CLASS(sp_metadata_parent_class)->set) { - SP_OBJECT_CLASS(sp_metadata_parent_class)->set(object, key, value); - } + SPObject::set(key, value); } -/** - * Receives update notifications. - */ -static void sp_metadata_update(SPObject *object, SPCtx *ctx, guint flags) -{ - debug("0x%08x",(unsigned int)object); +void SPMetadata::update(SPCtx* ctx, unsigned int flags) { + debug("0x%08x",(unsigned int)this); //SPMetadata *metadata = SP_METADATA(object); if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | @@ -145,29 +109,21 @@ static void sp_metadata_update(SPObject *object, SPCtx *ctx, guint flags) } - if (((SPObjectClass *) sp_metadata_parent_class)->update) - ((SPObjectClass *) sp_metadata_parent_class)->update(object, ctx, flags); +// SPObject::onUpdate(ctx, flags); } -/** - * 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) -{ - debug("0x%08x",(unsigned int)object); - //SPMetadata *metadata = SP_METADATA(object); +Inkscape::XML::Node* SPMetadata::write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, guint flags) { + debug("0x%08x",(unsigned int)this); - if ( repr != object->getRepr() ) { + if ( repr != this->getRepr() ) { if (repr) { - repr->mergeFrom(object->getRepr(), "id"); + repr->mergeFrom(this->getRepr(), "id"); } else { - repr = object->getRepr()->duplicate(doc); + repr = this->getRepr()->duplicate(doc); } } - if (((SPObjectClass *) sp_metadata_parent_class)->write) { - ((SPObjectClass *) sp_metadata_parent_class)->write(object, doc, repr, flags); - } + SPObject::write(doc, repr, flags); return repr; } |
