Fix crash when remove pieces.
This commit is contained in:
parent
6eb702b778
commit
ce1634e1ab
|
@ -639,6 +639,10 @@ void VPMainGraphicsView::RemovePiece() const
|
|||
}
|
||||
|
||||
const QList<VPGraphicsPiece *> &graphicsPieces = sheet->SceneData()->GraphicsPieces();
|
||||
|
||||
QVector<VPUndoMovePieceOnSheet *> commands;
|
||||
commands.reserve(graphicsPieces.size());
|
||||
|
||||
for (auto *graphicsPiece : graphicsPieces)
|
||||
{
|
||||
VPPiecePtr const piece = graphicsPiece->GetPiece();
|
||||
|
@ -646,14 +650,25 @@ void VPMainGraphicsView::RemovePiece() const
|
|||
if (not piece.isNull() && piece->IsSelected())
|
||||
{
|
||||
piece->SetSelected(false);
|
||||
|
||||
VPLayoutPtr const layout = m_layout.toStrongRef();
|
||||
if (not layout.isNull())
|
||||
{
|
||||
emit layout->PieceSelectionChanged(piece);
|
||||
layout->UndoStack()->push(new VPUndoMovePieceOnSheet(VPSheetPtr(), piece));
|
||||
|
||||
commands.append(new VPUndoMovePieceOnSheet(VPSheetPtr(), piece));
|
||||
}
|
||||
}
|
||||
|
||||
if (commands.size() > 1)
|
||||
{
|
||||
layout->UndoStack()->beginMacro(tr("Remove pieces"));
|
||||
}
|
||||
|
||||
for (auto *command : commands)
|
||||
{
|
||||
layout->UndoStack()->push(command);
|
||||
}
|
||||
|
||||
if (commands.size() > 1)
|
||||
{
|
||||
layout->UndoStack()->endMacro();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,9 +76,26 @@ void VPUndoMovePieceOnSheet::undo()
|
|||
piece->SetSheet(sourceSheet);
|
||||
piece->SetSelected(false);
|
||||
|
||||
if ((m_followGrainline || piece->IsFollowGrainline()) && !sourceSheet.isNull())
|
||||
{
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Wnoexcept")
|
||||
|
||||
VPTransformationOrigon origin;
|
||||
origin.custom = true;
|
||||
|
||||
QT_WARNING_POP
|
||||
|
||||
piece->RotateToGrainline(origin);
|
||||
}
|
||||
|
||||
if (not layout.isNull())
|
||||
{
|
||||
emit layout->PieceSheetChanged(piece);
|
||||
if (!sourceSheet.isNull())
|
||||
{
|
||||
emit layout->PieceTransformationChanged(piece);
|
||||
}
|
||||
emit layout->PieceSelectionChanged(piece);
|
||||
}
|
||||
}
|
||||
|
@ -115,7 +132,7 @@ void VPUndoMovePieceOnSheet::redo()
|
|||
piece->SetSelected(false);
|
||||
}
|
||||
|
||||
if (m_followGrainline || piece->IsFollowGrainline())
|
||||
if ((m_followGrainline || piece->IsFollowGrainline()) && !sourceSheet.isNull())
|
||||
{
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_GCC("-Wnoexcept")
|
||||
|
@ -131,7 +148,10 @@ void VPUndoMovePieceOnSheet::redo()
|
|||
if (not layout.isNull())
|
||||
{
|
||||
emit layout->PieceSheetChanged(piece);
|
||||
if (!sourceSheet.isNull())
|
||||
{
|
||||
emit layout->PieceTransformationChanged(piece);
|
||||
}
|
||||
emit layout->LayoutChanged();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user