From 950ac44f9f0ccc5ad654460892b05bc2fb46831d Mon Sep 17 00:00:00 2001 From: Ian Rees Date: Wed, 26 Apr 2017 14:11:34 +1200 Subject: [PATCH] TechDraw: Tidy, and fix Qt5 template text edition --- src/Mod/TechDraw/Gui/DlgTemplateField.cpp | 9 +-- src/Mod/TechDraw/Gui/DlgTemplateField.h | 4 +- src/Mod/TechDraw/Gui/QGISVGTemplate.cpp | 7 +- src/Mod/TechDraw/Gui/QGISVGTemplate.h | 5 +- src/Mod/TechDraw/Gui/QGVPage.cpp | 6 +- src/Mod/TechDraw/Gui/QGVPage.h | 2 +- src/Mod/TechDraw/Gui/TemplateTextField.cpp | 85 ++++++++++------------ src/Mod/TechDraw/Gui/TemplateTextField.h | 30 +++----- 8 files changed, 62 insertions(+), 86 deletions(-) diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.cpp b/src/Mod/TechDraw/Gui/DlgTemplateField.cpp index 5793644ed8..09a22d8f63 100644 --- a/src/Mod/TechDraw/Gui/DlgTemplateField.cpp +++ b/src/Mod/TechDraw/Gui/DlgTemplateField.cpp @@ -23,22 +23,17 @@ #include "PreCompiled.h" #include - #include "DlgTemplateField.h" using namespace TechDrawGui; -DlgTemplateField::DlgTemplateField( QWidget* parent ) +DlgTemplateField::DlgTemplateField( QWidget *parent /* = nullptr */ ) : + QDialog(parent) { - Q_UNUSED(parent); setupUi(this); leInput->setFocus(); } -DlgTemplateField::~DlgTemplateField() -{ -} - void DlgTemplateField::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.h b/src/Mod/TechDraw/Gui/DlgTemplateField.h index 3066c73d96..4874a25bd6 100644 --- a/src/Mod/TechDraw/Gui/DlgTemplateField.h +++ b/src/Mod/TechDraw/Gui/DlgTemplateField.h @@ -36,8 +36,8 @@ class DlgTemplateField : public QDialog, public Ui_dlgTemplateField Q_OBJECT public: - DlgTemplateField( QWidget* parent = 0 ); - ~DlgTemplateField(); + DlgTemplateField( QWidget *parent = nullptr ); + virtual ~DlgTemplateField() = default; void setFieldName(std::string name); void setFieldContent(std::string content); diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp index 01aa277c06..c14e4e738c 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp @@ -47,9 +47,8 @@ using namespace TechDrawGui; -QGISVGTemplate::QGISVGTemplate(QGraphicsScene *scene, QWidget* srWidget) +QGISVGTemplate::QGISVGTemplate(QGraphicsScene *scene) : QGITemplate(scene), - qgview(srWidget), firstTime(true) { @@ -188,7 +187,6 @@ void QGISVGTemplate::createClickHandles(void) QString xStr = QString::fromStdString(xMatch[1].str()); QString yStr = QString::fromStdString(yMatch[1].str()); - QString editableName = QString::fromStdString(nameMatch[1].str()); double x = Rez::guiX(xStr.toDouble()); double y = Rez::guiX(yStr.toDouble()); @@ -200,8 +198,9 @@ void QGISVGTemplate::createClickHandles(void) double width = editClickBoxSize; double height = editClickBoxSize; - TemplateTextField *item = new TemplateTextField(this, tmplte, nameMatch[1].str(), qgview); + auto item( new TemplateTextField(this, tmplte, nameMatch[1].str()) ); float pad = 1; + item->setRect(x - pad, Rez::guiX(-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 609930a5e3..209991dae5 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.h +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.h @@ -43,8 +43,8 @@ class TechDrawGuiExport QGISVGTemplate : public QGITemplate Q_OBJECT public: - QGISVGTemplate(QGraphicsScene *, QWidget* srWidget=0); - ~QGISVGTemplate(); + QGISVGTemplate(QGraphicsScene *scene); + virtual ~QGISVGTemplate(); enum {Type = QGraphicsItem::UserType + 153}; int type() const { return Type; } @@ -56,7 +56,6 @@ protected: void openFile(const QFile &file); void load (const QString & fileName); void createClickHandles(void); - QWidget* qgview; //for parenting dlgTemplateField protected: bool firstTime; diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index 1d4846ff1e..d475dfee20 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -466,11 +466,9 @@ void QGVPage::setPageTemplate(TechDraw::DrawTemplate *obj) removeTemplate(); if(obj->isDerivedFrom(TechDraw::DrawParametricTemplate::getClassTypeId())) { - QGIDrawingTemplate *qTempItem = new QGIDrawingTemplate(scene()); - pageTemplate = qTempItem; + pageTemplate = new QGIDrawingTemplate(scene()); } else if(obj->isDerivedFrom(TechDraw::DrawSVGTemplate::getClassTypeId())) { - QGISVGTemplate *qTempItem = new QGISVGTemplate(scene(),this); - pageTemplate = qTempItem; + pageTemplate = new QGISVGTemplate(scene()); } pageTemplate->setTemplate(obj); pageTemplate->updateView(); diff --git a/src/Mod/TechDraw/Gui/QGVPage.h b/src/Mod/TechDraw/Gui/QGVPage.h index 0591506a51..a0d1c7bdb7 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.h +++ b/src/Mod/TechDraw/Gui/QGVPage.h @@ -56,7 +56,7 @@ public: enum RendererType { Native, OpenGL, Image }; QGVPage(ViewProviderPage *vp, QGraphicsScene* s, QWidget *parent = 0); - ~QGVPage(); + virtual ~QGVPage(); void setRenderer(RendererType type = Native); void drawBackground(QPainter *p, const QRectF &rect); diff --git a/src/Mod/TechDraw/Gui/TemplateTextField.cpp b/src/Mod/TechDraw/Gui/TemplateTextField.cpp index 7db9f9c09f..55370584af 100644 --- a/src/Mod/TechDraw/Gui/TemplateTextField.cpp +++ b/src/Mod/TechDraw/Gui/TemplateTextField.cpp @@ -23,65 +23,56 @@ #include "PreCompiled.h" #ifndef _PreComp_ -#include -#include -#include + #include + #include + #include + #include #endif // #ifndef _PreCmp_ - - -#include - #include "DlgTemplateField.h" #include "TemplateTextField.h" -//#include - using namespace TechDrawGui; -TemplateTextField::TemplateTextField(QGraphicsItem*parent, +TemplateTextField::TemplateTextField(QGraphicsItem *parent, TechDraw::DrawTemplate *myTmplte, - const std::string &myFieldName, - QWidget* qgview) + const std::string &myFieldName) : QGraphicsRectItem(parent), - ui(nullptr), tmplte(myTmplte), - fieldNameStr(myFieldName), - dlgOwner(qgview) -{ -} - - -TemplateTextField::~TemplateTextField() -{ -} - -void TemplateTextField::execDialog() -{ - int uiCode = ui->exec(); - QString newContent; - if(uiCode == QDialog::Accepted) { - if (tmplte) { - newContent = ui->getFieldContent(); -#if QT_VERSION >= 0x050000 - QString qsClean = newContent.toHtmlEscaped(); -#else - QString qsClean = Qt::escape(newContent); -#endif - std::string utf8Content = qsClean.toUtf8().constData(); - tmplte->EditableTexts.setValue(fieldNameStr, utf8Content); - } - } - ui = nullptr; //ui memory will be release by ui's parent Widget -} + fieldNameStr(myFieldName) +{ } void TemplateTextField::mousePressEvent(QGraphicsSceneMouseEvent *event) { - Q_UNUSED(event); - if (!ui) { - ui = new DlgTemplateField(dlgOwner); - ui->setFieldName(fieldNameStr); - ui->setFieldContent(tmplte->EditableTexts[fieldNameStr]); - execDialog(); + if ( tmplte && rect().contains(event->pos()) ) { + event->accept(); + } else { + QGraphicsRectItem::mousePressEvent(event); } } + +void TemplateTextField::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if ( tmplte && rect().contains(event->pos()) ) { + event->accept(); + + DlgTemplateField ui; + + ui.setFieldName(fieldNameStr); + ui.setFieldContent(tmplte->EditableTexts[fieldNameStr]); + + if (ui.exec() == QDialog::Accepted) { +#if QT_VERSION >= 0x050000 + QString qsClean = ui.getFieldContent().toHtmlEscaped(); +#else + QString qsClean = Qt::escape( ui.getFieldContent() ); +#endif + std::string utf8Content = qsClean.toUtf8().constData(); + tmplte->EditableTexts.setValue(fieldNameStr, utf8Content); + } + + } else { + QGraphicsRectItem::mouseReleaseEvent(event); + } +} + diff --git a/src/Mod/TechDraw/Gui/TemplateTextField.h b/src/Mod/TechDraw/Gui/TemplateTextField.h index 9d82490acf..f78e3c22bc 100644 --- a/src/Mod/TechDraw/Gui/TemplateTextField.h +++ b/src/Mod/TechDraw/Gui/TemplateTextField.h @@ -23,47 +23,41 @@ #ifndef DRAWINGGUI_TEMPLATETEXTFIELD_H #define DRAWINGGUI_TEMPLATETEXTFIELD_H -//TODO Precompiled header - #include - -#include +#include "Mod/TechDraw/App/DrawTemplate.h" namespace TechDrawGui { -class DlgTemplateField; /// QGraphicsRectItem-derived class for the text fields in title blocks /*! - * This essentially just a way for us to make a rectangular area which - * will give us a text editing dialog when clicked so that an appropriate - * Property in the Drawing's template can be modified. - * Dear English, I'm sorry. + * Makes an area on the drawing that's clickable, so appropriate + * Properties of the template can be modified. */ class TechDrawGuiExport TemplateTextField : public QGraphicsRectItem { public: - TemplateTextField(QGraphicsItem*parent, + TemplateTextField(QGraphicsItem *parent, TechDraw::DrawTemplate *myTmplte, - const std::string &myFieldName, - QWidget* upperWidget=0); + const std::string &myFieldName); - ~TemplateTextField(); + virtual ~TemplateTextField() = default; 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: - void execDialog(void); - DlgTemplateField* ui; - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); TechDraw::DrawTemplate *tmplte; std::string fieldNameStr; - QWidget* dlgOwner; + + /// Need this to properly handle mouse release + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); + + /// Trigger the dialog for editing template text + virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); }; } // namespace TechDrawGui