[TD]restore view frame toggle in context menu

#This is the commit message #2:
This commit is contained in:
wandererfan
2025-12-09 22:11:05 -05:00
committed by Yorik van Havre
parent c95ce2c06d
commit fa8e81f0d6
11 changed files with 188 additions and 31 deletions

View File

@@ -52,6 +52,7 @@
#include "ViewProviderPage.h"
#include "MDIViewPage.h"
#include "CommandHelpers.h"
#include "PreferencesGui.h"
using namespace TechDrawGui;
@@ -61,6 +62,72 @@ using DU = DrawUtil;
//internal functions
bool _checkSelectionHatch(Gui::Command* cmd);
//===========================================================================
// TechDraw_ToggleFrame
//===========================================================================
DEF_STD_CMD_A(CmdTechDrawToggleFrame)
CmdTechDrawToggleFrame::CmdTechDrawToggleFrame()
: Command("TechDraw_ToggleFrame")
{
sAppModule = "TechDraw";
sGroup = QT_TR_NOOP("TechDraw");
sMenuText = QT_TR_NOOP("Turn View Frames On/Off");
sToolTipText = QT_TR_NOOP("Turn View Frames On/Off");
sWhatsThis = "TechDraw_Toggle";
sStatusTip = sToolTipText;
sPixmap = "actions/TechDraw_ToggleFrame";
}
// This is a toggle. Each press flips the fame state.
// Gui::Action *CmdTechDrawToggleFrame::createAction()
// {
// Gui::Action *action = Gui::Command::createAction();
// action->setCheckable(true);
// action->setChecked(false);
// return action;
// }
void CmdTechDrawToggleFrame::activated(int iMsg)
{
Q_UNUSED(iMsg);
if (PreferencesGui::getViewFrameMode() != ViewFrameMode::Manual) {
return;
}
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();
// if (action) {
// action->setChecked(vpp->getFrameState());
// }
}
bool CmdTechDrawToggleFrame::isActive()
{
if (PreferencesGui::getViewFrameMode() != ViewFrameMode::Manual) {
return false;
}
auto mvp = dynamic_cast<MDIViewPage *>(Gui::getMainWindow()->activeWindow());
return mvp != nullptr;
}
//===========================================================================
// TechDraw_Hatch
//===========================================================================
@@ -297,6 +364,8 @@ void CreateTechDrawCommandsDecorate()
rcCmdMgr.addCommand(new CmdTechDrawHatch());
rcCmdMgr.addCommand(new CmdTechDrawGeometricHatch());
rcCmdMgr.addCommand(new CmdTechDrawImage());
rcCmdMgr.addCommand(new CmdTechDrawToggleFrame());
// rcCmdMgr.addCommand(new CmdTechDrawLeaderLine());
// rcCmdMgr.addCommand(new CmdTechDrawRichTextAnnotation());
}

View File

@@ -873,6 +873,11 @@ for ProjectionGroups</string>
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>Manual</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">

View File

@@ -71,6 +71,7 @@
#include "QGVPage.h"
#include "ViewProviderPage.h"
#include "PagePrinter.h"
#include "PreferencesGui.h"
using namespace TechDrawGui;
using namespace TechDraw;
@@ -89,6 +90,9 @@ MDIViewPage::MDIViewPage(ViewProviderPage* pageVp, Gui::Document* doc, QWidget*
m_toggleKeepUpdatedAction = new QAction(tr("Toggle &Keep Updated"), this);
connect(m_toggleKeepUpdatedAction, &QAction::triggered, this, &MDIViewPage::toggleKeepUpdated);
m_toggleFrameAction = new QAction(tr("Toggle &Frames"), this);
connect(m_toggleFrameAction, &QAction::triggered, this, &MDIViewPage::toggleFrame);
m_exportSVGAction = new QAction(tr("&Export SVG"), this);
connect(m_exportSVGAction, &QAction::triggered, this, qOverload<>(&MDIViewPage::saveSVG));
@@ -435,18 +439,23 @@ PyObject* MDIViewPage::getPyObject()
void MDIViewPage::contextMenuEvent(QContextMenuEvent* event)
{
// Base::Console().message("MDIVP::contextMenuEvent() - reason: %d\n", event->reason());
if (isContextualMenuEnabled) {
QMenu menu;
menu.addAction(m_toggleFrameAction);
menu.addAction(m_toggleKeepUpdatedAction);
menu.addAction(m_exportSVGAction);
menu.addAction(m_exportDXFAction);
menu.addAction(m_exportPDFAction);
menu.addAction(m_printAllAction);
if (PreferencesGui::getViewFrameMode() != ViewFrameMode::Manual) {
m_toggleFrameAction->setEnabled(false);
}
menu.exec(event->globalPos());
}
}
void MDIViewPage::toggleFrame() { m_vpPage->toggleFrameState(); }
void MDIViewPage::toggleKeepUpdated()
{
bool state = m_vpPage->getDrawPage()->KeepUpdated.getValue();

View File

@@ -116,6 +116,7 @@ public Q_SLOTS:
void saveSVG();
void saveDXF();
void savePDF();
void toggleFrame();
void toggleKeepUpdated();
void sceneSelectionChanged();
void printAll();
@@ -138,6 +139,7 @@ private:
using Connection = boost::signals2::connection;
Connection connectDeletedObject;
QAction *m_toggleFrameAction;
QAction *m_toggleKeepUpdatedAction;
QAction *m_exportSVGAction;
QAction *m_exportDXFAction;

View File

@@ -304,3 +304,10 @@ int PreferencesGui::get3dMarkerSize()
return hGrp->GetInt("MarkerSize", 9L);
}
ViewFrameMode PreferencesGui::getViewFrameMode()
{
int temp = Preferences::getPreferenceGroup("View")->GetInt("ViewFrameMode", 0);
return static_cast<ViewFrameMode>(temp);
}

View File

@@ -27,6 +27,8 @@
#include <QColor>
#include "QGIView.h"
class QColor;
class QString;
@@ -95,6 +97,10 @@ static QColor templateClickBoxColor();
static int get3dMarkerSize();
static ViewFrameMode getViewFrameMode();
static void setViewFrameMode(ViewFrameMode newMode);
};
} //end namespace TechDrawGui

View File

@@ -1069,34 +1069,7 @@ void QGIView::makeMark(QPointF pos, QColor color)
void QGIView::updateFrameVisibility()
{
// Get the preference group
auto hGrp = App::GetApplication().GetUserParameter()
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/TechDraw/View");
// 0 = Auto (Default), 1 = Always On, 2 = Always Off
int frameMode = hGrp->GetInt("ViewFrameMode", 0);
bool shouldShow = false;
if (isSelected()) {
shouldShow = true;
}
else {
if (frameMode == 1) {
// Always On
shouldShow = true;
}
else if (frameMode == 2) {
// Always Off
shouldShow = false;
}
else {
// Auto (Default)
shouldShow = m_isHovered;
}
}
if (shouldShow) {
if (shouldShowFrame()) {
m_border->show();
m_label->show();
if (m_lock && getViewObject()) {
@@ -1105,10 +1078,47 @@ void QGIView::updateFrameVisibility()
} else {
m_border->hide();
m_label->hide();
if (m_lock) m_lock->hide();
if (m_lock) {
m_lock->hide();
}
}
}
bool QGIView::shouldShowFrame() const
{
if (isSelected()) {
return true;
}
ViewFrameMode frameMode = PreferencesGui::getViewFrameMode();
switch(frameMode) {
case ViewFrameMode::Manual:
return shouldShowFromViewProvider();
case ViewFrameMode::AlwaysOn:
return true;
case ViewFrameMode::AlwaysOff:
return false;
break;
default:
return m_isHovered;
};
}
bool QGIView::shouldShowFromViewProvider() const
{
DrawView* feature = getViewObject();
if (!feature) {
return false;
}
ViewProviderPage* vpPage = getViewProviderPage(feature);
if (!vpPage) {
return false;
}
return vpPage->getFrameState();
}
//! Retrieves objects of type T with given indexes
template <typename T>
std::vector<T> QGIView::getObjects(std::vector<int> indexes)

View File

@@ -76,6 +76,15 @@ class QGCustomImage;
class QGTracker;
class QGIVertex;
enum class ViewFrameMode {
Auto,
AlwaysOn,
AlwaysOff,
Manual
};
class TechDrawGuiExport QGIView : public QObject, public QGraphicsItemGroup
{
Q_OBJECT
@@ -191,6 +200,8 @@ protected:
bool m_isHovered;
void updateFrameVisibility();
bool shouldShowFromViewProvider() const;
bool shouldShowFrame() const;
Base::Reference<ParameterGrp> getParmGroupCol();

View File

@@ -72,7 +72,8 @@ PROPERTY_SOURCE(TechDrawGui::ViewProviderPage, Gui::ViewProviderDocumentObject)
// Construction/Destruction
ViewProviderPage::ViewProviderPage()
: m_mdiView(nullptr), m_graphicsView(nullptr), m_graphicsScene(nullptr)
: m_mdiView(nullptr), m_graphicsView(nullptr), m_graphicsScene(nullptr),
m_frameToggle(false)
{
initExtension(this);
@@ -80,6 +81,12 @@ ViewProviderPage::ViewProviderPage()
static const char* group = "Grid";
// NOLINTBEGIN
// ShowFrames is no longer used
ADD_PROPERTY_TYPE(ShowFrames, (false), group, App::Prop_None,
"Show or hide view frames and labels on this page");
ShowFrames.setStatus(App::Property::Hidden, true);
ShowFrames.setStatus(App::Property::ReadOnly, true);
ADD_PROPERTY_TYPE(ShowGrid, (PreferencesGui::showGrid()), group, App::Prop_None,
"Show or hide a grid on this page");
ADD_PROPERTY_TYPE(GridSpacing, (PreferencesGui::gridSpacing()), group,
@@ -98,6 +105,7 @@ ViewProviderPage::ViewProviderPage()
//somewhere???? QTBUG-18021???
}
ViewProviderPage::~ViewProviderPage()
{
removeMDIView();//if the MDIViewPage is still in MainWindow, remove it.
@@ -131,6 +139,9 @@ void ViewProviderPage::onChanged(const App::Property* prop)
}
else if (prop == &Visibility) {
//Visibility changes are handled in VPDO::onChanged -> show() or hide()
} else if ( prop == &ShowFrames) {
// I don't think we do anything here because we don't want to trigger a cascade?
return;
}
Gui::ViewProviderDocumentObject::onChanged(prop);
@@ -431,6 +442,24 @@ std::vector<App::DocumentObject*> ViewProviderPage::claimChildren() const
bool ViewProviderPage::isShow() const { return Visibility.getValue(); }
bool ViewProviderPage::getFrameState() const { return m_frameToggle; }
void ViewProviderPage::setFrameState(bool state) { m_frameToggle = state; }
void ViewProviderPage::toggleFrameState()
{
if (PreferencesGui::getViewFrameMode() != ViewFrameMode::Manual) {
return;
}
if (m_graphicsScene) {
setFrameState(!getFrameState());
m_graphicsScene->refreshViews();
setTemplateMarkers(getFrameState());
}
}
void ViewProviderPage::setTemplateMarkers(bool state) const
{
App::DocumentObject* templateFeat = nullptr;

View File

@@ -122,6 +122,10 @@ public:
Gui::MDIView* getMDIView() const override;
bool getFrameState() const;
void setFrameState(bool state);
void toggleFrameState();
void setTemplateMarkers(bool state) const;
bool canDelete(App::DocumentObject* obj) const override;
@@ -148,6 +152,8 @@ private:
std::string m_pageName;
QPointer<QGVPage> m_graphicsView;
QGSPage* m_graphicsScene;
bool m_frameToggle{false}; // replacement for ShowFrame property to avoid marking document changed
};
}// namespace TechDrawGui

View File

@@ -222,6 +222,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
*views << "Separator";
*views << "TechDraw_ShareView";
*views << "Separator";
*views << "TechDraw_ToggleFrame";
*views << "Separator";
*views << "TechDraw_ProjectShape";
@@ -380,6 +381,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
Gui::ToolBarItem* decor = new Gui::ToolBarItem(root);
decor->setCommand("TechDraw Decoration");
*decor << "TechDraw_ToggleFrame";
*decor << "TechDraw_Hatch";
*decor << "TechDraw_GeometricHatch";
@@ -476,6 +478,7 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const
Gui::ToolBarItem* decor = new Gui::ToolBarItem(root);
decor->setCommand("TechDraw Decoration");
*decor << "TechDraw_ToggleFrame";
*decor << "TechDraw_Hatch";
*decor << "TechDraw_GeometricHatch";