diff --git a/glabels/LabelModel.cpp b/glabels/LabelModel.cpp index c89c790..8a5a65c 100644 --- a/glabels/LabelModel.cpp +++ b/glabels/LabelModel.cpp @@ -29,6 +29,7 @@ #include "LabelModelObject.h" #include "LabelModelTextObject.h" +#include "LabelModelImageObject.h" #include "Region.h" #include "Size.h" #include "XmlLabelCreator.h" @@ -1406,7 +1407,13 @@ namespace glabels else if ( mimeData->hasImage() ) { // Create object from clipboard image - // TODO: create an image object from image + LabelModelImageObject* object = new LabelModelImageObject(); + object->setImage( qvariant_cast(mimeData->imageData()) ); + object->setSize( object->naturalSize() ); + object->setPosition( (w()-object->w())/2.0, (h()-object->h())/2.0 ); + addObject( object ); + unselectAll(); + selectObject( object ); } else if ( mimeData->hasText() ) { @@ -1416,6 +1423,7 @@ namespace glabels object->setSize( object->naturalSize() ); object->setPosition( (w()-object->w())/2.0, (h()-object->h())/2.0 ); addObject( object ); + unselectAll(); selectObject( object ); } } diff --git a/glabels/LabelModelImageObject.cpp b/glabels/LabelModelImageObject.cpp index 6d82415..be69510 100644 --- a/glabels/LabelModelImageObject.cpp +++ b/glabels/LabelModelImageObject.cpp @@ -119,6 +119,31 @@ namespace glabels } + /// + /// Image Property Default Setter + /// + void LabelModelImageObject::setImage( const QImage& value ) + { + if ( !value.isNull() ) + { + if ( mImage ) + { + delete mImage; + } + if ( mSvg ) + { + delete mSvg; + } + + mImage = new QImage(value); + quint16 cs = qChecksum( (const char*)mImage->constBits(), mImage->byteCount() ); + mFilenameNode = TextNode( false, QString("%image_%1%").arg( cs ) ); + + emit changed(); + } + } + + /// /// naturalSize Property Getter (assumes 72 DPI, i.e. 1pixel == 1pt) /// diff --git a/glabels/LabelModelImageObject.h b/glabels/LabelModelImageObject.h index bdd1ceb..4548c32 100644 --- a/glabels/LabelModelImageObject.h +++ b/glabels/LabelModelImageObject.h @@ -62,6 +62,11 @@ namespace glabels virtual TextNode filenameNode( void ) const; virtual void setFilenameNode( const TextNode& value ); + // + // Image Property: image + // + virtual void setImage( const QImage& value ); + // // Property: naturalSize // diff --git a/glabels/LabelModelObject.cpp b/glabels/LabelModelObject.cpp index 0a624e9..744f064 100644 --- a/glabels/LabelModelObject.cpp +++ b/glabels/LabelModelObject.cpp @@ -600,6 +600,16 @@ namespace glabels } + /// + /// Virtual Image Property Default Setter + /// (Overridden by concrete class) + /// + void LabelModelObject::setImage( const QImage& value ) + { + // empty + } + + /// /// Virtual Line Width Property Default Getter /// (Overridden by concrete class) diff --git a/glabels/LabelModelObject.h b/glabels/LabelModelObject.h index 483537c..de2f124 100644 --- a/glabels/LabelModelObject.h +++ b/glabels/LabelModelObject.h @@ -254,6 +254,12 @@ namespace glabels virtual void setFilenameNode( const TextNode &value ); + // + // Virtual Image Property: image + // + virtual void setImage( const QImage& value ); + + /////////////////////////////////////////////////////////////// // Shape Properties Virtual Interface ///////////////////////////////////////////////////////////////