Block wrong formula and don't write to file.
--HG-- branch : feature
This commit is contained in:
parent
c2c64921ab
commit
7e25a27a0c
|
@ -1,4 +1,4 @@
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
**
|
**
|
||||||
** @file tmainwindow.cpp
|
** @file tmainwindow.cpp
|
||||||
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||||
|
@ -444,11 +444,11 @@ void TMainWindow::AddCustom()
|
||||||
VMeasurement *meash;
|
VMeasurement *meash;
|
||||||
if (mType == MeasurementsType::Standard)
|
if (mType == MeasurementsType::Standard)
|
||||||
{
|
{
|
||||||
meash = new VMeasurement(name, 0, 0, 0);
|
meash = new VMeasurement(currentRow, name, 0, 0, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
meash = new VMeasurement(data, currentRow, name, 0, "0");
|
meash = new VMeasurement(data, currentRow, name, 0, "0", true);
|
||||||
}
|
}
|
||||||
data->AddVariable(name, meash);
|
data->AddVariable(name, meash);
|
||||||
|
|
||||||
|
@ -507,7 +507,11 @@ void TMainWindow::ShowMData()
|
||||||
QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0);
|
QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0);
|
||||||
QSharedPointer<VMeasurement> meash = data->GetVariable<VMeasurement>(nameField->text());
|
QSharedPointer<VMeasurement> meash = data->GetVariable<VMeasurement>(nameField->text());
|
||||||
|
|
||||||
|
ui->lineEditName->blockSignals(true);
|
||||||
ui->lineEditName->setText(ClearCustomName(meash->GetName()));
|
ui->lineEditName->setText(ClearCustomName(meash->GetName()));
|
||||||
|
ui->lineEditName->blockSignals(false);
|
||||||
|
|
||||||
|
ui->plainTextEditDescription->blockSignals(true);
|
||||||
if (meash->IsCustom())
|
if (meash->IsCustom())
|
||||||
{
|
{
|
||||||
ui->plainTextEditDescription->setPlainText(meash->GetDescription());
|
ui->plainTextEditDescription->setPlainText(meash->GetDescription());
|
||||||
|
@ -517,19 +521,44 @@ void TMainWindow::ShowMData()
|
||||||
//Show from known description
|
//Show from known description
|
||||||
ui->plainTextEditDescription->setPlainText("");
|
ui->plainTextEditDescription->setPlainText("");
|
||||||
}
|
}
|
||||||
|
ui->plainTextEditDescription->blockSignals(false);
|
||||||
|
|
||||||
if (mType == MeasurementsType::Standard)
|
if (mType == MeasurementsType::Standard)
|
||||||
{
|
{
|
||||||
|
ui->labelCalculatedValue->blockSignals(true);
|
||||||
|
ui->spinBoxBaseValue->blockSignals(true);
|
||||||
|
ui->spinBoxInSizes->blockSignals(true);
|
||||||
|
ui->spinBoxInHeights->blockSignals(true);
|
||||||
|
|
||||||
ui->labelCalculatedValue->setText(QString().setNum(data->GetTableValue(nameField->text(), mType)));
|
ui->labelCalculatedValue->setText(QString().setNum(data->GetTableValue(nameField->text(), mType)));
|
||||||
ui->spinBoxBaseValue->setValue(static_cast<int>(meash->GetBase()));
|
ui->spinBoxBaseValue->setValue(static_cast<int>(meash->GetBase()));
|
||||||
ui->spinBoxInSizes->setValue(static_cast<int>(meash->GetKsize()));
|
ui->spinBoxInSizes->setValue(static_cast<int>(meash->GetKsize()));
|
||||||
ui->spinBoxInHeights->setValue(static_cast<int>(meash->GetKheight()));
|
ui->spinBoxInHeights->setValue(static_cast<int>(meash->GetKheight()));
|
||||||
|
|
||||||
|
ui->labelCalculatedValue->blockSignals(false);
|
||||||
|
ui->spinBoxBaseValue->blockSignals(false);
|
||||||
|
ui->spinBoxInSizes->blockSignals(false);
|
||||||
|
ui->spinBoxInHeights->blockSignals(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->formulaBaseHeight = ui->plainTextEditFormula->height();
|
|
||||||
EvalFormula(meash->GetFormula(), meash->GetData(), ui->labelCalculatedValue);
|
EvalFormula(meash->GetFormula(), meash->GetData(), ui->labelCalculatedValue);
|
||||||
ui->plainTextEditFormula->setPlainText(qApp->TrVars()->FormulaToUser(meash->GetFormula()));
|
|
||||||
|
ui->plainTextEditFormula->blockSignals(true);
|
||||||
|
|
||||||
|
QString formula;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
formula = qApp->TrVars()->FormulaToUser(meash->GetFormula());
|
||||||
|
}
|
||||||
|
catch (qmu::QmuParserError &e)
|
||||||
|
{
|
||||||
|
Q_UNUSED(e);
|
||||||
|
formula = meash->GetFormula();
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->plainTextEditFormula->setPlainText(formula);
|
||||||
|
ui->plainTextEditFormula->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m->ReadOnly())
|
if (m->ReadOnly())
|
||||||
|
@ -540,10 +569,15 @@ void TMainWindow::ShowMData()
|
||||||
{
|
{
|
||||||
MFields(true);
|
MFields(true);
|
||||||
|
|
||||||
if (not meash->IsCustom())
|
if (meash->IsCustom())
|
||||||
{
|
{
|
||||||
ui->plainTextEditDescription->setEnabled(false);
|
ui->plainTextEditDescription->setReadOnly(false);
|
||||||
ui->lineEditName->setEnabled(false);
|
ui->lineEditName->setReadOnly(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->plainTextEditDescription->setReadOnly(false);
|
||||||
|
ui->lineEditName->setReadOnly(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -601,10 +635,12 @@ void TMainWindow::SaveMName()
|
||||||
MeasurementsWasSaved(false);
|
MeasurementsWasSaved(false);
|
||||||
RefreshData();
|
RefreshData();
|
||||||
|
|
||||||
|
ui->tableWidget->blockSignals(true);
|
||||||
ui->tableWidget->selectRow(row);
|
ui->tableWidget->selectRow(row);
|
||||||
ui->tableWidget->resizeColumnsToContents();
|
ui->tableWidget->resizeColumnsToContents();
|
||||||
ui->tableWidget->resizeRowsToContents();
|
ui->tableWidget->resizeRowsToContents();
|
||||||
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
ui->tableWidget->blockSignals(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -623,16 +659,56 @@ void TMainWindow::SaveMValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0);
|
QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0);
|
||||||
m->SetMValue(nameField->text(), ui->plainTextEditFormula->toPlainText());
|
|
||||||
|
// Replace line return character with spaces for calc if exist
|
||||||
|
QString text = ui->plainTextEditFormula->toPlainText();
|
||||||
|
text.replace("\n", " ");
|
||||||
|
|
||||||
|
QTableWidgetItem *formulaField = ui->tableWidget->item(ui->tableWidget->currentRow(), 2);
|
||||||
|
if (formulaField->text() == text)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.isEmpty())
|
||||||
|
{
|
||||||
|
const QString postfix = VDomDocument::UnitsToStr(mUnit);//Show unit in dialog lable (cm, mm or inch)
|
||||||
|
ui->labelCalculatedValue->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString formula;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Translate to internal look.
|
||||||
|
formula = qApp->TrVars()->FormulaFromUser(text, true);
|
||||||
|
QSharedPointer<VMeasurement> meash = data->GetVariable<VMeasurement>(nameField->text());
|
||||||
|
EvalFormula(formula, meash->GetData(), ui->labelCalculatedValue);
|
||||||
|
}
|
||||||
|
catch (qmu::QmuParserError &e)
|
||||||
|
{
|
||||||
|
const QString postfix = VDomDocument::UnitsToStr(mUnit);//Show unit in dialog lable (cm, mm or inch)
|
||||||
|
ui->labelCalculatedValue->setText(tr("Error") + " (" + postfix + "). " +
|
||||||
|
tr("Parser error: %1").arg(e.GetMsg()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m->SetMValue(nameField->text(), formula);
|
||||||
|
|
||||||
MeasurementsWasSaved(false);
|
MeasurementsWasSaved(false);
|
||||||
|
|
||||||
|
const QTextCursor cursor = ui->plainTextEditFormula->textCursor();
|
||||||
|
|
||||||
RefreshData();
|
RefreshData();
|
||||||
|
|
||||||
|
ui->tableWidget->blockSignals(true);
|
||||||
ui->tableWidget->selectRow(row);
|
ui->tableWidget->selectRow(row);
|
||||||
ui->tableWidget->resizeColumnsToContents();
|
ui->tableWidget->resizeColumnsToContents();
|
||||||
ui->tableWidget->resizeRowsToContents();
|
ui->tableWidget->resizeRowsToContents();
|
||||||
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
ui->tableWidget->blockSignals(false);
|
||||||
|
|
||||||
|
ui->plainTextEditFormula->setTextCursor(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -719,12 +795,18 @@ void TMainWindow::SaveMDescription()
|
||||||
|
|
||||||
MeasurementsWasSaved(false);
|
MeasurementsWasSaved(false);
|
||||||
|
|
||||||
|
const QTextCursor cursor = ui->plainTextEditDescription->textCursor();
|
||||||
|
|
||||||
RefreshData();
|
RefreshData();
|
||||||
|
|
||||||
|
ui->tableWidget->blockSignals(true);
|
||||||
ui->tableWidget->selectRow(row);
|
ui->tableWidget->selectRow(row);
|
||||||
ui->tableWidget->resizeColumnsToContents();
|
ui->tableWidget->resizeColumnsToContents();
|
||||||
ui->tableWidget->resizeRowsToContents();
|
ui->tableWidget->resizeRowsToContents();
|
||||||
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
ui->tableWidget->blockSignals(false);
|
||||||
|
|
||||||
|
ui->plainTextEditDescription->setTextCursor(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -863,7 +945,9 @@ void TMainWindow::InitWindow()
|
||||||
connect(ui->plainTextEditNotes, &QPlainTextEdit::textChanged, this, &TMainWindow::SaveNotes);
|
connect(ui->plainTextEditNotes, &QPlainTextEdit::textChanged, this, &TMainWindow::SaveNotes);
|
||||||
connect(ui->pushButtonGrow, &QPushButton::clicked, this, &TMainWindow::DeployFormula);
|
connect(ui->pushButtonGrow, &QPushButton::clicked, this, &TMainWindow::DeployFormula);
|
||||||
|
|
||||||
connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &TMainWindow::SaveMValue);
|
this->formulaBaseHeight = ui->plainTextEditFormula->height();
|
||||||
|
connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &TMainWindow::SaveMValue,
|
||||||
|
Qt::UniqueConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->actionAddCustom->setEnabled(true);
|
ui->actionAddCustom->setEnabled(true);
|
||||||
|
@ -995,7 +1079,7 @@ bool TMainWindow::MaybeSave()
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void TMainWindow::AddCell(const QString &text, int row, int column)
|
void TMainWindow::AddCell(const QString &text, int row, int column, bool ok)
|
||||||
{
|
{
|
||||||
QTableWidgetItem *item = new QTableWidgetItem(text);
|
QTableWidgetItem *item = new QTableWidgetItem(text);
|
||||||
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
||||||
|
@ -1005,6 +1089,13 @@ void TMainWindow::AddCell(const QString &text, int row, int column)
|
||||||
flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
|
flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
|
||||||
item->setFlags(flags);
|
item->setFlags(flags);
|
||||||
|
|
||||||
|
if (not ok)
|
||||||
|
{
|
||||||
|
QBrush brush = item->foreground();
|
||||||
|
brush.setColor(Qt::red);
|
||||||
|
item->setForeground(brush);
|
||||||
|
}
|
||||||
|
|
||||||
ui->tableWidget->setItem(row, column, item);
|
ui->tableWidget->setItem(row, column, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1051,7 +1142,68 @@ void TMainWindow::SetDefaultSize(int value)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void TMainWindow::RefreshData()
|
void TMainWindow::RefreshData()
|
||||||
{
|
{
|
||||||
|
data->ClearVariables(VarType::Measurement);
|
||||||
|
m->ReadMeasurements();
|
||||||
|
|
||||||
|
RefreshTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void TMainWindow::RefreshTable()
|
||||||
|
{
|
||||||
|
ui->tableWidget->blockSignals(true);
|
||||||
|
ui->tableWidget->clearContents();
|
||||||
|
|
||||||
|
const QMap<QString, QSharedPointer<VMeasurement> > table = data->DataMeasurements();
|
||||||
|
QMap<int, QSharedPointer<VMeasurement> > orderedTable;
|
||||||
|
QMap<QString, QSharedPointer<VMeasurement> >::const_iterator iterMap;
|
||||||
|
for (iterMap = table.constBegin(); iterMap != table.constEnd(); ++iterMap)
|
||||||
|
{
|
||||||
|
QSharedPointer<VMeasurement> meash = iterMap.value();
|
||||||
|
orderedTable.insert(meash->Index(), meash);
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 currentRow = -1;
|
||||||
|
QMap<int, QSharedPointer<VMeasurement> >::const_iterator iMap;
|
||||||
|
ui->tableWidget->setRowCount ( orderedTable.size() );
|
||||||
|
for (iMap = orderedTable.constBegin(); iMap != orderedTable.constEnd(); ++iMap)
|
||||||
|
{
|
||||||
|
QSharedPointer<VMeasurement> meash = iMap.value();
|
||||||
|
currentRow++;
|
||||||
|
|
||||||
|
if (mType == MeasurementsType::Individual)
|
||||||
|
{
|
||||||
|
AddCell(meash->GetName(), currentRow, 0); // name
|
||||||
|
AddCell(QString().setNum(*meash->GetValue()), currentRow, 1, meash->IsFormulaOk()); // calculated value
|
||||||
|
|
||||||
|
QString formula;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
formula = qApp->TrVars()->FormulaToUser(meash->GetFormula());
|
||||||
|
}
|
||||||
|
catch (qmu::QmuParserError &e)
|
||||||
|
{
|
||||||
|
Q_UNUSED(e);
|
||||||
|
formula = meash->GetFormula();
|
||||||
|
}
|
||||||
|
|
||||||
|
AddCell(formula, currentRow, 2); // formula
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddCell(meash->GetName(), currentRow, 0); // name
|
||||||
|
AddCell(QString().setNum(data->GetTableValue(meash->GetName(), mType)), currentRow, 1,
|
||||||
|
meash->IsFormulaOk()); // calculated value
|
||||||
|
AddCell(QString().setNum(meash->GetBase()), currentRow, 3); // base value
|
||||||
|
AddCell(QString().setNum(meash->GetKsize()), currentRow, 4); // in sizes
|
||||||
|
AddCell(QString().setNum(meash->GetKheight()), currentRow, 5); // in heights
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->tableWidget->resizeColumnsToContents();
|
||||||
|
ui->tableWidget->resizeRowsToContents();
|
||||||
|
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
|
||||||
|
ui->tableWidget->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -40,6 +40,7 @@ namespace Ui
|
||||||
}
|
}
|
||||||
|
|
||||||
class QComboBox;
|
class QComboBox;
|
||||||
|
class QTableWidgetItem;
|
||||||
|
|
||||||
class TMainWindow : public QMainWindow
|
class TMainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
|
@ -117,13 +118,14 @@ private:
|
||||||
|
|
||||||
bool MaybeSave();
|
bool MaybeSave();
|
||||||
|
|
||||||
void AddCell(const QString &text, int row, int column);
|
void AddCell(const QString &text, int row, int column, bool ok = true);
|
||||||
|
|
||||||
QComboBox *SetGradationList(const QString &label, const QStringList &list);
|
QComboBox *SetGradationList(const QString &label, const QStringList &list);
|
||||||
void SetDefaultHeight(int value);
|
void SetDefaultHeight(int value);
|
||||||
void SetDefaultSize(int value);
|
void SetDefaultSize(int value);
|
||||||
|
|
||||||
void RefreshData();
|
void RefreshData();
|
||||||
|
void RefreshTable();
|
||||||
|
|
||||||
void Controls();
|
void Controls();
|
||||||
void MFields(bool enabled);
|
void MFields(bool enabled);
|
||||||
|
|
|
@ -70,7 +70,7 @@ void VIndividualMeasurements::ReadMeasurement(const QDomElement &domElement, con
|
||||||
{
|
{
|
||||||
qreal value = GetParametrDouble(domElement, AttrValue, "0.0");
|
qreal value = GetParametrDouble(domElement, AttrValue, "0.0");
|
||||||
value = UnitConvertor(value, MUnit(), qApp->patternUnit());
|
value = UnitConvertor(value, MUnit(), qApp->patternUnit());
|
||||||
data->AddVariable(tag, new VMeasurement(data, 0, tag, value, qApp->TrVars()->GuiText(tag),
|
data->AddVariable(tag, new VMeasurement(data, 0, tag, value, "", true, qApp->TrVars()->GuiText(tag),
|
||||||
qApp->TrVars()->Description(tag), tag));
|
qApp->TrVars()->Description(tag), tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ void VStandardMeasurements::ReadMeasurement(const QDomElement &domElement, const
|
||||||
qWarning()<<"Standard table can't use inch unit.";
|
qWarning()<<"Standard table can't use inch unit.";
|
||||||
}
|
}
|
||||||
|
|
||||||
data->AddVariable(tag, new VMeasurement(tag, value, size_increase, height_increase,
|
data->AddVariable(tag, new VMeasurement(0, tag, value, size_increase, height_increase,
|
||||||
qApp->TrVars()->GuiText(tag), qApp->TrVars()->Description(tag), tag));
|
qApp->TrVars()->GuiText(tag), qApp->TrVars()->Description(tag), tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include "vmeasurements.h"
|
#include "vmeasurements.h"
|
||||||
#include "../ifc/xml/vvstconverter.h"
|
#include "../ifc/xml/vvstconverter.h"
|
||||||
#include "../ifc/xml/vvitconverter.h"
|
#include "../ifc/xml/vvitconverter.h"
|
||||||
|
#include "../ifc/exception/vexceptionemptyparameter.h"
|
||||||
|
#include "../vpatterndb/calculator.h"
|
||||||
|
|
||||||
const QString VMeasurements::TagVST = QStringLiteral("vst");
|
const QString VMeasurements::TagVST = QStringLiteral("vst");
|
||||||
const QString VMeasurements::TagVIT = QStringLiteral("vit");
|
const QString VMeasurements::TagVIT = QStringLiteral("vit");
|
||||||
|
@ -157,6 +159,46 @@ void VMeasurements::MoveDown(const QString &name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VMeasurements::ReadMeasurements() const
|
||||||
|
{
|
||||||
|
const QDomNodeList list = elementsByTagName(TagMeasurement);
|
||||||
|
for (int i=0; i < list.size(); ++i)
|
||||||
|
{
|
||||||
|
const QDomElement dom = list.at(i).toElement();
|
||||||
|
|
||||||
|
const QString name = GetParametrString(dom, AttrName);
|
||||||
|
|
||||||
|
QString description;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
description = GetParametrString(dom, AttrDescription);
|
||||||
|
}
|
||||||
|
catch (VExceptionEmptyParameter &e)
|
||||||
|
{
|
||||||
|
Q_UNUSED(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
VMeasurement *meash;
|
||||||
|
if (type == MeasurementsType::Standard)
|
||||||
|
{
|
||||||
|
const quint32 base = GetParametrUInt(dom, AttrBase, "0");
|
||||||
|
const quint32 ksize = GetParametrUInt(dom, AttrSizeIncrease, "0");
|
||||||
|
const quint32 kheight = GetParametrUInt(dom, AttrHeightIncrease, "0");
|
||||||
|
|
||||||
|
meash = new VMeasurement(i, name, base, ksize, kheight, "", description);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString formula = GetParametrString(dom, AttrValue, "0");
|
||||||
|
bool ok = false;
|
||||||
|
const qreal value = EvalFormula(data, formula, &ok);
|
||||||
|
meash = new VMeasurement(data, i, name, value, formula, ok, "", description);
|
||||||
|
}
|
||||||
|
data->AddVariable(name, meash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
MeasurementsType VMeasurements::Type() const
|
MeasurementsType VMeasurements::Type() const
|
||||||
{
|
{
|
||||||
|
@ -549,3 +591,33 @@ QDomElement VMeasurements::FindM(const QString &name) const
|
||||||
|
|
||||||
return QDomElement();
|
return QDomElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
qreal VMeasurements::EvalFormula(VContainer *data, const QString &formula, bool *ok) const
|
||||||
|
{
|
||||||
|
if (formula.isEmpty())
|
||||||
|
{
|
||||||
|
*ok = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Replace line return character with spaces for calc if exist
|
||||||
|
QString f = formula;
|
||||||
|
f.replace("\n", " ");
|
||||||
|
Calculator *cal = new Calculator(data, type);
|
||||||
|
const qreal result = cal->EvalFormula(f);
|
||||||
|
delete cal;
|
||||||
|
|
||||||
|
*ok = true;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch (qmu::QmuParserError &e)
|
||||||
|
{
|
||||||
|
*ok = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -49,6 +49,8 @@ public:
|
||||||
void MoveUp(const QString &name);
|
void MoveUp(const QString &name);
|
||||||
void MoveDown(const QString &name);
|
void MoveDown(const QString &name);
|
||||||
|
|
||||||
|
void ReadMeasurements() const;
|
||||||
|
|
||||||
MeasurementsType Type() const;
|
MeasurementsType Type() const;
|
||||||
Unit MUnit() const;
|
Unit MUnit() const;
|
||||||
int BaseSize() const;
|
int BaseSize() const;
|
||||||
|
@ -126,6 +128,8 @@ private:
|
||||||
|
|
||||||
QDomElement MakeEmpty(const QString &name);
|
QDomElement MakeEmpty(const QString &name);
|
||||||
QDomElement FindM(const QString &name) const;
|
QDomElement FindM(const QString &name) const;
|
||||||
|
|
||||||
|
qreal EvalFormula(VContainer *data, const QString &formula, bool *ok) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VMEASUREMENTS_H
|
#endif // VMEASUREMENTS_H
|
||||||
|
|
|
@ -40,10 +40,10 @@
|
||||||
* @param description measurement full description
|
* @param description measurement full description
|
||||||
* @param tagName measurement's tag name in file
|
* @param tagName measurement's tag name in file
|
||||||
*/
|
*/
|
||||||
VMeasurement::VMeasurement(const QString &name, const qreal &base, const qreal &ksize,
|
VMeasurement::VMeasurement(quint32 index, const QString &name, const qreal &base, const qreal &ksize,
|
||||||
const qreal &kheight,
|
const qreal &kheight,
|
||||||
const QString &gui_text, const QString &description, const QString &tagName)
|
const QString &gui_text, const QString &description, const QString &tagName)
|
||||||
:VVariable(name, base, ksize, kheight, description), d(new VMeasurementData(gui_text, tagName))
|
:VVariable(name, base, ksize, kheight, description), d(new VMeasurementData(index, gui_text, tagName))
|
||||||
{
|
{
|
||||||
SetType(VarType::Measurement);
|
SetType(VarType::Measurement);
|
||||||
}
|
}
|
||||||
|
@ -57,10 +57,10 @@ VMeasurement::VMeasurement(const QString &name, const qreal &base, const qreal &
|
||||||
* @param description measurement full description
|
* @param description measurement full description
|
||||||
* @param tagName measurement's tag name in file
|
* @param tagName measurement's tag name in file
|
||||||
*/
|
*/
|
||||||
VMeasurement::VMeasurement(VContainer *data, quint32 id, const QString &name, const qreal &base,
|
VMeasurement::VMeasurement(VContainer *data, quint32 index, const QString &name, const qreal &base,
|
||||||
const QString &formula, const QString &gui_text, const QString &description,
|
const QString &formula, bool ok, const QString &gui_text, const QString &description,
|
||||||
const QString &tagName)
|
const QString &tagName)
|
||||||
:VVariable(name, base, description), d(new VMeasurementData(data, id, formula, gui_text, tagName))
|
:VVariable(name, base, description), d(new VMeasurementData(data, index, formula, ok, gui_text, tagName))
|
||||||
{
|
{
|
||||||
SetType(VarType::Measurement);
|
SetType(VarType::Measurement);
|
||||||
}
|
}
|
||||||
|
@ -228,6 +228,18 @@ bool VMeasurement::IsCustom() const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
int VMeasurement::Index() const
|
||||||
|
{
|
||||||
|
return d->index;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VMeasurement::IsFormulaOk() const
|
||||||
|
{
|
||||||
|
return d->formulaOk;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
VContainer *VMeasurement::GetData()
|
VContainer *VMeasurement::GetData()
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,11 +43,11 @@ class VContainer;
|
||||||
class VMeasurement :public VVariable
|
class VMeasurement :public VVariable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VMeasurement(const QString &name, const qreal &base, const qreal &ksize,
|
VMeasurement(quint32 index, const QString &name, const qreal &base, const qreal &ksize,
|
||||||
const qreal &kheight, const QString &gui_text = QString(), const QString &description = QString(),
|
const qreal &kheight, const QString &gui_text = QString(), const QString &description = QString(),
|
||||||
const QString &TagName = QString());
|
const QString &TagName = QString());
|
||||||
VMeasurement(VContainer *data, quint32 id, const QString &name, const qreal &base, const QString &formula,
|
VMeasurement(VContainer *data, quint32 index, const QString &name, const qreal &base, const QString &formula,
|
||||||
const QString &gui_text = QString(), const QString &description = QString(),
|
bool ok, const QString &gui_text = QString(), const QString &description = QString(),
|
||||||
const QString &TagName = QString());
|
const QString &TagName = QString());
|
||||||
VMeasurement(const VMeasurement &m);
|
VMeasurement(const VMeasurement &m);
|
||||||
VMeasurement &operator=(const VMeasurement &m);
|
VMeasurement &operator=(const VMeasurement &m);
|
||||||
|
@ -62,6 +62,9 @@ public:
|
||||||
|
|
||||||
bool IsCustom() const;
|
bool IsCustom() const;
|
||||||
|
|
||||||
|
int Index() const;
|
||||||
|
bool IsFormulaOk() const;
|
||||||
|
|
||||||
VContainer *GetData();
|
VContainer *GetData();
|
||||||
|
|
||||||
static QStringList ListHeights(QMap<GHeights, bool> heights, Unit patternUnit);
|
static QStringList ListHeights(QMap<GHeights, bool> heights, Unit patternUnit);
|
||||||
|
|
|
@ -42,27 +42,29 @@ class VMeasurementData : public QSharedData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
VMeasurementData(const QString &gui_text, const QString &tagName)
|
VMeasurementData(quint32 index, const QString &gui_text, const QString &tagName)
|
||||||
:data(VContainer(nullptr, nullptr)), id(0), gui_text(gui_text), _tagName(tagName)
|
:data(VContainer(nullptr, nullptr)), index(index), gui_text(gui_text), _tagName(tagName), formulaOk(true)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
VMeasurementData(VContainer *data, quint32 id, const QString &formula, const QString &gui_text,
|
VMeasurementData(VContainer *data, quint32 index, const QString &formula, bool ok, const QString &gui_text,
|
||||||
const QString &tagName)
|
const QString &tagName)
|
||||||
:data(*data), id(id), formula(formula), gui_text(gui_text), _tagName(tagName)
|
:data(*data), index(index), formula(formula), gui_text(gui_text), _tagName(tagName), formulaOk(ok)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
VMeasurementData(const VMeasurementData &m)
|
VMeasurementData(const VMeasurementData &m)
|
||||||
:QSharedData(m), data(m.data), id(m.id), formula(m.formula), gui_text(m.gui_text), _tagName(m._tagName)
|
:QSharedData(m), data(m.data), index(m.index), formula(m.formula), gui_text(m.gui_text), _tagName(m._tagName),
|
||||||
|
formulaOk(m.formulaOk)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual ~VMeasurementData();
|
virtual ~VMeasurementData();
|
||||||
|
|
||||||
/** @brief description description measurement */
|
/** @brief description description measurement */
|
||||||
VContainer data;
|
VContainer data;
|
||||||
quint32 id;
|
quint32 index;
|
||||||
QString formula;
|
QString formula;
|
||||||
QString gui_text;
|
QString gui_text;
|
||||||
QString _tagName;
|
QString _tagName;
|
||||||
|
bool formulaOk;
|
||||||
};
|
};
|
||||||
|
|
||||||
VMeasurementData::~VMeasurementData()
|
VMeasurementData::~VMeasurementData()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user