diff --git a/glabels/LabelModel.cpp b/glabels/LabelModel.cpp index b3d7b4c..56d39e5 100644 --- a/glabels/LabelModel.cpp +++ b/glabels/LabelModel.cpp @@ -81,9 +81,15 @@ void LabelModel::restore( const LabelModel *savedModel ) mFrame = savedModel->mFrame; mRotate = savedModel->mRotate; - foreach ( LabelModelObject* object, savedModel->mObjectList ) + foreach ( LabelModelObject* savedObject, savedModel->mObjectList ) { - mObjectList.append( object->clone() ); + LabelModelObject* object = savedObject->clone(); + + object->setParent( this ); + mObjectList << object; + + connect( object, SIGNAL(changed()), this, SLOT(onObjectChanged()) ); + connect( object, SIGNAL(moved()), this, SLOT(onObjectMoved()) ); } // Emit signals based on potential changes diff --git a/glabels/MainWindow.cpp b/glabels/MainWindow.cpp index 579ecdd..832d7d9 100644 --- a/glabels/MainWindow.cpp +++ b/glabels/MainWindow.cpp @@ -168,7 +168,7 @@ void MainWindow::setModel( LabelModel *label ) mPropertiesView->setModel( mModel, mUndoRedoModel ); mLabelEditor->setModel( mModel, mUndoRedoModel ); - mObjectEditor->setModel( mModel ); + mObjectEditor->setModel( mModel, mUndoRedoModel ); mPrintView->setModel( mModel ); mContents->setEnabled( true ); diff --git a/glabels/ObjectEditor.cpp b/glabels/ObjectEditor.cpp index 6c5d528..cfba1d9 100644 --- a/glabels/ObjectEditor.cpp +++ b/glabels/ObjectEditor.cpp @@ -24,6 +24,7 @@ #include "LabelModel.h" #include "LabelModelObject.h" #include "LabelModelBoxObject.h" +#include "UndoRedoModel.h" #include "Settings.h" @@ -51,9 +52,10 @@ ObjectEditor::ObjectEditor( QWidget *parent ) } -void ObjectEditor::setModel( LabelModel* model ) +void ObjectEditor::setModel( LabelModel* model, UndoRedoModel* undoRedoModel ) { mModel = model; + mUndoRedoModel = undoRedoModel; connect( mModel, SIGNAL(sizeChanged()), this, SLOT(onLabelSizeChanged()) ); connect( mModel, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()) ); @@ -277,6 +279,8 @@ void ObjectEditor::onLineControlsChanged() { mBlocked = true; + mUndoRedoModel->checkpoint( tr("Line") ); + mObject->setLineWidth( glabels::Distance::pt(lineWidthSpin->value()) ); mObject->setLineColorNode( lineColorButton->colorNode() ); @@ -291,6 +295,8 @@ void ObjectEditor::onFillControlsChanged() { mBlocked = true; + mUndoRedoModel->checkpoint( tr("Fill") ); + mObject->setFillColorNode( fillColorButton->colorNode() ); mBlocked = false; @@ -304,6 +310,8 @@ void ObjectEditor::onPositionControlsChanged() { mBlocked = true; + mUndoRedoModel->checkpoint( tr("Move") ); + glabels::Distance x = glabels::Distance(posXSpin->value(), mUnits); glabels::Distance y = glabels::Distance(posYSpin->value(), mUnits); @@ -320,6 +328,8 @@ void ObjectEditor::onRectSizeControlsChanged() { mBlocked = true; + mUndoRedoModel->checkpoint( tr("Size") ); + glabels::Distance spinW = glabels::Distance(sizeWSpin->value(), mUnits); glabels::Distance spinH = glabels::Distance(sizeHSpin->value(), mUnits); @@ -352,6 +362,8 @@ void ObjectEditor::onShadowControlsChanged() { mBlocked = true; + mUndoRedoModel->checkpoint( tr("Shadow") ); + mObject->setShadow( shadowEnableCheck->isChecked() ); mObject->setShadowX( glabels::Distance(shadowXSpin->value(), mUnits) ); mObject->setShadowY( glabels::Distance(shadowYSpin->value(), mUnits) ); diff --git a/glabels/ObjectEditor.h b/glabels/ObjectEditor.h index 1ea6293..eaa89da 100644 --- a/glabels/ObjectEditor.h +++ b/glabels/ObjectEditor.h @@ -24,9 +24,10 @@ #include "ui_ObjectEditor.h" #include "libglabels/Distance.h" - -class LabelModel; // Forward reference -class LabelModelObject; // Forward reference +// Forward references +class LabelModel; +class LabelModelObject; +class UndoRedoModel; /// @@ -47,7 +48,7 @@ public: ///////////////////////////////// // Public methods ///////////////////////////////// - void setModel( LabelModel* model ); + void setModel( LabelModel* model, UndoRedoModel* undoRedoModel ); ///////////////////////////////// @@ -85,6 +86,7 @@ private slots: private: LabelModel* mModel; LabelModelObject* mObject; + UndoRedoModel* mUndoRedoModel; glabels::Units mUnits; int mSpinDigits;