Gui: Add function in WindowParameter class to connect slot to ParameterManager signal
This commit is contained in:
@@ -23,11 +23,13 @@
|
||||
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <qglobal.h>
|
||||
#include "Window.h"
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <Base/Console.h>
|
||||
|
||||
#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<const char*> &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()
|
||||
|
||||
@@ -38,7 +38,6 @@ public:
|
||||
WindowParameter(const char *name);
|
||||
~WindowParameter() override;
|
||||
|
||||
bool setGroupName( const char* name );
|
||||
void OnChange(Base::Subject<const char*> &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<typename S, typename T>
|
||||
void setSlotParamChanged(S slot, T* obsPtr);
|
||||
|
||||
private:
|
||||
ParameterGrp::handle _handle;
|
||||
boost::signals2::connection connParamChanged;
|
||||
};
|
||||
|
||||
|
||||
template<typename S, typename T>
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user