Compare commits

...

3 Commits

Author SHA1 Message Date
codeboss 70b7466f70 update 2025-07-06 12:05:02 +08:00
codeboss b560d9fe39 update panel 2025-07-06 11:58:26 +08:00
codeboss f329cfa7dc update 2025-07-06 10:26:24 +08:00
10 changed files with 182 additions and 91 deletions

View File

@ -0,0 +1,32 @@
#include "ActionNodeConfiguration.h"
#include <QGridLayout>
ActionNodeConfiguration::ActionNodeConfiguration(QWidget* p)
:QFrame(p),
_execute_select(new QComboBox(this)),
_variables_input(new QTableView(this)),
_input_model(new QStandardItemModel(this)),
_variables_output(new QTableView(this)),
_output_model(new QStandardItemModel(this))
{
this->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
auto p_layout = new QGridLayout(this);
p_layout->addWidget(new QLabel(u8"执行器类型:", this));
p_layout->addWidget(_execute_select, 0, 1, 1, 4);
auto vars_tabw = new QTabWidget(this);
p_layout->addWidget(vars_tabw, 1, 0, 3, 5);
vars_tabw->setTabPosition(QTabWidget::West);
vars_tabw->addTab(_variables_input, u8"输入变量");
_variables_input->setModel(_input_model);
vars_tabw->addTab(_variables_output, u8"输出变量");
_variables_output->setModel(_output_model);
p_layout->setColumnStretch(1, 1);
_input_model->setHorizontalHeaderLabels(QStringList()
<< u8"变量名" << u8"变量类型" << u8"关联变量序列" << u8"关联转换器类型");
_output_model->setHorizontalHeaderLabels(QStringList()
<< u8"变量名" << u8"变量类型" << u8"关联变量序列" << u8"关联转换器类型");
}

View File

@ -0,0 +1,21 @@
#pragma once
#include <QFrame>
#include <QLabel>
#include <QComboBox>
#include <QTabWidget>
#include <QTableView>
#include <qstandarditemmodel.h>
class ActionNodeConfiguration : public QFrame
{
private:
QComboBox *const _execute_select;
QTableView* const _variables_input;
QStandardItemModel *const _input_model;
QTableView* const _variables_output;
QStandardItemModel* const _output_model;
public:
ActionNodeConfiguration(QWidget *p = nullptr);
};

View File

@ -454,20 +454,6 @@ void BehaviorEditor::new_behavior_map()
#include <QLabel> #include <QLabel>
#include <QGridLayout> #include <QGridLayout>
#include <QComboBox> #include <QComboBox>
QWidget* BehaviorEditor::newModifyNodeConfigration(QWidget* pwidget)
{
auto panel = new QFrame(this);
panel->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
auto p_layout = new QGridLayout(panel);
p_layout->addWidget(new QLabel(u8"修饰类型:", this));
p_layout->addWidget(new QComboBox(this), 0, 1, 1, 3);
p_layout->addWidget(new QWidget(this), 1, 0, 1, 4);
p_layout->setRowStretch(1, 1);
p_layout->setColumnStretch(1, 1);
return panel;
}
BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/) BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
: QMainWindow(parent), : QMainWindow(parent),
@ -477,7 +463,11 @@ BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
_message_panel(new QTabWidget(this)), _message_panel(new QTabWidget(this)),
_stacked_panel(new QStackedWidget(this)), _stacked_panel(new QStackedWidget(this)),
_logs_present(new QTextBrowser(this)), _logs_present(new QTextBrowser(this)),
_map_configuration(new BehaviorMapConfigurationPanel(this)) _map_configuration(new BehaviorMapConfigurationPanel(this)),
_compare_configuration(new CompareNodeConfiguration(this)),
_default_configuration(new QLabel(u8"¸Ã½ÚµãÎÞÐèÅäÖÃ", this)),
_action_configuration(new ActionNodeConfiguration(this)),
_modify_configuration(new ModifyNodeConfiguration(this))
{ {
_global_loader = std::make_shared<MessageLoader>(); _global_loader = std::make_shared<MessageLoader>();
_global_kernal = std::make_shared<MapKernel>(_global_loader); _global_kernal = std::make_shared<MapKernel>(_global_loader);
@ -510,16 +500,17 @@ BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
_type_view->setModel(_type_model); _type_view->setModel(_type_model);
nodeTypesViewInit(_type_model); nodeTypesViewInit(_type_model);
_default_configuration->setFrameStyle(QFrame::WinPanel|QFrame::Sunken);
_default_configuration->setAlignment(Qt::AlignCenter);
// 下方堆叠面板 // 下方堆叠面板
_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(new BehaviorMapConfigurationPanel(this)); _stacked_panel->addWidget(_modify_configuration);
_stacked_panel->addWidget(newModifyNodeConfigration(this)); _stacked_panel->addWidget(_action_configuration);
_stacked_panel->addWidget(newActionNodeConfigration(this)); _stacked_panel->addWidget(_compare_configuration);
_stacked_panel->addWidget(newCompareNodeConfigration(this)); _stacked_panel->addWidget(_map_configuration);
_stacked_panel->addWidget(newDefaultConfigration(this)); _stacked_panel->addWidget(_default_configuration);
} }
void BehaviorEditor::nodeTypesViewInit(QStandardItemModel* m) void BehaviorEditor::nodeTypesViewInit(QStandardItemModel* m)
@ -539,55 +530,6 @@ void BehaviorEditor::nodeTypesViewInit(QStandardItemModel* m)
#include <QComboBox> #include <QComboBox>
#include <QPushButton> #include <QPushButton>
QWidget* BehaviorEditor::newDefaultConfigration(QWidget* pwidget)
{
auto ins = new QLabel(u8"该结点无需配置", pwidget);
ins->setAlignment(Qt::AlignCenter);
ins->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
return ins;
}
QWidget* BehaviorEditor::newCompareNodeConfigration(QWidget* pwidget)
{
auto panel = new QFrame(this);
panel->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
auto p_layout = new QGridLayout(panel);
auto compare_types = new QComboBox(this);
p_layout->addWidget(new QLabel(u8"类型筛选:", this), 0, 0);
p_layout->addWidget(new QComboBox(this), 0, 1, 1, 5);
p_layout->addWidget(new QLabel(u8"比较器类型:"), 1, 0);
p_layout->addWidget(compare_types, 1, 1, 1, 5);
p_layout->addWidget(new QLabel(u8"输入变量A", this), 2, 0);
p_layout->addWidget(new QComboBox(this), 2, 1, 1, 5);
p_layout->addWidget(new QLabel(u8"输入变量B", this), 3, 0);
p_layout->addWidget(new QComboBox(this), 3, 1, 1, 5);
p_layout->setColumnStretch(1, 1);
return panel;
}
QWidget* BehaviorEditor::newActionNodeConfigration(QWidget* pwidget)
{
auto panel = new QFrame(this);
panel->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
auto p_layout = new QGridLayout(panel);
p_layout->addWidget(new QLabel(u8"执行器类型:", this));
p_layout->addWidget(new QComboBox(this), 0, 1, 1, 4);
auto vars_tabw = new QTabWidget(this);
p_layout->addWidget(vars_tabw, 1, 0, 3, 5);
vars_tabw->setTabPosition(QTabWidget::West);
vars_tabw->addTab(new QTableView(this), u8"输入变量");
vars_tabw->addTab(new QTableView(this), u8"输出变量");
p_layout->setColumnStretch(1, 1);
return panel;
}
NodeTypesView::NodeTypesView(QWidget* parent /*= nullptr*/) NodeTypesView::NodeTypesView(QWidget* parent /*= nullptr*/)
: QListView(parent) : QListView(parent)
{ {

View File

@ -17,14 +17,14 @@ class BehaviorsPresent;
class NodePresent : public QGraphicsItem { class NodePresent : public QGraphicsItem {
private: private:
BehaviorsPresent* const _widget_p; BehaviorsPresent* const _widget_p;
QVector<double> &_columns_width_seqs; QVector<double>& _columns_width_seqs;
std::shared_ptr<LogicalNode> _node_bind; std::shared_ptr<LogicalNode> _node_bind;
AcceptType _drop_target = AcceptType::NONE; AcceptType _drop_target = AcceptType::NONE;
public: public:
static const double padding; static const double padding;
NodePresent(BehaviorsPresent* pwidget, QVector<double> &columns_set, std::shared_ptr<LogicalNode> bind); NodePresent(BehaviorsPresent* pwidget, QVector<double>& columns_set, std::shared_ptr<LogicalNode> bind);
/// <summary> /// <summary>
/// 绑定的逻辑节点 /// 绑定的逻辑节点
/// </summary> /// </summary>
@ -51,13 +51,13 @@ protected:
/// </summary> /// </summary>
class BranchPresent : public QGraphicsItem { class BranchPresent : public QGraphicsItem {
private: private:
const QHash<std::shared_ptr<LogicalNode>, NodePresent*> &_present_set_bind; const QHash<std::shared_ptr<LogicalNode>, NodePresent*>& _present_set_bind;
NodePresent* const _head_node; NodePresent* const _head_node;
QPointF _arrow_start, _arrow_end; QPointF _arrow_start, _arrow_end;
public: public:
BranchPresent(const QHash<std::shared_ptr<LogicalNode>, NodePresent*> &present_set, NodePresent* head_anchor); BranchPresent(const QHash<std::shared_ptr<LogicalNode>, NodePresent*>& present_set, NodePresent* head_anchor);
std::shared_ptr<LogicalNode> headNode() const; std::shared_ptr<LogicalNode> headNode() const;
@ -147,8 +147,11 @@ protected:
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QTableView> #include <QTableView>
#include <QStackedWidget> #include <QStackedWidget>
#include <QLabel>
#include "BehaviorConfigurationPanel.h" #include "BehaviorConfigurationPanel.h"
#include "CompareNodeConfiguration.h"
#include "ActionNodeConfiguration.h"
#include "ModifyNodeConfiguration.h"
/// <summary> /// <summary>
/// 行为树节点编辑器 /// 行为树节点编辑器
@ -161,9 +164,13 @@ private:
NodeTypesView* const _type_view; NodeTypesView* const _type_view;
QStandardItemModel* const _type_model; QStandardItemModel* const _type_model;
BehaviorsPresent* const _logical_present; BehaviorsPresent* const _logical_present;
QTabWidget *const _message_panel; QTabWidget* const _message_panel;
QStackedWidget *const _stacked_panel; QStackedWidget* const _stacked_panel;
BehaviorMapConfigurationPanel *const _map_configuration; BehaviorMapConfigurationPanel* const _map_configuration;
CompareNodeConfiguration* const _compare_configuration;
ActionNodeConfiguration* const _action_configuration;
ModifyNodeConfiguration* const _modify_configuration;
QLabel* const _default_configuration;
std::shared_ptr<BehaviorMapNode> _map_root; std::shared_ptr<BehaviorMapNode> _map_root;
QUrl _current_fileurl; QUrl _current_fileurl;
@ -175,20 +182,9 @@ private:
// ============================================== // ==============================================
QTextBrowser* const _logs_present; QTextBrowser* const _logs_present;
void configurationPanel();
// ==============================================
// ==============================================
QWidget* newDefaultConfigration(QWidget* pwidget);
// ==============================================
QWidget* newCompareNodeConfigration(QWidget* pwidget);
// ==============================================
QWidget* newActionNodeConfigration(QWidget* pwidget);
// ==============================================
QWidget* newModifyNodeConfigration(QWidget* pwidget);
public: public:
BehaviorEditor(QWidget* parent = nullptr); BehaviorEditor(QWidget* parent = nullptr);

View File

@ -0,0 +1,28 @@
#include "CompareNodeConfiguration.h"
#include <QGridLayout>
#include <QLabel>
CompareNodeConfiguration::CompareNodeConfiguration(QWidget* p)
: QFrame(p),
_type_select(new QComboBox(this)),
_compare_select(new QComboBox(this)),
_variable_a(new QComboBox(this)),
_variable_b(new QComboBox(this))
{
this->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
auto p_layout = new QGridLayout(this);
p_layout->addWidget(new QLabel(u8"类型筛选:", this), 0, 0);
p_layout->addWidget(_type_select, 0, 1, 1, 5);
p_layout->addWidget(new QLabel(u8"比较器类型:"), 1, 0);
p_layout->addWidget(_compare_select, 1, 1, 1, 5);
p_layout->addWidget(new QLabel(u8"输入变量A", this), 2, 0);
p_layout->addWidget(_variable_a, 2, 1, 1, 5);
p_layout->addWidget(new QLabel(u8"输入变量B", this), 3, 0);
p_layout->addWidget(_variable_b, 3, 1, 1, 5);
p_layout->addWidget(new QWidget(this), 4, 0, 1, 6);
p_layout->setColumnStretch(1, 1);
p_layout->setRowStretch(4, 1);
}

View File

@ -0,0 +1,17 @@
#pragma once
#include <QFrame>
#include <QComboBox>
class CompareNodeConfiguration : public QFrame
{
private:
QComboBox *const _type_select;
QComboBox *const _compare_select;
QComboBox *const _variable_a;
QComboBox *const _variable_b;
public:
CompareNodeConfiguration(QWidget *p = nullptr);
};

View File

@ -0,0 +1,17 @@
#include "ModifyNodeConfiguration.h"
#include <qgridlayout.h>
ModifyNodeConfiguration::ModifyNodeConfiguration(QWidget* p)
: QFrame(p),
_modify_types(new QComboBox(this))
{
this->setFrameStyle(QFrame::WinPanel | QFrame::Sunken);
auto p_layout = new QGridLayout(this);
p_layout->addWidget(new QLabel(u8"ÐÞÊÎÀàÐÍ£º", this));
p_layout->addWidget(_modify_types, 0, 1, 1, 3);
p_layout->addWidget(new QWidget(this), 1, 0, 1, 4);
p_layout->setRowStretch(1, 1);
p_layout->setColumnStretch(1, 1);
}

View File

@ -0,0 +1,14 @@
#pragma once
#include <qframe.h>
#include <qlabel.h>
#include <qcombobox.h>
class ModifyNodeConfiguration : public QFrame
{
private:
QComboBox *const _modify_types;
public:
ModifyNodeConfiguration(QWidget *p = nullptr);
};

View File

@ -99,8 +99,11 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="ActionNodeConfiguration.cpp" />
<ClCompile Include="BehaviorConfigurationPanel.cpp" /> <ClCompile Include="BehaviorConfigurationPanel.cpp" />
<ClCompile Include="BehaviorEditor.cpp" /> <ClCompile Include="BehaviorEditor.cpp" />
<ClCompile Include="CompareNodeConfiguration.cpp" />
<ClCompile Include="ModifyNodeConfiguration.cpp" />
<ClCompile Include="PerspectiveView.cpp" /> <ClCompile Include="PerspectiveView.cpp" />
<ClCompile Include="TempletAssemble.cpp" /> <ClCompile Include="TempletAssemble.cpp" />
<QtRcc Include="sims_world.qrc" /> <QtRcc Include="sims_world.qrc" />
@ -118,6 +121,9 @@
<QtMoc Include="PerspectiveView.h" /> <QtMoc Include="PerspectiveView.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="ActionNodeConfiguration.h" />
<ClInclude Include="CompareNodeConfiguration.h" />
<ClInclude Include="ModifyNodeConfiguration.h" />
<QtMoc Include="BehaviorConfigurationPanel.h" /> <QtMoc Include="BehaviorConfigurationPanel.h" />
<ClInclude Include="BehaviorEditor.h" /> <ClInclude Include="BehaviorEditor.h" />
</ItemGroup> </ItemGroup>

View File

@ -58,6 +58,15 @@
<ClCompile Include="BehaviorConfigurationPanel.cpp"> <ClCompile Include="BehaviorConfigurationPanel.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="CompareNodeConfiguration.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ActionNodeConfiguration.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ModifyNodeConfiguration.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="TempletAssemble.h"> <QtMoc Include="TempletAssemble.h">
@ -74,5 +83,14 @@
<ClInclude Include="BehaviorEditor.h"> <ClInclude Include="BehaviorEditor.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<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>
</ItemGroup> </ItemGroup>
</Project> </Project>