Working with new Increments.

--HG--
branch : feature
This commit is contained in:
Roman Telezhynskyi 2015-08-25 13:35:50 +03:00
parent f8b92a0e89
commit 5a1208655c
21 changed files with 1122 additions and 444 deletions

View file

@ -671,18 +671,11 @@ void TMainWindow::MoveUp()
return; return;
} }
QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0); QTableWidgetItem *nameField = ui->tableWidget->item(row, 0);
m->MoveUp(nameField->text()); m->MoveUp(nameField->text());
MeasurementsWasSaved(false); MeasurementsWasSaved(false);
RefreshData(); RefreshData();
ui->tableWidget->blockSignals(true);
ui->tableWidget->selectRow(row-1); ui->tableWidget->selectRow(row-1);
ui->tableWidget->blockSignals(false);
Controls(); // Buttons remove, up, down
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -695,18 +688,11 @@ void TMainWindow::MoveDown()
return; return;
} }
QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0); QTableWidgetItem *nameField = ui->tableWidget->item(row, 0);
m->MoveDown(nameField->text()); m->MoveDown(nameField->text());
MeasurementsWasSaved(false); MeasurementsWasSaved(false);
RefreshData(); RefreshData();
ui->tableWidget->blockSignals(true);
ui->tableWidget->selectRow(row+1); ui->tableWidget->selectRow(row+1);
ui->tableWidget->blockSignals(false);
Controls(); // Buttons remove, up, down
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -727,7 +713,7 @@ void TMainWindow::Fx()
QString text = ui->plainTextEditFormula->toPlainText(); QString text = ui->plainTextEditFormula->toPlainText();
text.replace("\n", " "); text.replace("\n", " ");
text = qApp->TrVars()->FormulaFromUser(text, true);
dialog->SetFormula(text); dialog->SetFormula(text);
const QString postfix = VDomDocument::UnitsToStr(mUnit, true);//Show unit in dialog lable (cm, mm or inch) const QString postfix = VDomDocument::UnitsToStr(mUnit, true);//Show unit in dialog lable (cm, mm or inch)
dialog->setPostfix(postfix); dialog->setPostfix(postfix);
@ -752,7 +738,7 @@ void TMainWindow::AddCustom()
QString name; QString name;
do do
{ {
name = QString(CustomSign + tr("M_%1")).arg(num); name = CustomMSign + tr("M_%1").arg(num);
num++; num++;
} while (data->IsUnique(name) == false); } while (data->IsUnique(name) == false);
@ -1000,7 +986,7 @@ void TMainWindow::ShowMData()
} }
else else
{ {
EvalFormula(meash->GetFormula(), meash->GetData(), ui->labelCalculatedValue); EvalFormula(meash->GetFormula(), false, meash->GetData(), ui->labelCalculatedValue);
ui->plainTextEditFormula->blockSignals(true); ui->plainTextEditFormula->blockSignals(true);
@ -1093,7 +1079,7 @@ void TMainWindow::SaveMName()
QString newName = ui->lineEditName->text(); QString newName = ui->lineEditName->text();
if (meash->IsCustom()) if (meash->IsCustom())
{ {
newName = CustomSign + newName; newName = CustomMSign + newName;
} }
if (data->IsUnique(newName)) if (data->IsUnique(newName))
@ -1144,23 +1130,26 @@ void TMainWindow::SaveMValue()
return; return;
} }
QString formula; // Translate to internal look.
try
QSharedPointer<VMeasurement> meash = data->GetVariable<VMeasurement>(nameField->text());
const bool ok = EvalFormula(text, true, meash->GetData(), ui->labelCalculatedValue);
if (not ok)
{ {
// 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; return;
} }
m->SetMValue(nameField->text(), formula); try
{
const QString formula = qApp->TrVars()->FormulaFromUser(text, true);
m->SetMValue(nameField->text(), formula);
}
catch (qmu::QmuParserError &e) // Just in case something bad happens
{
Q_UNUSED(e)
return;
}
MeasurementsWasSaved(false); MeasurementsWasSaved(false);
@ -1809,7 +1798,7 @@ void TMainWindow::MFields(bool enabled)
QString TMainWindow::ClearCustomName(const QString &name) const QString TMainWindow::ClearCustomName(const QString &name) const
{ {
QString clear = name; QString clear = name;
const int index = clear.indexOf(CustomSign); const int index = clear.indexOf(CustomMSign);
if (index == 0) if (index == 0)
{ {
clear.remove(0, 1); clear.remove(0, 1);
@ -1818,20 +1807,29 @@ QString TMainWindow::ClearCustomName(const QString &name) const
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void TMainWindow::EvalFormula(const QString &formula, VContainer *data, QLabel *label) bool TMainWindow::EvalFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label)
{ {
const QString postfix = VDomDocument::UnitsToStr(pUnit);//Show unit in dialog lable (cm, mm or inch) const QString postfix = VDomDocument::UnitsToStr(pUnit);//Show unit in dialog lable (cm, mm or inch)
if (formula.isEmpty()) if (formula.isEmpty())
{ {
label->setText(tr("Error") + " (" + postfix + ")"); label->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
label->setToolTip(tr("Empty field")); label->setToolTip(tr("Empty field"));
return false;
} }
else else
{ {
try try
{ {
// Replace line return character with spaces for calc if exist // Replace line return character with spaces for calc if exist
QString f = formula; QString f;
if (not fromUser)
{
f = qApp->TrVars()->FormulaFromUser(formula, true);
}
else
{
f = formula;
}
f.replace("\n", " "); f.replace("\n", " ");
Calculator *cal = new Calculator(data, mType); Calculator *cal = new Calculator(data, mType);
const qreal result = UnitConvertor(cal->EvalFormula(f), mUnit, pUnit); const qreal result = UnitConvertor(cal->EvalFormula(f), mUnit, pUnit);
@ -1839,11 +1837,13 @@ void TMainWindow::EvalFormula(const QString &formula, VContainer *data, QLabel *
label->setText(qApp->LocaleToString(result) + " " +postfix); label->setText(qApp->LocaleToString(result) + " " +postfix);
label->setToolTip(tr("Value")); label->setToolTip(tr("Value"));
return true;
} }
catch (qmu::QmuParserError &e) catch (qmu::QmuParserError &e)
{ {
label->setText(tr("Error") + " (" + postfix + ")"); label->setText(tr("Error") + " (" + postfix + "). " + tr("Parser error: %1").arg(e.GetMsg()));
label->setToolTip(tr("Parser error: %1").arg(e.GetMsg())); label->setToolTip(tr("Parser error: %1").arg(e.GetMsg()));
return false;
} }
} }
} }
@ -1885,7 +1885,7 @@ void TMainWindow::GUIReadOnly(bool ro)
{ {
if (QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0)) if (QTableWidgetItem *nameField = ui->tableWidget->item(ui->tableWidget->currentRow(), 0))
{ {
if (nameField->text().indexOf(CustomSign) == 0) // Check if custom if (nameField->text().indexOf(CustomMSign) == 0) // Check if custom
{ {
ui->lineEditName->setReadOnly(ro); ui->lineEditName->setReadOnly(ro);
} }

View file

@ -166,7 +166,7 @@ private:
QString ClearCustomName(const QString &name) const; QString ClearCustomName(const QString &name) const;
void EvalFormula(const QString &formula, VContainer *data, QLabel *label); bool EvalFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label);
void Open(const QString &pathTo, const QString &filter); void Open(const QString &pathTo, const QString &filter);
void GUIReadOnly(bool ro); void GUIReadOnly(bool ro);

View file

@ -35,6 +35,7 @@
#include "../vwidgets/vmaingraphicsview.h" #include "../vwidgets/vmaingraphicsview.h"
#include "../version.h" #include "../version.h"
#include "../vmisc/logging.h" #include "../vmisc/logging.h"
#include "../qmuparser/qmuparsererror.h"
#include <QDebug> #include <QDebug>
#include <QDir> #include <QDir>
@ -264,9 +265,17 @@ bool VApplication::notify(QObject *receiver, QEvent *event)
e.CriticalMessageBox(tr("Something's wrong!!"), mainWindow); e.CriticalMessageBox(tr("Something's wrong!!"), mainWindow);
return true; return true;
} }
// These last two cases special. I found that we can't show here modal dialog with error message.
// Somehow program doesn't waite untile an error dialog will be closed. But if ignore this program will hang.
catch (const qmu::QmuParserError &e)
{
qCDebug(vApp, "Parser error: %s", e.GetMsg().toUtf8().constData());
abort();
}
catch (std::exception& e) catch (std::exception& e)
{ {
qCritical() << "Exception thrown:" << e.what(); qCDebug(vApp, "Critical error! Exception thrown: %s", e.what());
abort();
} }
return false; return false;
} }

View file

@ -28,14 +28,16 @@
#include "dialogincrements.h" #include "dialogincrements.h"
#include "ui_dialogincrements.h" #include "ui_dialogincrements.h"
#include "../../libs/vwidgets/doubledelegate.h" #include "../vwidgets/doubledelegate.h"
#include "../../libs/vwidgets/textdelegate.h" #include "../vwidgets/textdelegate.h"
#include "../../libs/vwidgets/vwidgetpopup.h" #include "../vwidgets/vwidgetpopup.h"
#include "../xml/vstandardmeasurements.h" #include "../xml/vstandardmeasurements.h"
#include "../xml/vindividualmeasurements.h" #include "../xml/vindividualmeasurements.h"
#include "../../libs/vmisc/vsettings.h" #include "../vmisc/vsettings.h"
#include "../../libs/qmuparser/qmudef.h" #include "../qmuparser/qmudef.h"
#include "../../libs/vpatterndb/vtranslatevars.h" #include "../vpatterndb/vtranslatevars.h"
#include "../vpatterndb/calculator.h"
#include "../vtools/dialogs/support/dialogeditwrongformula.h"
#include <QFileDialog> #include <QFileDialog>
#include <QDir> #include <QDir>
@ -45,6 +47,8 @@
#include <QSettings> #include <QSettings>
#include <QTableWidgetItem> #include <QTableWidgetItem>
#define DIALOG_MAX_FORMULA_HEIGHT 64
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief DialogIncrements create dialog * @brief DialogIncrements create dialog
@ -53,22 +57,20 @@
* @param parent parent widget * @param parent parent widget
*/ */
DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *parent) DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *parent)
:DialogTool(data, NULL_ID, parent), ui(new Ui::DialogIncrements), data(data), doc(doc), row(0), column(0) :DialogTool(data, NULL_ID, parent),
ui(new Ui::DialogIncrements),
data(data),
doc(doc),
formulaBaseHeight(0)
{ {
ui->setupUi(this); ui->setupUi(this);
formulaBaseHeight = ui->plainTextEditFormula->height();
qApp->Settings()->GetOsSeparator() ? setLocale(QLocale::system()) : setLocale(QLocale(QLocale::C)); qApp->Settings()->GetOsSeparator() ? setLocale(QLocale::system()) : setLocale(QLocale(QLocale::C));
qCDebug(vDialog, "Showing variables."); qCDebug(vDialog, "Showing variables.");
ShowUnits(); ShowUnits();
TextDelegate *textDelegate = new TextDelegate(NameRegExp(), data, ui->tableWidgetIncrement);
ui->tableWidgetIncrement->setItemDelegateForColumn(0, textDelegate);// name
DoubleSpinBoxDelegate *doubleDelegate = new DoubleSpinBoxDelegate(ui->tableWidgetIncrement);
ui->tableWidgetIncrement->setItemDelegateForColumn(2, doubleDelegate);// base value
ui->tableWidgetIncrement->setItemDelegateForColumn(3, doubleDelegate);// in sizes
ui->tableWidgetIncrement->setItemDelegateForColumn(4, doubleDelegate);// in heights
FillIncrements(); FillIncrements();
FillLengthsLines(); FillLengthsLines();
FillLengthLinesAngles(); FillLengthLinesAngles();
@ -78,15 +80,29 @@ DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *par
FillAnglesArcs(); FillAnglesArcs();
FillAnglesCurves(); FillAnglesCurves();
connect(ui->tableWidgetIncrement, &QTableWidget::cellChanged, this, &DialogIncrements::IncrementChanged);
connect(ui->toolButtonAdd, &QPushButton::clicked, this, &DialogIncrements::clickedToolButtonAdd);
connect(ui->toolButtonRemove, &QPushButton::clicked, this, &DialogIncrements::clickedToolButtonRemove);
connect(this, &DialogIncrements::FullUpdateTree, this->doc, &VPattern::LiteParseTree); connect(this, &DialogIncrements::FullUpdateTree, this->doc, &VPattern::LiteParseTree);
connect(this, &DialogIncrements::haveLiteChange, this->doc, &VPattern::haveLiteChange);
connect(this->doc, &VPattern::FullUpdateFromFile, this, &DialogIncrements::FullUpdateFromFile); connect(this->doc, &VPattern::FullUpdateFromFile, this, &DialogIncrements::FullUpdateFromFile);
ui->tabWidget->setCurrentIndex(0); ui->tabWidget->setCurrentIndex(0);
ui->lineEditName->setValidator( new QRegularExpressionValidator(QRegularExpression(NameRegExp())));
connect(ui->tableWidgetIncrement, &QTableWidget::itemSelectionChanged, this,
&DialogIncrements::ShowIncrementDetails);
connect(ui->toolButtonAdd, &QPushButton::clicked, this, &DialogIncrements::AddIncrement);
connect(ui->toolButtonRemove, &QToolButton::clicked, this, &DialogIncrements::RemoveIncrement);
connect(ui->toolButtonUp, &QToolButton::clicked, this, &DialogIncrements::MoveUp);
connect(ui->toolButtonDown, &QToolButton::clicked, this, &DialogIncrements::MoveDown);
connect(ui->pushButtonGrow, &QPushButton::clicked, this, &DialogIncrements::DeployFormula);
connect(ui->toolButtonExpr, &QToolButton::clicked, this, &DialogIncrements::Fx);
connect(ui->lineEditName, &QLineEdit::editingFinished, this, &DialogIncrements::SaveIncrName);
connect(ui->plainTextEditDescription, &QPlainTextEdit::textChanged, this, &DialogIncrements::SaveIncrDescription);
connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogIncrements::SaveIncrFormula);
if (ui->tableWidgetIncrement->rowCount() > 0)
{
ui->tableWidgetIncrement->selectRow(0);
}
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -95,6 +111,9 @@ DialogIncrements::DialogIncrements(VContainer *data, VPattern *doc, QWidget *par
*/ */
void DialogIncrements::FillIncrements() void DialogIncrements::FillIncrements()
{ {
ui->tableWidgetIncrement->blockSignals(true);
ui->tableWidgetIncrement->clearContents();
const QMap<QString, QSharedPointer<VIncrement> > increments = data->DataIncrements(); const QMap<QString, QSharedPointer<VIncrement> > increments = data->DataIncrements();
QMap<QString, QSharedPointer<VIncrement> >::const_iterator i; QMap<QString, QSharedPointer<VIncrement> >::const_iterator i;
QMap<quint32, QString> map; QMap<quint32, QString> map;
@ -102,59 +121,39 @@ void DialogIncrements::FillIncrements()
for (i = increments.constBegin(); i != increments.constEnd(); ++i) for (i = increments.constBegin(); i != increments.constEnd(); ++i)
{ {
QSharedPointer<VIncrement> incr = i.value(); QSharedPointer<VIncrement> incr = i.value();
map.insert(incr->getId(), i.key()); map.insert(incr->getIndex(), i.key());
} }
qint32 currentRow = -1; qint32 currentRow = -1;
QMapIterator<quint32, QString> iMap(map); QMapIterator<quint32, QString> iMap(map);
ui->tableWidgetIncrement->setRowCount ( increments.size() );
while (iMap.hasNext()) while (iMap.hasNext())
{ {
iMap.next(); iMap.next();
QSharedPointer<VIncrement> incr = increments.value(iMap.value()); QSharedPointer<VIncrement> incr = increments.value(iMap.value());
currentRow++; currentRow++;
ui->tableWidgetIncrement->setRowCount ( increments.size() );
QTableWidgetItem *item = new QTableWidgetItem(iMap.value()); AddCell(ui->tableWidgetIncrement, incr->GetName(), currentRow, 0, Qt::AlignVCenter); // name
item->setTextAlignment(Qt::AlignHCenter); AddCell(ui->tableWidgetIncrement, qApp->LocaleToString(*incr->GetValue()), currentRow, 1,
item->setFont(QFont("Times", 12, QFont::Bold)); Qt::AlignHCenter | Qt::AlignVCenter, incr->IsFormulaOk()); // calculated value
item->setData(Qt::UserRole, incr->getId());
ui->tableWidgetIncrement->setItem(currentRow, 0, item);
if (qApp->patternType() == MeasurementsType::Standard) QString formula;
try
{ {
item = new QTableWidgetItem(qApp->LocaleToString(data->GetTableValue(iMap.value(), qApp->patternType()))); formula = qApp->TrVars()->FormulaToUser(incr->GetFormula());
item->setTextAlignment(Qt::AlignHCenter); }
SetItemViewOnly(item); catch (qmu::QmuParserError &e)
ui->tableWidgetIncrement->setItem(currentRow, 1, item); {
Q_UNUSED(e);
formula = incr->GetFormula();
} }
item = new QTableWidgetItem(qApp->LocaleToString(incr->GetBase())); AddCell(ui->tableWidgetIncrement, formula, currentRow, 2, Qt::AlignVCenter); // formula
item->setTextAlignment(Qt::AlignHCenter);
ui->tableWidgetIncrement->setItem(currentRow, 2, item);
if (qApp->patternType() == MeasurementsType::Standard)
{
item = new QTableWidgetItem(qApp->LocaleToString(incr->GetKsize()));
item->setTextAlignment(Qt::AlignHCenter);
ui->tableWidgetIncrement->setItem(currentRow, 3, item);
item = new QTableWidgetItem(qApp->LocaleToString(incr->GetKheight()));
item->setTextAlignment(Qt::AlignHCenter);
ui->tableWidgetIncrement->setItem(currentRow, 4, item);
}
item = new QTableWidgetItem(incr->GetDescription());
item->setToolTip(incr->GetDescription());
item->setTextAlignment(Qt::AlignLeft);
ui->tableWidgetIncrement->setItem(currentRow, 5, item);
}
if (ui->tableWidgetIncrement->rowCount()>0)
{
ui->toolButtonRemove->setEnabled(true);
} }
ui->tableWidgetIncrement->resizeColumnsToContents(); ui->tableWidgetIncrement->resizeColumnsToContents();
ui->tableWidgetIncrement->resizeRowsToContents(); ui->tableWidgetIncrement->resizeRowsToContents();
ui->tableWidgetIncrement->setCurrentCell( row, column ); ui->tableWidgetIncrement->horizontalHeader()->setStretchLastSection(true);
ui->tableWidgetIncrement->blockSignals(false);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -237,23 +236,13 @@ void DialogIncrements::FillAnglesCurves()
FillTable(data->DataAnglesCurves(), ui->tableWidgetAnglesCurves); FillTable(data->DataAnglesCurves(), ui->tableWidgetAnglesCurves);
} }
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::SetItemViewOnly(QTableWidgetItem *item)
{
// set the item non-editable (view only), and non-selectable
Qt::ItemFlags flags = item->flags();
flags &= ~(Qt::ItemIsSelectable | Qt::ItemIsEditable); // reset/clear the flag
item->setFlags(flags);
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::ShowUnits() void DialogIncrements::ShowUnits()
{ {
const QString unit = VDomDocument::UnitsToStr(qApp->patternUnit()); const QString unit = VDomDocument::UnitsToStr(qApp->patternUnit());
ShowHeaderUnits(ui->tableWidgetIncrement, 2, unit);// base value ShowHeaderUnits(ui->tableWidgetIncrement, 1, unit);// calculated value
ShowHeaderUnits(ui->tableWidgetIncrement, 3, unit);// in sizes ShowHeaderUnits(ui->tableWidgetIncrement, 2, unit);// formula
ShowHeaderUnits(ui->tableWidgetIncrement, 4, unit);// in heights
ShowHeaderUnits(ui->tableWidgetLines, 1, unit);// lengths ShowHeaderUnits(ui->tableWidgetLines, 1, unit);// lengths
ShowHeaderUnits(ui->tableWidgetSplines, 1, unit);// lengths ShowHeaderUnits(ui->tableWidgetSplines, 1, unit);// lengths
@ -275,17 +264,157 @@ void DialogIncrements::ShowHeaderUnits(QTableWidget *table, int column, const QS
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::ShowSuccess() const void DialogIncrements::AddCell(QTableWidget *table, const QString &text, int row, int column, int aligment, bool ok)
{ {
VWidgetPopup *popup = new VWidgetPopup(); SCASSERT(table != nullptr);
QLabel *label = new QLabel(tr("Data successfully saved."));
QFont f = label->font(); QTableWidgetItem *item = new QTableWidgetItem(text);
f.setBold(true); item->setTextAlignment(aligment);
f.setPixelSize(16);
label->setFont(f); // set the item non-editable (view only), and non-selectable
popup->SetWidget(label); Qt::ItemFlags flags = item->flags();
popup->SetLifeTime(2000); flags &= ~(Qt::ItemIsEditable); // reset/clear the flag
popup->Show(frameGeometry().center()); item->setFlags(flags);
if (not ok)
{
QBrush brush = item->foreground();
brush.setColor(Qt::red);
item->setForeground(brush);
}
table->setItem(row, column, item);
}
//---------------------------------------------------------------------------------------------------------------------
QString DialogIncrements::ClearIncrementName(const QString &name) const
{
QString clear = name;
const int index = clear.indexOf(CustomIncrSign);
if (index == 0)
{
clear.remove(0, 1);
}
return clear;
}
//---------------------------------------------------------------------------------------------------------------------
bool DialogIncrements::EvalIncrementFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label)
{
const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit());//Show unit in dialog lable (cm, mm or inch)
if (formula.isEmpty())
{
label->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
label->setToolTip(tr("Empty field"));
return false;
}
else
{
try
{
QString f;
// Replace line return character with spaces for calc if exist
if (fromUser)
{
f = qApp->TrVars()->FormulaFromUser(formula, qApp->Settings()->GetOsSeparator());
}
else
{
f = formula;
}
f.replace("\n", " ");
Calculator *cal = new Calculator(data, qApp->patternType());
const qreal result = cal->EvalFormula(f);
delete cal;
label->setText(qApp->LocaleToString(result) + " " + postfix);
label->setToolTip(tr("Value"));
return true;
}
catch (qmu::QmuParserError &e)
{
label->setText(tr("Error") + " (" + postfix + "). " + tr("Parser error: %1").arg(e.GetMsg()));
label->setToolTip(tr("Parser error: %1").arg(e.GetMsg()));
return false;
}
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::Controls()
{
if (ui->tableWidgetIncrement->rowCount() > 0)
{
ui->toolButtonRemove->setEnabled(true);
}
else
{
ui->toolButtonRemove->setEnabled(false);
}
if (ui->tableWidgetIncrement->rowCount() >= 2)
{
if (ui->tableWidgetIncrement->currentRow() == 0)
{
ui->toolButtonUp->setEnabled(false);
ui->toolButtonDown->setEnabled(true);
}
else if (ui->tableWidgetIncrement->currentRow() == ui->tableWidgetIncrement->rowCount()-1)
{
ui->toolButtonUp->setEnabled(true);
ui->toolButtonDown->setEnabled(false);
}
else
{
ui->toolButtonUp->setEnabled(true);
ui->toolButtonDown->setEnabled(true);
}
}
else
{
ui->toolButtonUp->setEnabled(false);
ui->toolButtonDown->setEnabled(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::EnableDetails(bool enabled)
{
if (enabled)
{
Controls();
}
else
{
ui->toolButtonRemove->setEnabled(enabled);
ui->toolButtonUp->setEnabled(enabled);
ui->toolButtonDown->setEnabled(enabled);
}
if (not enabled)
{ // Clear
ui->lineEditName->blockSignals(true);
ui->lineEditName->clear();
ui->lineEditName->blockSignals(false);
ui->plainTextEditDescription->blockSignals(true);
ui->plainTextEditDescription->clear();
ui->plainTextEditDescription->blockSignals(false);
ui->labelCalculatedValue->blockSignals(true);
ui->labelCalculatedValue->clear();
ui->labelCalculatedValue->blockSignals(false);
ui->plainTextEditFormula->blockSignals(true);
ui->plainTextEditFormula->clear();
ui->plainTextEditFormula->blockSignals(false);
}
ui->pushButtonGrow->setEnabled(enabled);
ui->toolButtonExpr->setEnabled(enabled);
ui->lineEditName->setEnabled(enabled);
ui->plainTextEditDescription->setEnabled(enabled);
ui->plainTextEditFormula->setEnabled(enabled);
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
@ -294,11 +423,7 @@ void DialogIncrements::ShowSuccess() const
*/ */
void DialogIncrements::FullUpdateFromFile() void DialogIncrements::FullUpdateFromFile()
{ {
ui->tableWidgetIncrement->blockSignals(true);
ui->tableWidgetIncrement->clearContents();
FillIncrements(); FillIncrements();
ui->tableWidgetIncrement->horizontalHeader()->setStretchLastSection(true);
ui->tableWidgetIncrement->blockSignals(false);
ui->tableWidgetLines->clearContents(); ui->tableWidgetLines->clearContents();
FillLengthsLines(); FillLengthsLines();
@ -314,217 +439,327 @@ void DialogIncrements::FullUpdateFromFile()
/** /**
* @brief clickedToolButtonAdd create new row in table * @brief clickedToolButtonAdd create new row in table
*/ */
void DialogIncrements::clickedToolButtonAdd() void DialogIncrements::AddIncrement()
{ {
qCDebug(vDialog, "Add new increment"); qCDebug(vDialog, "Add a new increment");
ui->tableWidgetIncrement->setFocus(Qt::OtherFocusReason);
ui->tableWidgetIncrement->blockSignals(true);
qint32 currentRow = ui->tableWidgetIncrement->rowCount();
ui->tableWidgetIncrement->insertRow( currentRow );
qint32 num = 1; qint32 num = 1;
QString name; QString name;
do do
{ {
name = QString(tr("Name_%1")).arg(num); name = CustomIncrSign + tr("Increment_%1").arg(num);
num++; num++;
} while (data->IsUnique(name)==false); } while (data->IsUnique(name)==false);
const quint32 id = data->getNextId(); qint32 currentRow;
const QString description(tr("Description"));
VIncrement *incr = new VIncrement(name, id, 0, description);
data->AddVariable(name, incr);
AddIncrementToFile(id, name, 0, 0, 0, description); if (ui->tableWidgetIncrement->currentRow() == -1)
{
currentRow = ui->tableWidgetIncrement->rowCount();
doc->AddEmptyIncrement(name);
}
else
{
currentRow = ui->tableWidgetIncrement->currentRow()+1;
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(ui->tableWidgetIncrement->currentRow(), 0);
doc->AddEmptyIncrementAfter(nameField->text(), name);
}
QTableWidgetItem *item = new QTableWidgetItem(name); FullUpdateTree(Document::LiteParse);
item->setTextAlignment(Qt::AlignHCenter); ui->tableWidgetIncrement->selectRow(currentRow);
item->setFont(QFont("Times", 12, QFont::Bold));
item->setData(Qt::UserRole, id);
ui->tableWidgetIncrement->setItem(currentRow, 0, item);
ui->tableWidgetIncrement->setCurrentCell(currentRow, 0, QItemSelectionModel::ClearAndSelect);
item = new QTableWidgetItem("0");// calculated value
item->setTextAlignment(Qt::AlignHCenter);
// set the item non-editable (view only), and non-selectable
Qt::ItemFlags flags = item->flags();
flags &= ~(Qt::ItemIsSelectable | Qt::ItemIsEditable); // reset/clear the flag
item->setFlags(flags);
ui->tableWidgetIncrement->setItem(currentRow, 1, item);
item = new QTableWidgetItem("0");// base value
item->setTextAlignment(Qt::AlignHCenter);
ui->tableWidgetIncrement->setItem(currentRow, 2, item);
item = new QTableWidgetItem("0");// in sizes
item->setTextAlignment(Qt::AlignHCenter);
ui->tableWidgetIncrement->setItem(currentRow, 3, item);
item = new QTableWidgetItem("0"); // in heights
item->setTextAlignment(Qt::AlignHCenter);
ui->tableWidgetIncrement->setItem(currentRow, 4, item);
item = new QTableWidgetItem(description);
item->setTextAlignment(Qt::AlignLeft);
ui->tableWidgetIncrement->setItem(currentRow, 5, item);
ui->toolButtonRemove->setEnabled(true);
ui->tableWidgetIncrement->blockSignals(false);
emit haveLiteChange();
ShowSuccess();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief clickedToolButtonRemove remove one row from table * @brief clickedToolButtonRemove remove one row from table
*/ */
void DialogIncrements::clickedToolButtonRemove() void DialogIncrements::RemoveIncrement()
{ {
ui->tableWidgetIncrement->blockSignals(true); const int row = ui->tableWidgetIncrement->currentRow();
QTableWidgetItem *item = ui->tableWidgetIncrement->currentItem(); if (row == -1)
qint32 row = item->row();
QTableWidgetItem *itemName = ui->tableWidgetIncrement->item(row, 0);
qCDebug(vDialog, "Remove increment %s", itemName->text().toUtf8().constData());
data->RemoveIncrement(itemName->text());
quint32 id = qvariant_cast<quint32>(itemName->data(Qt::UserRole));
QDomElement domElement = doc->elementById(id);
if (domElement.isElement())
{ {
QDomNodeList list = doc->elementsByTagName(VPattern::TagIncrements); return;
list.at(0).removeChild(domElement); }
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
doc->RemoveIncrement(nameField->text());
FullUpdateTree(Document::LiteParse);
if (ui->tableWidgetIncrement->rowCount() > 0)
{
ui->tableWidgetIncrement->selectRow(0);
} }
else else
{ {
qCDebug(vDialog, "Could not find object with id %u", id); EnableDetails(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::MoveUp()
{
const int row = ui->tableWidgetIncrement->currentRow();
if (row == -1)
{
return; return;
} }
ui->tableWidgetIncrement->removeRow(row); QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
if (ui->tableWidgetIncrement->rowCount() == 0) doc->MoveUpIncrement(nameField->text());
FullUpdateTree(Document::LiteParse);
ui->tableWidgetIncrement->selectRow(row-1);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::MoveDown()
{
const int row = ui->tableWidgetIncrement->currentRow();
if (row == -1)
{ {
ui->toolButtonRemove->setEnabled(false); return;
} }
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
doc->MoveDownIncrement(nameField->text());
FullUpdateTree(Document::LiteParse);
ui->tableWidgetIncrement->selectRow(row+1);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::SaveIncrName()
{
const int row = ui->tableWidgetIncrement->currentRow();
if (row == -1)
{
return;
}
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
const QString newName = CustomIncrSign + ui->lineEditName->text();
if (data->IsUnique(newName))
{
doc->SetIncrementName(nameField->text(), newName);
FullUpdateTree(Document::LiteParse);
ui->tableWidgetIncrement->blockSignals(true);
ui->tableWidgetIncrement->selectRow(row);
ui->tableWidgetIncrement->blockSignals(false);
}
else
{
ui->lineEditName->setText(ClearIncrementName(nameField->text()));
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::SaveIncrDescription()
{
const int row = ui->tableWidgetIncrement->currentRow();
if (row == -1)
{
return;
}
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
doc->SetIncrementDescription(nameField->text(), ui->plainTextEditDescription->toPlainText());
FullUpdateTree(Document::LiteParse);
const QTextCursor cursor = ui->plainTextEditDescription->textCursor();
ui->tableWidgetIncrement->blockSignals(true);
ui->tableWidgetIncrement->selectRow(row);
ui->tableWidgetIncrement->blockSignals(false); ui->tableWidgetIncrement->blockSignals(false);
emit haveLiteChange(); ui->plainTextEditDescription->setTextCursor(cursor);
ShowSuccess();
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** void DialogIncrements::SaveIncrFormula()
* @brief AddIncrementToFile save created increment to file
* @param id id of increment
* @param name name
* @param base base value
* @param ksize increment in sizes
* @param kheight increment in heights
* @param description description of increment
*/
void DialogIncrements::AddIncrementToFile(const quint32 &id, const QString &name, const qreal &base, const qreal &ksize,
const qreal &kheight, const QString &description)
{ {
qCDebug(vDialog, "Saving new increment to file."); const int row = ui->tableWidgetIncrement->currentRow();
qCDebug(vDialog, "%s", QString("Increment: id(%1), name(%2), base(%3), ksize(%4), kheight(%5), description(%6)")
.arg(id).arg(name).arg(base).arg(ksize).arg(kheight).arg(description).toUtf8().constData());
QDomElement element = doc->createElement(VPattern::TagIncrement);
doc->SetAttribute(element, VDomDocument::AttrId, id); if (row == -1)
doc->SetAttribute(element, VPattern::IncrementName, name);
doc->SetAttribute(element, VPattern::IncrementBase, base);
doc->SetAttribute(element, VPattern::IncrementKsize, ksize);
doc->SetAttribute(element, VPattern::IncrementKgrowth, kheight);
doc->SetAttribute(element, VPattern::IncrementDescription, description);
QDomNodeList list = doc->elementsByTagName(VPattern::TagIncrements);
list.at(0).appendChild(element);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::HideColumns(QTableWidget *table)
{
SCASSERT(table != nullptr);
table->setColumnHidden( 1, true );// calculated value
table->setColumnHidden( 3, true );// in sizes
table->setColumnHidden( 4, true );// in heights
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief cellChanged cell in table was changed
* @param row number of row
* @param column number of column
*/
void DialogIncrements::IncrementChanged ( qint32 row, qint32 column )
{
qCDebug(vDialog, "Increment changed.");
const QTableWidgetItem *itemName = ui->tableWidgetIncrement->item(row, 0);
const QTableWidgetItem *item = ui->tableWidgetIncrement->item(row, column);
const quint32 id = qvariant_cast<quint32>(itemName->data(Qt::UserRole));
QDomElement domElement = doc->elementById(id);
if (domElement.isElement() == false)
{ {
qCDebug(vDialog, "Cant't find increment with id = %u", id);
return; return;
} }
this->row = row;
switch (column) QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
// Replace line return character with spaces for calc if exist
QString text = ui->plainTextEditFormula->toPlainText();
text.replace("\n", " ");
QTableWidgetItem *formulaField = ui->tableWidgetIncrement->item(row, 2);
if (formulaField->text() == text)
{ {
case 0: // VPattern::IncrementName QTableWidgetItem *result = ui->tableWidgetIncrement->item(row, 1);
qCDebug(vDialog, "Changed name to %s", item->text().toUtf8().constData()); //Show unit in dialog lable (cm, mm or inch)
doc->SetAttribute(domElement, VPattern::IncrementName, item->text()); const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit());
data->ClearVariables(VarType::Increment); ui->labelCalculatedValue->setText(result->text() + " " +postfix);
this->column = 2; return;
emit FullUpdateTree(Document::LiteParse);
break;
case 2: // VPattern::IncrementBase
qCDebug(vDialog, "Changed base to %s", item->text().toUtf8().constData());
doc->SetAttribute(domElement, VPattern::IncrementBase, item->text());
this->column = 3;
emit FullUpdateTree(Document::LiteParse);
break;
case 3: // VPattern::IncrementKsize
qCDebug(vDialog, "Changed ksize to %s", item->text().toUtf8().constData());
doc->SetAttribute(domElement, VPattern::IncrementKsize, item->text());
this->column = 4;
emit FullUpdateTree(Document::LiteParse);
break;
case 4: // VPattern::IncrementKgrowth
qCDebug(vDialog, "Changed kheight to %s", item->text().toUtf8().constData());
doc->SetAttribute(domElement, VPattern::IncrementKgrowth, item->text());
this->column = 5;
emit FullUpdateTree(Document::LiteParse);
break;
case 5: // VPattern::IncrementDescription
{
qCDebug(vDialog, "Changed description to %s", item->text().toUtf8().constData());
doc->SetAttribute(domElement, VPattern::IncrementDescription, item->text());
QSharedPointer<VIncrement> incr = data->GetVariable<VIncrement>(itemName->text());
incr->SetDescription(item->text());
ui->tableWidgetIncrement->resizeColumnsToContents();
ui->tableWidgetIncrement->resizeRowsToContents();
this->column = 0;
ui->tableWidgetIncrement->setCurrentCell( row, this->column );
ui->tableWidgetIncrement->horizontalHeader()->setStretchLastSection(true);
break;
}
default:
break;
} }
emit haveLiteChange();
ShowSuccess(); if (text.isEmpty())
{
//Show unit in dialog lable (cm, mm or inch)
const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit());
ui->labelCalculatedValue->setText(tr("Error") + " (" + postfix + "). " + tr("Empty field."));
return;
}
QSharedPointer<VIncrement> incr = data->GetVariable<VIncrement>(nameField->text());
const bool ok = EvalIncrementFormula(text, true, incr->GetData(), ui->labelCalculatedValue);
if (not ok)
{
return;
}
try
{
const QString formula = qApp->TrVars()->FormulaFromUser(text, qApp->Settings()->GetOsSeparator());
doc->SetIncrementFormula(nameField->text(), formula);
}
catch (qmu::QmuParserError &e) // Just in case something bad happens
{
Q_UNUSED(e)
return;
}
FullUpdateTree(Document::LiteParse);
const QTextCursor cursor = ui->plainTextEditFormula->textCursor();
ui->tableWidgetIncrement->blockSignals(true);
ui->tableWidgetIncrement->selectRow(row);
ui->tableWidgetIncrement->blockSignals(false);
ui->plainTextEditFormula->setTextCursor(cursor);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::DeployFormula()
{
SCASSERT(ui->plainTextEditFormula != nullptr);
SCASSERT(ui->pushButtonGrow != nullptr)
if (ui->plainTextEditFormula->height() < DIALOG_MAX_FORMULA_HEIGHT)
{
ui->plainTextEditFormula->setFixedHeight(DIALOG_MAX_FORMULA_HEIGHT);
//Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme("go-next",
QIcon(":/icons/win.icon.theme/16x16/actions/go-next.png")));
}
else
{
ui->plainTextEditFormula->setFixedHeight(formulaBaseHeight);
//Set icon from theme (internal for Windows system)
ui->pushButtonGrow->setIcon(QIcon::fromTheme("go-down",
QIcon(":/icons/win.icon.theme/16x16/actions/go-down.png")));
}
// I found that after change size of formula field, it was filed for angle formula, field for formula became black.
// This code prevent this.
setUpdatesEnabled(false);
repaint();
setUpdatesEnabled(true);
}
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::Fx()
{
const int row = ui->tableWidgetIncrement->currentRow();
if (row == -1)
{
return;
}
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(row, 0);
QSharedPointer<VIncrement> incr = data->GetVariable<VIncrement>(nameField->text());
DialogEditWrongFormula *dialog = new DialogEditWrongFormula(incr->GetData(), NULL_ID, this);
dialog->setWindowTitle(tr("Edit increment"));
QString text = ui->plainTextEditFormula->toPlainText();
text.replace("\n", " ");
text = qApp->TrVars()->FormulaFromUser(text, qApp->Settings()->GetOsSeparator());
dialog->SetFormula(text);
const QString postfix = VDomDocument::UnitsToStr(qApp->patternUnit(), true);
dialog->setPostfix(postfix);//Show unit in dialog lable (cm, mm or inch)
if (dialog->exec() == QDialog::Accepted)
{
doc->SetIncrementFormula(nameField->text(), dialog->GetFormula());
FullUpdateTree(Document::LiteParse);
ui->tableWidgetIncrement->selectRow(row);
}
delete dialog;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::closeEvent(QCloseEvent *event) void DialogIncrements::closeEvent(QCloseEvent *event)
{ {
ui->plainTextEditFormula->blockSignals(true);
ui->lineEditName->blockSignals(true);
ui->plainTextEditDescription->blockSignals(true);
emit DialogClosed(QDialog::Accepted); emit DialogClosed(QDialog::Accepted);
event->accept(); event->accept();
} }
//---------------------------------------------------------------------------------------------------------------------
void DialogIncrements::ShowIncrementDetails()
{
if (ui->tableWidgetIncrement->rowCount() > 0)
{
EnableDetails(true);
QTableWidgetItem *nameField = ui->tableWidgetIncrement->item(ui->tableWidgetIncrement->currentRow(), 0); // name
QSharedPointer<VIncrement> incr;
try
{
incr = data->GetVariable<VIncrement>(nameField->text());
}
catch(const VExceptionBadId &e)
{
Q_UNUSED(e);
EnableDetails(false);
return;
}
ui->lineEditName->blockSignals(true);
ui->lineEditName->setText(ClearIncrementName(incr->GetName()));
ui->lineEditName->blockSignals(false);
ui->plainTextEditDescription->blockSignals(true);
ui->plainTextEditDescription->setPlainText(incr->GetDescription());
ui->plainTextEditDescription->blockSignals(false);
EvalIncrementFormula(incr->GetFormula(), false, incr->GetData(), ui->labelCalculatedValue);
ui->plainTextEditFormula->blockSignals(true);
QString formula;
try
{
formula = qApp->TrVars()->FormulaToUser(incr->GetFormula());
}
catch (qmu::QmuParserError &e)
{
Q_UNUSED(e);
formula = incr->GetFormula();
}
ui->plainTextEditFormula->setPlainText(formula);
ui->plainTextEditFormula->blockSignals(false);
}
else
{
EnableDetails(false);
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
DialogIncrements::~DialogIncrements() DialogIncrements::~DialogIncrements()
{ {

View file

@ -49,23 +49,30 @@ class DialogIncrements : public DialogTool
Q_OBJECT Q_OBJECT
public: public:
DialogIncrements(VContainer *data, VPattern *doc, QWidget *parent = nullptr); DialogIncrements(VContainer *data, VPattern *doc, QWidget *parent = nullptr);
~DialogIncrements(); virtual ~DialogIncrements() Q_DECL_OVERRIDE;
public slots:
void clickedToolButtonAdd();
void clickedToolButtonRemove();
void IncrementChanged ( qint32 row, qint32 column );
void FullUpdateFromFile();
signals: signals:
/** /**
* @brief FullUpdateTree signal update data for dom document * @brief FullUpdateTree signal update data for dom document
*/ */
void FullUpdateTree(const Document &parse); void FullUpdateTree(const Document &parse);
/**
* @brief haveLiteChange signal show sign of change
*/
void haveLiteChange();
protected: protected:
virtual void closeEvent ( QCloseEvent * event ) Q_DECL_OVERRIDE; virtual void closeEvent ( QCloseEvent * event ) Q_DECL_OVERRIDE;
private slots:
void ShowIncrementDetails();
void AddIncrement();
void RemoveIncrement();
void MoveUp();
void MoveDown();
void SaveIncrName();
void SaveIncrDescription();
void SaveIncrFormula();
void DeployFormula();
void Fx();
void FullUpdateFromFile();
private: private:
Q_DISABLE_COPY(DialogIncrements) Q_DISABLE_COPY(DialogIncrements)
@ -78,11 +85,7 @@ private:
/** @brief doc dom document container */ /** @brief doc dom document container */
VPattern *doc; VPattern *doc;
/** @brief row save number of row current selected cell */ int formulaBaseHeight;
qint32 row;
/** @brief column save number of column current selected cell */
qint32 column;
template <typename T> template <typename T>
void FillTable(const QMap<QString, T> varTable, QTableWidget *table); void FillTable(const QMap<QString, T> varTable, QTableWidget *table);
@ -96,13 +99,15 @@ private:
void FillAnglesArcs(); void FillAnglesArcs();
void FillAnglesCurves(); void FillAnglesCurves();
void AddIncrementToFile(const quint32 &id, const QString &name, const qreal &base,
const qreal &ksize, const qreal &kheight, const QString &description);
void HideColumns(QTableWidget *table);
void SetItemViewOnly(QTableWidgetItem *item);
void ShowUnits(); void ShowUnits();
void ShowHeaderUnits(QTableWidget *table, int column, const QString &unit); void ShowHeaderUnits(QTableWidget *table, int column, const QString &unit);
void ShowSuccess() const;
void AddCell(QTableWidget *table, const QString &text, int row, int column, int aligment, bool ok = true);
QString ClearIncrementName(const QString &name) const;
bool EvalIncrementFormula(const QString &formula, bool fromUser, VContainer *data, QLabel *label);
void Controls();
void EnableDetails(bool enabled);
}; };
#endif // DIALOGINCREMENTS_H #endif // DIALOGINCREMENTS_H

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>979</width> <width>979</width>
<height>574</height> <height>680</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
@ -45,108 +45,334 @@
<attribute name="title"> <attribute name="title">
<string>Increments</string> <string>Increments</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item row="1" column="1"> <item>
<widget class="QToolButton" name="toolButtonRemove"> <widget class="QSplitter" name="splitter">
<property name="enabled"> <property name="orientation">
<bool>false</bool> <enum>Qt::Vertical</enum>
</property> </property>
<property name="text"> <widget class="QTableWidget" name="tableWidgetIncrement">
<string notr="true">...</string> <property name="sizePolicy">
</property> <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<property name="icon"> <horstretch>0</horstretch>
<iconset theme="list-remove"> <verstretch>8</verstretch>
<normaloff/> </sizepolicy>
</iconset>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<widget class="QTableWidget" name="tableWidgetIncrement">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="sortingEnabled">
<bool>false</bool>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<attribute name="horizontalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>120</number>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>70</number>
</attribute>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>25</number>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>8</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Name</string>
</property> </property>
</column> <property name="minimumSize">
<column> <size>
<property name="text"> <width>0</width>
<string>The calculated value</string> <height>150</height>
</size>
</property> </property>
</column> <property name="alternatingRowColors">
<column> <bool>true</bool>
<property name="text">
<string>Base value</string>
</property> </property>
</column> <property name="selectionMode">
<column> <enum>QAbstractItemView::SingleSelection</enum>
<property name="text">
<string>In sizes</string>
</property> </property>
</column> <property name="selectionBehavior">
<column> <enum>QAbstractItemView::SelectRows</enum>
<property name="text">
<string>In heights</string>
</property> </property>
</column> <property name="sortingEnabled">
<column> <bool>false</bool>
<property name="text">
<string>Description</string>
</property> </property>
</column> <property name="wordWrap">
</widget> <bool>true</bool>
</item> </property>
<item row="1" column="0"> <attribute name="horizontalHeaderCascadingSectionResizes">
<widget class="QToolButton" name="toolButtonAdd"> <bool>false</bool>
<property name="text"> </attribute>
<string notr="true">...</string> <attribute name="horizontalHeaderDefaultSectionSize">
</property> <number>120</number>
<property name="icon"> </attribute>
<iconset theme="list-add"> <attribute name="horizontalHeaderMinimumSectionSize">
<normaloff/> <number>70</number>
</iconset> </attribute>
</property> <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>25</number>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>8</number>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>The calculated value</string>
</property>
</column>
<column>
<property name="text">
<string>Formula</string>
</property>
</column>
</widget>
<widget class="QGroupBox" name="groupBoxDetails">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>4</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>236</height>
</size>
</property>
<property name="toolTip">
<string>Details</string>
</property>
<property name="title">
<string>Details</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item alignment="Qt::AlignLeft">
<widget class="QToolButton" name="toolButtonUp">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Move measurement up</string>
</property>
<property name="text">
<string notr="true">...</string>
</property>
<property name="icon">
<iconset theme="go-up">
<normaloff>../../tape</normaloff>../../tape</iconset>
</property>
</widget>
</item>
<item alignment="Qt::AlignLeft">
<widget class="QToolButton" name="toolButtonDown">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Move measurement down</string>
</property>
<property name="text">
<string notr="true">...</string>
</property>
<property name="icon">
<iconset theme="go-down">
<normaloff>../../tape</normaloff>../../tape</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>6</number>
</property>
<item alignment="Qt::AlignRight">
<widget class="QToolButton" name="toolButtonAdd">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string notr="true">...</string>
</property>
<property name="icon">
<iconset theme="list-add">
<normaloff/>
</iconset>
</property>
</widget>
</item>
<item alignment="Qt::AlignHCenter">
<widget class="QToolButton" name="toolButtonRemove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true">...</string>
</property>
<property name="icon">
<iconset theme="list-remove">
<normaloff/>
</iconset>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Name:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEditName">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelCalculated">
<property name="text">
<string>Calculated value:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="labelCalculatedValue">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelFormula">
<property name="text">
<string>Formula:</string>
</property>
</widget>
</item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayoutValue">
<item>
<widget class="QPlainTextEdit" name="plainTextEditFormula">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>24</height>
</size>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonGrow">
<property name="enabled">
<bool>false</bool>
</property>
<property name="maximumSize">
<size>
<width>18</width>
<height>18</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Show full calculation in message box&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string notr="true"/>
</property>
<property name="icon">
<iconset theme="go-down">
<normaloff>../../../libs/vtools/dialogs/support</normaloff>../../../libs/vtools/dialogs/support</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButtonExpr">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string notr="true">...</string>
</property>
<property name="icon">
<iconset resource="../../../libs/vmisc/share/resources/icon.qrc">
<normaloff>:/icon/24x24/fx.png</normaloff>:/icon/24x24/fx.png</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Description:</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QPlainTextEdit" name="plainTextEditDescription">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
</layout> </layout>

View file

@ -45,6 +45,7 @@
#include "../qmuparser/qmuparsererror.h" #include "../qmuparser/qmuparsererror.h"
#include "../vgeometry/varc.h" #include "../vgeometry/varc.h"
#include "../core/vapplication.h" #include "../core/vapplication.h"
#include "../vpatterndb/calculator.h"
#include <QMessageBox> #include <QMessageBox>
#include <QUndoStack> #include <QUndoStack>
@ -2004,6 +2005,67 @@ void VPattern::ParseToolArcWithLength(VMainGraphicsScene *scene, QDomElement &do
} }
} }
//---------------------------------------------------------------------------------------------------------------------
qreal VPattern::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, qApp->patternType());
const qreal result = cal->EvalFormula(f);
delete cal;
*ok = true;
return result;
}
catch (qmu::QmuParserError &e)
{
*ok = false;
return 0;
}
}
}
//---------------------------------------------------------------------------------------------------------------------
QDomElement VPattern::MakeEmptyIncrement(const QString &name)
{
QDomElement element = createElement(TagIncrement);
SetAttribute(element, IncrementName, name);
SetAttribute(element, IncrementFormula, QString("0"));
SetAttribute(element, IncrementDescription, QString(""));
return element;
}
//---------------------------------------------------------------------------------------------------------------------
QDomElement VPattern::FindIncrement(const QString &name) const
{
QDomNodeList list = elementsByTagName(TagIncrement);
for (int i=0; i < list.size(); ++i)
{
const QDomElement domElement = list.at(i).toElement();
if (domElement.isNull() == false)
{
const QString parameter = domElement.attribute(IncrementName);
if (parameter == name)
{
return domElement;
}
}
}
return QDomElement();
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief ParseSplineElement parse spline tag. * @brief ParseSplineElement parse spline tag.
@ -2135,6 +2197,7 @@ void VPattern::ParseToolsElement(VMainGraphicsScene *scene, const QDomElement &d
*/ */
void VPattern::ParseIncrementsElement(const QDomNode &node) void VPattern::ParseIncrementsElement(const QDomNode &node)
{ {
int index = 0;
QDomNode domNode = node.firstChild(); QDomNode domNode = node.firstChild();
while (domNode.isNull() == false) while (domNode.isNull() == false)
{ {
@ -2145,14 +2208,24 @@ void VPattern::ParseIncrementsElement(const QDomNode &node)
{ {
if (domElement.tagName() == TagIncrement) if (domElement.tagName() == TagIncrement)
{ {
const quint32 id = GetParametrId(domElement);
const QString name = GetParametrString(domElement, IncrementName, ""); const QString name = GetParametrString(domElement, IncrementName, "");
const qreal base = GetParametrDouble(domElement, IncrementBase, "0");
const qreal ksize = GetParametrDouble(domElement, IncrementKsize, "0"); QString desc;
const qreal kgrowth = GetParametrDouble(domElement, IncrementKgrowth, "0"); try
const QString desc = GetParametrString(domElement, IncrementDescription, "Description"); {
data->UpdateId(id); desc = GetParametrString(domElement, IncrementDescription);
data->AddVariable(name, new VIncrement(name, id, base, desc)); }
catch (VExceptionEmptyParameter &e)
{
Q_UNUSED(e)
}
const QString formula = GetParametrString(domElement, IncrementFormula, "0");
bool ok = false;
const qreal value = EvalFormula(data, formula, &ok);
data->AddVariable(name, new VIncrement(data, name, index, value, formula, ok, desc));
++index;
} }
} }
} }
@ -2174,6 +2247,108 @@ void VPattern::SetAuthor(const QString &text)
emit patternChanged(false); emit patternChanged(false);
} }
//---------------------------------------------------------------------------------------------------------------------
void VPattern::AddEmptyIncrement(const QString &name)
{
const QDomElement element = MakeEmptyIncrement(name);
const QDomNodeList list = elementsByTagName(TagIncrements);
list.at(0).appendChild(element);
emit patternChanged(false);
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::AddEmptyIncrementAfter(const QString &after, const QString &name)
{
const QDomElement element = MakeEmptyIncrement(name);
const QDomElement sibling = FindIncrement(after);
const QDomNodeList list = elementsByTagName(TagIncrements);
if (sibling.isNull())
{
list.at(0).appendChild(element);
}
else
{
list.at(0).insertAfter(element, sibling);
}
emit patternChanged(false);
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::RemoveIncrement(const QString &name)
{
const QDomNodeList list = elementsByTagName(TagIncrements);
list.at(0).removeChild(FindIncrement(name));
emit patternChanged(false);
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::MoveUpIncrement(const QString &name)
{
const QDomElement node = FindIncrement(name);
if (not node.isNull())
{
const QDomElement prSibling = node.previousSiblingElement(TagIncrement);
if (not prSibling.isNull())
{
const QDomNodeList list = elementsByTagName(TagIncrements);
list.at(0).insertBefore(node, prSibling);
}
}
emit patternChanged(false);
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::MoveDownIncrement(const QString &name)
{
const QDomElement node = FindIncrement(name);
if (not node.isNull())
{
const QDomElement nextSibling = node.nextSiblingElement(TagIncrement);
if (not nextSibling.isNull())
{
const QDomNodeList list = elementsByTagName(TagIncrements);
list.at(0).insertAfter(node, nextSibling);
}
}
emit patternChanged(false);
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::SetIncrementName(const QString &name, const QString &text)
{
QDomElement node = FindIncrement(name);
if (not node.isNull())
{
SetAttribute(node, IncrementName, text);
emit patternChanged(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::SetIncrementFormula(const QString &name, const QString &text)
{
QDomElement node = FindIncrement(name);
if (not node.isNull())
{
SetAttribute(node, IncrementFormula, text);
emit patternChanged(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void VPattern::SetIncrementDescription(const QString &name, const QString &text)
{
QDomElement node = FindIncrement(name);
if (not node.isNull())
{
SetAttribute(node, IncrementDescription, text);
emit patternChanged(false);
}
}
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief GenerateLabel create label for pattern piece of point. * @brief GenerateLabel create label for pattern piece of point.
@ -2266,6 +2441,7 @@ void VPattern::PrepareForParse(const Document &parse)
else if (parse == Document::LiteParse) else if (parse == Document::LiteParse)
{ {
data->ClearUniqueNames(); data->ClearUniqueNames();
data->ClearVariables(VarType::Increment);
data->ClearVariables(VarType::ArcLength); data->ClearVariables(VarType::ArcLength);
data->ClearVariables(VarType::LineAngle); data->ClearVariables(VarType::LineAngle);
data->ClearVariables(VarType::LineLength); data->ClearVariables(VarType::LineLength);

View file

@ -65,6 +65,16 @@ public:
QString GetAuthor() const; QString GetAuthor() const;
void SetAuthor(const QString &text); void SetAuthor(const QString &text);
void AddEmptyIncrement(const QString &name);
void AddEmptyIncrementAfter(const QString &after, const QString &name);
void RemoveIncrement(const QString &name);
void MoveUpIncrement(const QString &name);
void MoveDownIncrement(const QString &name);
void SetIncrementName(const QString &name, const QString &text);
void SetIncrementFormula(const QString &name, const QString &text);
void SetIncrementDescription(const QString &name, const QString &text);
virtual QString GenerateLabel(const LabelType &type, const QString &reservedName = QString())const Q_DECL_OVERRIDE; virtual QString GenerateLabel(const LabelType &type, const QString &reservedName = QString())const Q_DECL_OVERRIDE;
public slots: public slots:
@ -151,6 +161,11 @@ private:
void ParseToolArc(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse); void ParseToolArc(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse);
void ParseNodeArc(const QDomElement &domElement, const Document &parse); void ParseNodeArc(const QDomElement &domElement, const Document &parse);
void ParseToolArcWithLength(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse); void ParseToolArcWithLength(VMainGraphicsScene *scene, QDomElement &domElement, const Document &parse);
qreal EvalFormula(VContainer *data, const QString &formula, bool *ok) const;
QDomElement MakeEmptyIncrement(const QString &name);
QDomElement FindIncrement(const QString &name) const;
}; };
#endif // VPATTERN_H #endif // VPATTERN_H

View file

@ -28,7 +28,8 @@
#include "ifcdef.h" #include "ifcdef.h"
const QString CustomSign = QStringLiteral("@"); const QString CustomMSign = QStringLiteral("@");
const QString CustomIncrSign = QStringLiteral("#");
#define DefWidth 1.2//mm #define DefWidth 1.2//mm

View file

@ -32,7 +32,8 @@
#include <QtGlobal> #include <QtGlobal>
#include "../vmisc/def.h" #include "../vmisc/def.h"
extern const QString CustomSign; extern const QString CustomMSign;
extern const QString CustomIncrSign;
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

View file

@ -97,9 +97,7 @@ const QString VAbstractPattern::AttrS54 = QStringLiteral("s54");
const QString VAbstractPattern::AttrS56 = QStringLiteral("s56"); const QString VAbstractPattern::AttrS56 = QStringLiteral("s56");
const QString VAbstractPattern::IncrementName = QStringLiteral("name"); const QString VAbstractPattern::IncrementName = QStringLiteral("name");
const QString VAbstractPattern::IncrementBase = QStringLiteral("base"); const QString VAbstractPattern::IncrementFormula = QStringLiteral("formula");
const QString VAbstractPattern::IncrementKsize = QStringLiteral("ksize");
const QString VAbstractPattern::IncrementKgrowth = QStringLiteral("kgrowth");
const QString VAbstractPattern::IncrementDescription = QStringLiteral("description"); const QString VAbstractPattern::IncrementDescription = QStringLiteral("description");
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View file

@ -168,9 +168,7 @@ public:
static const QString AttrS56; static const QString AttrS56;
static const QString IncrementName; static const QString IncrementName;
static const QString IncrementBase; static const QString IncrementFormula;
static const QString IncrementKsize;
static const QString IncrementKgrowth;
static const QString IncrementDescription; static const QString IncrementDescription;
signals: signals:

View file

@ -239,11 +239,8 @@ QmuParserError::QmuParserError ( EErrorCodes iErrc, const QString &sTok, const Q
m_ErrMsg ( QmuParserErrorMsg::Instance() ) m_ErrMsg ( QmuParserErrorMsg::Instance() )
{ {
m_sMsg = m_ErrMsg[m_iErrc]; m_sMsg = m_ErrMsg[m_iErrc];
qDebug()<<m_sMsg;
m_sMsg.replace("$POS$", QString().setNum ( m_iPos )); m_sMsg.replace("$POS$", QString().setNum ( m_iPos ));
qDebug()<<m_sMsg;
m_sMsg.replace("$TOK$", m_sTok ); m_sMsg.replace("$TOK$", m_sTok );
qDebug()<<m_sMsg;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------

View file

@ -524,7 +524,7 @@ QStringList VMeasurements::ListKnown() const
const QStringList list = ListAll(); const QStringList list = ListAll();
for (int i=0; i < list.size(); ++i) for (int i=0; i < list.size(); ++i)
{ {
if (list.at(i).indexOf(CustomSign) != 0) if (list.at(i).indexOf(CustomMSign) != 0)
{ {
listNames.append(list.at(i)); listNames.append(list.at(i));
} }

View file

@ -137,8 +137,7 @@ void Calculator::InitVariables(const VContainer *data, const QMap<int, QString>
if (vars->contains(i.value())) if (vars->contains(i.value()))
{ {
QSharedPointer<VInternalVariable> var = vars->value(i.value()); QSharedPointer<VInternalVariable> var = vars->value(i.value());
if ((patternType == MeasurementsType::Standard) && if (patternType == MeasurementsType::Standard && var->GetType() == VarType::Measurement)
(var->GetType() == VarType::Measurement || var->GetType() == VarType::Increment))
{ {
QSharedPointer<VVariable> m = data->GetVariable<VVariable>(i.value()); QSharedPointer<VVariable> m = data->GetVariable<VVariable>(i.value());
m->SetValue(data->size(), data->height(), *data->GetPatternUnit()); m->SetValue(data->size(), data->height(), *data->GetPatternUnit());

View file

@ -47,8 +47,9 @@ VIncrement::VIncrement()
* @param base value * @param base value
* @param description description of increment * @param description description of increment
*/ */
VIncrement::VIncrement(const QString &name, quint32 id, qreal base, QString description) VIncrement::VIncrement(VContainer *data, const QString &name, quint32 index, qreal base, const QString &formula,
:VVariable(name, base, description), d(new VIncrementData(id)) bool ok, const QString description)
:VVariable(name, base, description), d(new VIncrementData(data, index, formula, ok))
{ {
SetType(VarType::Increment); SetType(VarType::Increment);
} }
@ -76,20 +77,28 @@ VIncrement::~VIncrement()
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** /**
* @brief getId return id of row * @brief getIndex return index of row
* @return id * @return index
*/ */
quint32 VIncrement::getId() const quint32 VIncrement::getIndex() const
{ {
return d->id; return d->index;
} }
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
/** QString VIncrement::GetFormula() const
* @brief setId set id of row
* @param value id
*/
void VIncrement::setId(const quint32 &value)
{ {
d->id = value; return d->formula;
}
//---------------------------------------------------------------------------------------------------------------------
bool VIncrement::IsFormulaOk() const
{
return d->formulaOk;
}
//---------------------------------------------------------------------------------------------------------------------
VContainer *VIncrement::GetData()
{
return &d->data;
} }

View file

@ -32,6 +32,7 @@
#include "vvariable.h" #include "vvariable.h"
class VIncrementData; class VIncrementData;
class VContainer;
/** /**
* @brief The VIncrement class keep data row of increment table * @brief The VIncrement class keep data row of increment table
@ -40,13 +41,17 @@ class VIncrement :public VVariable
{ {
public: public:
VIncrement(); VIncrement();
VIncrement(const QString &name, quint32 id, qreal base, QString description = QString()); VIncrement(VContainer *data, const QString &name, quint32 index, qreal base, const QString &formula, bool ok,
const QString description = QString());
VIncrement(const VIncrement &incr); VIncrement(const VIncrement &incr);
VIncrement &operator=(const VIncrement &incr); VIncrement &operator=(const VIncrement &incr);
virtual ~VIncrement() Q_DECL_OVERRIDE; virtual ~VIncrement() Q_DECL_OVERRIDE;
quint32 getId() const; quint32 getIndex() const;
void setId(const quint32 &value); QString GetFormula() const;
bool IsFormulaOk() const;
VContainer *GetData();
private: private:
QSharedDataPointer<VIncrementData> d; QSharedDataPointer<VIncrementData> d;
}; };

View file

@ -32,6 +32,7 @@
#include <QSharedData> #include <QSharedData>
#include "../ifc/ifcdef.h" #include "../ifc/ifcdef.h"
#include "vcontainer.h"
#ifdef Q_CC_GNU #ifdef Q_CC_GNU
#pragma GCC diagnostic push #pragma GCC diagnostic push
@ -43,21 +44,24 @@ class VIncrementData : public QSharedData
public: public:
VIncrementData() VIncrementData()
:id(NULL_ID) :index(NULL_ID), formula(QString()), formulaOk(false), data(VContainer(nullptr, nullptr))
{} {}
VIncrementData(quint32 id) VIncrementData(VContainer *data, quint32 index, const QString &formula, bool ok)
:id(id) :index(index), formula(formula), formulaOk(ok), data(*data)
{} {}
VIncrementData(const VIncrementData &incr) VIncrementData(const VIncrementData &incr)
:QSharedData(incr), id(incr.id) :QSharedData(incr), index(incr.index), formula(incr.formula), formulaOk(incr.formulaOk), data(incr.data)
{} {}
virtual ~VIncrementData(); virtual ~VIncrementData();
/** @brief id each increment have unique identificator */ /** @brief id each increment have unique identificator */
quint32 id; quint32 index;
QString formula;
bool formulaOk;
VContainer data;
}; };
VIncrementData::~VIncrementData() VIncrementData::~VIncrementData()

View file

@ -219,7 +219,7 @@ QString VMeasurement::GetFormula() const
//--------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------
bool VMeasurement::IsCustom() const bool VMeasurement::IsCustom() const
{ {
if (GetName().indexOf(CustomSign) == 0) if (GetName().indexOf(CustomMSign) == 0)
{ {
return true; return true;
} }

View file

@ -58,7 +58,6 @@ public:
virtual ~VMeasurementData(); virtual ~VMeasurementData();
/** @brief description description measurement */
VContainer data; VContainer data;
quint32 index; quint32 index;
QString formula; QString formula;

View file

@ -705,6 +705,7 @@ QString VTranslateVars::STDescription(const QString &id) const
* @brief FormulaFromUser replace all known tokens in formula to internal look. Also change decimal * @brief FormulaFromUser replace all known tokens in formula to internal look. Also change decimal
* separator in numbers. * separator in numbers.
* @param formula expression that need translate * @param formula expression that need translate
* @throw qmu::QmuParserError in case of a wrong expression
* @return translated expression * @return translated expression
*/ */
QString VTranslateVars::FormulaFromUser(const QString &formula, bool osSeparator) const QString VTranslateVars::FormulaFromUser(const QString &formula, bool osSeparator) const