From 7c3e2447b0a2f3ed09dfdcd4c92aae7901af687f Mon Sep 17 00:00:00 2001 From: WandererFan Date: Tue, 31 Jan 2017 01:18:47 -0500 Subject: [PATCH 1/6] hidden pref setting for face debugging --- src/Mod/TechDraw/Gui/QGIViewPart.cpp | 12 +++++++++++- src/Mod/TechDraw/Gui/QGIViewPart.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index c1dfe20a0..d27aec660 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -423,7 +423,8 @@ void QGIViewPart::drawViewPart() newFace->setHatchColor(fHatch->HatchColor.getValue()); } } - newFace->setDrawEdges(true); + bool drawEdges = getFaceEdgesPref(); + newFace->setDrawEdges(drawEdges); //pref. for debugging only newFace->setZValue(ZVALUE::FACE); newFace->draw(); newFace->setPrettyNormal(); @@ -927,3 +928,12 @@ QRectF QGIViewPart::boundingRect() const { return childrenBoundingRect(); } + +bool QGIViewPart::getFaceEdgesPref(void) +{ + bool result = false; + Base::Reference hGrp = App::GetApplication().GetUserParameter() + .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General"); + result = hGrp->GetBool("DrawFaceEdges", 0l); + return result; +} diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.h b/src/Mod/TechDraw/Gui/QGIViewPart.h index 33e488d29..b24170daa 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.h +++ b/src/Mod/TechDraw/Gui/QGIViewPart.h @@ -94,6 +94,7 @@ protected: void dumpPath(const char* text,QPainterPath path); void removePrimitives(void); void removeDecorations(void); + bool getFaceEdgesPref(void); private: QList deleteItems; From e0231e20aa809ae4bdf006c0b5161accabda2a31 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Tue, 31 Jan 2017 18:47:08 -0500 Subject: [PATCH 2/6] Change Scale to PropertyFloatConstaint to prevent OCC loop when Scale == 0 --- src/Mod/TechDraw/App/DrawGeomHatch.cpp | 10 ++++ src/Mod/TechDraw/App/DrawGeomHatch.h | 4 +- src/Mod/TechDraw/App/DrawHatch.cpp | 9 ++++ src/Mod/TechDraw/App/DrawHatch.h | 4 +- src/Mod/TechDraw/App/DrawPage.cpp | 75 +++++++++++++++++++++++++- src/Mod/TechDraw/App/DrawPage.h | 4 +- src/Mod/TechDraw/App/DrawView.cpp | 73 +++++++++++++++++++++++++ src/Mod/TechDraw/App/DrawView.h | 4 +- 8 files changed, 178 insertions(+), 5 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawGeomHatch.cpp b/src/Mod/TechDraw/App/DrawGeomHatch.cpp index a642155fd..20e6e9c66 100644 --- a/src/Mod/TechDraw/App/DrawGeomHatch.cpp +++ b/src/Mod/TechDraw/App/DrawGeomHatch.cpp @@ -52,6 +52,10 @@ #include #include #include +#include + +#include + #endif #include @@ -59,6 +63,7 @@ #include #include #include +#include #include "HatchLine.h" #include "DrawUtil.h" @@ -73,6 +78,10 @@ using namespace TechDraw; using namespace TechDrawGeometry; using namespace std; +App::PropertyFloatConstraint::Constraints DrawGeomHatch::scaleRange = {Precision::Confusion(), + std::numeric_limits::max(), + pow(10,- Base::UnitsApi::getDecimals())}; + PROPERTY_SOURCE(TechDraw::DrawGeomHatch, App::DocumentObject) @@ -84,6 +93,7 @@ DrawGeomHatch::DrawGeomHatch(void) ADD_PROPERTY_TYPE(FilePattern ,(""),vgroup,App::Prop_None,"The crosshatch pattern file for this area"); ADD_PROPERTY_TYPE(NamePattern,(""),vgroup,App::Prop_None,"The name of the pattern"); ADD_PROPERTY_TYPE(ScalePattern,(1.0),vgroup,App::Prop_None,"GeomHatch pattern size adjustment"); + ScalePattern.setConstraints(&scaleRange); getParameters(); diff --git a/src/Mod/TechDraw/App/DrawGeomHatch.h b/src/Mod/TechDraw/App/DrawGeomHatch.h index 767fb6291..d9885b16d 100644 --- a/src/Mod/TechDraw/App/DrawGeomHatch.h +++ b/src/Mod/TechDraw/App/DrawGeomHatch.h @@ -54,7 +54,7 @@ public: App::PropertyLinkSub Source; //the dvX & face(s) this crosshatch belongs to App::PropertyFile FilePattern; App::PropertyString NamePattern; - App::PropertyFloat ScalePattern; + App::PropertyFloatConstraint ScalePattern; virtual short mustExecute() const; virtual App::DocumentObjectExecReturn *execute(void); @@ -79,6 +79,8 @@ protected: std::vector m_lineSets; private: + static App::PropertyFloatConstraint::Constraints scaleRange; + }; typedef App::FeaturePythonT DrawGeomHatchPython; diff --git a/src/Mod/TechDraw/App/DrawHatch.cpp b/src/Mod/TechDraw/App/DrawHatch.cpp index 81e8437a9..dc31e931f 100644 --- a/src/Mod/TechDraw/App/DrawHatch.cpp +++ b/src/Mod/TechDraw/App/DrawHatch.cpp @@ -25,6 +25,9 @@ #ifndef _PreComp_ # include +#include +#include + #endif #include @@ -37,6 +40,7 @@ #include #include #include +#include #include "DrawViewPart.h" #include "DrawHatch.h" @@ -46,6 +50,10 @@ using namespace TechDraw; using namespace std; +App::PropertyFloatConstraint::Constraints DrawHatch::scaleRange = {Precision::Confusion(), + std::numeric_limits::max(), + pow(10,- Base::UnitsApi::getDecimals())}; + PROPERTY_SOURCE(TechDraw::DrawHatch, App::DocumentObject) @@ -62,6 +70,7 @@ DrawHatch::DrawHatch(void) ADD_PROPERTY_TYPE(HatchPattern ,(""),vgroup,App::Prop_None,"The hatch pattern file for this area"); ADD_PROPERTY_TYPE(HatchColor,(fcColor),vgroup,App::Prop_None,"The color of the hatch pattern"); ADD_PROPERTY_TYPE(HatchScale,(1.0),vgroup,App::Prop_None,"Hatch pattern size adjustment"); + HatchScale.setConstraints(&scaleRange); DirProjection.setStatus(App::Property::ReadOnly,true); hGrp = App::GetApplication().GetUserParameter() diff --git a/src/Mod/TechDraw/App/DrawHatch.h b/src/Mod/TechDraw/App/DrawHatch.h index 496cc15a4..b7c83123a 100644 --- a/src/Mod/TechDraw/App/DrawHatch.h +++ b/src/Mod/TechDraw/App/DrawHatch.h @@ -44,7 +44,7 @@ public: App::PropertyLinkSub Source; //the dvp & face this hatch belongs to App::PropertyFile HatchPattern; App::PropertyColor HatchColor; - App::PropertyFloat HatchScale; + App::PropertyFloatConstraint HatchScale; //short mustExecute() const; @@ -62,6 +62,8 @@ protected: void onChanged(const App::Property* prop); private: + static App::PropertyFloatConstraint::Constraints scaleRange; + }; typedef App::FeaturePythonT DrawHatchPython; diff --git a/src/Mod/TechDraw/App/DrawPage.cpp b/src/Mod/TechDraw/App/DrawPage.cpp index b03b03cf4..41462063f 100644 --- a/src/Mod/TechDraw/App/DrawPage.cpp +++ b/src/Mod/TechDraw/App/DrawPage.cpp @@ -27,12 +27,15 @@ # include # include # include +#include +#include #endif #include #include #include #include +#include #include #include @@ -57,6 +60,10 @@ using namespace std; // DrawPage //=========================================================================== +App::PropertyFloatConstraint::Constraints DrawPage::scaleRange = {Precision::Confusion(), + std::numeric_limits::max(), + pow(10,- Base::UnitsApi::getDecimals())}; + PROPERTY_SOURCE(TechDraw::DrawPage, App::DocumentObject) const char* DrawPage::ProjectionTypeEnums[] = { "First Angle", @@ -87,7 +94,7 @@ DrawPage::DrawPage(void) } ADD_PROPERTY_TYPE(Scale, (1.0), group, App::Prop_None, "Scale factor for this Page"); - //TODO: Page should create itself with default Template instead of Cmd figuring it out? + Scale.setConstraints(&scaleRange); } DrawPage::~DrawPage() @@ -328,9 +335,75 @@ void DrawPage::unsetupObject() } Views.setValues(emptyViews); + //no template crash here?? if Template.getValue is null or invalid, this will fail. std::string templateName = Template.getValue()->getNameInDocument(); Base::Interpreter().runStringArg("App.getDocument(\"%s\").removeObject(\"%s\")", docName.c_str(), templateName.c_str()); Template.setValue(nullptr); } +void DrawPage::Restore(Base::XMLReader &reader) +{ + reader.readElement("Properties"); + int Cnt = reader.getAttributeAsInteger("Count"); + + for (int i=0 ;igetTypeId().getName(), TypeName) == 0){ //if the property type in obj == type in schema + schemaProp->Restore(reader); //nothing special to do + } else { + if (strcmp(PropName, "Scale") == 0) { + if (schemaProp->isDerivedFrom(App::PropertyFloatConstraint::getClassTypeId())){ //right property type + schemaProp->Restore(reader); //nothing special to do + } else { //Scale, but not PropertyFloatConstraint + App::PropertyFloat tmp; + if (strcmp(tmp.getTypeId().getName(),TypeName)) { //property in file is Float + tmp.setContainer(this); + tmp.Restore(reader); + double tmpValue = tmp.getValue(); + if (tmpValue > 0.0) { + static_cast(schemaProp)->setValue(tmpValue); + } else { + static_cast(schemaProp)->setValue(1.0); + } + } else { + // has Scale prop that isn't Float! + Base::Console().Log("DrawPage::Restore - old Document Scale is Not Float!\n"); + // no idea + } + } + } else { + Base::Console().Log("DrawPage::Restore - old Document has unknown Property\n"); + } + } + } + } + catch (const Base::XMLParseException&) { + throw; // re-throw + } + catch (const Base::Exception &e) { + Base::Console().Error("%s\n", e.what()); + } + catch (const std::exception &e) { + Base::Console().Error("%s\n", e.what()); + } + catch (const char* e) { + Base::Console().Error("%s\n", e); + } +#ifndef FC_DEBUG + catch (...) { + Base::Console().Error("PropertyContainer::Restore: Unknown C++ exception thrown"); + } +#endif + + reader.readEndElement("Property"); + } + reader.readEndElement("Properties"); +} + + diff --git a/src/Mod/TechDraw/App/DrawPage.h b/src/Mod/TechDraw/App/DrawPage.h index cc6b1ff92..002da38ee 100644 --- a/src/Mod/TechDraw/App/DrawPage.h +++ b/src/Mod/TechDraw/App/DrawPage.h @@ -43,7 +43,7 @@ public: App::PropertyLinkList Views; App::PropertyLink Template; - App::PropertyFloat Scale; + App::PropertyFloatConstraint Scale; App::PropertyEnumeration ProjectionType; // First or Third Angle /** @name methods overide Feature */ @@ -51,6 +51,7 @@ public: /// recalculate the Feature virtual App::DocumentObjectExecReturn *execute(void); //@} + void Restore(Base::XMLReader &reader); int addView(App::DocumentObject *docObj); int removeView(App::DocumentObject* docObj); @@ -94,6 +95,7 @@ protected: private: static const char* ProjectionTypeEnums[]; bool nowDeleting; + static App::PropertyFloatConstraint::Constraints scaleRange; }; diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index 7df7f82cc..2b336ec16 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -26,6 +26,8 @@ #ifndef _PreComp_ # include # include +#include +#include #endif @@ -35,6 +37,7 @@ #include #include #include +#include #include "DrawView.h" #include "DrawPage.h" @@ -57,6 +60,10 @@ const char* DrawView::ScaleTypeEnums[]= {"Page", "Automatic", "Custom", NULL}; +App::PropertyFloatConstraint::Constraints DrawView::scaleRange = {Precision::Confusion(), + std::numeric_limits::max(), + pow(10,- Base::UnitsApi::getDecimals())}; + PROPERTY_SOURCE(TechDraw::DrawView, App::DocumentObject) @@ -74,6 +81,7 @@ DrawView::DrawView(void) ScaleType.setEnums(ScaleTypeEnums); ADD_PROPERTY_TYPE(ScaleType,((long)0),group, App::Prop_None, "Scale Type"); ADD_PROPERTY_TYPE(Scale ,(1.0),group,App::Prop_None,"Scale factor of the view"); + Scale.setConstraints(&scaleRange); ADD_PROPERTY_TYPE(KeepLabel ,(false),fgroup,App::Prop_None,"Keep Label on Page even if toggled off"); ADD_PROPERTY_TYPE(Caption ,(""),fgroup,App::Prop_None,"Short text about the view"); @@ -234,6 +242,71 @@ void DrawView::setPosition(double x, double y) //recompute.unlock() } +void DrawView::Restore(Base::XMLReader &reader) +{ + reader.readElement("Properties"); + int Cnt = reader.getAttributeAsInteger("Count"); + + for (int i=0 ;igetTypeId().getName(), TypeName) == 0){ //if the property type in obj == type in schema + schemaProp->Restore(reader); //nothing special to do + } else { + if (strcmp(PropName, "Scale") == 0) { + if (schemaProp->isDerivedFrom(App::PropertyFloatConstraint::getClassTypeId())){ //right property type + schemaProp->Restore(reader); //nothing special to do + } else { //Scale, but not PropertyFloatConstraint + App::PropertyFloat tmp; + if (strcmp(tmp.getTypeId().getName(),TypeName)) { //property in file is Float + tmp.setContainer(this); + tmp.Restore(reader); + double tmpValue = tmp.getValue(); + if (tmpValue > 0.0) { + static_cast(schemaProp)->setValue(tmpValue); + } else { + static_cast(schemaProp)->setValue(1.0); + } + } else { + // has Scale prop that isn't Float! + Base::Console().Log("DrawView::Restore - old Document Scale is Not Float!\n"); + // no idea + } + } + } else { + Base::Console().Log("DrawView::Restore - old Document has unknown Property\n"); + } + } + } + } + catch (const Base::XMLParseException&) { + throw; // re-throw + } + catch (const Base::Exception &e) { + Base::Console().Error("%s\n", e.what()); + } + catch (const std::exception &e) { + Base::Console().Error("%s\n", e.what()); + } + catch (const char* e) { + Base::Console().Error("%s\n", e); + } +#ifndef FC_DEBUG + catch (...) { + Base::Console().Error("PropertyContainer::Restore: Unknown C++ exception thrown"); + } +#endif + + reader.readEndElement("Property"); + } + reader.readEndElement("Properties"); +} + + PyObject *DrawView::getPyObject(void) { if (PythonObject.is(Py::_None())) { diff --git a/src/Mod/TechDraw/App/DrawView.h b/src/Mod/TechDraw/App/DrawView.h index ad6e131cd..2e2cff1bb 100644 --- a/src/Mod/TechDraw/App/DrawView.h +++ b/src/Mod/TechDraw/App/DrawView.h @@ -48,7 +48,7 @@ public: App::PropertyFloat X; App::PropertyFloat Y; - App::PropertyFloat Scale; + App::PropertyFloatConstraint Scale; App::PropertyEnumeration ScaleType; App::PropertyFloat Rotation; @@ -62,6 +62,7 @@ public: virtual void onDocumentRestored(); virtual short mustExecute() const; //@} + void Restore(Base::XMLReader &reader); bool isInClip(); @@ -90,6 +91,7 @@ protected: private: static const char* ScaleTypeEnums[]; + static App::PropertyFloatConstraint::Constraints scaleRange; }; typedef App::FeaturePythonT DrawViewPython; From 86363caa56f1d3ace41d22c0ddf75dcbd13447db Mon Sep 17 00:00:00 2001 From: WandererFan Date: Wed, 1 Feb 2017 18:34:46 -0500 Subject: [PATCH 3/6] Copy/Paste error referencing Image WB --- src/Mod/Measure/Init.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/Mod/Measure/Init.py b/src/Mod/Measure/Init.py index bf0a2c95f..bf65cae3a 100644 --- a/src/Mod/Measure/Init.py +++ b/src/Mod/Measure/Init.py @@ -1,8 +1,7 @@ -# FreeCAD init script of the Image module # (c) 2001 Juergen Riegel #*************************************************************************** -#* (c) Juergen Riegel (juergen.riegel@web.de) 2002 * +#* (c) Juergen Riegel (juergen.riegel@web.de) 2002 * #* * #* This file is part of the FreeCAD CAx development system. * #* * @@ -27,13 +26,3 @@ -# Get the Parameter Group of this module -ParGrp = App.ParamGet("System parameter:Modules").GetGroup("Image") - -# Set the needed information -ParGrp.SetString("HelpIndex", "Image/Help/index.html") -ParGrp.SetString("WorkBenchName", "Image") -ParGrp.SetString("WorkBenchModule", "ImageWorkbench.py") - - - From 2c7afffd9a90891e85378c98072228550b0185c8 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Wed, 1 Feb 2017 19:05:49 -0500 Subject: [PATCH 4/6] Fix 2884 crash on page delete --- src/Mod/TechDraw/App/DrawPage.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawPage.cpp b/src/Mod/TechDraw/App/DrawPage.cpp index 41462063f..f2177ce07 100644 --- a/src/Mod/TechDraw/App/DrawPage.cpp +++ b/src/Mod/TechDraw/App/DrawPage.cpp @@ -335,10 +335,12 @@ void DrawPage::unsetupObject() } Views.setValues(emptyViews); - //no template crash here?? if Template.getValue is null or invalid, this will fail. - std::string templateName = Template.getValue()->getNameInDocument(); - Base::Interpreter().runStringArg("App.getDocument(\"%s\").removeObject(\"%s\")", - docName.c_str(), templateName.c_str()); + App::DocumentObject* tmp = Template.getValue(); + if (tmp != nullptr) { + std::string templateName = Template.getValue()->getNameInDocument(); + Base::Interpreter().runStringArg("App.getDocument(\"%s\").removeObject(\"%s\")", + docName.c_str(), templateName.c_str()); + } Template.setValue(nullptr); } From c47d0435296c2bf879b48886171080f2bcc85f05 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Wed, 1 Feb 2017 20:30:56 -0500 Subject: [PATCH 5/6] Feature Request 1880 - hide Template --- src/Mod/TechDraw/Gui/QGISVGTemplate.cpp | 1 - src/Mod/TechDraw/Gui/QGVPage.cpp | 2 - .../TechDraw/Gui/ViewProviderDrawingView.cpp | 2 +- src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp | 67 ++++++++++++++++++- src/Mod/TechDraw/Gui/ViewProviderTemplate.h | 12 ++-- 5 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp index 7ee5b0f3c..01aa277c0 100644 --- a/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp +++ b/src/Mod/TechDraw/Gui/QGISVGTemplate.cpp @@ -126,7 +126,6 @@ void QGISVGTemplate::draw() TechDraw::DrawSVGTemplate *tmplte = getSVGTemplate(); if(!tmplte) throw Base::Exception("Template Feature not set for QGISVGTemplate"); - load(QString::fromUtf8(tmplte->PageResult.getValue())); } diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index 1c867c487..f49f16bdc 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -471,8 +471,6 @@ QGIView * QGVPage::findParent(QGIView *view) const void QGVPage::setPageTemplate(TechDraw::DrawTemplate *obj) { - // Remove currently set background template - // Assign a base template class and create object dependent on removeTemplate(); if(obj->isDerivedFrom(TechDraw::DrawParametricTemplate::getClassTypeId())) { diff --git a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp index 62e00560d..8ad70ec48 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp @@ -92,7 +92,7 @@ void ViewProviderDrawingView::onChanged(const App::Property *prop) } if (prop == &Visibility) { - if(Visibility.getValue()) { + if(Visibility.getValue()) { show(); } else { hide(); diff --git a/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp b/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp index c3bfd5f10..8cea6d424 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp @@ -37,10 +37,15 @@ #include #include #include +#include +#include #include #include #include +#include "QGITemplate.h" +#include "QGVPage.h" +#include "MDIViewPage.h" #include "ViewProviderTemplate.h" using namespace TechDrawGui; @@ -53,6 +58,7 @@ PROPERTY_SOURCE(TechDrawGui::ViewProviderTemplate, Gui::ViewProviderDocumentObje ViewProviderTemplate::ViewProviderTemplate() { sPixmap = "TechDraw_Tree_PageTemplate"; + DisplayMode.setStatus(App::Property::ReadOnly,true); } ViewProviderTemplate::~ViewProviderTemplate() @@ -80,10 +86,69 @@ std::vector ViewProviderTemplate::getDisplayModes(void) const void ViewProviderTemplate::updateData(const App::Property* prop) { - //Base::Console().Log("ViewProviderTemplate::updateData(%s)/n",prop->getName()); + //Base::Console().Log("ViewProviderTemplate::updateData(%s)/n",prop->getName()); Gui::ViewProviderDocumentObject::updateData(prop); } +void ViewProviderTemplate::onChanged(const App::Property *prop) +{ + App::DocumentObject* obj = getObject(); + if (!obj || obj->isRestoring()) { + Gui::ViewProviderDocumentObject::onChanged(prop); + return; + } + + if (prop == &Visibility) { + if(Visibility.getValue()) { + show(); + } else { + hide(); + } + } + Gui::ViewProviderDocumentObject::onChanged(prop); +} + +void ViewProviderTemplate::show(void) +{ + QGITemplate* qTemplate = getQTemplate(); + if (qTemplate != nullptr) { + qTemplate->show(); + } + + ViewProviderDocumentObject::show(); +} + +void ViewProviderTemplate::hide(void) +{ + QGITemplate* qTemplate = getQTemplate(); + if (qTemplate != nullptr) { + qTemplate->hide(); + } + + ViewProviderDocumentObject::hide(); +} + +bool ViewProviderTemplate::isShow(void) const +{ + return Visibility.getValue(); +} + +QGITemplate* ViewProviderTemplate::getQTemplate(void) +{ + QGITemplate *result = nullptr; + TechDraw::DrawTemplate* dt = getTemplate(); + if (dt) { + Gui::MDIView* gmdi = getActiveView(); + if (gmdi != nullptr) { + MDIViewPage* mdi = dynamic_cast(gmdi); + if (mdi != nullptr) { + result = mdi->getQGVPage()->getTemplate(); + } + } + } + return result; +} + TechDraw::DrawTemplate* ViewProviderTemplate::getTemplate() const { return dynamic_cast(pcObject); diff --git a/src/Mod/TechDraw/Gui/ViewProviderTemplate.h b/src/Mod/TechDraw/Gui/ViewProviderTemplate.h index dbb7dbf87..b051a9472 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderTemplate.h +++ b/src/Mod/TechDraw/Gui/ViewProviderTemplate.h @@ -1,7 +1,7 @@ /*************************************************************************** * Copyright (c) 2014 Luke Parry * * * - * This file is part of the FreeCAD CAx development system. * + * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * @@ -10,7 +10,7 @@ * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * @@ -31,6 +31,7 @@ namespace TechDraw{ } namespace TechDrawGui { +class QGITemplate; class TechDrawGuiExport ViewProviderTemplate : public Gui::ViewProviderDocumentObject { @@ -48,8 +49,11 @@ public: /// returns a list of all possible modes virtual std::vector getDisplayModes(void) const; virtual void updateData(const App::Property*); - -public: + virtual void onChanged(const App::Property *prop); + virtual void hide(void); + virtual void show(void); + virtual bool isShow(void) const; + QGITemplate* getQTemplate(void); TechDraw::DrawTemplate* getTemplate() const; }; From 70049dac4b6b5c416694f64182452e69565246b5 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Sun, 5 Feb 2017 20:26:22 -0500 Subject: [PATCH 6/6] Fix 2889 Toggle Frames for DrawViewSymbol --- src/Mod/TechDraw/Gui/CommandDecorate.cpp | 2 +- src/Mod/TechDraw/Gui/DrawGuiUtil.cpp | 18 +++++++++++++----- src/Mod/TechDraw/Gui/DrawGuiUtil.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Mod/TechDraw/Gui/CommandDecorate.cpp b/src/Mod/TechDraw/Gui/CommandDecorate.cpp index 2b38bdc87..072ec006d 100644 --- a/src/Mod/TechDraw/Gui/CommandDecorate.cpp +++ b/src/Mod/TechDraw/Gui/CommandDecorate.cpp @@ -291,7 +291,7 @@ void CmdTechDrawToggleFrame::activated(int iMsg) bool CmdTechDrawToggleFrame::isActive(void) { bool havePage = DrawGuiUtil::needPage(this); - bool haveView = DrawGuiUtil::needView(this); + bool haveView = DrawGuiUtil::needView(this,false); return (havePage && haveView); } diff --git a/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp b/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp index 0e42243b7..57b3e4fb3 100644 --- a/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp +++ b/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp @@ -121,14 +121,22 @@ bool DrawGuiUtil::needPage(Gui::Command* cmd) return active; } -bool DrawGuiUtil::needView(Gui::Command* cmd) +bool DrawGuiUtil::needView(Gui::Command* cmd, bool partOnly) { bool haveView = false; if (cmd->hasActiveDocument()) { - auto drawPartType (TechDraw::DrawViewPart::getClassTypeId()); - auto selParts = cmd->getDocument()->getObjectsOfType(drawPartType); - if (!selParts.empty()) { - haveView = true; + if (partOnly) { + auto drawPartType (TechDraw::DrawViewPart::getClassTypeId()); + auto selParts = cmd->getDocument()->getObjectsOfType(drawPartType); + if (!selParts.empty()) { + haveView = true; + } + } else { + auto drawViewType (TechDraw::DrawView::getClassTypeId()); + auto selParts = cmd->getDocument()->getObjectsOfType(drawViewType); + if (!selParts.empty()) { + haveView = true; + } } } return haveView; diff --git a/src/Mod/TechDraw/Gui/DrawGuiUtil.h b/src/Mod/TechDraw/Gui/DrawGuiUtil.h index 0f6df6553..d11bc4303 100644 --- a/src/Mod/TechDraw/Gui/DrawGuiUtil.h +++ b/src/Mod/TechDraw/Gui/DrawGuiUtil.h @@ -33,7 +33,7 @@ class TechDrawGuiExport DrawGuiUtil { public: static TechDraw::DrawPage* findPage(Gui::Command* cmd); static bool needPage(Gui::Command* cmd); - static bool needView(Gui::Command* cmd); + static bool needView(Gui::Command* cmd, bool partOnly = true); }; } //end namespace TechDrawGui