diff --git a/src/Mod/TechDraw/App/DrawPage.cpp b/src/Mod/TechDraw/App/DrawPage.cpp index a4e7f564f7..2e08f3d292 100644 --- a/src/Mod/TechDraw/App/DrawPage.cpp +++ b/src/Mod/TechDraw/App/DrawPage.cpp @@ -50,6 +50,7 @@ #include "DrawViewPart.h" #include "DrawViewDimension.h" #include "DrawViewBalloon.h" +#include "DrawLeaderLine.h" #include // generated from DrawPagePy.xml @@ -75,6 +76,7 @@ DrawPage::DrawPage(void) { static const char *group = "Page"; nowUnsetting = false; + forceRedraw(false); Base::Reference hGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General"); @@ -127,17 +129,7 @@ void DrawPage::onChanged(const App::Property* prop) !isUnsetting()) { //would be nice if this message was displayed immediately instead of after the recomputeFeature Base::Console().Message("Rebuilding Views for: %s/%s\n",getNameInDocument(),Label.getValue()); - auto views(Views.getValues()); - for (auto& v: views) { - //check for children of current view - if (v->isDerivedFrom(TechDraw::DrawViewCollection::getClassTypeId())) { - auto dvc = static_cast(v); - for (auto& vv: dvc->Views.getValues()) { - vv->touch(); - } - } - v->recomputeFeature(); //get all views up to date - } + updateAllViews(); } } else if (prop == &Template) { if (!isRestoring() && @@ -339,6 +331,7 @@ void DrawPage::onDocumentRestored() App::DocumentObject::onDocumentRestored(); } +//should really be called "updateMostViews". can still be problems to due execution order. void DrawPage::updateAllViews() { std::vector featViews = getAllViews(); @@ -358,6 +351,14 @@ void DrawPage::updateAllViews() dim->recomputeFeature(); } } + + //third, try to execute all leader lines. may not work if parent DVP isn't ready. + for(it = featViews.begin(); it != featViews.end(); ++it) { + TechDraw::DrawLeaderLine *line = dynamic_cast(*it); + if (line != nullptr) { + line->recomputeFeature(); + } + } } std::vector DrawPage::getAllViews(void) diff --git a/src/Mod/TechDraw/App/DrawPage.h b/src/Mod/TechDraw/App/DrawPage.h index 4beabb78dc..cb45e3944d 100644 --- a/src/Mod/TechDraw/App/DrawPage.h +++ b/src/Mod/TechDraw/App/DrawPage.h @@ -101,6 +101,8 @@ public: void updateAllViews(void); static bool GlobalUpdateDrawings(void); static bool AllowPageOverride(void); + void forceRedraw(bool b) { m_forceRedraw = b; } + bool forceRedraw(void) { return m_forceRedraw; } protected: void onBeforeChange(const App::Property* prop) override; @@ -108,6 +110,7 @@ protected: virtual void onDocumentRestored() override; virtual void unsetupObject() override; + bool m_forceRedraw; private: static const char* ProjectionTypeEnums[]; diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index ff46985473..7d0af2a776 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -367,9 +367,11 @@ bool DrawView::keepUpdated(void) bool result = false; bool pageUpdate = false; + bool force = false; TechDraw::DrawPage *page = findParentPage(); if(page) { pageUpdate = page->KeepUpdated.getValue(); + force = page->forceRedraw(); } if (DrawPage::GlobalUpdateDrawings() && @@ -380,6 +382,9 @@ bool DrawView::keepUpdated(void) pageUpdate) { result = true; } + if (force) { //when do we turn this off?? + result = true; + } return result; } diff --git a/src/Mod/TechDraw/App/DrawViewSymbol.cpp b/src/Mod/TechDraw/App/DrawViewSymbol.cpp index 1c89d07eee..8fe8b7a7ce 100644 --- a/src/Mod/TechDraw/App/DrawViewSymbol.cpp +++ b/src/Mod/TechDraw/App/DrawViewSymbol.cpp @@ -94,9 +94,10 @@ void DrawViewSymbol::onChanged(const App::Property* prop) App::DocumentObjectExecReturn *DrawViewSymbol::execute(void) { // Base::Console().Message("DVS::execute() \n"); - if (!keepUpdated()) { - return App::DocumentObject::StdReturn; - } +// //dvs::execute is pretty fast. doesn't need to be blocked? +// if (!keepUpdated()) { +// return App::DocumentObject::StdReturn; +// } std::string svg = Symbol.getValue(); const std::vector& editText = EditableTexts.getValues(); diff --git a/src/Mod/TechDraw/Gui/CommandDecorate.cpp b/src/Mod/TechDraw/Gui/CommandDecorate.cpp index dcd3dad95e..a03b143866 100644 --- a/src/Mod/TechDraw/Gui/CommandDecorate.cpp +++ b/src/Mod/TechDraw/Gui/CommandDecorate.cpp @@ -43,6 +43,7 @@ # include # include # include +#include # include @@ -420,13 +421,13 @@ bool CmdTechDrawToggleFrame::isActive(void) } //=========================================================================== -// TechDraw_RedrawPage +// TechDraw_Redraw //=========================================================================== -DEF_STD_CMD_A(CmdTechDrawRedrawPage); +DEF_STD_CMD_A(CmdTechDrawRedraw); -CmdTechDrawRedrawPage::CmdTechDrawRedrawPage() - : Command("TechDraw_RedrawPage") +CmdTechDrawRedraw::CmdTechDrawRedraw() + : Command("TechDraw_Redraw") { sAppModule = "TechDraw"; sGroup = QT_TR_NOOP("TechDraw"); @@ -434,27 +435,24 @@ CmdTechDrawRedrawPage::CmdTechDrawRedrawPage() sToolTipText = QT_TR_NOOP("Redraw a page"); sWhatsThis = "TechDraw_Redraw"; sStatusTip = sToolTipText; - sPixmap = "TechDraw_Tree_Page_Sync"; + sPixmap = "actions/techdraw-forceredraw"; } -void CmdTechDrawRedrawPage::activated(int iMsg) +void CmdTechDrawRedraw::activated(int iMsg) { Q_UNUSED(iMsg); TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); if (!page) { return; } - std::string PageName = page->getNameInDocument(); - bool keepUpdated = page->KeepUpdated.getValue(); - if (!keepUpdated) { - doCommand(Doc,"App.activeDocument().%s.KeepUpdated = True",PageName.c_str()); - doCommand(Doc,"App.activeDocument().%s.KeepUpdated = False",PageName.c_str()); - } else { - page->requestPaint(); - } + Gui::WaitCursor wc; + + page->forceRedraw(true); + page->updateAllViews(); + page->forceRedraw(false); } -bool CmdTechDrawRedrawPage::isActive(void) +bool CmdTechDrawRedraw::isActive(void) { bool havePage = DrawGuiUtil::needPage(this); return (havePage); @@ -468,7 +466,7 @@ void CreateTechDrawCommandsDecorate(void) rcCmdMgr.addCommand(new CmdTechDrawNewGeomHatch()); rcCmdMgr.addCommand(new CmdTechDrawImage()); rcCmdMgr.addCommand(new CmdTechDrawToggleFrame()); -// rcCmdMgr.addCommand(new CmdTechDrawRedrawPage()); + rcCmdMgr.addCommand(new CmdTechDrawRedraw()); // rcCmdMgr.addCommand(new CmdTechDrawLeaderLine()); // rcCmdMgr.addCommand(new CmdTechDrawRichAnno()); } diff --git a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc index 4891276c9d..a1975c8939 100644 --- a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc +++ b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc @@ -58,6 +58,7 @@ icons/actions/techdraw-hatch.svg icons/actions/techdraw-geomhatch.svg icons/actions/techdraw-toggleframe.svg + icons/actions/techdraw-forceredraw.svg icons/actions/techdraw-projgroup.svg icons/actions/techdraw-spreadsheet.svg icons/actions/techdraw-image.svg diff --git a/src/Mod/TechDraw/Gui/Resources/icons/actions/techdraw-forceredraw.svg b/src/Mod/TechDraw/Gui/Resources/icons/actions/techdraw-forceredraw.svg new file mode 100644 index 0000000000..137b24e6dd --- /dev/null +++ b/src/Mod/TechDraw/Gui/Resources/icons/actions/techdraw-forceredraw.svg @@ -0,0 +1,642 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + + + + reload + refresh + view + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/TechDraw/Gui/Workbench.cpp b/src/Mod/TechDraw/Gui/Workbench.cpp index 91d4898302..ce463390bc 100644 --- a/src/Mod/TechDraw/Gui/Workbench.cpp +++ b/src/Mod/TechDraw/Gui/Workbench.cpp @@ -87,7 +87,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *draw << "TechDraw_Symbol"; *draw << "TechDraw_Image"; *draw << "TechDraw_ToggleFrame"; -// *decor << "TechDraw_RedrawPage"; + *draw << "TechDraw_Redraw"; *draw << "Separator"; *draw << "TechDraw_Annotation"; *draw << "TechDraw_LeaderLine"; @@ -156,7 +156,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const *decor << "TechDraw_Symbol"; *decor << "TechDraw_Image"; *decor << "TechDraw_ToggleFrame"; -// *decor << "TechDraw_RedrawPage"; + *decor << "TechDraw_Redraw"; Gui::ToolBarItem *anno = new Gui::ToolBarItem(root); anno->setCommand("TechDraw Annotation"); @@ -225,6 +225,7 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const *decor << "TechDraw_Symbol"; *decor << "TechDraw_Image"; *decor << "TechDraw_ToggleFrame"; + *decor << "TechDraw_Redraw"; Gui::ToolBarItem *anno = new Gui::ToolBarItem(root); anno->setCommand("TechDraw Annotation");