[TD]add progress reporting framework

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

View File

@@ -458,8 +458,7 @@ void QGIViewPart::drawViewPart()
removePrimitives(); //clean the slate
removeDecorations();
#if MOD_TECHDRAW_HANDLE_FACES
if (viewPart->handleFaces()) {
if (viewPart->handleFaces() && !viewPart->CoarseView.getValue()) {
// Draw Faces
std::vector<TechDraw::DrawHatch*> hatchObjs = viewPart->getHatches();
std::vector<TechDraw::DrawGeomHatch*> geomObjs = viewPart->getGeomHatches();
@@ -529,7 +528,6 @@ void QGIViewPart::drawViewPart()
newFace->draw();
}
}
#endif //#if MOD_TECHDRAW_HANDLE_FACES
// Draw Edges
QColor edgeColor = PreferencesGui::normalQColor();

View File

@@ -1201,11 +1201,11 @@ void QGSPage::postProcessXml(QTemporaryFile& temporaryFile, QString fileName, QS
QDomDocument exportDoc(QString::fromUtf8("SvgDoc"));
QFile file(temporaryFile.fileName());
if (!file.open(QIODevice::ReadOnly)) {
Base::Console().Message("QGSPage::ppsvg - tempfile open error\n");
Base::Console().Error("QGSPage::ppsvg - tempfile open error\n");
return;
}
if (!exportDoc.setContent(&file)) {
Base::Console().Message("QGSPage::ppsvg - xml error\n");
Base::Console().Error("QGSPage::ppsvg - xml error\n");
file.close();
return;
}

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);

View File

@@ -76,14 +76,17 @@ public:
//@}
virtual TechDraw::DrawView* getViewObject() const;
void showProgressMessage(const std::string featureName, const std::string text) const;
void onGuiRepaint(const TechDraw::DrawView* dv);
void onGuiRepaint(const TechDraw::DrawView* dv);
void onProgressMessage(const TechDraw::DrawView* dv,
const std::string featureName,
const std::string text);
typedef boost::signals2::scoped_connection Connection;
Connection connectGuiRepaint;
Connection connectProgressMessage;
private:
bool m_docReady; //sb MDI + QGraphicsScene ready
};

View File

@@ -78,7 +78,7 @@ PROPERTY_SOURCE(TechDrawGui::ViewProviderPage, Gui::ViewProviderDocumentObject)
ViewProviderPage::ViewProviderPage()
: m_mdiView(nullptr),
m_docReady(true),
m_pageName(""),
m_graphicsView(nullptr),
m_graphicsScene(nullptr)
{
@@ -416,23 +416,7 @@ std::vector<App::DocumentObject*> ViewProviderPage::claimChildren(void) const
}
}
void ViewProviderPage::startRestoring()
{
// Base::Console().Message("VPP::startRestoring()\n");
//VPDO::startRestoring hides this VPP
Gui::ViewProviderDocumentObject::startRestoring();
}
//note this is called when this ViewProvider has been restored, not
//when the whole document has been restored.
void ViewProviderPage::finishRestoring()
{
// Base::Console().Message("VPP::finishRestoring() - canUpdate: %d viz: %d\n",
// getDrawPage()->canUpdate(), Visibility.getValue());
Gui::ViewProviderDocumentObject::finishRestoring();
}
bool ViewProviderPage::isShow() const
bool ViewProviderPage::isShow(void) const
{
return Visibility.getValue();
}

View File

@@ -77,9 +77,6 @@ public:
bool onDelete(const std::vector<std::string> &) override;
void onChanged(const App::Property *prop) override;
void updateData(const App::Property* prop) override;
void startRestoring() override;
void finishRestoring() override;
bool isRestoring() {return !m_docReady;}
TechDraw::DrawPage* getDrawPage() const;
@@ -115,7 +112,6 @@ protected:
private:
QPointer<MDIViewPage> m_mdiView;
bool m_docReady;
std::string m_pageName;
QGVPage* m_graphicsView;
QGSPage* m_graphicsScene;