From d8ccf14ec3a6310be02a32aa8c6ff94c2284553d Mon Sep 17 00:00:00 2001 From: WandererFan Date: Thu, 11 Aug 2016 09:41:58 -0400 Subject: [PATCH] Prevent creation of superflous QGItems for Text Fields --- src/Mod/TechDraw/Gui/QGISVGTemplate.cpp | 81 ++++++++++++++----------- src/Mod/TechDraw/Gui/QGISVGTemplate.h | 2 + src/Mod/TechDraw/Gui/QGITemplate.cpp | 2 +- src/Mod/TechDraw/Gui/QGITemplate.h | 2 +- src/Mod/TechDraw/Gui/QGVPage.cpp | 2 +- 5 files changed, 51 insertions(+), 38 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp index 0217272c9..957753a73 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp @@ -49,7 +49,8 @@ using namespace TechDrawGui; QGISVGTemplate::QGISVGTemplate(QGraphicsScene *scene, QWidget* srWidget) : QGITemplate(scene), - qgview(srWidget) + qgview(srWidget), + firstTime(true) { m_svgItem = new QGraphicsSvgItem(this); @@ -69,7 +70,7 @@ QGISVGTemplate::~QGISVGTemplate() } QVariant QGISVGTemplate::itemChange(GraphicsItemChange change, - const QVariant &value) + const QVariant &value) { return QGraphicsItemGroup::itemChange(change, value); } @@ -95,10 +96,50 @@ void QGISVGTemplate::load(const QString &fileName) QSize size = m_svgRender->defaultSize(); m_svgItem->setSharedRenderer(m_svgRender); + if (firstTime) { + createClickHandles(); + firstTime = false; + } + + //This is probably first time only logic too. TechDraw::DrawSVGTemplate *tmplte = getSVGTemplate(); + double xaspect, yaspect; + xaspect = tmplte->getWidth() / (double) size.width(); + yaspect = tmplte->getHeight() / (double) size.height(); + QTransform qtrans; + qtrans.translate(0.f, -tmplte->getHeight()); + qtrans.scale(xaspect , yaspect); + m_svgItem->setTransform(qtrans); +} + +TechDraw::DrawSVGTemplate * QGISVGTemplate::getSVGTemplate() +{ + if(pageTemplate && pageTemplate->isDerivedFrom(TechDraw::DrawSVGTemplate::getClassTypeId())) + return static_cast(pageTemplate); + else + return 0; +} + +void QGISVGTemplate::draw() +{ + TechDraw::DrawSVGTemplate *tmplte = getSVGTemplate(); + if(!tmplte) + throw Base::Exception("Template Feature not set for QGISVGTemplate"); + + load(QString::fromUtf8(tmplte->PageResult.getValue())); +} + +void QGISVGTemplate::updateView(bool update) +{ + draw(); +} + +void QGISVGTemplate::createClickHandles(void) +{ + TechDraw::DrawSVGTemplate *tmplte = getSVGTemplate(); + std::string temp = tmplte->PageResult.getValue(); - std::string temp = tmplte->PageResult.getValue(); //fixes non-drawing of restored template if (temp.empty()) return; @@ -108,13 +149,14 @@ void QGISVGTemplate::load(const QString &fileName) std::string tempendl = "--endOfLine--"; std::string line; + //read all of PageResult into oStream (except the DrawingContent marker comment - why??) std::ifstream ifile (fi.filePath().c_str()); while (!ifile.eof()) { std::getline(ifile,line); // check if the marker in the template is found if(line.find("") == std::string::npos) { - // if not - write through + // if not - write line to oStream oStream << line << tempendl; } } @@ -139,7 +181,6 @@ void QGISVGTemplate::load(const QString &fileName) //TODO: Find location of special fields (first/third angle) and make graphics items for them - // and update the sketch while (boost::regex_search(begin, end, tagMatch, tagRegex)) { if ( boost::regex_search(tagMatch[1].first, tagMatch[1].second, nameMatch, editableNameRegex) && boost::regex_search(tagMatch[1].first, tagMatch[1].second, xMatch, xRegex) && @@ -180,36 +221,6 @@ void QGISVGTemplate::load(const QString &fileName) begin = tagMatch[0].second; } - double xaspect, yaspect; - xaspect = tmplte->getWidth() / (double) size.width(); - yaspect = tmplte->getHeight() / (double) size.height(); - - QTransform qtrans; - qtrans.translate(0.f, -tmplte->getHeight()); - qtrans.scale(xaspect , yaspect); - m_svgItem->setTransform(qtrans); -} - -TechDraw::DrawSVGTemplate * QGISVGTemplate::getSVGTemplate() -{ - if(pageTemplate && pageTemplate->isDerivedFrom(TechDraw::DrawSVGTemplate::getClassTypeId())) - return static_cast(pageTemplate); - else - return 0; -} - -void QGISVGTemplate::draw() -{ - TechDraw::DrawSVGTemplate *tmplte = getSVGTemplate(); - if(!tmplte) - throw Base::Exception("Template Feature not set for QGISVGTemplate"); - - load(QString::fromUtf8(tmplte->PageResult.getValue())); -} - -void QGISVGTemplate::updateView(bool update) -{ - draw(); } #include diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.h b/src/Mod/TechDraw/Gui/QGISVGTemplate.h index 23a05764c..609930a5e 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.h +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.h @@ -55,9 +55,11 @@ public: protected: void openFile(const QFile &file); void load (const QString & fileName); + void createClickHandles(void); QWidget* qgview; //for parenting dlgTemplateField protected: + bool firstTime; TechDraw::DrawSVGTemplate * getSVGTemplate(); QGraphicsSvgItem *m_svgItem; QSvgRenderer *m_svgRender; diff --git a/src/Mod/TechDraw/Gui/QGITemplate.cpp b/src/Mod/TechDraw/Gui/QGITemplate.cpp index b949b0885..56f2011d3 100644 --- a/src/Mod/TechDraw/Gui/QGITemplate.cpp +++ b/src/Mod/TechDraw/Gui/QGITemplate.cpp @@ -37,7 +37,7 @@ using namespace TechDrawGui; QGITemplate::QGITemplate(QGraphicsScene *scene) : QGraphicsItemGroup(), - pageTemplate(0) + pageTemplate(0) { setHandlesChildEvents(false); setCacheMode(QGraphicsItem::NoCache); diff --git a/src/Mod/TechDraw/Gui/QGITemplate.h b/src/Mod/TechDraw/Gui/QGITemplate.h index 4370b0280..e0d83ebbf 100644 --- a/src/Mod/TechDraw/Gui/QGITemplate.h +++ b/src/Mod/TechDraw/Gui/QGITemplate.h @@ -57,7 +57,7 @@ public: inline qreal getY() { return y() * -1; } virtual void updateView(bool update = false); - std::vector getTestFields(void) { return textFields; }; + std::vector getTextFields(void) { return textFields; }; virtual void draw() = 0; diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index ce48ca540..42913bb69 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -442,7 +442,7 @@ void QGVPage::toggleMarkers(bool enable) } QGISVGTemplate* itemTemplate = dynamic_cast (*it); if (itemTemplate) { - std::vector textFields = itemTemplate->getTestFields(); + std::vector textFields = itemTemplate->getTextFields(); for (auto& t:textFields) { if (enable) { t->show();