ActionNode的Delegate配置

This commit is contained in:
codeboss 2025-07-12 03:15:53 +08:00
parent 20ae77bc20
commit c47d8e5c77
10 changed files with 136 additions and 8 deletions

View File

@ -50,8 +50,11 @@ QString BehaviorPerformPlugin::name() const
}
#include <MessageLoader.h>
#include "exec_delegate.h"
MapKernel::MapKernel(std::shared_ptr<MessageLoader> ins)
:_bind_loader(ins) {
auto output = std::make_shared<ConsolePresent>();
this->_execute_types[output->typeName()] = output;
}
QList<QString> MapKernel::compareTypes() const

View File

@ -37,7 +37,7 @@
</ImportGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'" Label="QtSettings">
<QtInstall>5.12.11_msvc2017_64</QtInstall>
<QtModules>core;xml;gui;qml;concurrent</QtModules>
<QtModules>core;xml;network;gui;qml;concurrent</QtModules>
<QtBuildConfig>debug</QtBuildConfig>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'" Label="QtSettings">
@ -105,6 +105,7 @@
<ClCompile Include="componentbasic.cpp" />
<ClCompile Include="DeduceFramework.cpp" />
<ClCompile Include="ComponentsInfoPull.cpp" />
<ClCompile Include="exec_delegate.cpp" />
<ClCompile Include="RouteManage.cpp" />
<ClCompile Include="SurfaceMotion.cpp" />
<ClCompile Include="VisibleCube.cpp" />
@ -113,6 +114,7 @@
<ClInclude Include="componentbasic.h" />
<QtMoc Include="DeduceFramework.h" />
<ClInclude Include="ComponentsInfoPull.h" />
<ClInclude Include="exec_delegate.h" />
<ClInclude Include="RouteManage.h" />
<ClInclude Include="SurfaceMotion.h" />
<ClInclude Include="VisibleCube.h" />

View File

@ -41,6 +41,9 @@
<ClInclude Include="SurfaceMotion.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="exec_delegate.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="VisibleCube.cpp">
@ -64,6 +67,9 @@
<ClCompile Include="BehaviorPerform.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="exec_delegate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="DeduceFramework.h">

View File

@ -0,0 +1,57 @@
#include "exec_delegate.h"
ConsolePresent::ConsolePresent()
: _write_port(new QUdpSocket()){
_input_list[u8"Êä³ö±äÁ¿"] = std::shared_ptr<GeneralData>();
}
ConsolePresent::~ConsolePresent()
{
delete _write_port;
}
QString ConsolePresent::typeName() const
{
return NAME(ConsolePresent);
}
QHash<QString, std::shared_ptr<TopicData>> ConsolePresent::inputList() const
{
return _input_list;
}
QHash<QString, std::shared_ptr<TopicData>> ConsolePresent::outputList() const
{
return QHash<QString, std::shared_ptr<TopicData>>();
}
void ConsolePresent::reset()
{
}
#include <QJsonDocument>
#include <QJsonObject>
ExecuteResult ConsolePresent::execute()
{
QJsonObject obj;
_input_list[u8"Êä³ö±äÁ¿"]->saveTo(obj);
QJsonDocument doc(obj);
auto cnt = _write_port->writeDatagram(doc.toJson(), QHostAddress::LocalHost, 6000);
if(cnt < 0)
return ExecuteResult::FAILURE;
return ExecuteResult::SUCCESS;
}
std::shared_ptr<Serializable> ConsolePresent::newDefault() const
{
return std::make_shared<ConsolePresent>();
}
void ConsolePresent::recoveryFrom(const QJsonObject& obj)
{
}
void ConsolePresent::saveTo(QJsonObject& obj) const
{
}

View File

@ -0,0 +1,30 @@
#pragma once
#include "BehaviorPerform.h"
#include <QUdpSocket>
class ConsolePresent : public ExecuteDelegate
{
private:
QHash<QString, std::shared_ptr<TopicData>> _input_list;
QUdpSocket *const _write_port;
public:
ConsolePresent();
virtual ~ConsolePresent();
QString typeName() const override;
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
void reset() override;
ExecuteResult execute() override;
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};

View File

@ -1,8 +1,10 @@
#include "ActionNodeConfiguration.h"
#include <QGridLayout>
#include "BehaviorEditor.h"
ActionNodeConfiguration::ActionNodeConfiguration(QWidget* p)
:QFrame(p),
_current_present(nullptr),
_execute_select(new QComboBox(this)),
_vars_configuration(new VariablesConfigurationPanel(this))
{
@ -14,10 +16,29 @@ ActionNodeConfiguration::ActionNodeConfiguration(QWidget* p)
p_layout->addWidget(_vars_configuration, 1, 0, 3, 5);
p_layout->setColumnStretch(1, 1);
connect(this->_execute_select, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int v){
if(v < 1 || !_current_node) return;
auto inst = this->_current_node->getKernal()->getExecute(this->_execute_select->currentText());
auto new_inst = std::dynamic_pointer_cast<ExecuteDelegate>(inst->newDefault());
_current_node->bindDelegate(new_inst);
_current_present->itemUpdate();
});
}
#include "BehaviorEditor.h"
void ActionNodeConfiguration::setTarget(NodePresent* ins)
{
this->_current_present = ins;
auto logic_node = ins->logicalBind();
this->_current_node = std::dynamic_pointer_cast<ExecuteNode>(logic_node);
auto kernel = logic_node->getKernal();
this->_execute_select->clear();
auto types = kernel->executeTypes();
types.prepend(u8"δѡ¶¨");
this->_execute_select->addItems(types);
this->_execute_select->setCurrentText(_current_node->delegateName());
this->_vars_configuration->bindNode(ins->logicalBind());
}

View File

@ -14,11 +14,14 @@
class ActionNodeConfiguration : public QFrame, public NodeConfiguration
{
private:
QComboBox *const _execute_select;
VariablesConfigurationPanel *const _vars_configuration;
QComboBox* const _execute_select;
NodePresent * _current_present;
std::shared_ptr<ExecuteNode> _current_node;
VariablesConfigurationPanel* const _vars_configuration;
public:
ActionNodeConfiguration(QWidget *p = nullptr);
ActionNodeConfiguration(QWidget* p = nullptr);
void setTarget(NodePresent* ins) override;
};

View File

@ -29,6 +29,11 @@ std::shared_ptr<LogicalNode> NodePresent::logicalBind() const
return _node_bind;
}
void NodePresent::itemUpdate()
{
this->prepareGeometryChange();
}
QRectF NodePresent::contentMeasure() const
{
auto metrics = this->_widget_p->fontMetrics();

View File

@ -30,6 +30,7 @@ public:
/// </summary>
/// <returns></returns>
std::shared_ptr<LogicalNode> logicalBind() const;
void itemUpdate();
QRectF contentMeasure() const;
AcceptType testAccept(const QPointF& local_pos, const QString& kind_str) const;

View File

@ -89,14 +89,14 @@
<ClInclude Include="CompareNodeConfiguration.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ActionNodeConfiguration.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ModifyNodeConfiguration.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="VariablesConfiguration.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ActionNodeConfiguration.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>