Change formula input to multiline (in dialogendline only )

Other dialogs don't work for now on this version.

--HG--
branch : XML Editor
This commit is contained in:
Patrick Proy 2014-05-24 16:23:47 +02:00
parent ffda1e5f8d
commit 81e8638a6d
8 changed files with 218 additions and 28 deletions

View File

@ -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,7 @@ void DialogEndLine::DialogAccepted()
{
pointName = ui->lineEditNamePoint->text();
typeLine = GetTypeLine(ui->comboBoxLineType);
formula = ui->lineEditFormula->text();
formula = ui->plainTextEditFormula->toPlainText();
angle = ui->doubleSpinBoxAngle->value();
basePointId = getCurrentObjectId(ui->comboBoxBasePoint);
emit DialogClosed(QDialog::Accepted);

View File

@ -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

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>559</height>
<width>486</width>
<height>522</height>
</rect>
</property>
<property name="windowTitle">
@ -74,17 +74,17 @@
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEditFormula">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="toolTip">
<string>Formula for calculation of length of line</string>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</widget>
</spacer>
</item>
<item>
<widget class="QToolButton" name="toolButtonPutHere">
@ -147,6 +147,56 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QPlainTextEdit" name="plainTextEditFormula">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>24</height>
</size>
</property>
<property name="baseSize">
<size>
<width>4</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButtonGrowLength">
<property name="maximumSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Show full calculation in message box&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../share/resources/icon.qrc">
<normaloff>:/icon/16x16/go-down.png</normaloff>
<activeoff>:/icon/16x16/go-next.png</activeoff>:/icon/16x16/go-down.png</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
@ -550,7 +600,6 @@
</layout>
</widget>
<tabstops>
<tabstop>lineEditFormula</tabstop>
<tabstop>comboBoxBasePoint</tabstop>
<tabstop>lineEditNamePoint</tabstop>
<tabstop>doubleSpinBoxAngle</tabstop>

View File

@ -33,10 +33,15 @@
#include <QtWidgets>
// 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<QLineEdit*>(sender());
if (edit)
{
ValFormulaChanged(flagFormula, edit, timerFormula);
}
}
//---------------------------------------------------------------------------------------------------------------------
void DialogTool::FormulaChanged2()
{
QPlainTextEdit* edit = qobject_cast<QPlainTextEdit*>(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());
*/
}
//---------------------------------------------------------------------------------------------------------------------

View File

@ -37,6 +37,7 @@
#include <QRadioButton>
#include <QDialogButtonBox>
#include <QPushButton>
#include <QPlainTextEdit>
#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

View File

@ -52,5 +52,7 @@
<file>icon/flags/uk.png</file>
<file>icon/Graduation.png</file>
<file>icon/individual.png</file>
<file>icon/16x16/go-down.png</file>
<file>icon/16x16/go-next.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B