[TD]restore view frame toggle in context menu
#This is the commit message #2:
This commit is contained in:
committed by
Yorik van Havre
parent
7942247143
commit
9ea576d725
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user