Merge pull request #9215 from marioalexis84/gui-window_parameter

Gui: Add function in WindowParameter class to connect slot to ParameterManager signal
This commit is contained in:
Chris Hennes
2023-05-19 22:45:48 -05:00
committed by GitHub
2 changed files with 62 additions and 32 deletions

View File

@@ -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;
@@ -42,45 +44,56 @@ 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()
{
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());
Q_UNUSED(rCaller);
Q_UNUSED(sReason);
}
ParameterGrp::handle WindowParameter::getWindowParameter()
{
return _handle;
return _handle;
}
/**
@@ -89,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");
}

View File

@@ -35,21 +35,38 @@ namespace Gui {
class GuiExport WindowParameter : public ParameterGrp::ObserverType
{
public:
WindowParameter(const char *name);
~WindowParameter() override;
WindowParameter(const char *name);
~WindowParameter() override;
bool setGroupName( const char* name );
void OnChange(Base::Subject<const char*> &rCaller, const char * sReason) override;
void OnChange(Base::Subject<const char*> &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<typename S, typename T>
void setSlotParamChanged(S slot, T* obsPtr);
private:
ParameterGrp::handle _handle;
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