diff --git a/src/app/dialogs/tools/dialogbisector.cpp b/src/app/dialogs/tools/dialogbisector.cpp
index e24511c88..774bba5ea 100644
--- a/src/app/dialogs/tools/dialogbisector.cpp
+++ b/src/app/dialogs/tools/dialogbisector.cpp
@@ -39,9 +39,12 @@ DialogBisector::DialogBisector(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;
+
+ this->formulaBaseHeight=ui->plainTextEditFormula->height();
+
InitOkCancelApply(ui);
flagFormula = false;
flagName = false;
@@ -57,7 +60,38 @@ DialogBisector::DialogBisector(const VContainer *data, QWidget *parent)
connect(ui->toolButtonEqual, &QPushButton::clicked, this, &DialogBisector::EvalFormula);
connect(ui->lineEditNamePoint, &QLineEdit::textChanged, this, &DialogBisector::NamePointChanged);
- connect(ui->lineEditFormula, &QLineEdit::textChanged, this, &DialogBisector::FormulaChanged);
+ connect(ui->plainTextEditFormula, &QPlainTextEdit::textChanged, this, &DialogBisector::FormulaTextChanged);
+ connect(ui->pushButtonGrowLength, &QPushButton::clicked, this, &DialogBisector::DeployFormulaTextEdit);
+
+ ui->pushButtonGrowLength->setIcon(QIcon::fromTheme("go-down",
+ QIcon(":/icons/win.icon.theme/icons/win.icon.theme/16x16/actions/go-down.png")));
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void DialogBisector::FormulaTextChanged()
+{
+ // TODO issue #79 : back to FormulaChanged when full update
+ // Also remove this function if only one function called here
+ this->FormulaChanged2();
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void DialogBisector::DeployFormulaTextEdit()
+{
+ if (ui->plainTextEditFormula->height() < DIALOGBISECTOR_MAX_FORMULA_HEIGHT)
+ {
+ ui->plainTextEditFormula->setFixedHeight(DIALOGBISECTOR_MAX_FORMULA_HEIGHT);
+ //Set icon from theme (internal for Windows system)
+ ui->pushButtonGrowLength->setIcon(QIcon::fromTheme("go-next",
+ QIcon(":/icons/win.icon.theme/icons/win.icon.theme/16x16/actions/go-next.png")));
+ }
+ else
+ {
+ ui->plainTextEditFormula->setFixedHeight(this->formulaBaseHeight);
+ //Set icon from theme (internal for Windows system)
+ ui->pushButtonGrowLength->setIcon(QIcon::fromTheme("go-down",
+ QIcon(":/icons/win.icon.theme/icons/win.icon.theme/16x16/actions/go-down.png")));
+ }
}
//---------------------------------------------------------------------------------------------------------------------
@@ -129,7 +163,12 @@ void DialogBisector::setTypeLine(const QString &value)
void DialogBisector::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);
}
//---------------------------------------------------------------------------------------------------------------------
@@ -152,12 +191,25 @@ void DialogBisector::setThirdPointId(const quint32 &value, const quint32 &id)
//---------------------------------------------------------------------------------------------------------------------
void DialogBisector::DialogAccepted()
+{
+ this->SaveData();
+ emit DialogClosed(QDialog::Accepted);
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+void DialogBisector::DialogApply()
+{
+ this->SaveData();
+ emit DialogApplied();
+}
+//---------------------------------------------------------------------------------------------------------------------
+void DialogBisector::SaveData()
{
pointName = ui->lineEditNamePoint->text();
typeLine = GetTypeLine(ui->comboBoxLineType);
- formula = ui->lineEditFormula->text();
+ formula = ui->plainTextEditFormula->toPlainText();
+ formula.replace("\n"," ");
firstPointId = getCurrentObjectId(ui->comboBoxFirstPoint);
secondPointId = getCurrentObjectId(ui->comboBoxSecondPoint);
thirdPointId = getCurrentObjectId(ui->comboBoxThirdPoint);
- emit DialogClosed(QDialog::Accepted);
}
diff --git a/src/app/dialogs/tools/dialogbisector.h b/src/app/dialogs/tools/dialogbisector.h
index 948140d98..f1ca2ae3b 100644
--- a/src/app/dialogs/tools/dialogbisector.h
+++ b/src/app/dialogs/tools/dialogbisector.h
@@ -31,6 +31,7 @@
#include "dialogtool.h"
+#define DIALOGBISECTOR_MAX_FORMULA_HEIGHT 64
namespace Ui
{
class DialogBisector;
@@ -124,12 +125,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(DialogBisector)
+ /**
+ * @brief SaveData Put dialog data in local variables
+ */
+ void SaveData();
/**
* @brief ui keeps information about user interface
*/
@@ -162,6 +175,10 @@ private:
* @brief thirdPointId id of third point
*/
quint32 thirdPointId;
+ /**
+ * @brief formulaBaseHeight base height defined by dialogui
+ */
+ int formulaBaseHeight;
};
inline QString DialogBisector::getTypeLine() const
diff --git a/src/app/dialogs/tools/dialogbisector.ui b/src/app/dialogs/tools/dialogbisector.ui
index 1c5221267..5c634c8aa 100644
--- a/src/app/dialogs/tools/dialogbisector.ui
+++ b/src/app/dialogs/tools/dialogbisector.ui
@@ -71,17 +71,17 @@
-
-
-
-
- 0
- 0
-
+
+
+ Qt::Horizontal
-
- Calculation of length of bisector by using the formula
+
+
+ 40
+ 20
+
-
+
-
@@ -147,6 +147,54 @@
+ -
+
+
-
+
+
+
+ 16777215
+ 24
+
+
+
+
+ -
+
+
+
+ 18
+ 18
+
+
+
+
+ 0
+ 0
+
+
+
+ <html><head/><body><p>Show full calculation in message box</p></body></html>
+
+
+
+
+
+
+
+
+
+ 16
+ 16
+
+
+
+ true
+
+
+
+
+
-
-
@@ -429,14 +477,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 86f0b0e4d..21c50ea62 100644
--- a/src/app/mainwindow.cpp
+++ b/src/app/mainwindow.cpp
@@ -493,8 +493,18 @@ void MainWindow::ClosedDialogNormal(int result)
*/
void MainWindow::ToolBisector(bool checked)
{
- SetToolButton(checked, Valentina::BisectorTool, ":/cursor/bisector_cursor.png",
- tr("Select first point of angle"), &MainWindow::ClosedDialogBisector);
+ SetToolButton2(checked, Valentina::BisectorTool, ":/cursor/bisector_cursor.png",
+ tr("Select first point of angle"), &MainWindow::ClosedDialogBisector,
+ &MainWindow::ApplyDialogBisector);
+}
+
+//---------------------------------------------------------------------------------------------------------------------
+/**
+ * @brief ApplyDialogBisector actions after apply in DialogBisector.
+ */
+void MainWindow::ApplyDialogBisector()
+{
+ ApplyDialog();
}
//---------------------------------------------------------------------------------------------------------------------
@@ -504,7 +514,7 @@ void MainWindow::ToolBisector(bool checked)
*/
void MainWindow::ClosedDialogBisector(int result)
{
- ClosedDialog(result);
+ ClosedDialog2(result);
}
//---------------------------------------------------------------------------------------------------------------------
diff --git a/src/app/mainwindow.h b/src/app/mainwindow.h
index c5bd288b3..8623e07f9 100644
--- a/src/app/mainwindow.h
+++ b/src/app/mainwindow.h
@@ -110,6 +110,7 @@ public slots:
void ClosedDialogShoulderPoint(int result);
void ClosedDialogNormal(int result);
void ClosedDialogBisector(int result);
+ void ApplyDialogBisector();
void ClosedDialogLineIntersect(int result);
void ClosedDialogSpline(int result);
void ClosedDialogArc(int result);
diff --git a/src/app/tools/drawTools/vtoolbisector.cpp b/src/app/tools/drawTools/vtoolbisector.cpp
index 7aa79e7f0..f4b5b371b 100644
--- a/src/app/tools/drawTools/vtoolbisector.cpp
+++ b/src/app/tools/drawTools/vtoolbisector.cpp
@@ -87,7 +87,7 @@ void VToolBisector::setDialog()
}
//---------------------------------------------------------------------------------------------------------------------
-void VToolBisector::Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc,
+VToolBisector* VToolBisector::Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc,
VContainer *data)
{
SCASSERT(dialog != nullptr);
@@ -99,12 +99,18 @@ void VToolBisector::Create(DialogTool *dialog, VMainGraphicsScene *scene, VPatte
const quint32 thirdPointId = dialogTool->getThirdPointId();
const QString typeLine = dialogTool->getTypeLine();
const QString pointName = dialogTool->getPointName();
- Create(0, formula, firstPointId, secondPointId, thirdPointId, typeLine, pointName, 5, 10, scene, doc, data,
+ VToolBisector *point = nullptr;
+ point=Create(0, formula, firstPointId, secondPointId, thirdPointId, typeLine, pointName, 5, 10, scene, doc, data,
Document::FullParse, Valentina::FromGui);
+ if (point != nullptr)
+ {
+ point->dialog=dialogTool;
+ }
+ return point;
}
//---------------------------------------------------------------------------------------------------------------------
-void VToolBisector::Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
+VToolBisector* VToolBisector::Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
const quint32 &secondPointId, const quint32 &thirdPointId, const QString &typeLine,
const QString &pointName, const qreal &mx, const qreal &my,
VMainGraphicsScene *scene, VPattern *doc, VContainer *data,
@@ -145,7 +151,9 @@ void VToolBisector::Create(const quint32 _id, QString &formula, const quint32 &f
doc->IncrementReferens(firstPointId);
doc->IncrementReferens(secondPointId);
doc->IncrementReferens(thirdPointId);
+ return point;
}
+ return nullptr;
}
//---------------------------------------------------------------------------------------------------------------------
diff --git a/src/app/tools/drawTools/vtoolbisector.h b/src/app/tools/drawTools/vtoolbisector.h
index f49d6fa5b..1640da520 100644
--- a/src/app/tools/drawTools/vtoolbisector.h
+++ b/src/app/tools/drawTools/vtoolbisector.h
@@ -75,7 +75,7 @@ public:
* @param doc dom document container.
* @param data container with variables.
*/
- static void Create(DialogTool *dialog, VMainGraphicsScene *scene, VPattern *doc, VContainer *data);
+ static VToolBisector* 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.
@@ -93,7 +93,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 VToolBisector* Create(const quint32 _id, QString &formula, const quint32 &firstPointId,
const quint32 &secondPointId, const quint32 &thirdPointId, const QString &typeLine,
const QString &pointName, const qreal &mx, const qreal &my, VMainGraphicsScene *scene,
VPattern *doc, VContainer *data, const Document::Documents &parse,