Initial framework for saving/restoring model state.
This commit is contained in:
+124
-35
@@ -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
|
||||
///
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
///
|
||||
|
||||
@@ -54,6 +54,13 @@ public:
|
||||
LabelModel();
|
||||
virtual ~LabelModel() {}
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Save/restore model state
|
||||
/////////////////////////////////
|
||||
LabelModel* save() const;
|
||||
void restore( const LabelModel *savedModel );
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Signals
|
||||
|
||||
@@ -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
|
||||
///
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
///
|
||||
|
||||
@@ -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
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
///
|
||||
|
||||
@@ -35,7 +35,8 @@ class LabelModelShapeObject : public LabelModelObject
|
||||
// Lifecycle Methods
|
||||
///////////////////////////////////////////////////////////////
|
||||
protected:
|
||||
LabelModelShapeObject( QObject* parent = 0 );
|
||||
LabelModelShapeObject();
|
||||
LabelModelShapeObject( const LabelModelShapeObject* object );
|
||||
public:
|
||||
virtual ~LabelModelShapeObject();
|
||||
|
||||
|
||||
@@ -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
|
||||
///
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user