diff --git a/src/app/dialogs/tools/dialognormal.cpp b/src/app/dialogs/tools/dialognormal.cpp
index ba20c3755..056bfaf26 100644
--- a/src/app/dialogs/tools/dialognormal.cpp
+++ b/src/app/dialogs/tools/dialognormal.cpp
@@ -39,11 +39,13 @@ DialogNormal::DialogNormal(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;
InitOkCancelApply(ui);
+ this->formulaBaseHeight=ui->plainTextEditFormula->height();
+
flagFormula = false;
flagName = false;
CheckState();
@@ -58,7 +60,36 @@ DialogNormal::DialogNormal(const VContainer *data, QWidget *parent)
connect(ui->listWidget, &QListWidget::itemDoubleClicked, this, &DialogNormal::PutVal);
connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogNormal::EvalFormula);
connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogNormal::NamePointChanged);
- connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogNormal::FormulaChanged);
+ connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogNormal::FormulaTextChanged);
+ connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogNormal::DeployFormulaTextEdit);
+
+ ui->pushButtonGrowLength->setIcon(QIcon::fromTheme("go-down",
+ QIcon(":/icons/win.icon.theme/icons/win.icon.theme/16x16/actions/go-down.png")));
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void DialogNormal::FormulaTextChanged()
+{
+ // TODO issue #79 : back to FormulaChanged when full update
+ // Also remove this function if only one function called here
+ this->FormulaChanged2();
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void DialogNormal::DeployFormulaTextEdit()
+{
+ if (ui->plainTextEditFormula->height() < DIALOGNORMAL_MAX_FORMULA_HEIGHT)
+ {
+ ui->plainTextEditFormula->setFixedHeight(DIALOGNORMAL_MAX_FORMULA_HEIGHT);
+ //Set icon from theme (internal for Windows system)
+ ui->pushButtonGrowLength->setIcon(QIcon::fromTheme("go-next"));
+ }
+ else
+ {
+ ui->plainTextEditFormula->setFixedHeight(this->formulaBaseHeight);
+ //Set icon from theme (internal for Windows system)
+ ui->pushButtonGrowLength->setIcon(QIcon::fromTheme("go-down"));
+ }
}
//---------------------------------------------------------------------------------------------------------------------
@@ -96,14 +127,27 @@ void DialogNormal::ChoosedObject(quint32 id, const Valentina::Scenes &type)
//---------------------------------------------------------------------------------------------------------------------
void DialogNormal::DialogAccepted()
+{
+ this->SaveData();
+ emit DialogClosed(QDialog::Accepted);
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void DialogNormal::DialogApply()
+{
+ this->SaveData();
+ emit DialogApplied();
+}
+//---------------------------------------------------------------------------------------------------------------------
+void DialogNormal::SaveData()
{
pointName = ui->lineEditNamePoint->text();
typeLine = GetTypeLine(ui->comboBoxLineType);
- formula = ui->lineEditFormula->text();
+ formula = ui->plainTextEditFormula->toPlainText();
+ formula.replace("\n"," ");
angle = ui->doubleSpinBoxAngle->value();
firstPointId = getCurrentObjectId(ui->comboBoxFirstPoint);
secondPointId = getCurrentObjectId(ui->comboBoxSecondPoint);
- emit DialogClosed(QDialog::Accepted);
}
//---------------------------------------------------------------------------------------------------------------------
@@ -129,7 +173,12 @@ void DialogNormal::setAngle(const qreal &value)
void DialogNormal::setFormula(const QString &value)
{
formula = qApp->FormulaToUser(value);
- ui->lineEditFormula->setText(formula);
+ // increase height if needed.
+ if (formula.length() > 80)
+ {
+ this->DeployFormulaTextEdit();
+ }
+ ui->plainTextEditFormula->setPlainText(formula);
}
//---------------------------------------------------------------------------------------------------------------------
diff --git a/src/app/dialogs/tools/dialognormal.h b/src/app/dialogs/tools/dialognormal.h
index ad8147cc9..3e16e9884 100644
--- a/src/app/dialogs/tools/dialognormal.h
+++ b/src/app/dialogs/tools/dialognormal.h
@@ -31,6 +31,7 @@
#include "dialogtool.h"
+#define DIALOGNORMAL_MAX_FORMULA_HEIGHT 64
namespace Ui
{
class DialogNormal;
@@ -123,12 +124,24 @@ public slots:
* @brief DialogAccepted save data and emit signal about closed dialog.
*/
virtual void DialogAccepted();
- /** TODO ISSUE 79 : create real function
+ /**
* @brief DialogApply apply data and emit signal about applied dialog.
*/
- virtual void DialogApply(){}
+ virtual void DialogApply();
+ /**
+ * @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(DialogNormal)
+ /**
+ * @brief SaveData Put dialog data in local variables
+ */
+ void SaveData();
/**
* @brief ui keeps information about user interface
*/
@@ -161,6 +174,10 @@ private:
* @brief secondPointId id second point of line
*/
quint32 secondPointId;
+ /**
+ * @brief formulaBaseHeight base height defined by dialogui
+ */
+ int formulaBaseHeight;
};
inline QString DialogNormal::getPointName() const
diff --git a/src/app/dialogs/tools/dialognormal.ui b/src/app/dialogs/tools/dialognormal.ui
index 781fd810d..a135ba36a 100644
--- a/src/app/dialogs/tools/dialognormal.ui
+++ b/src/app/dialogs/tools/dialognormal.ui
@@ -74,17 +74,17 @@
-
-
-
-
- 0
- 0
-
+
+
+ Qt::Horizontal
-
- Formula for calculation of length of normal
+
+
+ 40
+ 20
+
-
+
-
@@ -150,6 +150,56 @@
+ -
+
+
-
+
+
+
+ 16777215
+ 24
+
+
+
+
+ -
+
+
+
+ 18
+ 18
+
+
+
+
+ 0
+ 0
+
+
+
+ <html><head/><body><p>Show full calculation in message box</p></body></html>
+
+
+
+
+
+
+
+
+
+
+
+ 16
+ 16
+
+
+
+ true
+
+
+
+
+
-
-
@@ -601,14 +651,13 @@
Qt::Horizontal
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+ QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok
- lineEditFormula
lineEditNamePoint
comboBoxFirstPoint
comboBoxSecondPoint
diff --git a/src/app/mainwindow.cpp b/src/app/mainwindow.cpp
index 21c50ea62..dd4d4c4f7 100644
--- a/src/app/mainwindow.cpp
+++ b/src/app/mainwindow.cpp
@@ -472,8 +472,18 @@ void MainWindow::ClosedDialogShoulderPoint(int result)
*/
void MainWindow::ToolNormal(bool checked)
{
- SetToolButton(checked, Valentina::NormalTool, ":/cursor/normal_cursor.png",
- tr("Select first point of line"), &MainWindow::ClosedDialogNormal);
+ SetToolButton2(checked, Valentina::NormalTool, ":/cursor/normal_cursor.png",
+ tr("Select first point of line"), &MainWindow::ClosedDialogNormal,
+ &MainWindow::ApplyDialogNormal);
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ApplyDialogNormal actions after apply in ApplyDialogNormal.
+ */
+void MainWindow::ApplyDialogNormal()
+{
+ ApplyDialog();
}
//---------------------------------------------------------------------------------------------------------------------
@@ -483,7 +493,7 @@ void MainWindow::ToolNormal(bool checked)
*/
void MainWindow::ClosedDialogNormal(int result)
{
- ClosedDialog(result);
+ ClosedDialog2(result);
}
//---------------------------------------------------------------------------------------------------------------------
diff --git a/src/app/mainwindow.h b/src/app/mainwindow.h
index 8623e07f9..37e4be09d 100644
--- a/src/app/mainwindow.h
+++ b/src/app/mainwindow.h
@@ -109,6 +109,7 @@ public slots:
void ApplyDialogAlongLine();
void ClosedDialogShoulderPoint(int result);
void ClosedDialogNormal(int result);
+ void ApplyDialogNormal();
void ClosedDialogBisector(int result);
void ApplyDialogBisector();
void ClosedDialogLineIntersect(int result);
diff --git a/src/app/tools/drawTools/vtoolnormal.cpp b/src/app/tools/drawTools/vtoolnormal.cpp
index 1a601436d..453b212b2 100644
--- a/src/app/tools/drawTools/vtoolnormal.cpp
+++ b/src/app/tools/drawTools/vtoolnormal.cpp
@@ -66,7 +66,7 @@ void VToolNormal::setDialog()
}
//---------------------------------------------------------------------------------------------------------------------
-void VToolNormal::Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc, VContainer *data)
+VToolNormal* VToolNormal::Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc, VContainer *data)
{
SCASSERT(dialog != nullptr);
DialogNormal *dialogTool = qobject_cast(dialog);
@@ -77,12 +77,18 @@ void VToolNormal::Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern
const QString typeLine = dialogTool->getTypeLine();
const QString pointName = dialogTool->getPointName();
const qreal angle = dialogTool->getAngle();
- Create(0, formula, firstPointId, secondPointId, typeLine, pointName, angle, 5, 10, scene, doc, data,
+ VToolNormal *point = nullptr;
+ point=Create(0, formula, firstPointId, secondPointId, typeLine, pointName, angle, 5, 10, scene, doc, data,
Document::FullParse, Valentina::FromGui);
+ if (point != nullptr)
+ {
+ point->dialog=dialogTool;
+ }
+ return point;
}
//---------------------------------------------------------------------------------------------------------------------
-void VToolNormal::Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
+VToolNormal* VToolNormal::Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
const quint32 &secondPointId, const QString &typeLine, const QString &pointName,
const qreal angle, const qreal &mx, const qreal &my, VMainGraphicsScene *scene,
VPattern *doc, VContainer *data, const Document::Documents &parse,
@@ -121,7 +127,9 @@ void VToolNormal::Create(const quint32 _id, QString &formula, const quint32 &fir
doc->AddTool(id, point);
doc->IncrementReferens(firstPointId);
doc->IncrementReferens(secondPointId);
+ return point;
}
+ return nullptr;
}
//---------------------------------------------------------------------------------------------------------------------
diff --git a/src/app/tools/drawTools/vtoolnormal.h b/src/app/tools/drawTools/vtoolnormal.h
index f054b3280..16d84e471 100644
--- a/src/app/tools/drawTools/vtoolnormal.h
+++ b/src/app/tools/drawTools/vtoolnormal.h
@@ -66,7 +66,7 @@ public:
* @param doc dom document container.
* @param data container with variables.
*/
- static void Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc, VContainer *data);
+ static VToolNormal* Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc, VContainer *data);
/**
* @brief Create help create tool.
* @param _id tool id, 0 if tool doesn't exist yet.
@@ -84,7 +84,7 @@ public:
* @param parse parser file mode.
* @param typeCreation way we create this tool.
*/
- static void Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
+ static VToolNormal* Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
const quint32 &secondPointId, const QString &typeLine, const QString &pointName,
const qreal angle, const qreal &mx, const qreal &my, VMainGraphicsScene *scene,
VPattern *doc, VContainer *data, const Document::Documents &parse,