From 906dafebe80c79cfcbed25ed931393fd572a1e90 Mon Sep 17 00:00:00 2001 From: BojanKverh Date: Sat, 10 Sep 2016 15:17:55 +0200 Subject: [PATCH] Finished the grainline parameters editing in detail dialog --HG-- branch : feature --- .../vtools/dialogs/tools/dialogdetail.cpp | 108 ++++++++++++++++++ src/libs/vtools/dialogs/tools/dialogdetail.h | 4 + src/libs/vtools/dialogs/tools/dialogdetail.ui | 6 +- src/libs/vtools/dialogs/tools/dialogtool.cpp | 3 + 4 files changed, 118 insertions(+), 3 deletions(-) diff --git a/src/libs/vtools/dialogs/tools/dialogdetail.cpp b/src/libs/vtools/dialogs/tools/dialogdetail.cpp index f61898ee3..efae6ce19 100644 --- a/src/libs/vtools/dialogs/tools/dialogdetail.cpp +++ b/src/libs/vtools/dialogs/tools/dialogdetail.cpp @@ -60,10 +60,12 @@ #include "../ifc/xml/vdomdocument.h" #include "../vpatterndb/vcontainer.h" +#include "../vpatterndb/calculator.h" #include "../vgeometry/vgobject.h" #include "../vmisc/vabstractapplication.h" #include "dialogtool.h" #include "vnodedetail.h" +#include "../support/dialogeditwrongformula.h" class QPointF; class QWidget; @@ -144,6 +146,8 @@ DialogDetail::DialogDetail(const VContainer *data, const quint32 &toolId, QWidge m_qslPlacements << tr("None") << tr("Cut on fold"); ui.comboBoxPlacement->addItems(m_qslPlacements); + ui.pushButtonRot->setIcon(QIcon("://icon/16x16/fx.png")); + ui.pushButtonLen->setIcon(QIcon("://icon/16x16/fx.png")); connect(ui.pushButtonAdd, &QPushButton::clicked, this, &DialogDetail::AddUpdate); connect(ui.pushButtonCancel, &QPushButton::clicked, this, &DialogDetail::Cancel); @@ -151,6 +155,11 @@ DialogDetail::DialogDetail(const VContainer *data, const quint32 &toolId, QWidge connect(ui.listWidgetMCP, &QListWidget::itemClicked, this, &DialogDetail::SetEditMode); connect(ui.comboBoxMaterial, &QComboBox::currentTextChanged, this, &DialogDetail::MaterialChanged); connect(ui.checkBoxGrainline, &QCheckBox::toggled, this, &DialogDetail::EnableGrainlineRotation); + connect(ui.pushButtonRot, &QPushButton::clicked, this, &DialogDetail::EditFormula); + connect(ui.pushButtonLen, &QPushButton::clicked, this, &DialogDetail::EditFormula); + connect(ui.lineEditLenFormula, &QLineEdit::textChanged, this, &DialogDetail::UpdateValue); + connect(ui.lineEditRotFormula, &QLineEdit::textChanged, this, &DialogDetail::UpdateValue); + SetAddMode(); EnableGrainlineRotation(); @@ -817,6 +826,65 @@ void DialogDetail::ClearFields() ui.comboBoxPlacement->setCurrentIndex(0); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogDetail::SetValue(QObject *pobjSender) +{ + QLineEdit* pleSender = dynamic_cast(pobjSender); + SCASSERT(pleSender != 0); + + QString qsFormula = pleSender->text().simplified(); + Calculator cal; + QString qsVal; + try + { + qsFormula.replace("\n", " "); + qsFormula = qApp->TrVars()->FormulaFromUser(qsFormula, qApp->Settings()->GetOsSeparator()); + qreal dVal; + dVal = cal.EvalFormula(data->PlainVariables(), qsFormula); + if (qIsInf(dVal) == true || qIsNaN(dVal) == true) + { + qsVal.clear(); + } + else + { + qsVal.setNum(dVal, 'f', 5); + } + } + catch (...) + { + qsVal.clear(); + } + + QLineEdit* pleVal; + QLabel* plbVal; + QString qsUnit; + if (pobjSender == ui.lineEditLenFormula) + { + pleVal = ui.lineEditLenValue; + plbVal = ui.labelLen; + qsUnit = " " + VDomDocument::UnitsToStr(qApp->patternUnit()); + } + else if (pobjSender == ui.lineEditRotFormula) + { + pleVal = ui.lineEditRotValue; + plbVal = ui.labelRot; + QChar ch(0x00b0); + qsUnit = ch; + } + else + { + // should not get here + return; + } + + if (qsVal.isEmpty() == false) + { + qsVal += qsUnit; + } + pleVal->setText(qsVal); + plbVal->setText(qsVal); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogDetail::SetAddMode() { @@ -874,3 +942,43 @@ void DialogDetail::EnableGrainlineRotation() ui.pushButtonRot->setEnabled(ui.checkBoxGrainline->isChecked()); ui.pushButtonLen->setEnabled(ui.checkBoxGrainline->isChecked()); } + +//--------------------------------------------------------------------------------------------------------------------- +void DialogDetail::EditFormula() +{ + QLineEdit* pleFormula; + bool bCheckZero; + + if (sender() == ui.pushButtonLen) + { + pleFormula = ui.lineEditLenFormula; + bCheckZero = true; + } + else if (sender() == ui.pushButtonRot) + { + pleFormula = ui.lineEditRotFormula; + bCheckZero = false; + } + else + { + // should get here! + return; + } + + DialogEditWrongFormula dlg(data, NULL_ID, this); + dlg.SetFormula(pleFormula->text()); + dlg.setCheckZero(bCheckZero); + if (dlg.exec() == true) + { + QString qsFormula = dlg.GetFormula(); + qsFormula.replace("\n", " "); + pleFormula->setText(qsFormula); + SetValue(pleFormula); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogDetail::UpdateValue(const QString&) +{ + SetValue(sender()); +} diff --git a/src/libs/vtools/dialogs/tools/dialogdetail.h b/src/libs/vtools/dialogs/tools/dialogdetail.h index d56787390..7c7c634d2 100644 --- a/src/libs/vtools/dialogs/tools/dialogdetail.h +++ b/src/libs/vtools/dialogs/tools/dialogdetail.h @@ -125,10 +125,14 @@ private: quint32 RowId(int i) const; + void SetValue(QObject* pobjSender); + private slots: void SetAddMode(); void SetEditMode(); void EnableGrainlineRotation(); + void EditFormula(); + void UpdateValue(const QString &); }; //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vtools/dialogs/tools/dialogdetail.ui b/src/libs/vtools/dialogs/tools/dialogdetail.ui index 6a5125508..555100038 100644 --- a/src/libs/vtools/dialogs/tools/dialogdetail.ui +++ b/src/libs/vtools/dialogs/tools/dialogdetail.ui @@ -544,7 +544,7 @@ 201 - + @@ -633,7 +633,7 @@ - f(x) + @@ -646,7 +646,7 @@ - f(x) + diff --git a/src/libs/vtools/dialogs/tools/dialogtool.cpp b/src/libs/vtools/dialogs/tools/dialogtool.cpp index 48a492a0c..246b8a2ad 100644 --- a/src/libs/vtools/dialogs/tools/dialogtool.cpp +++ b/src/libs/vtools/dialogs/tools/dialogtool.cpp @@ -469,8 +469,11 @@ void DialogTool::ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer *tim */ qreal DialogTool::Eval(const QString &text, bool &flag, QLabel *label, const QString& postfix, bool checkZero) { + qDebug() << "Eval started"; SCASSERT(label != nullptr); + qDebug() << "Label ok"; SCASSERT(labelEditFormula != nullptr); + qDebug() << "lef ok"; qreal result = INT_MIN;//Value can be 0, so use max imposible value