Finished the grainline parameters editing in detail dialog

--HG--
branch : feature
This commit is contained in:
BojanKverh 2016-09-10 15:17:55 +02:00
parent 853c6852a8
commit 906dafebe8
4 changed files with 118 additions and 3 deletions

View file

@ -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<QLineEdit*>(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());
}

View file

@ -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 &);
};
//---------------------------------------------------------------------------------------------------------------------

View file

@ -544,7 +544,7 @@
<height>201</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0" columnminimumwidth="0,0,30">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0" columnminimumwidth="0,0,25">
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxGrainline">
<property name="text">
@ -633,7 +633,7 @@
</sizepolicy>
</property>
<property name="text">
<string>f(x)</string>
<string/>
</property>
</widget>
</item>
@ -646,7 +646,7 @@
</sizepolicy>
</property>
<property name="text">
<string>f(x)</string>
<string/>
</property>
</widget>
</item>

View file

@ -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