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,