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:
@@ -661,6 +661,7 @@ namespace glabels
|
||||
break;
|
||||
|
||||
case ArrowResize:
|
||||
mUndoRedoModel->checkpoint( tr("Resize") );
|
||||
handleResizeMotion( xWorld, yWorld );
|
||||
break;
|
||||
|
||||
|
||||
+43
-5
@@ -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 );
|
||||
|
||||
@@ -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() );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user