Fixed issue #405. Crash after deleting first pattern piece in the list.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2016-02-19 16:34:32 +02:00
parent e2bd5c51f2
commit 936a7fef07
3 changed files with 33 additions and 7 deletions

View File

@ -8,6 +8,9 @@
- New icon for VAL file. Updated Tape logo. Updated ico for standard measurements. - New icon for VAL file. Updated Tape logo. Updated ico for standard measurements.
- [#325] Check pattern for inverse compatibility. - [#325] Check pattern for inverse compatibility.
# Version 0.4.3
- [#405] Fixed crash after deleting first pattern piece in the list.
# Version 0.4.2 February 17, 2016 # Version 0.4.2 February 17, 2016
- Measurement Diagram is not shown on Mac OS X. - Measurement Diagram is not shown on Mac OS X.
- In dialog 'tool Spline Path' fixed broken selecting new point into the list of points. - In dialog 'tool Spline Path' fixed broken selecting new point into the list of points.

View File

@ -2783,7 +2783,10 @@ void VPattern::PrepareForParse(const Document &parse)
data->ClearForFullParse(); data->ClearForFullParse();
nameActivPP.clear(); nameActivPP.clear();
patternPieces.clear(); patternPieces.clear();
qDeleteAll(toolsOnRemove);//Remove all invisible on a scene objects. qDeleteAll(toolsOnRemove);//Remove all invisible on a scene objects.
toolsOnRemove.clear();
tools.clear(); tools.clear();
cursor = 0; cursor = 0;
history.clear(); history.clear();

View File

@ -36,10 +36,13 @@ DeletePatternPiece::DeletePatternPiece(VAbstractPattern *doc, const QString &nam
{ {
setText(tr("delete pattern piece %1").arg(namePP)); setText(tr("delete pattern piece %1").arg(namePP));
QDomElement patternP = doc->GetPPElement(namePP); const QDomElement patternP = doc->GetPPElement(namePP);
patternPiece = patternP.cloneNode().toElement(); patternPiece = patternP.cloneNode().toElement();
QDomNode previousPP = patternP.previousSibling();//find previous pattern piece const QDomElement previousPP = patternP.previousSibling().toElement();//find previous pattern piece
previousPPName = doc->GetParametrString(previousPP.toElement(), VAbstractPattern::AttrName, ""); if (not previousPP.isNull() && previousPP.tagName() == VAbstractPattern::TagDraw)
{
previousPPName = doc->GetParametrString(previousPP, VAbstractPattern::AttrName, "");
}
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -52,11 +55,28 @@ void DeletePatternPiece::undo()
qCDebug(vUndo, "Undo."); qCDebug(vUndo, "Undo.");
QDomElement rootElement = doc->documentElement(); QDomElement rootElement = doc->documentElement();
QDomNode previousPP = doc->GetPPElement(previousPPName);
rootElement.insertAfter(patternPiece, previousPP); if (not previousPPName.isEmpty())
{ // not first in the list, add after tag draw
const QDomNode previousPP = doc->GetPPElement(previousPPName);
rootElement.insertAfter(patternPiece, previousPP);
}
else
{ // first in the list, add after tag increments
const QDomNodeList list = rootElement.elementsByTagName(VAbstractPattern::TagIncrements);
QDomElement increment;
if (not list.isEmpty())
{
increment = list.at(0).toElement();
}
Q_ASSERT_X(not increment.isNull(), Q_FUNC_INFO, "Couldn't' find tag Increments");
rootElement.insertAfter(patternPiece, increment);
}
emit NeedFullParsing(); emit NeedFullParsing();
doc->ChangedActivPP(namePP); doc->ChangeActivPP(namePP);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -65,7 +85,7 @@ void DeletePatternPiece::redo()
qCDebug(vUndo, "Redo."); qCDebug(vUndo, "Redo.");
QDomElement rootElement = doc->documentElement(); QDomElement rootElement = doc->documentElement();
QDomElement patternPiece = doc->GetPPElement(namePP); const QDomElement patternPiece = doc->GetPPElement(namePP);
rootElement.removeChild(patternPiece); rootElement.removeChild(patternPiece);
emit NeedFullParsing(); emit NeedFullParsing();
} }