Skip to content
Snippets Groups Projects
Commit e0462adc authored by Christoph Pohl's avatar Christoph Pohl
Browse files

Fix AronComponentConfigExample

parent c09bd60c
No related branches found
No related tags found
No related merge requests found
...@@ -28,43 +28,87 @@ ...@@ -28,43 +28,87 @@
namespace armarx namespace armarx
{ {
void AronComponentConfigExample::onInitComponent() void
AronComponentConfigExample::onInitComponent()
{ {
} }
void AronComponentConfigExample::onConnectComponent() void
AronComponentConfigExample::onConnectComponent()
{ {
remote_gui_plugin_->createOrUpdateTab(aron_component_config_plugin_->buildRemoteGui("Config"),
[this](armarx::RemoteGui::TabProxy& prx)
{
prx.receiveUpdates();
std::lock_guard lock(write_mutex);
if (aron_component_config_plugin_->updateRemoteGui(prx))
{
remote_gui_plugin_->createOrUpdateTab("",
aron_component_config_plugin_
->buildRemoteGui(
"Config"));
}
prx.sendUpdates();
});
periodicTask = new SimplePeriodicTask<>([&, this]
{
std::lock_guard lock(write_mutex);
ARMARX_TRACE;
auto& config =
aron_component_config_plugin_->config_.getWriteBuffer();
config.intMember--;
aron_component_config_plugin_->config_.commitWrite();
}, 1000);
periodicTask->start();
} }
void AronComponentConfigExample::onDisconnectComponent() void
AronComponentConfigExample::onDisconnectComponent()
{ {
} }
void AronComponentConfigExample::onExitComponent() void
AronComponentConfigExample::onExitComponent()
{ {
} }
armarx::PropertyDefinitionsPtr AronComponentConfigExample::createPropertyDefinitions() armarx::PropertyDefinitionsPtr
AronComponentConfigExample::createPropertyDefinitions()
{ {
armarx::PropertyDefinitionsPtr defs = new AronComponentConfigExamplePropertyDefinitions(getConfigIdentifier()); armarx::PropertyDefinitionsPtr defs = new AronComponentConfigExamplePropertyDefinitions(getConfigIdentifier());
auto& config = getConfigWriteBuffer(); auto& config = aron_component_config_plugin_->config_.getWriteBuffer();
config.boolMember=true; config.boolMember = true;
config.floatMember=100.0f; config.floatMember = 100.0f;
config.intMember=1000; config.intMember = 1000;
config.stringMember="initial"; config.stringMember = "initial";
config.longMember=0; config.longMember = 0;
config.subMember.subsubMember.intListMember.insert(config.subMember.subsubMember.intListMember.end(), { 1, 2, 3, 4, 5, 6 }); config.subMember
config.subMember.subsubMember.stringListMember.insert(config.subMember.subsubMember.stringListMember.end(), {"a", "b", "c", "d", "e"}); .subsubMember
commitConfigWriteBuffer(); .intListMember
.insert(config.subMember.subsubMember.intListMember.end(), {1, 2, 3, 4, 5, 6});
config.subMember
.subsubMember
.stringListMember
.insert(config.subMember.subsubMember.stringListMember.end(), {"a", "b", "c", "d", "e"});
aron_component_config_plugin_->config_.commitWrite();
return defs; return defs;
} }
std::string AronComponentConfigExample::getDefaultName() const std::string
AronComponentConfigExample::getDefaultName() const
{ {
return "ComponentConfigTest"; return "ComponentConfigTest";
} }
AronComponentConfigExample::AronComponentConfigExample()
{
addPlugin(remote_gui_plugin_, "");
addPlugin(aron_component_config_plugin_, "");
}
AronComponentConfigExamplePropertyDefinitions::AronComponentConfigExamplePropertyDefinitions(std::string prefix) : AronComponentConfigExamplePropertyDefinitions::AronComponentConfigExamplePropertyDefinitions(std::string prefix) :
armarx::ComponentPropertyDefinitions(std::move(prefix)) {} armarx::ComponentPropertyDefinitions(std::move(prefix))
{
}
} }
\ No newline at end of file
...@@ -37,7 +37,6 @@ namespace armarx ...@@ -37,7 +37,6 @@ namespace armarx
}; };
class AronComponentConfigExample : class AronComponentConfigExample :
virtual public armarx::AronComponentConfigPluginUser<armarx::component_config::aron::TestConfig>,
virtual public armarx::Component virtual public armarx::Component
{ {
public: public:
...@@ -58,5 +57,13 @@ namespace armarx ...@@ -58,5 +57,13 @@ namespace armarx
/// @see PropertyUser::createPropertyDefinitions() /// @see PropertyUser::createPropertyDefinitions()
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override; armarx::PropertyDefinitionsPtr createPropertyDefinitions() override;
AronComponentConfigExample();
private:
SimplePeriodicTask<>::pointer_type periodicTask;
std::experimental::observer_ptr<plugins::RemoteGuiComponentPlugin> remote_gui_plugin_{nullptr};
std::experimental::observer_ptr<plugins::AronComponentConfigPlugin<armarx::component_config::aron::TestConfig>>
aron_component_config_plugin_{nullptr};
std::mutex write_mutex;
}; };
} }
\ No newline at end of file
...@@ -39,6 +39,16 @@ ...@@ -39,6 +39,16 @@
<int/> <int/>
</List> </List>
</ObjectChild> </ObjectChild>
<ObjectChild key='stringDictMember'>
<Dict>
<string/>
</Dict>
</ObjectChild>
<ObjectChild key='intDictMember'>
<Dict>
<int/>
</Dict>
</ObjectChild>
</Object> </Object>
<Object name='armarx::component_config::aron::SubConfig'> <Object name='armarx::component_config::aron::SubConfig'>
......
...@@ -86,10 +86,9 @@ namespace armarx::plugins ...@@ -86,10 +86,9 @@ namespace armarx::plugins
return RemoteGui::makeConfigGui(name, config_.getUpToDateReadBuffer()); return RemoteGui::makeConfigGui(name, config_.getUpToDateReadBuffer());
} }
bool updateRemoteGui(armarx::RemoteGui::TabProxy& prx) bool updateRemoteGui(armarx::RemoteGui::TabProxy& prx) // prx has to be already updated; otherwise nothing will change
{ {
ARMARX_TRACE; ARMARX_TRACE;
prx.receiveUpdates();
armarx::aron::component_config::GetValueFromMapVisitor vis(&prx); armarx::aron::component_config::GetValueFromMapVisitor vis(&prx);
auto& cfg = config_.getWriteBuffer(); auto& cfg = config_.getWriteBuffer();
auto data = std::static_pointer_cast<armarx::aron::data::Variant>(cfg.toAron()); auto data = std::static_pointer_cast<armarx::aron::data::Variant>(cfg.toAron());
...@@ -107,56 +106,5 @@ namespace armarx::plugins ...@@ -107,56 +106,5 @@ namespace armarx::plugins
armarx::WriteBufferedTripleBuffer<AronStructT> config_; armarx::WriteBufferedTripleBuffer<AronStructT> config_;
};
}
namespace armarx
{
template <typename AronStructT>
requires plugins::isAronGenerated<AronStructT>
class AronComponentConfigPluginUser : virtual public ManagedIceObject
{
public:
void onConnectComponent() override
{
remote_gui_plugin_->createOrUpdateTab(aron_component_config_plugin_->buildRemoteGui("Config"),
[this](armarx::RemoteGui::TabProxy& prx)
{
if (aron_component_config_plugin_->updateRemoteGui(prx))
{
remote_gui_plugin_->createOrUpdateTab("",
aron_component_config_plugin_
->buildRemoteGui(
"Config"));
}
});
}
AronComponentConfigPluginUser()
{
addPlugin(remote_gui_plugin_, "");
addPlugin(aron_component_config_plugin_, "");
}
AronStructT& getConfigWriteBuffer()
{
return aron_component_config_plugin_->config_.getWriteBuffer();
}
void commitConfigWriteBuffer()
{
aron_component_config_plugin_->config_.commitWrite();
}
const AronStructT& getUpToDateConfigReadBuffer() const
{
return aron_component_config_plugin_->config_.getUpToDateReadBuffer();
}
private:
std::experimental::observer_ptr<plugins::RemoteGuiComponentPlugin> remote_gui_plugin_{nullptr};
std::experimental::observer_ptr<plugins::AronComponentConfigPlugin<AronStructT>>
aron_component_config_plugin_{nullptr};
}; };
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment