diff --git a/src/Mod/TechDraw/Gui/AppTechDrawGuiPy.cpp b/src/Mod/TechDraw/Gui/AppTechDrawGuiPy.cpp index ca183898b1..1939c15253 100644 --- a/src/Mod/TechDraw/Gui/AppTechDrawGuiPy.cpp +++ b/src/Mod/TechDraw/Gui/AppTechDrawGuiPy.cpp @@ -37,7 +37,6 @@ #include #include // generated from DrawViewPy.xml -#include "MDIViewPage.h" #include "QGIView.h" #include "QGSPage.h" #include "ViewProviderPage.h" @@ -131,25 +130,30 @@ private: for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { PyObject* item = (*it).ptr(); if (PyObject_TypeCheck(item, &(App::DocumentObjectPy::Type))) { - App::DocumentObject* obj = static_cast(item)->getDocumentObjectPtr(); + App::DocumentObject* obj = + static_cast(item)->getDocumentObjectPtr(); if (obj->isDerivedFrom()) { page = static_cast(obj); - Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); + Gui::Document* activeGui = + Gui::Application::Instance->getDocument(page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(obj); - ViewProviderPage* dvp = dynamic_cast(vp); - if ( !(dvp && dvp->getMDIViewPage()) ) { + ViewProviderPage* vpPage = dynamic_cast(vp); + if (!vpPage) { throw Py::TypeError("TechDraw can not find Page"); } Base::FileInfo fi_out(EncodedName.c_str()); if (fi_out.hasExtension("svg")) { - dvp->getMDIViewPage()->saveSVG(EncodedName); - } else if (fi_out.hasExtension("dxf")) { - dvp->getMDIViewPage()->saveDXF(EncodedName); - } else if (fi_out.hasExtension("pdf")) { - dvp->getMDIViewPage()->savePDF(EncodedName); - } else { + PagePrinter::saveSVG(vpPage, EncodedName); + } + else if (fi_out.hasExtension("dxf")) { + PagePrinter::saveDXF(vpPage, EncodedName); + } + else if (fi_out.hasExtension("pdf")) { + PagePrinter::savePDF(vpPage, EncodedName); + } + else { throw Py::TypeError("TechDraw can not export this file format"); } } @@ -175,30 +179,22 @@ private: PyMem_Free(name); try { - App::DocumentObject* obj = nullptr; - Gui::ViewProvider* vp = nullptr; - MDIViewPage* mdi = nullptr; - if (PyObject_TypeCheck(pageObj, &(App::DocumentObjectPy::Type))) { - obj = static_cast(pageObj)->getDocumentObjectPtr(); - vp = Gui::Application::Instance->getViewProvider(obj); - if (vp) { - TechDrawGui::ViewProviderPage* vpp = dynamic_cast(vp); - if (vpp) { - mdi = vpp->getMDIViewPage(); - if (mdi) { - mdi->savePDF(filePath); - } else { - vpp->showMDIViewPage(); - mdi = vpp->getMDIViewPage(); - if (mdi) { - mdi->savePDF(filePath); - } else { - throw Py::TypeError("Page not available! Is it Hidden?"); - } - } - } - } - } + App::DocumentObject* obj = nullptr; + Gui::ViewProvider* vp = nullptr; + if (PyObject_TypeCheck(pageObj, &(App::DocumentObjectPy::Type))) { + obj = static_cast(pageObj)->getDocumentObjectPtr(); + vp = Gui::Application::Instance->getViewProvider(obj); + if (vp) { + TechDrawGui::ViewProviderPage* vpPage = + dynamic_cast(vp); + if (vpPage) { + PagePrinter::savePDF(vpPage, filePath); + } + else { + throw Py::TypeError("Page not available! Is it Hidden?"); + } + } + } } catch (Base::Exception &e) { e.setPyException(); @@ -221,30 +217,22 @@ private: PyMem_Free(name); try { - App::DocumentObject* obj = nullptr; - Gui::ViewProvider* vp = nullptr; - MDIViewPage* mdi = nullptr; - if (PyObject_TypeCheck(pageObj, &(App::DocumentObjectPy::Type))) { - obj = static_cast(pageObj)->getDocumentObjectPtr(); - vp = Gui::Application::Instance->getViewProvider(obj); - if (vp) { - TechDrawGui::ViewProviderPage* vpp = dynamic_cast(vp); - if (vpp) { - mdi = vpp->getMDIViewPage(); - if (mdi) { - mdi->saveSVG(filePath); - } else { - vpp->showMDIViewPage(); - mdi = vpp->getMDIViewPage(); - if (mdi) { - mdi->saveSVG(filePath); - } else { - throw Py::TypeError("Page not available! Is it Hidden?"); - } - } - } - } - } + App::DocumentObject* obj = nullptr; + Gui::ViewProvider* vp = nullptr; + if (PyObject_TypeCheck(pageObj, &(App::DocumentObjectPy::Type))) { + obj = static_cast(pageObj)->getDocumentObjectPtr(); + vp = Gui::Application::Instance->getViewProvider(obj); + if (vp) { + TechDrawGui::ViewProviderPage* vpPage = + dynamic_cast(vp); + if (vpPage) { + PagePrinter::saveSVG(vpPage, filePath); + } + else { + throw Py::TypeError("Page not available! Is it Hidden?"); + } + } + } } catch (Base::Exception &e) { e.setPyException(); diff --git a/src/Mod/TechDraw/Gui/Command.cpp b/src/Mod/TechDraw/Gui/Command.cpp index 358f10f024..9e02d9fb2d 100644 --- a/src/Mod/TechDraw/Gui/Command.cpp +++ b/src/Mod/TechDraw/Gui/Command.cpp @@ -323,7 +323,7 @@ void CmdTechDrawView::activated(int iMsg) auto* vpp = dynamic_cast (Gui::Application::Instance->getViewProvider(page)); if (vpp) { - vpp->switchToMdiViewPage(); + vpp->show(); } @@ -1793,14 +1793,16 @@ void CmdTechDrawExportPageSVG::activated(int iMsg) Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(page); - ViewProviderPage* dvp = dynamic_cast(vp); + ViewProviderPage* vpPage = dynamic_cast(vp); - if (dvp && dvp->getMDIViewPage()) { - dvp->getMDIViewPage()->saveSVG(); + if (vpPage) { + vpPage->show(); // make sure a mdi will be available + vpPage->getMDIViewPage()->saveSVG(); } else { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No Drawing View"), - QObject::tr("Open Drawing View before attempting export to SVG.")); + QMessageBox::warning(Gui::getMainWindow(), + QObject::tr("No Drawing Page"), + QObject::tr("FreeCAD could not find a page to export")); return; } } diff --git a/src/Mod/TechDraw/Gui/CommandDecorate.cpp b/src/Mod/TechDraw/Gui/CommandDecorate.cpp index f60c5bbd1d..ed19c81a26 100644 --- a/src/Mod/TechDraw/Gui/CommandDecorate.cpp +++ b/src/Mod/TechDraw/Gui/CommandDecorate.cpp @@ -48,11 +48,11 @@ #include #include "DrawGuiUtil.h" -#include "MDIViewPage.h" #include "TaskGeomHatch.h" #include "TaskHatch.h" #include "ViewProviderGeomHatch.h" #include "ViewProviderPage.h" +#include "MDIViewPage.h" using namespace TechDrawGui; @@ -312,35 +312,42 @@ Gui::Action *CmdTechDrawToggleFrame::createAction() void CmdTechDrawToggleFrame::activated(int iMsg) { Q_UNUSED(iMsg); + TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); + if (!page) { + return; + } - auto mvp = dynamic_cast(Gui::getMainWindow()->activeWindow()); - if (!mvp) { + Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); + Gui::ViewProvider* vp = activeGui->getViewProvider(page); + ViewProviderPage* vpPage = dynamic_cast(vp); + + if (!vpPage) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No TechDraw Page"), QObject::tr("Need a TechDraw Page for this command")); return; } - ViewProviderPage* vpp = mvp->getViewProviderPage(); - if (!vpp) { - return; - } - vpp->toggleFrameState(); + vpPage->toggleFrameState(); Gui::Action *action = this->getAction(); if (action) { - action->setChecked(!vpp->getFrameState(), true); + action->setChecked(!vpPage->getFrameState(), true); } } +//! true if the active tab is a TechDraw Page. +// There is an assumption here that you would only want to toggle the frames on a page when you are +// currently looking at that page bool CmdTechDrawToggleFrame::isActive() { - auto mvp = dynamic_cast(Gui::getMainWindow()->activeWindow()); + auto mvp = dynamic_cast(Gui::getMainWindow()->activeWindow()); if (!mvp) { return false; } ViewProviderPage* vpp = mvp->getViewProviderPage(); - Gui::Action *action = this->getAction(); + + Gui::Action* action = this->getAction(); if (action) { action->setChecked(vpp && !vpp->getFrameState(), true); } diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index c485671e49..bc82c62d6f 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -119,14 +119,11 @@ MDIViewPage::MDIViewPage(ViewProviderPage* pageVp, Gui::Document* doc, QWidget* connectDeletedObject = appDoc->signalDeletedObject.connect(bnd); //NOLINTEND - // m_pagePrinter = new PagePrinter(m_vpPage); - // m_pagePrinter->setOwner(this); } MDIViewPage::~MDIViewPage() { connectDeletedObject.disconnect(); - // delete m_pagePrinter; } void MDIViewPage::setScene(QGSPage* scene, QGVPage* viewWidget) @@ -134,9 +131,6 @@ void MDIViewPage::setScene(QGSPage* scene, QGVPage* viewWidget) m_scene = scene; setCentralWidget(viewWidget);//this makes viewWidget a Qt child of MDIViewPage QObject::connect(scene, &QGSPage::selectionChanged, this, &MDIViewPage::sceneSelectionChanged); - // if (m_pagePrinter) { - // m_pagePrinter->setScene(m_scene); - // } } void MDIViewPage::setDocumentObject(const std::string& name) @@ -420,7 +414,7 @@ void MDIViewPage::print(QPrinter* printer) PagePrinter::print(getViewProviderPage(), printer); } -//static routine to print all pages in a document +// static routine to print all pages in a document. Used by PrintAll command in Command.cpp void MDIViewPage::printAll(QPrinter* printer, App::Document* doc) { PagePrinter::printAll(printer, doc); diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp index 1594959986..107a0e1ec0 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ #include #include #include +#include #include "ViewProviderPage.h" #include "MDIViewPage.h"