Share Model merge; Merge initializers; undo/redo descs (#65)

- use "shared" pointer between Model and undo/redo instances
- adds missing initializers to Merge and Text classes
- adds checkpoints for mouse resize, barcode, and image reset.
- renames the position dialog checkpoint from Move -> Position to differentiate it from a mouse move.
- adds the Undo/Redo action descriptions to the menu items.
- adds unit tests for the Merge and Model change, and for ColorNode, RawText and TextNode.
This commit is contained in:
gitlost
2019-07-20 19:41:01 +01:00
committed by Jim Evins
parent f03aa0db3d
commit 6ab3a12b92
19 changed files with 1440 additions and 20 deletions
+1
View File
@@ -661,6 +661,7 @@ namespace glabels
break;
case ArrowResize:
mUndoRedoModel->checkpoint( tr("Resize") );
handleResizeMotion( xWorld, yWorld );
break;
+43 -5
View File
@@ -62,7 +62,7 @@ namespace glabels
///
/// Constructor
///
MainWindow::MainWindow() : mModel(nullptr)
MainWindow::MainWindow() : mModel(nullptr), mUndoRedoModel(nullptr)
{
setWindowIcon( Icons::Glabels() );
@@ -194,7 +194,15 @@ namespace glabels
///
MainWindow::~MainWindow()
{
// empty
if ( mUndoRedoModel )
{
delete mUndoRedoModel;
}
if ( mModel )
{
delete mModel->merge(); // Ownership of final Merge instance is ours
delete mModel;
}
}
@@ -212,7 +220,7 @@ namespace glabels
///
void MainWindow::setModel( model::Model* model )
{
mModel = model;
mModel = model; // Ownership passes to us
mUndoRedoModel = new UndoRedoModel( mModel );
mPropertiesView->setModel( mModel, mUndoRedoModel );
@@ -882,8 +890,38 @@ namespace glabels
fileExitAction->setEnabled( true );
// Edit actions
editUndoAction->setEnabled( hasModel && mUndoRedoModel->canUndo() );
editRedoAction->setEnabled( hasModel && mUndoRedoModel->canRedo() );
if ( hasModel )
{
if ( mUndoRedoModel->canUndo() )
{
editUndoAction->setEnabled( true );
/* Translators: %1 is the action description to undo. */
editUndoAction->setText( QString( tr("Undo %1") ).arg( mUndoRedoModel->undoDescription() ) );
}
else
{
editUndoAction->setEnabled( false );
editUndoAction->setText( tr("Undo") );
}
if ( mUndoRedoModel->canRedo() )
{
editRedoAction->setEnabled( true );
/* Translators: %1 is the action description to redo. */
editRedoAction->setText( QString( tr("Redo %1") ).arg( mUndoRedoModel->redoDescription() ) );
}
else
{
editRedoAction->setEnabled( false );
editRedoAction->setText( tr("Redo") );
}
}
else
{
editUndoAction->setEnabled( false );
editUndoAction->setText( tr("Undo") );
editRedoAction->setEnabled( false );
editRedoAction->setText( tr("Redo") );
}
editCutAction->setEnabled( isEditorPage && hasSelection );
editCopyAction->setEnabled( isEditorPage && hasSelection );
editPasteAction->setEnabled( isEditorPage && canPaste );
+5 -1
View File
@@ -631,7 +631,7 @@ namespace glabels
{
mBlocked = true;
mUndoRedoModel->checkpoint( tr("Move") );
mUndoRedoModel->checkpoint( tr("Position") );
model::Distance x = model::Distance(posXSpin->value(), mUnits);
model::Distance y = model::Distance(posYSpin->value(), mUnits);
@@ -744,6 +744,8 @@ namespace glabels
{
mBlocked = true;
mUndoRedoModel->checkpoint( tr("Barcode") );
barcode::Style bcStyle = barcodeStyleButton->bcStyle();
barcodeShowTextCheck->setEnabled( bcStyle.textOptional() );
@@ -778,6 +780,8 @@ namespace glabels
void ObjectEditor::onResetImageSize()
{
mUndoRedoModel->checkpoint( tr("Reset") );
mObject->setSize( mObject->naturalSize() );
}