Allow DrawPage updates to be suspended

This commit is contained in:
WandererFan
2017-07-20 18:29:56 -04:00
committed by wmayer
parent b9292683ae
commit e8f2c68b5c
28 changed files with 844 additions and 69 deletions

View File

@@ -25,6 +25,9 @@
#include "PreCompiled.h"
#ifndef _PreComp_
#include <boost/signal.hpp>
#include <boost/bind.hpp>
#endif
/// Here the FreeCAD includes sorted by Base,App,Gui......
@@ -43,6 +46,7 @@
#include <Mod/TechDraw/App/DrawViewClip.h>
#include <Mod/TechDraw/App/DrawPage.h>
#include <Mod/TechDraw/App/DrawView.h>
#include "ViewProviderPage.h"
#include "QGIView.h"
@@ -61,6 +65,7 @@ ViewProviderDrawingView::ViewProviderDrawingView()
// Do not show in property editor why? wf
DisplayMode.setStatus(App::Property::ReadOnly,true);
m_docReady = true;
}
ViewProviderDrawingView::~ViewProviderDrawingView()
@@ -70,6 +75,14 @@ ViewProviderDrawingView::~ViewProviderDrawingView()
void ViewProviderDrawingView::attach(App::DocumentObject *pcFeat)
{
ViewProviderDocumentObject::attach(pcFeat);
auto bnd = boost::bind(&ViewProviderDrawingView::onGuiRepaint, this, _1);
auto feature = getViewObject();
if (feature != nullptr) {
connectGuiRepaint = feature->signalGuiPaint.connect(bnd);
} else {
Base::Console().Log("VPDV::attach has no Feature!\n");
}
}
void ViewProviderDrawingView::setDisplayMode(const char* ModeName)
@@ -137,10 +150,6 @@ void ViewProviderDrawingView::hide(void)
QGIView* ViewProviderDrawingView::getQView(void)
{
//TODO: vp can get its MDIView with 1 call getActiveView()?
// instead of going back to App side an up tree and back to Gui?
//MDIVPage* mdivp = static_cast<MDIVPage*>(getActiveView());
//qView = mdivp->getQGVPage()->findQViewForDocObj(getViewObject());
QGIView *qView = nullptr;
if (m_docReady){
TechDraw::DrawView* dv = getViewObject();
@@ -185,12 +194,12 @@ void ViewProviderDrawingView::finishRestoring()
void ViewProviderDrawingView::updateData(const App::Property* prop)
{
if (prop == &(getViewObject()->Rotation) ) {
// redraw QGIVP
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->updateView(true);
}
}
}
Gui::ViewProviderDocumentObject::updateData(prop);
}
@@ -216,6 +225,23 @@ MDIViewPage* ViewProviderDrawingView::getMDIViewPage() const
return result;
}
void ViewProviderDrawingView::onGuiRepaint(const TechDraw::DrawView* dv)
{
if (dv == getViewObject()) {
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->updateView(true);
}
// } else {
// auto vo = getViewObject();
// auto page = vo->findParentPage();
// if (page != nullptr) {
// page->requestPaint() ;
// }
}
}
TechDraw::DrawView* ViewProviderDrawingView::getViewObject() const
{
return dynamic_cast<TechDraw::DrawView*>(pcObject);