Fixed issue #938. Dialog Seam Allowance doesn't block user from saving broken

formula.

--HG--
branch : release
This commit is contained in:
Roman Telezhynskyi 2019-02-07 15:42:17 +02:00
parent f8d0777c84
commit 22d410fdd6
5 changed files with 178 additions and 34 deletions

View File

@ -10,6 +10,7 @@
- [#924] Valentina produces wrong passmark for rollback case. - [#924] Valentina produces wrong passmark for rollback case.
- [#930] Valentina doesn't update translation for variables after dynamic language switch. - [#930] Valentina doesn't update translation for variables after dynamic language switch.
- [#931] Variable translation for Greek and Chinese are broken. - [#931] Variable translation for Greek and Chinese are broken.
- [#938] Dialog Seam Allowance doesn't block user from saving broken formula.
# Version 0.6.1 October 23, 2018 # Version 0.6.1 October 23, 2018
- [#885] Regression. Broken support for multi size measurements. - [#885] Regression. Broken support for multi size measurements.

View File

@ -1048,13 +1048,29 @@ VPieceLabelData VPattern::ParsePieceDataTag(const QDomElement &domElement, VPiec
ppData.SetOnFold(GetParametrBool(domElement, AttrOnFold, falseStr)); ppData.SetOnFold(GetParametrBool(domElement, AttrOnFold, falseStr));
ppData.SetPos(QPointF(GetParametrDouble(domElement, AttrMx, QChar('0')), ppData.SetPos(QPointF(GetParametrDouble(domElement, AttrMx, QChar('0')),
GetParametrDouble(domElement, AttrMy, QChar('0')))); GetParametrDouble(domElement, AttrMy, QChar('0'))));
ppData.SetLabelWidth(GetParametrString(domElement, AttrWidth, QChar('1')));
ppData.SetLabelHeight(GetParametrString(domElement, AttrHeight, QChar('1')));
ppData.SetFontSize(static_cast<int>(GetParametrUInt(domElement, VToolSeamAllowance::AttrFont, QChar('0')))); ppData.SetFontSize(static_cast<int>(GetParametrUInt(domElement, VToolSeamAllowance::AttrFont, QChar('0'))));
ppData.SetRotation(GetParametrString(domElement, AttrRotation, QChar('0'))); ppData.SetRotation(GetParametrString(domElement, AttrRotation, QChar('0')));
ppData.SetCenterPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrCenterPin, NULL_ID_STR));
ppData.SetTopLeftPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrTopLeftPin, NULL_ID_STR)); const quint32 topLeftPin = GetParametrUInt(domElement, VToolSeamAllowance::AttrTopLeftPin, NULL_ID_STR);
ppData.SetBottomRightPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrBottomRightPin, NULL_ID_STR)); const quint32 bottomRightPin = GetParametrUInt(domElement, VToolSeamAllowance::AttrBottomRightPin, NULL_ID_STR);
if (topLeftPin != NULL_ID && bottomRightPin != NULL_ID && topLeftPin != bottomRightPin)
{
ppData.SetTopLeftPin(topLeftPin);
ppData.SetBottomRightPin(bottomRightPin);
ppData.SetCenterPin(NULL_ID);
ppData.SetLabelWidth(QChar('1'));
ppData.SetLabelHeight(QChar('1'));
}
else
{
ppData.SetTopLeftPin(NULL_ID);
ppData.SetBottomRightPin(NULL_ID);
ppData.SetCenterPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrCenterPin, NULL_ID_STR));
ppData.SetLabelWidth(GetParametrString(domElement, AttrWidth, QChar('1')));
ppData.SetLabelHeight(GetParametrString(domElement, AttrHeight, QChar('1')));
}
ppData.SetLabelTemplate(GetLabelTemplate(domElement)); ppData.SetLabelTemplate(GetLabelTemplate(domElement));
return ppData; return ppData;
} }
@ -1065,13 +1081,29 @@ VPatternLabelData VPattern::ParsePiecePatternInfo(const QDomElement &domElement,
patternInfo.SetVisible(GetParametrBool(domElement, AttrVisible, trueStr)); patternInfo.SetVisible(GetParametrBool(domElement, AttrVisible, trueStr));
patternInfo.SetPos(QPointF(GetParametrDouble(domElement, AttrMx, QChar('0')), patternInfo.SetPos(QPointF(GetParametrDouble(domElement, AttrMx, QChar('0')),
GetParametrDouble(domElement, AttrMy, QChar('0')))); GetParametrDouble(domElement, AttrMy, QChar('0'))));
patternInfo.SetLabelWidth(GetParametrString(domElement, AttrWidth, QChar('1')));
patternInfo.SetLabelHeight(GetParametrString(domElement, AttrHeight, QChar('1')));
patternInfo.SetFontSize(static_cast<int>(GetParametrUInt(domElement, VToolSeamAllowance::AttrFont, QChar('0')))); patternInfo.SetFontSize(static_cast<int>(GetParametrUInt(domElement, VToolSeamAllowance::AttrFont, QChar('0'))));
patternInfo.SetRotation(GetParametrString(domElement, AttrRotation, QChar('0'))); patternInfo.SetRotation(GetParametrString(domElement, AttrRotation, QChar('0')));
patternInfo.SetCenterPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrCenterPin, NULL_ID_STR));
patternInfo.SetTopLeftPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrTopLeftPin, NULL_ID_STR)); const quint32 topLeftPin = GetParametrUInt(domElement, VToolSeamAllowance::AttrTopLeftPin, NULL_ID_STR);
patternInfo.SetBottomRightPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrBottomRightPin, NULL_ID_STR)); const quint32 bottomRightPin = GetParametrUInt(domElement, VToolSeamAllowance::AttrBottomRightPin, NULL_ID_STR);
if (topLeftPin != NULL_ID && bottomRightPin != NULL_ID && topLeftPin != bottomRightPin)
{
patternInfo.SetTopLeftPin(topLeftPin);
patternInfo.SetBottomRightPin(bottomRightPin);
patternInfo.SetCenterPin(NULL_ID);
patternInfo.SetLabelWidth(QChar('1'));
patternInfo.SetLabelHeight(QChar('1'));
}
else
{
patternInfo.SetTopLeftPin(NULL_ID);
patternInfo.SetBottomRightPin(NULL_ID);
patternInfo.SetCenterPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrCenterPin, NULL_ID_STR));
patternInfo.SetLabelWidth(GetParametrString(domElement, AttrWidth, QChar('1')));
patternInfo.SetLabelHeight(GetParametrString(domElement, AttrHeight, QChar('1')));
}
return patternInfo; return patternInfo;
} }
@ -1081,12 +1113,30 @@ VGrainlineData VPattern::ParsePieceGrainline(const QDomElement &domElement, VGra
gGeometry.SetVisible(GetParametrBool(domElement, AttrVisible, falseStr)); gGeometry.SetVisible(GetParametrBool(domElement, AttrVisible, falseStr));
gGeometry.SetPos(QPointF(GetParametrDouble(domElement, AttrMx, QChar('0')), gGeometry.SetPos(QPointF(GetParametrDouble(domElement, AttrMx, QChar('0')),
GetParametrDouble(domElement, AttrMy, QChar('0')))); GetParametrDouble(domElement, AttrMy, QChar('0'))));
gGeometry.SetLength(GetParametrString(domElement, AttrLength, QChar('1')));
gGeometry.SetRotation(GetParametrString(domElement, AttrRotation, "90"));
gGeometry.SetArrowType(static_cast<ArrowType>(GetParametrUInt(domElement, AttrArrows, QChar('0')))); gGeometry.SetArrowType(static_cast<ArrowType>(GetParametrUInt(domElement, AttrArrows, QChar('0'))));
gGeometry.SetCenterPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrCenterPin, NULL_ID_STR));
gGeometry.SetTopPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrTopPin, NULL_ID_STR)); const quint32 topPin = GetParametrUInt(domElement, VToolSeamAllowance::AttrTopPin, NULL_ID_STR);
gGeometry.SetBottomPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrBottomPin, NULL_ID_STR)); const quint32 bottomPin = GetParametrUInt(domElement, VToolSeamAllowance::AttrBottomPin, NULL_ID_STR);
if (topPin != NULL_ID && bottomPin != NULL_ID && topPin != bottomPin)
{
gGeometry.SetTopPin(topPin);
gGeometry.SetBottomPin(bottomPin);
gGeometry.SetLength(QChar('1'));
gGeometry.SetRotation(QString::number(90));
gGeometry.SetCenterPin(NULL_ID);
}
else
{
gGeometry.SetTopPin(NULL_ID);
gGeometry.SetBottomPin(NULL_ID);
gGeometry.SetLength(GetParametrString(domElement, AttrLength, QChar('1')));
gGeometry.SetRotation(GetParametrString(domElement, AttrRotation, QString::number(90)));
gGeometry.SetCenterPin(GetParametrUInt(domElement, VToolSeamAllowance::AttrCenterPin, NULL_ID_STR));
}
return gGeometry; return gGeometry;
} }

View File

@ -227,8 +227,17 @@ void ReadExpressionAttribute(QVector<VFormulaField> &expressions, const QDomElem
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
QList<QString> GetTokens(const VFormulaField &formula) QList<QString> GetTokens(const VFormulaField &formula)
{ {
QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(formula.expression, false, false)); try
return cal->GetTokens().values(); {
QScopedPointer<qmu::QmuTokenParser> cal(new qmu::QmuTokenParser(formula.expression, false, false));
return cal->GetTokens().values();
}
catch (const qmu::QmuParserError &e)
{
qWarning() << QObject::tr("Cannot get tokens from formula '%1'. Parser error: %2.")
.arg(formula.expression, e.GetMsg());
return QList<QString>();
}
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View File

@ -1773,7 +1773,6 @@ void DialogSeamAllowance::EnabledGrainline()
{ {
if (uiTabGrainline->groupBoxGrainline->isChecked() == true) if (uiTabGrainline->groupBoxGrainline->isChecked() == true)
{ {
UpdateGrainlineValues();
GrainlinePinPointChanged(); GrainlinePinPointChanged();
} }
else else
@ -2244,6 +2243,7 @@ void DialogSeamAllowance::GrainlinePinPointChanged()
m_ftb->SetTabText(TabOrder::Grainline, tr("Grainline")); m_ftb->SetTabText(TabOrder::Grainline, tr("Grainline"));
} }
} }
EnableGrainlineFormulaControls(not flagGPin);
UpdateGrainlineValues(); UpdateGrainlineValues();
ChangeColor(uiTabGrainline->labelGrainlineTopPin, color); ChangeColor(uiTabGrainline->labelGrainlineTopPin, color);
ChangeColor(uiTabGrainline->labelGrainlineBottomPin, color); ChangeColor(uiTabGrainline->labelGrainlineBottomPin, color);
@ -2277,6 +2277,7 @@ void DialogSeamAllowance::DetailPinPointChanged()
QIcon(":/icons/win.icon.theme/16x16/status/dialog-warning.png")); QIcon(":/icons/win.icon.theme/16x16/status/dialog-warning.png"));
uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon); uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon);
} }
EnableDetailLabelFormulaControls(not flagDPin);
UpdateDetailLabelValues(); UpdateDetailLabelValues();
ChangeColor(uiTabLabels->labelDLTopLeftPin, color); ChangeColor(uiTabLabels->labelDLTopLeftPin, color);
ChangeColor(uiTabLabels->labelDLBottomRightPin, color); ChangeColor(uiTabLabels->labelDLBottomRightPin, color);
@ -2310,6 +2311,7 @@ void DialogSeamAllowance::PatternPinPointChanged()
QIcon(":/icons/win.icon.theme/16x16/status/dialog-warning.png")); QIcon(":/icons/win.icon.theme/16x16/status/dialog-warning.png"));
uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon); uiTabLabels->tabWidget->setTabIcon(uiTabLabels->tabWidget->indexOf(uiTabLabels->tabLabels), icon);
} }
EnablePatternLabelFormulaControls(not flagPPin);
UpdatePatternLabelValues(); UpdatePatternLabelValues();
ChangeColor(uiTabLabels->labelPLTopLeftPin, color); ChangeColor(uiTabLabels->labelPLTopLeftPin, color);
ChangeColor(uiTabLabels->labelPLBottomRightPin, color); ChangeColor(uiTabLabels->labelPLBottomRightPin, color);
@ -2355,29 +2357,65 @@ VPiece DialogSeamAllowance::CreatePiece() const
piece.GetPatternPieceData().SetQuantity(uiTabLabels->spinBoxQuantity->value()); piece.GetPatternPieceData().SetQuantity(uiTabLabels->spinBoxQuantity->value());
piece.GetPatternPieceData().SetOnFold(uiTabLabels->checkBoxFold->isChecked()); piece.GetPatternPieceData().SetOnFold(uiTabLabels->checkBoxFold->isChecked());
piece.GetPatternPieceData().SetLabelTemplate(m_templateLines); piece.GetPatternPieceData().SetLabelTemplate(m_templateLines);
piece.GetPatternPieceData().SetLabelWidth(GetFormulaFromUser(uiTabLabels->lineEditDLWidthFormula));
piece.GetPatternPieceData().SetLabelHeight(GetFormulaFromUser(uiTabLabels->lineEditDLHeightFormula));
piece.GetPatternPieceData().SetRotation(GetFormulaFromUser(uiTabLabels->lineEditDLAngleFormula)); piece.GetPatternPieceData().SetRotation(GetFormulaFromUser(uiTabLabels->lineEditDLAngleFormula));
piece.GetPatternPieceData().SetVisible(uiTabLabels->groupBoxDetailLabel->isChecked()); piece.GetPatternPieceData().SetVisible(uiTabLabels->groupBoxDetailLabel->isChecked());
piece.GetPatternPieceData().SetCenterPin(getCurrentObjectId(uiTabLabels->comboBoxDLCenterPin));
piece.GetPatternPieceData().SetTopLeftPin(getCurrentObjectId(uiTabLabels->comboBoxDLTopLeftPin)); if (not flagDPin)
piece.GetPatternPieceData().SetBottomRightPin(getCurrentObjectId(uiTabLabels->comboBoxDLBottomRightPin)); {
piece.GetPatternPieceData().SetLabelWidth(GetFormulaFromUser(uiTabLabels->lineEditDLWidthFormula));
piece.GetPatternPieceData().SetLabelHeight(GetFormulaFromUser(uiTabLabels->lineEditDLHeightFormula));
piece.GetPatternPieceData().SetCenterPin(getCurrentObjectId(uiTabLabels->comboBoxDLCenterPin));
piece.GetPatternPieceData().SetTopLeftPin(NULL_ID);
piece.GetPatternPieceData().SetBottomRightPin(NULL_ID);
}
else
{
piece.GetPatternPieceData().SetLabelWidth(QString::number(1));
piece.GetPatternPieceData().SetLabelHeight(QString::number(1));
piece.GetPatternPieceData().SetCenterPin(NULL_ID);
piece.GetPatternPieceData().SetTopLeftPin(getCurrentObjectId(uiTabLabels->comboBoxDLTopLeftPin));
piece.GetPatternPieceData().SetBottomRightPin(getCurrentObjectId(uiTabLabels->comboBoxDLBottomRightPin));
}
piece.GetPatternInfo().SetVisible(uiTabLabels->groupBoxPatternLabel->isChecked()); piece.GetPatternInfo().SetVisible(uiTabLabels->groupBoxPatternLabel->isChecked());
piece.GetPatternInfo().SetCenterPin(getCurrentObjectId(uiTabLabels->comboBoxPLCenterPin));
piece.GetPatternInfo().SetTopLeftPin(getCurrentObjectId(uiTabLabels->comboBoxPLTopLeftPin));
piece.GetPatternInfo().SetBottomRightPin(getCurrentObjectId(uiTabLabels->comboBoxPLBottomRightPin));
piece.GetPatternInfo().SetLabelWidth(GetFormulaFromUser(uiTabLabels->lineEditPLWidthFormula));
piece.GetPatternInfo().SetLabelHeight(GetFormulaFromUser(uiTabLabels->lineEditPLHeightFormula));
piece.GetPatternInfo().SetRotation(GetFormulaFromUser(uiTabLabels->lineEditPLAngleFormula)); piece.GetPatternInfo().SetRotation(GetFormulaFromUser(uiTabLabels->lineEditPLAngleFormula));
if (not flagPPin)
{
piece.GetPatternInfo().SetCenterPin(getCurrentObjectId(uiTabLabels->comboBoxPLCenterPin));
piece.GetPatternInfo().SetTopLeftPin(NULL_ID);
piece.GetPatternInfo().SetBottomRightPin(NULL_ID);
piece.GetPatternInfo().SetLabelWidth(GetFormulaFromUser(uiTabLabels->lineEditPLWidthFormula));
piece.GetPatternInfo().SetLabelHeight(GetFormulaFromUser(uiTabLabels->lineEditPLHeightFormula));
}
else
{
piece.GetPatternInfo().SetCenterPin(NULL_ID);
piece.GetPatternInfo().SetTopLeftPin(getCurrentObjectId(uiTabLabels->comboBoxPLTopLeftPin));
piece.GetPatternInfo().SetBottomRightPin(getCurrentObjectId(uiTabLabels->comboBoxPLBottomRightPin));
piece.GetPatternInfo().SetLabelWidth(QString::number(1));
piece.GetPatternInfo().SetLabelHeight(QString::number(1));
}
piece.GetGrainlineGeometry().SetVisible(uiTabGrainline->groupBoxGrainline->isChecked()); piece.GetGrainlineGeometry().SetVisible(uiTabGrainline->groupBoxGrainline->isChecked());
piece.GetGrainlineGeometry().SetRotation(GetFormulaFromUser(uiTabGrainline->lineEditRotFormula));
piece.GetGrainlineGeometry().SetLength(GetFormulaFromUser(uiTabGrainline->lineEditLenFormula));
piece.GetGrainlineGeometry().SetArrowType(static_cast<ArrowType>(uiTabGrainline->comboBoxArrow->currentIndex())); piece.GetGrainlineGeometry().SetArrowType(static_cast<ArrowType>(uiTabGrainline->comboBoxArrow->currentIndex()));
piece.GetGrainlineGeometry().SetCenterPin(getCurrentObjectId(uiTabGrainline->comboBoxGrainlineCenterPin));
piece.GetGrainlineGeometry().SetTopPin(getCurrentObjectId(uiTabGrainline->comboBoxGrainlineTopPin)); if (not flagGPin)
piece.GetGrainlineGeometry().SetBottomPin(getCurrentObjectId(uiTabGrainline->comboBoxGrainlineBottomPin)); {
piece.GetGrainlineGeometry().SetRotation(GetFormulaFromUser(uiTabGrainline->lineEditRotFormula));
piece.GetGrainlineGeometry().SetLength(GetFormulaFromUser(uiTabGrainline->lineEditLenFormula));
piece.GetGrainlineGeometry().SetCenterPin(getCurrentObjectId(uiTabGrainline->comboBoxGrainlineCenterPin));
piece.GetGrainlineGeometry().SetTopPin(NULL_ID);
piece.GetGrainlineGeometry().SetBottomPin(NULL_ID);
}
else
{
piece.GetGrainlineGeometry().SetRotation(QString::number(90));
piece.GetGrainlineGeometry().SetLength(QChar('1'));
piece.GetGrainlineGeometry().SetCenterPin(NULL_ID);
piece.GetGrainlineGeometry().SetTopPin(getCurrentObjectId(uiTabGrainline->comboBoxGrainlineTopPin));
piece.GetGrainlineGeometry().SetBottomPin(getCurrentObjectId(uiTabGrainline->comboBoxGrainlineBottomPin));
}
return piece; return piece;
} }
@ -3326,6 +3364,48 @@ QString DialogSeamAllowance::GetDefaultPieceName() const
return name; return name;
} }
//---------------------------------------------------------------------------------------------------------------------
void DialogSeamAllowance::EnableGrainlineFormulaControls(bool enable)
{
uiTabGrainline->pushButtonRot->setEnabled(enable);
uiTabGrainline->lineEditRotFormula->setEnabled(enable);
uiTabGrainline->pushButtonShowRot->setEnabled(enable);
uiTabGrainline->pushButtonLen->setEnabled(enable);
uiTabGrainline->lineEditLenFormula->setEnabled(enable);
uiTabGrainline->pushButtonShowLen->setEnabled(enable);
uiTabGrainline->comboBoxGrainlineCenterPin->setEnabled(enable);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSeamAllowance::EnableDetailLabelFormulaControls(bool enable)
{
uiTabLabels->pushButtonDLWidth->setEnabled(enable);
uiTabLabels->lineEditDLWidthFormula->setEnabled(enable);
uiTabLabels->pushButtonShowDLWidth->setEnabled(enable);
uiTabLabels->pushButtonDLHeight->setEnabled(enable);
uiTabLabels->lineEditDLHeightFormula->setEnabled(enable);
uiTabLabels->pushButtonShowDLHeight->setEnabled(enable);
uiTabLabels->comboBoxDLCenterPin->setEnabled(enable);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogSeamAllowance::EnablePatternLabelFormulaControls(bool enable)
{
uiTabLabels->pushButtonPLWidth->setEnabled(enable);
uiTabLabels->lineEditPLWidthFormula->setEnabled(enable);
uiTabLabels->pushButtonShowPLWidth->setEnabled(enable);
uiTabLabels->pushButtonPLHeight->setEnabled(enable);
uiTabLabels->lineEditPLHeightFormula->setEnabled(enable);
uiTabLabels->pushButtonShowPLHeight->setEnabled(enable);
uiTabLabels->comboBoxPLCenterPin->setEnabled(enable);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void DialogSeamAllowance::SetMoveControls() void DialogSeamAllowance::SetMoveControls()
{ {

View File

@ -1,4 +1,4 @@
/************************************************************************ /************************************************************************
** **
** @file dialogseamallowance.h ** @file dialogseamallowance.h
** @author Roman Telezhynskyi <dismine(at)gmail.com> ** @author Roman Telezhynskyi <dismine(at)gmail.com>
@ -276,6 +276,10 @@ private:
VPlaceLabelItem CurrentPlaceLabel(quint32 id) const; VPlaceLabelItem CurrentPlaceLabel(quint32 id) const;
QString GetDefaultPieceName() const; QString GetDefaultPieceName() const;
void EnableGrainlineFormulaControls(bool enable);
void EnableDetailLabelFormulaControls(bool enable);
void EnablePatternLabelFormulaControls(bool enable);
}; };
#endif // DIALOGSEAMALLOWANCE_H #endif // DIALOGSEAMALLOWANCE_H