[TechDraw] Checkable menu item for Turn View Frames On/Off - segfault fix

This commit is contained in:
pavltom
2023-10-31 15:31:47 +01:00
committed by WandererFan
parent 3356b09410
commit 62e3b27e62

View File

@@ -47,6 +47,7 @@
#include <Mod/TechDraw/App/DrawViewPart.h>
#include "DrawGuiUtil.h"
#include "MDIViewPage.h"
#include "TaskGeomHatch.h"
#include "TaskHatch.h"
#include "ViewProviderGeomHatch.h"
@@ -310,21 +311,18 @@ Gui::Action *CmdTechDrawToggleFrame::createAction()
void CmdTechDrawToggleFrame::activated(int iMsg)
{
Q_UNUSED(iMsg);
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
return;
}
std::string PageName = page->getNameInDocument();
Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument());
Gui::ViewProvider* vp = activeGui->getViewProvider(page);
ViewProviderPage* vpp = dynamic_cast<ViewProviderPage*>(vp);
if (!vpp) {
auto mvp = dynamic_cast<MDIViewPage *>(Gui::getMainWindow()->activeWindow());
if (!mvp) {
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();
Gui::Action *action = this->getAction();
@@ -335,22 +333,15 @@ void CmdTechDrawToggleFrame::activated(int iMsg)
bool CmdTechDrawToggleFrame::isActive()
{
TechDraw::DrawPage* page = DrawGuiUtil::findPage(this);
if (!page) {
auto mvp = dynamic_cast<MDIViewPage *>(Gui::getMainWindow()->activeWindow());
if (!mvp) {
return false;
}
if (!DrawGuiUtil::needView(this, false)) {
return false;
}
Gui::Document *activeGui = Gui::Application::Instance->getDocument(page->getDocument());
ViewProviderPage *vpp = dynamic_cast<ViewProviderPage *>(activeGui->getViewProvider(page));
if (vpp) {
Gui::Action *action = this->getAction();
if (action) {
action->setChecked(!vpp->getFrameState(), true);
}
ViewProviderPage* vpp = mvp->getViewProviderPage();
Gui::Action *action = this->getAction();
if (action) {
action->setChecked(vpp && !vpp->getFrameState(), true);
}
return true;