From 69ff30e9c2f04b11b856da06f02502361e22f523 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Sat, 8 Apr 2023 01:23:24 -0300 Subject: [PATCH] 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