Initial framework for saving/restoring model state.

This commit is contained in:
Jim Evins
2016-04-28 22:19:56 -04:00
parent c69db1efd7
commit 231dc66c0d
12 changed files with 302 additions and 41 deletions
+124 -35
View File
@@ -119,41 +119,6 @@ QPainterPath Handle::pathAt( double scale,
}
///
/// HandleNorthWest Constructor
///
HandleNorthWest::HandleNorthWest( LabelModelObject* owner )
: Handle( owner, NW )
{
}
///
/// HandleNorthWest Destructor
///
HandleNorthWest::~HandleNorthWest()
{
}
///
/// Draw HandleNorthWest
///
void HandleNorthWest::draw( QPainter* painter, double scale ) const
{
drawAt( painter, scale, 0, 0, originHandleFillColor );
}
///
/// HandleNorthWest Path
///
QPainterPath HandleNorthWest::path( double scale ) const
{
return pathAt( scale, 0, 0 );
}
///
/// HandleNorth Constructor
///
@@ -171,6 +136,15 @@ HandleNorth::~HandleNorth()
}
///
/// HandleNorth Clone
///
HandleNorth* HandleNorth::clone( LabelModelObject* newOwner ) const
{
return new HandleNorth( newOwner );
}
///
/// Draw HandleNorth
///
@@ -206,6 +180,15 @@ HandleNorthEast::~HandleNorthEast()
}
///
/// HandleNorthEast Clone
///
HandleNorthEast* HandleNorthEast::clone( LabelModelObject* newOwner ) const
{
return new HandleNorthEast( newOwner );
}
///
/// Draw HandleNorthEast
///
@@ -241,6 +224,15 @@ HandleEast::~HandleEast()
}
///
/// HandleEast Clone
///
HandleEast* HandleEast::clone( LabelModelObject* newOwner ) const
{
return new HandleEast( newOwner );
}
///
/// Draw HandleEast
///
@@ -276,6 +268,15 @@ HandleSouthEast::~HandleSouthEast()
}
///
/// HandleSouthEast Clone
///
HandleSouthEast* HandleSouthEast::clone( LabelModelObject* newOwner ) const
{
return new HandleSouthEast( newOwner );
}
///
/// Draw HandleSouthEast
///
@@ -311,6 +312,15 @@ HandleSouth::~HandleSouth()
}
///
/// HandleSouth Clone
///
HandleSouth* HandleSouth::clone( LabelModelObject* newOwner ) const
{
return new HandleSouth( newOwner );
}
///
/// Draw HandleSouth
///
@@ -346,6 +356,15 @@ HandleSouthWest::~HandleSouthWest()
}
///
/// HandleSouthWest Clone
///
HandleSouthWest* HandleSouthWest::clone( LabelModelObject* newOwner ) const
{
return new HandleSouthWest( newOwner );
}
///
/// Draw HandleSouthWest
///
@@ -381,6 +400,15 @@ HandleWest::~HandleWest()
}
///
/// HandleWest Clone
///
HandleWest* HandleWest::clone( LabelModelObject* newOwner ) const
{
return new HandleWest( newOwner );
}
///
/// Draw HandleWest
///
@@ -399,6 +427,49 @@ QPainterPath HandleWest::path( double scale ) const
}
///
/// HandleNorthWest Constructor
///
HandleNorthWest::HandleNorthWest( LabelModelObject* owner )
: Handle( owner, NW )
{
}
///
/// HandleNorthWest Destructor
///
HandleNorthWest::~HandleNorthWest()
{
}
///
/// HandleNorthWest Clone
///
HandleNorthWest* HandleNorthWest::clone( LabelModelObject* newOwner ) const
{
return new HandleNorthWest( newOwner );
}
///
/// Draw HandleNorthWest
///
void HandleNorthWest::draw( QPainter* painter, double scale ) const
{
drawAt( painter, scale, 0, 0, originHandleFillColor );
}
///
/// HandleNorthWest Path
///
QPainterPath HandleNorthWest::path( double scale ) const
{
return pathAt( scale, 0, 0 );
}
///
/// HandleP1 Constructor
///
@@ -416,6 +487,15 @@ HandleP1::~HandleP1()
}
///
/// HandleP1 Clone
///
HandleP1* HandleP1::clone( LabelModelObject* newOwner ) const
{
return new HandleP1( newOwner );
}
///
/// Draw HandleP1
///
@@ -451,6 +531,15 @@ HandleP2::~HandleP2()
}
///
/// HandleP2 Clone
///
HandleP2* HandleP2::clone( LabelModelObject* newOwner ) const
{
return new HandleP2( newOwner );
}
///
/// Draw HandleP2
///
+20
View File
@@ -50,6 +50,12 @@ protected:
public:
virtual ~Handle();
////////////////////////////
// Duplication
////////////////////////////
virtual Handle* clone( LabelModelObject* newOwner ) const = 0;
////////////////////////////
// Attribue Methods
@@ -97,6 +103,7 @@ class HandleNorth : public Handle
public:
HandleNorth( LabelModelObject* owner );
virtual ~HandleNorth();
virtual HandleNorth* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -119,6 +126,7 @@ class HandleNorthEast : public Handle
public:
HandleNorthEast( LabelModelObject* owner );
virtual ~HandleNorthEast();
virtual HandleNorthEast* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -141,6 +149,7 @@ class HandleEast : public Handle
public:
HandleEast( LabelModelObject* owner );
virtual ~HandleEast();
virtual HandleEast* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -163,6 +172,7 @@ class HandleSouthEast : public Handle
public:
HandleSouthEast( LabelModelObject* owner );
virtual ~HandleSouthEast();
virtual HandleSouthEast* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -185,6 +195,7 @@ class HandleSouth : public Handle
public:
HandleSouth( LabelModelObject* owner );
virtual ~HandleSouth();
virtual HandleSouth* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -207,6 +218,7 @@ class HandleSouthWest : public Handle
public:
HandleSouthWest( LabelModelObject* owner );
virtual ~HandleSouthWest();
virtual HandleSouthWest* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -229,6 +241,7 @@ class HandleWest : public Handle
public:
HandleWest( LabelModelObject* owner );
virtual ~HandleWest();
virtual HandleWest* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -251,6 +264,7 @@ class HandleNorthWest : public Handle
public:
HandleNorthWest( LabelModelObject* owner );
virtual ~HandleNorthWest();
virtual HandleNorthWest* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -273,6 +287,7 @@ class HandleP1 : public Handle
public:
HandleP1( LabelModelObject* owner );
virtual ~HandleP1();
virtual HandleP1* clone( LabelModelObject* newOwner ) const;
////////////////////////////
@@ -296,6 +311,11 @@ public:
HandleP2( LabelModelObject* owner );
virtual ~HandleP2();
////////////////////////////
// Duplication
////////////////////////////
virtual HandleP2* clone( LabelModelObject* newOwner ) const;
////////////////////////////
// Drawing Methods
+43
View File
@@ -48,6 +48,49 @@ LabelModel::LabelModel() : mUntitledInstance(0), mModified(true), mTmplate(0), m
}
///
/// Save model state
///
LabelModel* LabelModel::save() const
{
LabelModel* savedModel = new LabelModel;
savedModel->restore( this );
return savedModel;
}
///
/// Restore model state
///
void LabelModel::restore( const LabelModel *savedModel )
{
// Clear current object list
foreach ( LabelModelObject* object, mObjectList )
{
delete object;
}
mObjectList.clear();
// Now copy state
mUntitledInstance = savedModel->mUntitledInstance;
mModified = savedModel->mModified;
mFileName = savedModel->mFileName;
mCompressionLevel = savedModel->mCompressionLevel;
mTmplate = savedModel->mTmplate;
mFrame = savedModel->mFrame;
mRotate = savedModel->mRotate;
foreach ( LabelModelObject* object, savedModel->mObjectList )
{
mObjectList.append( object->clone() );
}
emit changed();
emit selectionChanged();
}
///
/// Short name.
///
+7
View File
@@ -54,6 +54,13 @@ public:
LabelModel();
virtual ~LabelModel() {}
/////////////////////////////////
// Save/restore model state
/////////////////////////////////
LabelModel* save() const;
void restore( const LabelModel *savedModel );
/////////////////////////////////
// Signals
+18 -1
View File
@@ -33,7 +33,15 @@ namespace
///
/// Constructor
///
LabelModelBoxObject::LabelModelBoxObject( QObject* parent ) : LabelModelShapeObject(parent)
LabelModelBoxObject::LabelModelBoxObject()
{
}
///
/// Copy constructor
///
LabelModelBoxObject::LabelModelBoxObject( const LabelModelBoxObject* object ) : LabelModelShapeObject( object )
{
}
@@ -46,6 +54,15 @@ LabelModelBoxObject::~LabelModelBoxObject()
}
///
/// Clone
///
LabelModelBoxObject* LabelModelBoxObject::clone() const
{
return new LabelModelBoxObject( this );
}
///
/// Draw shadow of object
///
+8 -1
View File
@@ -36,9 +36,16 @@ class LabelModelBoxObject : public LabelModelShapeObject
// Lifecycle Methods
///////////////////////////////////////////////////////////////
public:
LabelModelBoxObject( QObject* parent = 0 );
LabelModelBoxObject();
LabelModelBoxObject( const LabelModelBoxObject* object );
virtual ~LabelModelBoxObject();
///////////////////////////////////////////////////////////////
// Object duplication
///////////////////////////////////////////////////////////////
virtual LabelModelBoxObject* clone() const;
///////////////////////////////////////////////////////////////
// Drawing operations
+31 -1
View File
@@ -41,7 +41,7 @@ int LabelModelObject::msNextId = 0;
///
/// Constructor
///
LabelModelObject::LabelModelObject( QObject *parent = 0 ) : QObject(parent)
LabelModelObject::LabelModelObject() : QObject(0)
{
mId = msNextId++;
@@ -63,6 +63,36 @@ LabelModelObject::LabelModelObject( QObject *parent = 0 ) : QObject(parent)
}
///
/// Copy constructor
///
LabelModelObject::LabelModelObject( const LabelModelObject* object )
{
mId = msNextId++;
mSelectedFlag = object->mSelectedFlag;
mX0 = object->mX0;
mY0 = object->mY0;
mW = object->mW;
mH = object->mH;
mShadowState = object->mShadowState;
mShadowX = object->mShadowX;
mShadowY = object->mShadowY;
mShadowOpacity = object->mShadowOpacity;
mShadowColorNode = object->mShadowColorNode;
foreach ( Handle* handle, object->mHandles )
{
mHandles.append( handle->clone( this ) );
}
mOutline = object->mOutline->clone( this );
mMatrix = object->mMatrix;
}
///
/// Destructor
///
+9 -1
View File
@@ -49,11 +49,19 @@ class LabelModelObject : public QObject
///////////////////////////////////////////////////////////////
// Lifecycle Methods
///////////////////////////////////////////////////////////////
protected:
LabelModelObject();
LabelModelObject( const LabelModelObject* object );
public:
LabelModelObject( QObject *parent );
virtual ~LabelModelObject();
///////////////////////////////////////////////////////////////
// Object duplication
///////////////////////////////////////////////////////////////
virtual LabelModelObject* clone() const = 0;
///////////////////////////////////////////////////////////////
// Signals
///////////////////////////////////////////////////////////////
+12 -1
View File
@@ -27,7 +27,7 @@
///
/// Constructor
///
LabelModelShapeObject::LabelModelShapeObject( QObject* parent ) : LabelModelObject(parent)
LabelModelShapeObject::LabelModelShapeObject()
{
mOutline = new Outline( this );
@@ -46,6 +46,17 @@ LabelModelShapeObject::LabelModelShapeObject( QObject* parent ) : LabelModelObje
}
///
/// Copy constructor
///
LabelModelShapeObject::LabelModelShapeObject( const LabelModelShapeObject* object ) : LabelModelObject(object)
{
mLineWidth = object->mLineWidth;
mLineColorNode = object->mLineColorNode;
mFillColorNode = object->mFillColorNode;
}
///
/// Destructor
///
+2 -1
View File
@@ -35,7 +35,8 @@ class LabelModelShapeObject : public LabelModelObject
// Lifecycle Methods
///////////////////////////////////////////////////////////////
protected:
LabelModelShapeObject( QObject* parent = 0 );
LabelModelShapeObject();
LabelModelShapeObject( const LabelModelShapeObject* object );
public:
virtual ~LabelModelShapeObject();
+21
View File
@@ -60,6 +60,18 @@ Outline::Outline( LabelModelObject* owner )
}
///
/// Outline Copy constructor
///
Outline::Outline( const Outline* outline, LabelModelObject* newOwner )
: mOwner(newOwner)
{
mDashes = outline->mDashes;
mPen1 = outline->mPen1;
mPen2 = outline->mPen2;
}
///
/// Outline Destructor
///
@@ -68,6 +80,15 @@ Outline::~Outline()
}
///
/// Clone Outline
///
Outline* Outline::clone( LabelModelObject* newOwner ) const
{
return new Outline( this, newOwner );
}
///
/// Draw Outline
///
+7
View File
@@ -39,8 +39,15 @@ class Outline
////////////////////////////
public:
Outline( LabelModelObject* owner );
Outline( const Outline* outline, LabelModelObject* newOwner );
virtual ~Outline();
////////////////////////////
// Duplication
////////////////////////////
Outline* clone( LabelModelObject* newOwner ) const;
////////////////////////////
// Drawing Methods