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