From 69ff30e9c2f04b11b856da06f02502361e22f523 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Sat, 8 Apr 2023 01:23:24 -0300 Subject: [PATCH 1/2] Gui: Add function in WindowParameter class to connect slot to ParameterManager signal --- src/Gui/Window.cpp | 39 ++++++++++++++++++++++++++------------- src/Gui/Window.h | 19 ++++++++++++++++++- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/Gui/Window.cpp b/src/Gui/Window.cpp index 58a03bfdae..506f0dba6e 100644 --- a/src/Gui/Window.cpp +++ b/src/Gui/Window.cpp @@ -23,11 +23,13 @@ #include "PreCompiled.h" +#include #include -#include "Window.h" #include -#include + +#include "Window.h" + using namespace Gui; @@ -53,29 +55,40 @@ WindowParameter::WindowParameter(const char *name) WindowParameter::~WindowParameter() { + connParamChanged.disconnect(); } /** Sets the group of the window to \a name */ bool WindowParameter::setGroupName(const char* name) { - if (_handle.isValid()) - return false; // cannot change parameter group + // cannot change parameter group + if (_handle.isValid()) { + return false; + } - assert(name); - std::string prefGroup = name; - if (prefGroup.compare(0,15,"User parameter:") == 0 || - prefGroup.compare(0,17,"System parameter:") == 0) - _handle = App::GetApplication().GetParameterGroupByPath( name ); - else - _handle = getDefaultParameter()->GetGroup( name ); - return true; + assert(name); + + std::string prefGroup = name; + const auto& list = App::GetApplication().GetParameterSetList(); + + auto found = std::find_if(list.begin(), list.end(), [prefGroup](auto item) { + return boost::starts_with(prefGroup, item.first); + }); + + if (found != list.end()) { + _handle = App::GetApplication().GetParameterGroupByPath(name); + } + else { + _handle = getDefaultParameter()->GetGroup(name); + } + + return true; } void WindowParameter::OnChange(Base::Subject &rCaller, const char * sReason) { Q_UNUSED(rCaller); Q_UNUSED(sReason); - Base::Console().Log("Parameter has changed and window (%s) has not overridden this function!",_handle->GetGroupName()); } ParameterGrp::handle WindowParameter::getWindowParameter() diff --git a/src/Gui/Window.h b/src/Gui/Window.h index 8bc2960691..7375bb3f25 100644 --- a/src/Gui/Window.h +++ b/src/Gui/Window.h @@ -38,7 +38,6 @@ public: WindowParameter(const char *name); ~WindowParameter() override; - bool setGroupName( const char* name ); void OnChange(Base::Subject &rCaller, const char * sReason) override; /// get the parameters @@ -46,10 +45,28 @@ public: /// return the parameter group of this window ParameterGrp::handle getWindowParameter(); +protected: + bool setGroupName( const char* name ); + /// connect slot to ParameterManager signal + template + void setSlotParamChanged(S slot, T* obsPtr); + private: ParameterGrp::handle _handle; + boost::signals2::connection connParamChanged; }; + +template +inline void WindowParameter::setSlotParamChanged(S slot, T* obsPtr) +{ + namespace bp = std::placeholders; + if (_handle->Manager()) { + connParamChanged = _handle->Manager()->signalParamChanged.connect( + std::bind(slot, obsPtr, bp::_1, bp::_2, bp::_3, bp::_4)); + } +} + } // namespace Gui #endif // GUI_WINDOW_H From 08ac9b0bf516573525b5d6fc44bc343a365a076d Mon Sep 17 00:00:00 2001 From: marioalexis Date: Mon, 1 May 2023 12:58:26 -0300 Subject: [PATCH 2/2] Gui: Change indentation to four spaces in Gui/Window.* files --- src/Gui/Window.cpp | 20 ++++++++++---------- src/Gui/Window.h | 36 ++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Gui/Window.cpp b/src/Gui/Window.cpp index 506f0dba6e..dd19ce1f7b 100644 --- a/src/Gui/Window.cpp +++ b/src/Gui/Window.cpp @@ -44,13 +44,13 @@ using namespace Gui; WindowParameter::WindowParameter(const char *name) { - // not allowed to use a Window without a name, see the constructor of a DockWindow or a other QT Widget - assert(name); - //printf("Instanceate:%s\n",name); + // not allowed to use a Window without a name, see the constructor + // of a DockWindow or a other QT Widget + assert(name); - // if string is empty do not create group - if ( strcmp(name, "") != 0 ) - _handle = getDefaultParameter()->GetGroup( name ); + // if string is empty do not create group + if ( strcmp(name, "") != 0 ) + _handle = getDefaultParameter()->GetGroup( name ); } WindowParameter::~WindowParameter() @@ -87,13 +87,13 @@ bool WindowParameter::setGroupName(const char* name) void WindowParameter::OnChange(Base::Subject &rCaller, const char * sReason) { - Q_UNUSED(rCaller); - Q_UNUSED(sReason); + Q_UNUSED(rCaller); + Q_UNUSED(sReason); } ParameterGrp::handle WindowParameter::getWindowParameter() { - return _handle; + return _handle; } /** @@ -102,5 +102,5 @@ ParameterGrp::handle WindowParameter::getWindowParameter() */ ParameterGrp::handle WindowParameter::getDefaultParameter() { - return App::GetApplication().GetUserParameter().GetGroup("BaseApp")->GetGroup("Preferences"); + return App::GetApplication().GetUserParameter().GetGroup("BaseApp")->GetGroup("Preferences"); } diff --git a/src/Gui/Window.h b/src/Gui/Window.h index 7375bb3f25..179c7a88d8 100644 --- a/src/Gui/Window.h +++ b/src/Gui/Window.h @@ -35,36 +35,36 @@ namespace Gui { class GuiExport WindowParameter : public ParameterGrp::ObserverType { public: - WindowParameter(const char *name); - ~WindowParameter() override; + WindowParameter(const char *name); + ~WindowParameter() override; - void OnChange(Base::Subject &rCaller, const char * sReason) override; + void OnChange(Base::Subject &rCaller, const char * sReason) override; - /// get the parameters - static ParameterGrp::handle getDefaultParameter(); - /// return the parameter group of this window - ParameterGrp::handle getWindowParameter(); + /// get the parameters + static ParameterGrp::handle getDefaultParameter(); + /// return the parameter group of this window + ParameterGrp::handle getWindowParameter(); protected: - bool setGroupName( const char* name ); - /// connect slot to ParameterManager signal - template - void setSlotParamChanged(S slot, T* obsPtr); + bool setGroupName( const char* name ); + /// connect slot to ParameterManager signal + template + void setSlotParamChanged(S slot, T* obsPtr); private: - ParameterGrp::handle _handle; - boost::signals2::connection connParamChanged; + ParameterGrp::handle _handle; + boost::signals2::connection connParamChanged; }; template inline void WindowParameter::setSlotParamChanged(S slot, T* obsPtr) { - namespace bp = std::placeholders; - if (_handle->Manager()) { - connParamChanged = _handle->Manager()->signalParamChanged.connect( - std::bind(slot, obsPtr, bp::_1, bp::_2, bp::_3, bp::_4)); - } + namespace bp = std::placeholders; + if (_handle->Manager()) { + connParamChanged = _handle->Manager()->signalParamChanged.connect( + std::bind(slot, obsPtr, bp::_1, bp::_2, bp::_3, bp::_4)); + } } } // namespace Gui