[TD]add progress reporting framework

This commit is contained in:
Wanderer Fan
2022-07-19 21:38:13 -04:00
committed by WandererFan
parent 7e701969af
commit ac63550122
9 changed files with 122 additions and 67 deletions

View File

@@ -34,6 +34,7 @@
#include <Gui/Application.h>
#include <Gui/Control.h>
#include <Gui/Document.h>
#include <Gui/MainWindow.h>
#include <Mod/TechDraw/App/DrawPage.h>
#include <Mod/TechDraw/App/DrawView.h>
@@ -60,7 +61,6 @@ ViewProviderDrawingView::ViewProviderDrawingView()
// Do not show in property editor why? wf WF: because DisplayMode applies only to coin and we
// don't use coin.
DisplayMode.setStatus(App::Property::Hidden,true);
m_docReady = true;
}
ViewProviderDrawingView::~ViewProviderDrawingView()
@@ -73,9 +73,11 @@ void ViewProviderDrawingView::attach(App::DocumentObject *pcFeat)
ViewProviderDocumentObject::attach(pcFeat);
auto bnd = boost::bind(&ViewProviderDrawingView::onGuiRepaint, this, bp::_1);
auto bndProgressMessage = boost::bind(&ViewProviderDrawingView::onProgressMessage, this, bp::_1, bp::_2, bp::_3);
auto feature = getViewObject();
if (feature) {
connectGuiRepaint = feature->signalGuiPaint.connect(bnd);
connectProgressMessage = feature->signalProgressMessage.connect(bndProgressMessage);
//TODO: would be good to start the QGIV creation process here, but no guarantee we actually have
// MDIVP or QGVP yet.
// but parent page might. we may not be part of the document yet though!
@@ -152,9 +154,8 @@ QGIView* ViewProviderDrawingView::getQView()
TechDraw::DrawView* dv = getViewObject();
if (dv) {
Gui::Document* guiDoc = Gui::Application::Instance->getDocument(getViewObject()->getDocument());
if (guiDoc != nullptr) {
Gui::ViewProvider* vp = guiDoc->getViewProvider(getViewObject()->findParentPage());
ViewProviderPage* vpp = dynamic_cast<ViewProviderPage*>(vp);
if (guiDoc) {
ViewProviderPage* vpp = getViewProviderPage();
if (vpp) {
if (vpp->getQGSPage()) {
qView = dynamic_cast<QGIView *>(vpp->getQGSPage()->findQViewForDocObj(getViewObject()));
@@ -172,13 +173,11 @@ bool ViewProviderDrawingView::isShow() const
void ViewProviderDrawingView::startRestoring()
{
m_docReady = false;
Gui::ViewProviderDocumentObject::startRestoring();
}
void ViewProviderDrawingView::finishRestoring()
{
m_docReady = true;
if (Visibility.getValue()) {
show();
} else {
@@ -201,18 +200,23 @@ void ViewProviderDrawingView::updateData(const App::Property* prop)
Gui::ViewProviderDocumentObject::updateData(prop);
}
MDIViewPage* ViewProviderDrawingView::getMDIViewPage() const
ViewProviderPage* ViewProviderDrawingView::getViewProviderPage() const
{
MDIViewPage* result = nullptr;
Gui::Document* guiDoc = Gui::Application::Instance->getDocument(getViewObject()->getDocument());
if (guiDoc) {
Gui::ViewProvider* vp = guiDoc->getViewProvider(getViewObject()->findParentPage());
ViewProviderPage* vpp = dynamic_cast<ViewProviderPage*>(vp);
if (vpp) {
result = vpp->getMDIViewPage();
}
return dynamic_cast<ViewProviderPage*>(vp);
}
return result;
return nullptr;
}
MDIViewPage* ViewProviderDrawingView::getMDIViewPage() const
{
ViewProviderPage* vpp = getViewProviderPage();
if (vpp) {
return vpp->getMDIViewPage();
}
return nullptr;
}
Gui::MDIView *ViewProviderDrawingView::getMDIView() const
@@ -235,8 +239,7 @@ void ViewProviderDrawingView::onGuiRepaint(const TechDraw::DrawView* dv)
for (auto& v: views) {
if (v == getViewObject()) {
//view v belongs to this page p
Gui::ViewProvider* vp = guiDoc->getViewProvider(p);
ViewProviderPage* vpPage = dynamic_cast<ViewProviderPage*>(vp);
ViewProviderPage* vpPage = getViewProviderPage();
if (vpPage) {
if (vpPage->getQGSPage()) {
QGIView* qView = dynamic_cast<QGIView *>(vpPage->getQGSPage()->findQViewForDocObj(v));
@@ -255,9 +258,8 @@ void ViewProviderDrawingView::onGuiRepaint(const TechDraw::DrawView* dv)
QGIView* qgiv = getQView();
if (qgiv) {
qgiv->updateView(true);
} else { //we are not part of the Gui page yet. ask page to add us.
Gui::ViewProvider* vp = guiDoc->getViewProvider(getViewObject()->findParentPage());
ViewProviderPage* vpPage = dynamic_cast<ViewProviderPage*>(vp);
} else { //we are not part of the Gui page yet. ask page to add us.
ViewProviderPage* vpPage = getViewProviderPage();
if (vpPage) {
if (vpPage->getQGSPage()) {
vpPage->getQGSPage()->addView(dv);
@@ -268,6 +270,32 @@ void ViewProviderDrawingView::onGuiRepaint(const TechDraw::DrawView* dv)
}
}
//handle status updates from App/DrawView
void ViewProviderDrawingView::onProgressMessage(const TechDraw::DrawView* dv,
const std::string featureName,
const std::string text)
{
// Q_UNUSED(featureName)
Q_UNUSED(dv)
// Q_UNUSED(text)
showProgressMessage(featureName, text);
}
void ViewProviderDrawingView::showProgressMessage(const std::string featureName, const std::string text) const
{
QString msg = QString::fromUtf8("%1 %2")
.arg(Base::Tools::fromStdString(featureName),
Base::Tools::fromStdString(text));
if (Gui::getMainWindow()) {
//neither of these work! Base::Console().Message() output preempts these messages??
// Gui::getMainWindow()->showMessage(msg, 3000);
// Gui::getMainWindow()->showStatus(Gui::MainWindow::Msg, msg);
//Temporary implementation. This works, but the messages are queued up and
//not displayed in the report window in real time??
Base::Console().Message("%s\n", qPrintable(msg));
}
}
TechDraw::DrawView* ViewProviderDrawingView::getViewObject() const
{
return dynamic_cast<TechDraw::DrawView*>(pcObject);