From bc9897caf8140514e1f44d6673339803f3e964b0 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 7 Oct 2022 22:06:01 +0200 Subject: [PATCH] Gui: depending on parameter settings open a transaction when changing visibility or selectability --- src/Gui/CommandView.cpp | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 23ade2d98d6a..c98678f9a687 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -86,6 +86,37 @@ using namespace Gui; using Gui::Dialog::DlgSettingsImageImp; namespace bp = boost::placeholders; +namespace { +// A helper class to open a transaction when changing properties of view providers. +// It uses the same parameter key as the PropertyView to control the behaviour. +class TransactionView { + Gui::Document* document; + +public: + static bool getDefault() { + auto hGrp = App::GetApplication().GetParameterGroupByPath( + "User parameter:BaseApp/Preferences/PropertyView"); + return hGrp->GetBool("AutoTransactionView", false); + } + TransactionView(Gui::Document* doc, const char* name, bool enable = getDefault()) + : document(doc) + { + if (document && enable) { + document->openCommand(name); + } + else { + document = nullptr; + } + } + + ~TransactionView() { + if (document) { + document->commitCommand(); + } + } +}; +} + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DEF_STD_CMD_AC(StdOrthographicCamera) @@ -832,6 +863,7 @@ StdCmdToggleVisibility::StdCmdToggleVisibility() void StdCmdToggleVisibility::activated(int iMsg) { Q_UNUSED(iMsg); + TransactionView transaction(getActiveGuiDocument(), QT_TRANSLATE_NOOP("Command", "Toggle visibility")); Selection().setVisible(SelectionSingleton::VisToggle); } @@ -867,6 +899,12 @@ void StdCmdToggleSelectability::activated(int iMsg) std::vector sel = Selection().getObjectsOfType (App::DocumentObject::getClassTypeId(), doc->getName()); + if (sel.empty()) { + continue; + } + + TransactionView transaction(pcDoc, QT_TRANSLATE_NOOP("Command", "Toggle selectability")); + for (const auto & ft : sel) { ViewProvider *pr = pcDoc->getViewProviderByName(ft->getNameInDocument()); if (pr && pr->isDerivedFrom(ViewProviderGeometryObject::getClassTypeId())){ @@ -3565,7 +3603,7 @@ class StdCmdTreeViewActions : public GroupCommand addCommand(new StdTreeDrag(),!cmds.empty()); addCommand(new StdTreeSelection(),!cmds.empty()); - }; + } const char* className() const override {return "StdCmdTreeViewActions";} };