Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[TD]Allow forced redraw of Page
  • Loading branch information
WandererFan committed Aug 30, 2019
1 parent 5bed53f commit b2d8eee
Show file tree
Hide file tree
Showing 8 changed files with 684 additions and 32 deletions.
23 changes: 12 additions & 11 deletions src/Mod/TechDraw/App/DrawPage.cpp
Expand Up @@ -50,6 +50,7 @@
#include "DrawViewPart.h"
#include "DrawViewDimension.h"
#include "DrawViewBalloon.h"
#include "DrawLeaderLine.h"

#include <Mod/TechDraw/App/DrawPagePy.h> // generated from DrawPagePy.xml

Expand All @@ -75,6 +76,7 @@ DrawPage::DrawPage(void)
{
static const char *group = "Page";
nowUnsetting = false;
forceRedraw(false);

Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
Expand Down Expand Up @@ -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<TechDraw::DrawViewCollection*>(v);
for (auto& vv: dvc->Views.getValues()) {
vv->touch();
}
}
v->recomputeFeature(); //get all views up to date
}
updateAllViews();
}
} else if (prop == &Template) {
if (!isRestoring() &&
Expand Down Expand Up @@ -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<App::DocumentObject*> featViews = getAllViews();
Expand All @@ -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<TechDraw::DrawLeaderLine *>(*it);
if (line != nullptr) {
line->recomputeFeature();
}
}
}

std::vector<App::DocumentObject*> DrawPage::getAllViews(void)
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/TechDraw/App/DrawPage.h
Expand Up @@ -101,13 +101,16 @@ class TechDrawExport DrawPage: public App::DocumentObject
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;
void onChanged(const App::Property* prop) override;
virtual void onDocumentRestored() override;
virtual void unsetupObject() override;

bool m_forceRedraw;

private:
static const char* ProjectionTypeEnums[];
Expand Down
5 changes: 5 additions & 0 deletions src/Mod/TechDraw/App/DrawView.cpp
Expand Up @@ -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() &&
Expand All @@ -380,6 +382,9 @@ bool DrawView::keepUpdated(void)
pageUpdate) {
result = true;
}
if (force) { //when do we turn this off??
result = true;
}

return result;
}
Expand Down
7 changes: 4 additions & 3 deletions src/Mod/TechDraw/App/DrawViewSymbol.cpp
Expand Up @@ -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<std::string>& editText = EditableTexts.getValues();
Expand Down
30 changes: 14 additions & 16 deletions src/Mod/TechDraw/Gui/CommandDecorate.cpp
Expand Up @@ -43,6 +43,7 @@
# include <Gui/MainWindow.h>
# include <Gui/FileDialog.h>
# include <Gui/ViewProvider.h>
#include <Gui/WaitCursor.h>

# include <Mod/Part/App/PartFeature.h>

Expand Down Expand Up @@ -420,41 +421,38 @@ 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");
sMenuText = QT_TR_NOOP("Redraw a page");
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);
Expand All @@ -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());
}
Expand Down
1 change: 1 addition & 0 deletions src/Mod/TechDraw/Gui/Resources/TechDraw.qrc
Expand Up @@ -58,6 +58,7 @@
<file>icons/actions/techdraw-hatch.svg</file>
<file>icons/actions/techdraw-geomhatch.svg</file>
<file>icons/actions/techdraw-toggleframe.svg</file>
<file>icons/actions/techdraw-forceredraw.svg</file>
<file>icons/actions/techdraw-projgroup.svg</file>
<file>icons/actions/techdraw-spreadsheet.svg</file>
<file>icons/actions/techdraw-image.svg</file>
Expand Down

0 comments on commit b2d8eee

Please sign in to comment.