This commit is contained in:
codeboss 2025-07-06 13:57:49 +08:00
parent 70b7466f70
commit 885065d38e
13 changed files with 92 additions and 19 deletions

View File

@ -30,3 +30,7 @@ ActionNodeConfiguration::ActionNodeConfiguration(QWidget* p)
_output_model->setHorizontalHeaderLabels(QStringList() _output_model->setHorizontalHeaderLabels(QStringList()
<< u8"变量名" << u8"变量类型" << u8"关联变量序列" << u8"关联转换器类型"); << u8"变量名" << u8"变量类型" << u8"关联变量序列" << u8"关联转换器类型");
} }
void ActionNodeConfiguration::setTarget(NodePresent* ins)
{
}

View File

@ -5,8 +5,9 @@
#include <QTabWidget> #include <QTabWidget>
#include <QTableView> #include <QTableView>
#include <qstandarditemmodel.h> #include <qstandarditemmodel.h>
#include "sims_world.h"
class ActionNodeConfiguration : public QFrame class ActionNodeConfiguration : public QFrame, public NodeConfiguration
{ {
private: private:
QComboBox *const _execute_select; QComboBox *const _execute_select;
@ -17,5 +18,7 @@ private:
public: public:
ActionNodeConfiguration(QWidget *p = nullptr); ActionNodeConfiguration(QWidget *p = nullptr);
void setTarget(NodePresent* ins) override;
}; };

View File

@ -33,13 +33,14 @@ BehaviorMapConfigurationPanel::BehaviorMapConfigurationPanel(QWidget* p)
}); });
} }
void BehaviorMapConfigurationPanel::setTarget(std::shared_ptr<LogicalNode> map_root, NodePresent* ins) #include <BehaviorEditor.h>
void BehaviorMapConfigurationPanel::setTarget(NodePresent* ins)
{ {
this->_bind_graph = ins; this->_bind_graph = ins;
this->_bind_node = std::dynamic_pointer_cast<BehaviorMapNode>(map_root); this->_bind_node = std::dynamic_pointer_cast<BehaviorMapNode>(ins->logicalBind());
_variable_model->removeRows(0, _variable_model->rowCount()); _variable_model->removeRows(0, _variable_model->rowCount());
_root_name->setText(map_root->typeName()); _root_name->setText(_bind_node->typeName());
for (auto key : _bind_node->inputVariableKeys()) { for (auto key : _bind_node->inputVariableKeys()) {
auto ins_prop = _bind_node->getVariable(key); auto ins_prop = _bind_node->getVariable(key);
QList<QStandardItem*> row; QList<QStandardItem*> row;

View File

@ -7,6 +7,7 @@
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QDialog> #include <QDialog>
#include <QComboBox> #include <QComboBox>
#include "sims_world.h"
class VariableAdd : public QDialog { class VariableAdd : public QDialog {
private: private:
@ -23,7 +24,7 @@ public:
}; };
class NodePresent; class NodePresent;
class BehaviorMapConfigurationPanel : public QFrame class BehaviorMapConfigurationPanel : public QFrame, public NodeConfiguration
{ {
Q_OBJECT Q_OBJECT
private: private:
@ -37,6 +38,6 @@ private:
public: public:
BehaviorMapConfigurationPanel(QWidget *p = nullptr); BehaviorMapConfigurationPanel(QWidget *p = nullptr);
void setTarget(std::shared_ptr<LogicalNode> map_root, NodePresent *ins); void setTarget(NodePresent *ins) override;
}; };

View File

@ -411,6 +411,16 @@ QPointF BehaviorsPresent::nodeRelayout(QHash<std::shared_ptr<LogicalNode>, std::
return origin_offset + QPointF(0, node_outline.height()); return origin_offset + QPointF(0, node_outline.height());
} }
#include <QMouseEvent>
void BehaviorsPresent::mousePressEvent(QMouseEvent* e)
{
QWidget::mousePressEvent(e);
auto item_ptr = itemAt(e->pos());
if (item_ptr && dynamic_cast<NodePresent*>(item_ptr))
emit this->clickedUponAtItem(dynamic_cast<NodePresent*>(item_ptr));
}
#include <QJsonDocument> #include <QJsonDocument>
void BehaviorEditor::open_behavior_map() void BehaviorEditor::open_behavior_map()
{ {
@ -455,6 +465,33 @@ void BehaviorEditor::new_behavior_map()
#include <QGridLayout> #include <QGridLayout>
#include <QComboBox> #include <QComboBox>
void BehaviorEditor::configurationPanel(NodePresent* n)
{
switch (n->logicalBind()->nodeKind())
{
case NodeKind::MAPNODE:
_stacked_panel->setCurrentIndex(4);
break;
case NodeKind::MODIFYNODE:
_stacked_panel->setCurrentIndex(1);
break;
case NodeKind::ACTIONNODE:
_stacked_panel->setCurrentIndex(2);
break;
case NodeKind::COMPARENODE:
_stacked_panel->setCurrentIndex(3);
break;
default:
_stacked_panel->setCurrentIndex(0);
break;
}
auto current_panel = dynamic_cast<NodeConfiguration*>(_stacked_panel->currentWidget());
if (current_panel)
current_panel->setTarget(n);
}
BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/) BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
: QMainWindow(parent), : QMainWindow(parent),
_type_view(new NodeTypesView(this)), _type_view(new NodeTypesView(this)),
@ -506,11 +543,13 @@ BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
// 下方堆叠面板 // 下方堆叠面板
_message_panel->addTab(_logs_present, u8"控制台"); _message_panel->addTab(_logs_present, u8"控制台");
_message_panel->addTab(_stacked_panel, u8"属性配置"); _message_panel->addTab(_stacked_panel, u8"属性配置");
_stacked_panel->addWidget(_modify_configuration); _stacked_panel->addWidget(_default_configuration);// 0
_stacked_panel->addWidget(_action_configuration); _stacked_panel->addWidget(_modify_configuration); // 1
_stacked_panel->addWidget(_compare_configuration); _stacked_panel->addWidget(_action_configuration); // 2
_stacked_panel->addWidget(_map_configuration); _stacked_panel->addWidget(_compare_configuration);// 3
_stacked_panel->addWidget(_default_configuration); _stacked_panel->addWidget(_map_configuration); // 4
connect(_logical_present, &BehaviorsPresent::clickedUponAtItem, this, &BehaviorEditor::configurationPanel);
} }
void BehaviorEditor::nodeTypesViewInit(QStandardItemModel* m) void BehaviorEditor::nodeTypesViewInit(QStandardItemModel* m)

View File

@ -77,6 +77,7 @@ public:
/// </summary> /// </summary>
class BehaviorsPresent : public QGraphicsView class BehaviorsPresent : public QGraphicsView
{ {
Q_OBJECT
private: private:
QGraphicsScene _bind_scene; QGraphicsScene _bind_scene;
@ -90,6 +91,9 @@ private:
/// </summary> /// </summary>
std::shared_ptr<BehaviorMapNode> _bind_maproot = nullptr; std::shared_ptr<BehaviorMapNode> _bind_maproot = nullptr;
signals:
void clickedUponAtItem(NodePresent *node);
public: public:
uint64_t _node_id_max = 0; uint64_t _node_id_max = 0;
BehaviorsPresent(QWidget* parent = nullptr); BehaviorsPresent(QWidget* parent = nullptr);
@ -128,6 +132,8 @@ public:
QPointF nodeRelayout(QHash<std::shared_ptr<LogicalNode>, std::pair<QSizeF, QSizeF>>& _outline_occupy, QPointF nodeRelayout(QHash<std::shared_ptr<LogicalNode>, std::pair<QSizeF, QSizeF>>& _outline_occupy,
std::shared_ptr<LogicalNode> ins, const QPointF& origin_offset); std::shared_ptr<LogicalNode> ins, const QPointF& origin_offset);
protected:
void mousePressEvent(QMouseEvent *e) override;
}; };
@ -183,7 +189,7 @@ private:
// ============================================== // ==============================================
QTextBrowser* const _logs_present; QTextBrowser* const _logs_present;
void configurationPanel(); void configurationPanel(NodePresent *n);
public: public:
BehaviorEditor(QWidget* parent = nullptr); BehaviorEditor(QWidget* parent = nullptr);

View File

@ -26,3 +26,7 @@ CompareNodeConfiguration::CompareNodeConfiguration(QWidget* p)
p_layout->setColumnStretch(1, 1); p_layout->setColumnStretch(1, 1);
p_layout->setRowStretch(4, 1); p_layout->setRowStretch(4, 1);
} }
void CompareNodeConfiguration::setTarget(NodePresent* ins)
{
}

View File

@ -1,8 +1,9 @@
#pragma once #pragma once
#include <QFrame> #include <QFrame>
#include <QComboBox> #include <QComboBox>
#include "sims_world.h"
class CompareNodeConfiguration : public QFrame class CompareNodeConfiguration : public QFrame, public NodeConfiguration
{ {
private: private:
QComboBox *const _type_select; QComboBox *const _type_select;
@ -13,5 +14,6 @@ private:
public: public:
CompareNodeConfiguration(QWidget *p = nullptr); CompareNodeConfiguration(QWidget *p = nullptr);
void setTarget(NodePresent* ins) override;
}; };

View File

@ -15,3 +15,7 @@ ModifyNodeConfiguration::ModifyNodeConfiguration(QWidget* p)
p_layout->setRowStretch(1, 1); p_layout->setRowStretch(1, 1);
p_layout->setColumnStretch(1, 1); p_layout->setColumnStretch(1, 1);
} }
void ModifyNodeConfiguration::setTarget(NodePresent* ins)
{
}

View File

@ -2,13 +2,16 @@
#include <qframe.h> #include <qframe.h>
#include <qlabel.h> #include <qlabel.h>
#include <qcombobox.h> #include <qcombobox.h>
#include "sims_world.h"
class ModifyNodeConfiguration : public QFrame class ModifyNodeConfiguration : public QFrame, public NodeConfiguration
{ {
private: private:
QComboBox *const _modify_types; QComboBox *const _modify_types;
public: public:
ModifyNodeConfiguration(QWidget *p = nullptr); ModifyNodeConfiguration(QWidget *p = nullptr);
void setTarget(NodePresent* ins) override;
}; };

View File

@ -125,7 +125,7 @@
<ClInclude Include="CompareNodeConfiguration.h" /> <ClInclude Include="CompareNodeConfiguration.h" />
<ClInclude Include="ModifyNodeConfiguration.h" /> <ClInclude Include="ModifyNodeConfiguration.h" />
<QtMoc Include="BehaviorConfigurationPanel.h" /> <QtMoc Include="BehaviorConfigurationPanel.h" />
<ClInclude Include="BehaviorEditor.h" /> <QtMoc Include="BehaviorEditor.h" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')"> <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">

View File

@ -78,11 +78,11 @@
<QtMoc Include="BehaviorConfigurationPanel.h"> <QtMoc Include="BehaviorConfigurationPanel.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</QtMoc> </QtMoc>
<QtMoc Include="BehaviorEditor.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BehaviorEditor.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CompareNodeConfiguration.h"> <ClInclude Include="CompareNodeConfiguration.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>

View File

@ -4,6 +4,12 @@
#include "ui_sims_world.h" #include "ui_sims_world.h"
#include <DeduceFramework.h> #include <DeduceFramework.h>
class NodePresent;
class NodeConfiguration {
public:
virtual void setTarget(NodePresent* ins) = 0;
};
class SimsWorld : public QMainWindow class SimsWorld : public QMainWindow
{ {
Q_OBJECT Q_OBJECT