diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.cpp b/src/Mod/TechDraw/Gui/DlgTemplateField.cpp
index f375923a0..9de42b895 100644
--- a/src/Mod/TechDraw/Gui/DlgTemplateField.cpp
+++ b/src/Mod/TechDraw/Gui/DlgTemplateField.cpp
@@ -66,4 +66,14 @@ std::string DlgTemplateField::getFieldContent()
return result.toStdString();
}
+void DlgTemplateField::accept()
+{
+ QDialog::accept();
+}
+
+void DlgTemplateField::reject()
+{
+ QDialog::reject();
+}
+
#include "moc_DlgTemplateField.cpp"
diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.h b/src/Mod/TechDraw/Gui/DlgTemplateField.h
index 28e5d3c70..80fd4dee7 100644
--- a/src/Mod/TechDraw/Gui/DlgTemplateField.h
+++ b/src/Mod/TechDraw/Gui/DlgTemplateField.h
@@ -43,10 +43,11 @@ public:
std::string getFieldContent();
public Q_SLOTS:
+ void accept();
+ void reject();
protected:
void changeEvent(QEvent *e);
- //Ui_dlgTemplateField* ui;
};
} // namespace TechDrawGui
diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.ui b/src/Mod/TechDraw/Gui/DlgTemplateField.ui
index 6ca427c0a..fa9a7ed8a 100644
--- a/src/Mod/TechDraw/Gui/DlgTemplateField.ui
+++ b/src/Mod/TechDraw/Gui/DlgTemplateField.ui
@@ -3,7 +3,7 @@
TechDrawGui::dlgTemplateField
- Qt::WindowModal
+ Qt::ApplicationModal
@@ -95,11 +95,11 @@
accept()
- 195
+ 209
126
- 193
+ 209
79
@@ -111,11 +111,11 @@
reject()
- 195
+ 209
126
- 193
+ 209
79
diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp
index 9c87121b5..0d8b01df6 100644
--- a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp
+++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp
@@ -48,7 +48,7 @@ using namespace TechDrawGui;
QGISVGTemplate::QGISVGTemplate(QGraphicsScene *scene, QWidget* srWidget)
: QGITemplate(scene),
- upperLevelWidget(srWidget)
+ qgview(srWidget)
{
m_svgItem.setSharedRenderer(&m_svgRender);
@@ -167,7 +167,7 @@ void QGISVGTemplate::load(const QString &fileName)
double width = editClickBoxSize;
double height = editClickBoxSize;
- TemplateTextField *item = new TemplateTextField(this, tmplte, nameMatch[1].str(), upperLevelWidget);
+ TemplateTextField *item = new TemplateTextField(this, tmplte, nameMatch[1].str(), qgview);
float pad = 1;
item->setRect(x - pad, -tmplte->getHeight() + y - height - pad,
width + 2 * pad, height + 2 * pad);
diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.h b/src/Mod/TechDraw/Gui/QGISVGTemplate.h
index 85f5cd34e..4c91ad088 100644
--- a/src/Mod/TechDraw/Gui/QGISVGTemplate.h
+++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.h
@@ -61,7 +61,7 @@ Q_SIGNALS:
protected:
void openFile(const QFile &file);
void load (const QString & fileName);
- QWidget* upperLevelWidget; //for parenting dlgTemplateField
+ QWidget* qgview; //for parenting dlgTemplateField
protected:
TechDraw::DrawSVGTemplate * getSVGTemplate();
diff --git a/src/Mod/TechDraw/Gui/TemplateTextField.cpp b/src/Mod/TechDraw/Gui/TemplateTextField.cpp
index 6b1056ac2..5e6670ad9 100644
--- a/src/Mod/TechDraw/Gui/TemplateTextField.cpp
+++ b/src/Mod/TechDraw/Gui/TemplateTextField.cpp
@@ -32,7 +32,6 @@
#include
#include "TemplateTextField.h"
-#include "DlgTemplateField.h"
//#include
@@ -41,11 +40,12 @@ using namespace TechDrawGui;
TemplateTextField::TemplateTextField(QGraphicsItem*parent,
TechDraw::DrawTemplate *myTmplte,
const std::string &myFieldName,
- QWidget* upperWidget)
+ QWidget* qgview)
: QGraphicsRectItem(parent),
+ ui(nullptr),
tmplte(myTmplte),
fieldNameStr(myFieldName),
- dlgOwner(upperWidget)
+ dlgOwner(qgview)
{
}
@@ -54,11 +54,8 @@ TemplateTextField::~TemplateTextField()
{
}
-void TemplateTextField::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void TemplateTextField::execDialog()
{
- DlgTemplateField* ui = new DlgTemplateField(dlgOwner);
- ui->setFieldName(fieldNameStr);
- ui->setFieldContent(tmplte->EditableTexts[fieldNameStr]);
int uiCode = ui->exec();
std::string newContent = "";
if(uiCode == QDialog::Accepted) {
@@ -69,5 +66,15 @@ void TemplateTextField::mousePressEvent(QGraphicsSceneMouseEvent *event)
tmplte->EditableTexts.setValue(fieldNameStr, newContent);
}
}
- ui->deleteLater();
+ ui = nullptr; //ui memory will be release by ui's parent Widget
+}
+
+void TemplateTextField::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ if (!ui) {
+ ui = new DlgTemplateField(dlgOwner);
+ ui->setFieldName(fieldNameStr);
+ ui->setFieldContent(tmplte->EditableTexts[fieldNameStr]);
+ execDialog();
+ }
}
diff --git a/src/Mod/TechDraw/Gui/TemplateTextField.h b/src/Mod/TechDraw/Gui/TemplateTextField.h
index 99e1d25a6..9218ac216 100644
--- a/src/Mod/TechDraw/Gui/TemplateTextField.h
+++ b/src/Mod/TechDraw/Gui/TemplateTextField.h
@@ -27,12 +27,9 @@
#include
+#include "DlgTemplateField.h"
#include "../App/DrawTemplate.h"
-QT_BEGIN_NAMESPACE
-class QGI;
-QT_END_NAMESPACE
-
namespace TechDrawGui
{
/// QGraphicsRectItem-derived class for the text fields in title blocks
@@ -42,28 +39,31 @@ namespace TechDrawGui
* Property in the Drawing's template can be modified.
* Dear English, I'm sorry.
*/
- class TechDrawGuiExport TemplateTextField : public QGraphicsRectItem
- {
- public:
- TemplateTextField(QGraphicsItem*parent,
- TechDraw::DrawTemplate *myTmplte,
- const std::string &myFieldName,
- QWidget* upperWidget=0);
+class TechDrawGuiExport TemplateTextField : public QGraphicsRectItem
+{
+ public:
+ TemplateTextField(QGraphicsItem*parent,
+ TechDraw::DrawTemplate *myTmplte,
+ const std::string &myFieldName,
+ QWidget* upperWidget=0);
- ~TemplateTextField();
+ ~TemplateTextField();
- enum {Type = QGraphicsItem::UserType + 160};
- int type() const { return Type;}
+ enum {Type = QGraphicsItem::UserType + 160};
+ int type() const { return Type;}
- /// Returns the field name that this TemplateTextField represents
- std::string fieldName() const { return fieldNameStr; }
- protected:
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
- TechDraw::DrawTemplate *tmplte;
- std::string fieldNameStr;
- QWidget* dlgOwner;
- };
+ /// Returns the field name that this TemplateTextField represents
+ std::string fieldName() const { return fieldNameStr; }
+
+ protected:
+ void execDialog(void);
+ DlgTemplateField* ui;
+ virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ TechDraw::DrawTemplate *tmplte;
+ std::string fieldNameStr;
+ QWidget* dlgOwner;
+};
} // namespace TechDrawGui
#endif // #ifndef DRAWINGGUI_TEMPLATETEXTFIELD_H