From ff1b9dde4191f4d0693ea3617fdeeb69a1acca21 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 9 Oct 2016 18:32:18 +0200 Subject: [PATCH] issue #0002687: zoomin/out during transform --- src/Gui/Command.cpp | 17 ++++++++++++++--- src/Gui/Command.h | 3 +++ src/Gui/SoFCCSysDragger.cpp | 8 ++++---- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index dedcc34a5..eeda29908 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -217,6 +217,7 @@ Command::Command(const char* name) sAppModule = "FreeCAD"; sGroup = QT_TR_NOOP("Standard"); eType = AlterDoc | Alter3DView | AlterSelection; + bEnabled = true; } Command::~Command() @@ -331,14 +332,15 @@ void Command::invoke(int i) void Command::testActive(void) { - if (!_pcAction) return; + if (!_pcAction) + return; - if (_blockCmd) { + if (_blockCmd || !bEnabled) { _pcAction->setEnabled(false); return; } - if (!(eType & ForEdit)) // special case for commands which are only in some edit modes active + if (!(eType & ForEdit)) { // special case for commands which are only in some edit modes active if ((!Gui::Control().isAllowedAlterDocument() && eType & AlterDoc) || (!Gui::Control().isAllowedAlterView() && eType & Alter3DView) || @@ -346,11 +348,20 @@ void Command::testActive(void) _pcAction->setEnabled(false); return; } + } bool bActive = isActive(); _pcAction->setEnabled(bActive); } +void Command::setEnabled(bool on) +{ + if (_pcAction) { + bEnabled = on; + _pcAction->setEnabled(on); + } +} + //-------------------------------------------------------------------------- // Helper methods //-------------------------------------------------------------------------- diff --git a/src/Gui/Command.h b/src/Gui/Command.h index 5a6daa810..307656026 100644 --- a/src/Gui/Command.h +++ b/src/Gui/Command.h @@ -177,6 +177,8 @@ public: friend class CommandManager; /// Get somtile called to check the state of the command void testActive(void); + /// Enables or disables the command + void setEnabled(bool); /// get called by the QAction void invoke (int); /// adds this command to arbitrary widgets @@ -319,6 +321,7 @@ protected: int eType; //@} private: + bool bEnabled; static bool _blockCmd; }; diff --git a/src/Gui/SoFCCSysDragger.cpp b/src/Gui/SoFCCSysDragger.cpp index 3b921456c..ca70e8baa 100644 --- a/src/Gui/SoFCCSysDragger.cpp +++ b/src/Gui/SoFCCSysDragger.cpp @@ -811,14 +811,14 @@ SoFCCSysDragger::SoFCCSysDragger() this->setUpConnections(TRUE, TRUE); //we can't have user switching camera types while dragger is shown. - Gui::Application::Instance->commandManager().getCommandByName("Std_OrthographicCamera")->blockCommand(true); - Gui::Application::Instance->commandManager().getCommandByName("Std_PerspectiveCamera")->blockCommand(true); + Gui::Application::Instance->commandManager().getCommandByName("Std_OrthographicCamera")->setEnabled(false); + Gui::Application::Instance->commandManager().getCommandByName("Std_PerspectiveCamera")->setEnabled(false); } SoFCCSysDragger::~SoFCCSysDragger() { - Gui::Application::Instance->commandManager().getCommandByName("Std_OrthographicCamera")->blockCommand(false); - Gui::Application::Instance->commandManager().getCommandByName("Std_PerspectiveCamera")->blockCommand(false); + Gui::Application::Instance->commandManager().getCommandByName("Std_OrthographicCamera")->setEnabled(true); + Gui::Application::Instance->commandManager().getCommandByName("Std_PerspectiveCamera")->setEnabled(true); }