diff --git a/src/app/dialogs/tools/dialogendline.cpp b/src/app/dialogs/tools/dialogendline.cpp index b9b1b4279..5d938aae6 100644 --- a/src/app/dialogs/tools/dialogendline.cpp +++ b/src/app/dialogs/tools/dialogendline.cpp @@ -39,10 +39,13 @@ DialogEndLine::DialogEndLine(const VContainer *data, QWidget *parent) ui->setupUi(this); InitVariables(ui); labelResultCalculation = ui->labelResultCalculation; - lineEditFormula = ui->lineEditFormula; + plainTextEditFormula = ui->plainTextEditFormula; labelEditFormula = ui->labelEditFormula; labelEditNamePoint = ui->labelEditNamePoint; + // TODO : auto extend height on first value length. + this->formulaBaseHeight=ui->plainTextEditFormula->height(); + InitOkCansel(ui); flagFormula = false; flagName = false; @@ -57,7 +60,29 @@ DialogEndLine::DialogEndLine(const VContainer *data, QWidget *parent) connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogEndLine::PutVal); connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogEndLine::EvalFormula); connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogEndLine::NamePointChanged); - connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogEndLine::FormulaChanged); + connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogEndLine::FormulaTextChanged); + connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogEndLine::DeployFormulaTextEdit); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogEndLine::FormulaTextChanged() +{ + // TODO issue #79 : back to FormulaChanged when full update + // Also remove this function if only one function called here + this->FormulaChanged2(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogEndLine::DeployFormulaTextEdit() +{ + if (ui->plainTextEditFormula->height() < 64) + { + ui->plainTextEditFormula->setFixedHeight(64); + } + else + { + ui->plainTextEditFormula->setFixedHeight(this->formulaBaseHeight); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -90,7 +115,10 @@ void DialogEndLine::setTypeLine(const QString &value) void DialogEndLine::setFormula(const QString &value) { formula = value; - ui->lineEditFormula->setText(formula); + ui->plainTextEditFormula->setPlainText(value); + //QTextCursor cursor = ui->plainTextEditFormula->textCursor(); + //cursor.insertText(value); + //ui->plainTextEditFormula->setCursor(cursor); } //--------------------------------------------------------------------------------------------------------------------- @@ -111,7 +139,8 @@ void DialogEndLine::DialogAccepted() { pointName = ui->lineEditNamePoint->text(); typeLine = GetTypeLine(ui->comboBoxLineType); - formula = ui->lineEditFormula->text(); + formula = ui->plainTextEditFormula->toPlainText(); + formula.replace("\n"," "); angle = ui->doubleSpinBoxAngle->value(); basePointId = getCurrentObjectId(ui->comboBoxBasePoint); emit DialogClosed(QDialog::Accepted); diff --git a/src/app/dialogs/tools/dialogendline.h b/src/app/dialogs/tools/dialogendline.h index 7dfc82b03..9765d6cbb 100644 --- a/src/app/dialogs/tools/dialogendline.h +++ b/src/app/dialogs/tools/dialogendline.h @@ -112,6 +112,14 @@ public slots: * @brief DialogAccepted save data and emit signal about closed dialog. */ virtual void DialogAccepted(); + /** + * @brief DeployFormulaTextEdit grow or shrink formula input + */ + void DeployFormulaTextEdit(); + /** + * @brief FormulaTextChanged when formula text changes for validation and calc + */ + void FormulaTextChanged(); private: Q_DISABLE_COPY(DialogEndLine) /** @@ -138,6 +146,10 @@ private: * @brief basePointId id base point of line */ quint32 basePointId; + /** + * @brief formulaBaseHeight base height defined by dialogui + */ + int formulaBaseHeight; }; inline QString DialogEndLine::getPointName() const diff --git a/src/app/dialogs/tools/dialogendline.ui b/src/app/dialogs/tools/dialogendline.ui index 1d6c59866..797078a5a 100644 --- a/src/app/dialogs/tools/dialogendline.ui +++ b/src/app/dialogs/tools/dialogendline.ui @@ -6,8 +6,8 @@ 0 0 - 539 - 559 + 486 + 522 @@ -74,17 +74,17 @@ - - - - 0 - 0 - + + + Qt::Horizontal - - Formula for calculation of length of line + + + 40 + 20 + - + @@ -147,6 +147,56 @@ + + + + + + + 16777215 + 24 + + + + + 4 + 0 + + + + + + + + + 16 + 16 + + + + <html><head/><body><p>Show full calculation in message box</p></body></html> + + + + + + + :/icon/16x16/go-down.png + :/icon/16x16/go-next.png:/icon/16x16/go-down.png + + + + 16 + 16 + + + + true + + + + + @@ -550,7 +600,6 @@ - lineEditFormula comboBoxBasePoint lineEditNamePoint doubleSpinBoxAngle diff --git a/src/app/dialogs/tools/dialogtool.cpp b/src/app/dialogs/tools/dialogtool.cpp index c10df30c0..ada3d1e16 100644 --- a/src/app/dialogs/tools/dialogtool.cpp +++ b/src/app/dialogs/tools/dialogtool.cpp @@ -33,10 +33,15 @@ #include +// TODO : for issue #79 +// replace lineEditFormula -> plainTextEditFormula +// delete lineEditFormala everywhrer +// delete PutValHere and eval overloaded functions + //--------------------------------------------------------------------------------------------------------------------- DialogTool::DialogTool(const VContainer *data, QWidget *parent) :QDialog(parent), data(data), isInitialized(false), flagName(true), flagFormula(true), timerFormula(nullptr), - bOk(nullptr), spinBoxAngle(nullptr), lineEditFormula(nullptr), listWidget(nullptr), + bOk(nullptr), spinBoxAngle(nullptr), lineEditFormula(nullptr), plainTextEditFormula(nullptr), listWidget(nullptr), labelResultCalculation(nullptr), labelDescription(nullptr), labelEditNamePoint(nullptr), labelEditFormula(nullptr), radioButtonSizeGrowth(nullptr), radioButtonStandardTable(nullptr), radioButtonIncrements(nullptr), radioButtonLengthLine(nullptr), radioButtonLengthArc(nullptr), @@ -283,22 +288,42 @@ void DialogTool::ChangeCurrentData(QComboBox *box, const quint32 &value) const } } -//--------------------------------------------------------------------------------------------------------------------- void DialogTool::PutValHere(QLineEdit *lineEdit, QListWidget *listWidget) -{ +{ // TODO issue #79 : erase this function after all tools updated to plainTextEdit Q_CHECK_PTR(lineEdit); Q_CHECK_PTR(listWidget); QListWidgetItem *item = listWidget->currentItem(); Q_CHECK_PTR(item); + int pos = lineEdit->cursorPosition(); lineEdit->setText(lineEdit->text().insert(lineEdit->cursorPosition(), item->text())); lineEdit->setFocus(); lineEdit->setCursorPosition(pos + item->text().size()); + +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogTool::PutValHere(QPlainTextEdit *plainTextEdit, QListWidget *listWidget) +{ + Q_CHECK_PTR(plainTextEdit); + Q_CHECK_PTR(listWidget); + QListWidgetItem *item = listWidget->currentItem(); + Q_CHECK_PTR(item); + + QTextCursor cursor = plainTextEdit->textCursor(); + cursor.insertText(item->text()); + plainTextEdit->setTextCursor(cursor); + /* + int pos = lineEdit->cursorPosition(); + lineEdit->setText(lineEdit->text().insert(lineEdit->cursorPosition(), item->text())); + lineEdit->setFocus(); + lineEdit->setCursorPosition(pos + item->text().size()); + */ } //--------------------------------------------------------------------------------------------------------------------- void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer) -{ +{// TODO issue #79 : erase this function after all tools updated to plainTextEdit Q_CHECK_PTR(edit); Q_CHECK_PTR(timer); Q_CHECK_PTR(labelEditFormula); @@ -313,10 +338,26 @@ void DialogTool::ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer *timer) } timer->start(1000); } - //--------------------------------------------------------------------------------------------------------------------- -void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label) +void DialogTool::ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer *timer) { + Q_CHECK_PTR(edit); + Q_CHECK_PTR(timer); + Q_CHECK_PTR(labelEditFormula); + if (edit->toPlainText().isEmpty()) + { + flag = false; + CheckState(); + QPalette palette = labelEditFormula->palette(); + palette.setColor(labelEditFormula->foregroundRole(), Qt::red); + labelEditFormula->setPalette(palette); + return; + } + timer->start(1000); +} + +void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label) +{ // TODO issue #79 : erase this function after all tools updated to plainTextEdit Q_CHECK_PTR(edit); Q_CHECK_PTR(timer); Q_CHECK_PTR(label); @@ -350,6 +391,45 @@ void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label) labelEditFormula->setPalette(palette); } +//--------------------------------------------------------------------------------------------------------------------- +void DialogTool::Eval(QPlainTextEdit *edit, bool &flag, QTimer *timer, QLabel *label) +{ + Q_CHECK_PTR(edit); + Q_CHECK_PTR(timer); + Q_CHECK_PTR(label); + Q_CHECK_PTR(labelEditFormula); + QPalette palette = labelEditFormula->palette(); + if (edit->toPlainText().isEmpty()) + { + flag = false; + palette.setColor(labelEditFormula->foregroundRole(), Qt::red); + } + else + { + Calculator cal(data); + QString errorMsg; + // Replace line return with spaces for calc + QString formula = edit->toPlainText(); + formula.replace("\n"," "); + qreal result = cal.eval(formula, &errorMsg); + if (errorMsg.isEmpty() == false) + { + label->setText(tr("Error")); + flag = false; + palette.setColor(labelEditFormula->foregroundRole(), Qt::red); + } + else + { + label->setText(QString().setNum(result)); + flag = true; + palette.setColor(labelEditFormula->foregroundRole(), QColor(76, 76, 76)); + } + } + CheckState(); + timer->stop(); + labelEditFormula->setPalette(palette); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogTool::setCurrentPointId(QComboBox *box, quint32 &pointId, const quint32 &value, const quint32 &id) const { @@ -489,13 +569,22 @@ void DialogTool::DialogRejected() //--------------------------------------------------------------------------------------------------------------------- void DialogTool::FormulaChanged() -{ +{ // TODO issue #79 : erase after full update of tools. QLineEdit* edit = qobject_cast(sender()); if (edit) { ValFormulaChanged(flagFormula, edit, timerFormula); } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogTool::FormulaChanged2() +{ + QPlainTextEdit* edit = qobject_cast(sender()); + if (edit) + { + ValFormulaChanged(flagFormula, edit, timerFormula); + } +} //--------------------------------------------------------------------------------------------------------------------- void DialogTool::ArrowUp() @@ -556,9 +645,9 @@ void DialogTool::ArrowRightDown() //--------------------------------------------------------------------------------------------------------------------- void DialogTool::EvalFormula() { - Q_CHECK_PTR(lineEditFormula); + Q_CHECK_PTR(plainTextEditFormula); Q_CHECK_PTR(labelResultCalculation); - Eval(lineEditFormula, flagFormula, timerFormula, labelResultCalculation); + Eval(plainTextEditFormula, flagFormula, timerFormula, labelResultCalculation); } //--------------------------------------------------------------------------------------------------------------------- @@ -615,19 +704,23 @@ void DialogTool::Increments() //--------------------------------------------------------------------------------------------------------------------- void DialogTool::PutHere() { - PutValHere(lineEditFormula, listWidget); + PutValHere(plainTextEditFormula, listWidget); } //--------------------------------------------------------------------------------------------------------------------- void DialogTool::PutVal(QListWidgetItem *item) { - Q_CHECK_PTR(lineEditFormula); + Q_CHECK_PTR(plainTextEditFormula); Q_CHECK_PTR(item); - int pos = lineEditFormula->cursorPosition(); + QTextCursor cursor = plainTextEditFormula->textCursor(); + cursor.insertText(item->text()); + plainTextEditFormula->setTextCursor(cursor); + /*int pos = plainTextEditFormula->cursorPosition(); lineEditFormula->setText(lineEditFormula->text().insert(lineEditFormula->cursorPosition(), item->text())); lineEditFormula->setFocus(); lineEditFormula->setCursorPosition(pos + item->text().size()); + */ } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/dialogs/tools/dialogtool.h b/src/app/dialogs/tools/dialogtool.h index 6def423d3..dc8eed65b 100644 --- a/src/app/dialogs/tools/dialogtool.h +++ b/src/app/dialogs/tools/dialogtool.h @@ -37,6 +37,7 @@ #include #include #include +#include #include "../../container/vcontainer.h" #include "../../widgets/vapplication.h" @@ -102,6 +103,7 @@ public slots: * @brief formula check formula */ void FormulaChanged(); + void FormulaChanged2(); /** * @brief ArrowUp set angle value 90 degree */ @@ -214,6 +216,7 @@ protected: * @brief lineEditFormula linEdit for formula */ QLineEdit *lineEditFormula; + QPlainTextEdit *plainTextEditFormula; /** * @brief listWidget listWidget with variables */ @@ -341,6 +344,7 @@ protected: * @param listWidget listWidget */ void PutValHere(QLineEdit *lineEdit, QListWidget *listWidget); + void PutValHere(QPlainTextEdit *plainTextEdit, QListWidget *listWidget); /** * @brief ValFormulaChanged handle change formula * @param flag flag state of formula @@ -348,6 +352,7 @@ protected: * @param timer timer of formula */ void ValFormulaChanged(bool &flag, QLineEdit *edit, QTimer * timer); + void ValFormulaChanged(bool &flag, QPlainTextEdit *edit, QTimer * timer); /** * @brief Eval evaluate formula and show result * @param edit lineEdit of formula @@ -355,6 +360,7 @@ protected: * @param timer timer of formula * @param label label for signal error */ + void Eval(QPlainTextEdit *edit, bool &flag, QTimer *timer, QLabel *label); void Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label); /** * @brief setCurrentPointId set current point id in combobox diff --git a/src/app/share/resources/icon.qrc b/src/app/share/resources/icon.qrc index 64d48ee8e..7fae467c5 100644 --- a/src/app/share/resources/icon.qrc +++ b/src/app/share/resources/icon.qrc @@ -52,5 +52,7 @@ icon/flags/uk.png icon/Graduation.png icon/individual.png + icon/16x16/go-down.png + icon/16x16/go-next.png diff --git a/src/app/share/resources/icon/16x16/go-down.png b/src/app/share/resources/icon/16x16/go-down.png new file mode 100644 index 000000000..a74287892 Binary files /dev/null and b/src/app/share/resources/icon/16x16/go-down.png differ diff --git a/src/app/share/resources/icon/16x16/go-next.png b/src/app/share/resources/icon/16x16/go-next.png new file mode 100644 index 000000000..5883d9dca Binary files /dev/null and b/src/app/share/resources/icon/16x16/go-next.png differ