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 /// HandleNorth Constructor
/// ///
@@ -171,6 +136,15 @@ HandleNorth::~HandleNorth()
} }
///
/// HandleNorth Clone
///
HandleNorth* HandleNorth::clone( LabelModelObject* newOwner ) const
{
return new HandleNorth( newOwner );
}
/// ///
/// Draw HandleNorth /// Draw HandleNorth
/// ///
@@ -206,6 +180,15 @@ HandleNorthEast::~HandleNorthEast()
} }
///
/// HandleNorthEast Clone
///
HandleNorthEast* HandleNorthEast::clone( LabelModelObject* newOwner ) const
{
return new HandleNorthEast( newOwner );
}
/// ///
/// Draw HandleNorthEast /// Draw HandleNorthEast
/// ///
@@ -241,6 +224,15 @@ HandleEast::~HandleEast()
} }
///
/// HandleEast Clone
///
HandleEast* HandleEast::clone( LabelModelObject* newOwner ) const
{
return new HandleEast( newOwner );
}
/// ///
/// Draw HandleEast /// Draw HandleEast
/// ///
@@ -276,6 +268,15 @@ HandleSouthEast::~HandleSouthEast()
} }
///
/// HandleSouthEast Clone
///
HandleSouthEast* HandleSouthEast::clone( LabelModelObject* newOwner ) const
{
return new HandleSouthEast( newOwner );
}
/// ///
/// Draw HandleSouthEast /// Draw HandleSouthEast
/// ///
@@ -311,6 +312,15 @@ HandleSouth::~HandleSouth()
} }
///
/// HandleSouth Clone
///
HandleSouth* HandleSouth::clone( LabelModelObject* newOwner ) const
{
return new HandleSouth( newOwner );
}
/// ///
/// Draw HandleSouth /// Draw HandleSouth
/// ///
@@ -346,6 +356,15 @@ HandleSouthWest::~HandleSouthWest()
} }
///
/// HandleSouthWest Clone
///
HandleSouthWest* HandleSouthWest::clone( LabelModelObject* newOwner ) const
{
return new HandleSouthWest( newOwner );
}
/// ///
/// Draw HandleSouthWest /// Draw HandleSouthWest
/// ///
@@ -381,6 +400,15 @@ HandleWest::~HandleWest()
} }
///
/// HandleWest Clone
///
HandleWest* HandleWest::clone( LabelModelObject* newOwner ) const
{
return new HandleWest( newOwner );
}
/// ///
/// Draw HandleWest /// 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 /// HandleP1 Constructor
/// ///
@@ -416,6 +487,15 @@ HandleP1::~HandleP1()
} }
///
/// HandleP1 Clone
///
HandleP1* HandleP1::clone( LabelModelObject* newOwner ) const
{
return new HandleP1( newOwner );
}
/// ///
/// Draw HandleP1 /// Draw HandleP1
/// ///
@@ -451,6 +531,15 @@ HandleP2::~HandleP2()
} }
///
/// HandleP2 Clone
///
HandleP2* HandleP2::clone( LabelModelObject* newOwner ) const
{
return new HandleP2( newOwner );
}
/// ///
/// Draw HandleP2 /// Draw HandleP2
/// ///
+20
View File
@@ -50,6 +50,12 @@ protected:
public: public:
virtual ~Handle(); virtual ~Handle();
////////////////////////////
// Duplication
////////////////////////////
virtual Handle* clone( LabelModelObject* newOwner ) const = 0;
//////////////////////////// ////////////////////////////
// Attribue Methods // Attribue Methods
@@ -97,6 +103,7 @@ class HandleNorth : public Handle
public: public:
HandleNorth( LabelModelObject* owner ); HandleNorth( LabelModelObject* owner );
virtual ~HandleNorth(); virtual ~HandleNorth();
virtual HandleNorth* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -119,6 +126,7 @@ class HandleNorthEast : public Handle
public: public:
HandleNorthEast( LabelModelObject* owner ); HandleNorthEast( LabelModelObject* owner );
virtual ~HandleNorthEast(); virtual ~HandleNorthEast();
virtual HandleNorthEast* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -141,6 +149,7 @@ class HandleEast : public Handle
public: public:
HandleEast( LabelModelObject* owner ); HandleEast( LabelModelObject* owner );
virtual ~HandleEast(); virtual ~HandleEast();
virtual HandleEast* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -163,6 +172,7 @@ class HandleSouthEast : public Handle
public: public:
HandleSouthEast( LabelModelObject* owner ); HandleSouthEast( LabelModelObject* owner );
virtual ~HandleSouthEast(); virtual ~HandleSouthEast();
virtual HandleSouthEast* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -185,6 +195,7 @@ class HandleSouth : public Handle
public: public:
HandleSouth( LabelModelObject* owner ); HandleSouth( LabelModelObject* owner );
virtual ~HandleSouth(); virtual ~HandleSouth();
virtual HandleSouth* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -207,6 +218,7 @@ class HandleSouthWest : public Handle
public: public:
HandleSouthWest( LabelModelObject* owner ); HandleSouthWest( LabelModelObject* owner );
virtual ~HandleSouthWest(); virtual ~HandleSouthWest();
virtual HandleSouthWest* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -229,6 +241,7 @@ class HandleWest : public Handle
public: public:
HandleWest( LabelModelObject* owner ); HandleWest( LabelModelObject* owner );
virtual ~HandleWest(); virtual ~HandleWest();
virtual HandleWest* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -251,6 +264,7 @@ class HandleNorthWest : public Handle
public: public:
HandleNorthWest( LabelModelObject* owner ); HandleNorthWest( LabelModelObject* owner );
virtual ~HandleNorthWest(); virtual ~HandleNorthWest();
virtual HandleNorthWest* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -273,6 +287,7 @@ class HandleP1 : public Handle
public: public:
HandleP1( LabelModelObject* owner ); HandleP1( LabelModelObject* owner );
virtual ~HandleP1(); virtual ~HandleP1();
virtual HandleP1* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
@@ -296,6 +311,11 @@ public:
HandleP2( LabelModelObject* owner ); HandleP2( LabelModelObject* owner );
virtual ~HandleP2(); virtual ~HandleP2();
////////////////////////////
// Duplication
////////////////////////////
virtual HandleP2* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
// Drawing Methods // 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. /// Short name.
/// ///
+7
View File
@@ -54,6 +54,13 @@ public:
LabelModel(); LabelModel();
virtual ~LabelModel() {} virtual ~LabelModel() {}
/////////////////////////////////
// Save/restore model state
/////////////////////////////////
LabelModel* save() const;
void restore( const LabelModel *savedModel );
///////////////////////////////// /////////////////////////////////
// Signals // Signals
+18 -1
View File
@@ -33,7 +33,15 @@ namespace
/// ///
/// Constructor /// 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 /// Draw shadow of object
/// ///
+8 -1
View File
@@ -36,9 +36,16 @@ class LabelModelBoxObject : public LabelModelShapeObject
// Lifecycle Methods // Lifecycle Methods
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
public: public:
LabelModelBoxObject( QObject* parent = 0 ); LabelModelBoxObject();
LabelModelBoxObject( const LabelModelBoxObject* object );
virtual ~LabelModelBoxObject(); virtual ~LabelModelBoxObject();
///////////////////////////////////////////////////////////////
// Object duplication
///////////////////////////////////////////////////////////////
virtual LabelModelBoxObject* clone() const;
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Drawing operations // Drawing operations
+31 -1
View File
@@ -41,7 +41,7 @@ int LabelModelObject::msNextId = 0;
/// ///
/// Constructor /// Constructor
/// ///
LabelModelObject::LabelModelObject( QObject *parent = 0 ) : QObject(parent) LabelModelObject::LabelModelObject() : QObject(0)
{ {
mId = msNextId++; 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 /// Destructor
/// ///
+9 -1
View File
@@ -49,11 +49,19 @@ class LabelModelObject : public QObject
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Lifecycle Methods // Lifecycle Methods
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
protected:
LabelModelObject();
LabelModelObject( const LabelModelObject* object );
public: public:
LabelModelObject( QObject *parent );
virtual ~LabelModelObject(); virtual ~LabelModelObject();
///////////////////////////////////////////////////////////////
// Object duplication
///////////////////////////////////////////////////////////////
virtual LabelModelObject* clone() const = 0;
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Signals // Signals
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
+12 -1
View File
@@ -27,7 +27,7 @@
/// ///
/// Constructor /// Constructor
/// ///
LabelModelShapeObject::LabelModelShapeObject( QObject* parent ) : LabelModelObject(parent) LabelModelShapeObject::LabelModelShapeObject()
{ {
mOutline = new Outline( this ); 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 /// Destructor
/// ///
+2 -1
View File
@@ -35,7 +35,8 @@ class LabelModelShapeObject : public LabelModelObject
// Lifecycle Methods // Lifecycle Methods
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
protected: protected:
LabelModelShapeObject( QObject* parent = 0 ); LabelModelShapeObject();
LabelModelShapeObject( const LabelModelShapeObject* object );
public: public:
virtual ~LabelModelShapeObject(); 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 /// Outline Destructor
/// ///
@@ -68,6 +80,15 @@ Outline::~Outline()
} }
///
/// Clone Outline
///
Outline* Outline::clone( LabelModelObject* newOwner ) const
{
return new Outline( this, newOwner );
}
/// ///
/// Draw Outline /// Draw Outline
/// ///
+7
View File
@@ -39,8 +39,15 @@ class Outline
//////////////////////////// ////////////////////////////
public: public:
Outline( LabelModelObject* owner ); Outline( LabelModelObject* owner );
Outline( const Outline* outline, LabelModelObject* newOwner );
virtual ~Outline(); virtual ~Outline();
////////////////////////////
// Duplication
////////////////////////////
Outline* clone( LabelModelObject* newOwner ) const;
//////////////////////////// ////////////////////////////
// Drawing Methods // Drawing Methods