modify commond

This commit is contained in:
brige 2025-10-14 00:15:18 +08:00
parent cc471e30a4
commit c3f7978df9
9 changed files with 290 additions and 69 deletions

View File

@ -559,27 +559,27 @@
<context> <context>
<name>MainFrame</name> <name>MainFrame</name>
<message> <message>
<location filename="../ui/MainFrame.cpp" line="43"/> <location filename="../ui/MainFrame.cpp" line="45"/>
<source>Dyt</source> <source>Dyt</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/MainFrame.cpp" line="102"/> <location filename="../ui/MainFrame.cpp" line="104"/>
<source>file manager</source> <source>file manager</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/MainFrame.cpp" line="108"/> <location filename="../ui/MainFrame.cpp" line="114"/>
<source>simu manager</source> <source>simu manager</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/MainFrame.cpp" line="111"/> <location filename="../ui/MainFrame.cpp" line="117"/>
<source>play manager</source> <source>play manager</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/MainFrame.cpp" line="114"/> <location filename="../ui/MainFrame.cpp" line="120"/>
<source>system manager</source> <source>system manager</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -972,26 +972,26 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8045"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8051"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8238"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8245"/>
<source>Curve[%1]</source> <source>Curve[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8046"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8052"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8239"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8246"/>
<source>Surface[%1]</source> <source>Surface[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8047"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8053"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8240"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8247"/>
<source>Table[%1]</source> <source>Table[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8048"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8054"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8241"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8248"/>
<source>Light[%1]</source> <source>Light[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1067,48 +1067,48 @@
<context> <context>
<name>QtConeWaveComponentManager</name> <name>QtConeWaveComponentManager</name>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9230"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9252"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9239"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9261"/>
<source>ConeWaveComponent</source> <source>ConeWaveComponent</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9327"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9349"/>
<source>Height</source> <source>Height</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9334"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9356"/>
<source>Radius</source> <source>Radius</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9341"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9363"/>
<source>waveCount</source> <source>waveCount</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9351"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9373"/>
<source>waveSpeed</source> <source>waveSpeed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9358"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9380"/>
<source>baseColor</source> <source>baseColor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9365"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9387"/>
<source>waveColor</source> <source>waveColor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9372"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9394"/>
<source>ringBrightAlpha</source> <source>ringBrightAlpha</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9379"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9401"/>
<source>ringDarkAlpha</source> <source>ringDarkAlpha</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1214,28 +1214,28 @@
<context> <context>
<name>QtDashedLineComponentManager</name> <name>QtDashedLineComponentManager</name>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9571"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9593"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9580"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9602"/>
<source>DashedLineComponent</source> <source>DashedLineComponent</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9649"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9671"/>
<source>Start</source> <source>Start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9656"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9678"/>
<source>End</source> <source>End</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9663"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9685"/>
<source>Radius</source> <source>Radius</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9670"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9692"/>
<source>Color</source> <source>Color</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1251,17 +1251,17 @@
<context> <context>
<name>QtEntityPropertyManager</name> <name>QtEntityPropertyManager</name>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8675"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8697"/>
<source>Name</source> <source>Name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8682"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8704"/>
<source>Visible</source> <source>Visible</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8689"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8711"/>
<source>Transform</source> <source>Transform</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1343,13 +1343,13 @@
<context> <context>
<name>QtMeshComponetManager</name> <name>QtMeshComponetManager</name>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8806"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8828"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8815"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8837"/>
<source>MeshComponent</source> <source>MeshComponent</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8888"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8910"/>
<source>Mesh</source> <source>Mesh</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1398,13 +1398,13 @@
<context> <context>
<name>QtPathComponentManager</name> <name>QtPathComponentManager</name>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8965"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8987"/>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8974"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8996"/>
<source>PathComponent</source> <source>PathComponent</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9047"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="9069"/>
<source>Path</source> <source>Path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1654,87 +1654,92 @@
<context> <context>
<name>QtWorkspacePropertyManager</name> <name>QtWorkspacePropertyManager</name>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8282"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8289"/>
<source>Name</source> <source>Name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8289"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8296"/>
<source>Description</source> <source>Description</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8296"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8303"/>
<source>Timestep</source> <source>Timestep</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8303"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8310"/>
<source>SimMatlab</source> <source>SimMatlab</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8310"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8317"/>
<source>MatlabParam</source> <source>MatlabParam</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8317"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8324"/>
<source>WavePath</source> <source>WavePath</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8324"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8331"/>
<source>ReportPath</source> <source>ReportPath</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8331"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8338"/>
<source>RDPath</source> <source>RDPath</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8354"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8346"/>
<source>CommondPath</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8369"/>
<source>Count</source> <source>Count</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8370"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8385"/>
<source>Curve[%1]</source> <source>Curve[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8371"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8386"/>
<source>Surface[%1]</source> <source>Surface[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8372"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8387"/>
<source>Table[%1]</source> <source>Table[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8373"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8388"/>
<source>Light[%1]</source> <source>Light[%1]</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8384"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8399"/>
<source>Curves</source> <source>Curves</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8387"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8402"/>
<source>Surfaces</source> <source>Surfaces</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8390"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8405"/>
<source>Tables</source> <source>Tables</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8393"/> <location filename="../ui/PropertyBrowser/qtpropertymanager.cpp" line="8408"/>
<source>Lights</source> <source>Lights</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1762,6 +1767,34 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>SimuRunMenu</name>
<message>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="55"/>
<source>no workspace</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="65"/>
<source>no commands</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="80"/>
<source>OnCreate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="83"/>
<source>OnLoad</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="99"/>
<source>unnamed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>SimuRunMenuClass</name> <name>SimuRunMenuClass</name>
<message> <message>

View File

@ -25,6 +25,8 @@
#include "ui/Menu/ChartPlotMenu.h" // lz 20140914 #include "ui/Menu/ChartPlotMenu.h" // lz 20140914
#include "common/SpdLogger.h" #include "common/SpdLogger.h"
#include "ui/Menu/SimuRunMenu.h"
#include "ui_MainFrame.h" #include "ui_MainFrame.h"
#include "viewer/OsgWidget.h" #include "viewer/OsgWidget.h"
@ -104,8 +106,12 @@ void MainFrame::InitUI() {
//AddMenuWidget("view_manager", tr("view manager"), new ViewManagerMenu(this)); //AddMenuWidget("view_manager", tr("view manager"), new ViewManagerMenu(this));
//AddMenuWidget("plan_manager", tr("plan manager"), new PlanManagerMenu(this)); //AddMenuWidget("plan_manager", tr("plan manager"), new PlanManagerMenu(this));
//AddMenuWidget("dynamic_display", tr("dynamic display"), new DynamicDisplayMenu(this)); //AddMenuWidget("dynamic_display", tr("dynamic display"), new DynamicDisplayMenu(this));
ChartPlotMenu* chartMenu = new ChartPlotMenu(this); // ChartPlotMenu* chartMenu = new ChartPlotMenu(this);
AddMenuWidget("simu_manager", tr("simu manager"), chartMenu); // AddMenuWidget("simu_manager", tr("simu manager"), chartMenu);
// Command buttons menu based on parsed commands
SimuRunMenu* simuRunMenu = new SimuRunMenu(this);
AddMenuWidget("simu_manager", tr("simu manager"), simuRunMenu);
PlayManagerMenu* playMenu = new PlayManagerMenu(this); PlayManagerMenu* playMenu = new PlayManagerMenu(this);
AddMenuWidget("play_manager", tr("play manager"), playMenu); AddMenuWidget("play_manager", tr("play manager"), playMenu);

View File

@ -1,10 +1,107 @@
#include "SimuRunMenu.h" #include "ui/Menu/SimuRunMenu.h"
#include <QToolButton>
#include <QHBoxLayout>
#include <QLabel>
#include "workspace/WorkSpaceManager.h"
#include "workspace/WorkSpace.h"
#include "workspace/CommandManager.h"
SimuRunMenu::SimuRunMenu(QWidget *parent) SimuRunMenu::SimuRunMenu(QWidget *parent)
: QWidget(parent) : QWidget(parent) {
{
ui.setupUi(this); ui.setupUi(this);
// Create a vertical layout to host grouped command rows
auto* layout = new QVBoxLayout(this);
layout->setContentsMargins(9, 0, 0, 0);
layout->setSpacing(6);
setLayout(layout);
// Refresh when workspace changes
connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged,
this, &SimuRunMenu::OnWorkspaceChanged);
// Initial population
RefreshButtons();
} }
SimuRunMenu::~SimuRunMenu() SimuRunMenu::~SimuRunMenu() {
{} }
void SimuRunMenu::OnWorkspaceChanged(WorkSpace* ws) {
Q_UNUSED(ws);
RefreshButtons();
}
void SimuRunMenu::RefreshButtons() {
// Clear existing buttons
if (auto* layout = qobject_cast<QVBoxLayout*>(this->layout())) {
while (layout->count() > 0) {
QLayoutItem* item = layout->takeAt(0);
if (item) {
if (auto* w = item->widget()) {
w->deleteLater();
}
delete item;
}
}
}
auto* ws = WorkSpaceManager::Get().GetCurrent();
if (!ws) {
// Show hint when no workspace
if (auto* layout = qobject_cast<QVBoxLayout*>(this->layout())) {
auto* hint = new QLabel(tr("no workspace"), this);
layout->addWidget(hint);
}
return;
}
CommandManager mgr;
const auto items = mgr.ListCommands(ws);
if (items.empty()) {
if (auto* layout = qobject_cast<QVBoxLayout*>(this->layout())) {
auto* hint = new QLabel(tr("no commands"), this);
layout->addWidget(hint);
}
return;
}
// Render all commands in a single group without trigger distinction
CreateGroup(tr("Commands"), items);
}
void SimuRunMenu::CreateGroup(const QString& title,
const std::vector<Command>& items) {
auto* root = qobject_cast<QVBoxLayout*>(this->layout());
if (!root) return;
auto* label = new QLabel(title, this);
root->addWidget(label);
auto* row = new QHBoxLayout();
row->setSpacing(6);
for (const auto& item : items) {
auto* btn = new QToolButton(this);
btn->setText(item.name.isEmpty() ? tr("unnamed") : item.name);
QString tip = item.descript;
if (!item.program.isEmpty()) {
tip += QStringLiteral("\nprog: ") + item.program;
}
if (!item.path.isEmpty()) {
tip += QStringLiteral("\npath: ") + item.path;
}
btn->setToolTip(tip);
row->addWidget(btn);
connect(btn, &QToolButton::clicked, this, [name = item.name]() {
auto* wsCur = WorkSpaceManager::Get().GetCurrent();
if (!wsCur) return;
CommandManager execMgr;
execMgr.ExecuteByName(wsCur, name);
});
}
row->addStretch(1);
root->addLayout(row);
}

View File

@ -2,15 +2,25 @@
#include <QWidget> #include <QWidget>
#include "ui_SimuRunMenu.h" #include "ui_SimuRunMenu.h"
#include "workspace/CommandManager.h"
#include "workspace/CommandExecutor.h"
class SimuRunMenu : public QWidget class SimuRunMenu : public QWidget {
{
Q_OBJECT Q_OBJECT
public: public:
SimuRunMenu(QWidget *parent = nullptr); SimuRunMenu(QWidget *parent = nullptr);
~SimuRunMenu(); ~SimuRunMenu();
private slots:
void OnWorkspaceChanged(class WorkSpace* ws);
private:
void RefreshButtons();
void CreateGroup(const QString& title,
const std::vector<Command>& items);
private: private:
Ui::SimuRunMenuClass ui; Ui::SimuRunMenuClass ui;
}; };

View File

@ -7920,6 +7920,7 @@ public:
QMap<const QtProperty*, QtProperty*> m_properyToWavePath; QMap<const QtProperty*, QtProperty*> m_properyToWavePath;
QMap<const QtProperty*, QtProperty*> m_properyToReportPath; QMap<const QtProperty*, QtProperty*> m_properyToReportPath;
QMap<const QtProperty*, QtProperty*> m_properyToRDPath; QMap<const QtProperty*, QtProperty*> m_properyToRDPath;
QMap<const QtProperty*, QtProperty*> m_properyToCommondPath;
QMap<const QtProperty*, QtProperty*> m_nameToPropery; QMap<const QtProperty*, QtProperty*> m_nameToPropery;
QMap<const QtProperty*, QtProperty*> m_descriptionToPropery; QMap<const QtProperty*, QtProperty*> m_descriptionToPropery;
@ -7929,6 +7930,7 @@ public:
QMap<const QtProperty*, QtProperty*> m_wavePathToPropery; QMap<const QtProperty*, QtProperty*> m_wavePathToPropery;
QMap<const QtProperty*, QtProperty*> m_reportPathToPropery; QMap<const QtProperty*, QtProperty*> m_reportPathToPropery;
QMap<const QtProperty*, QtProperty*> m_rdPathToPropery; QMap<const QtProperty*, QtProperty*> m_rdPathToPropery;
QMap<const QtProperty*, QtProperty*> m_commondPathToPropery;
// Grouped file entries: Curve // Grouped file entries: Curve
QMap<const QtProperty*, QtProperty*> m_properyToCurveGroup; QMap<const QtProperty*, QtProperty*> m_properyToCurveGroup;
@ -8000,6 +8002,10 @@ void QtWorkspacePropertyManagerPrivate::slotStringChanged(QtProperty* property,
QWorkspaceAttribute c = m_values[prop]; QWorkspaceAttribute c = m_values[prop];
c.SetRDPath(value); c.SetRDPath(value);
q_ptr->setValue(prop, c); q_ptr->setValue(prop, c);
} else if (QtProperty* prop = m_commondPathToPropery.value(property, 0)) {
QWorkspaceAttribute c = m_values[prop];
c.SetCommondFilePath(value);
q_ptr->setValue(prop, c);
} else if (QtProperty* prop = m_curvePathToPropery.value(property, 0)) { } else if (QtProperty* prop = m_curvePathToPropery.value(property, 0)) {
QWorkspaceAttribute c = m_values[prop]; QWorkspaceAttribute c = m_values[prop];
int idx = m_curvePathIndex.value(property, 0); int idx = m_curvePathIndex.value(property, 0);
@ -8213,6 +8219,7 @@ void QtWorkspacePropertyManager::setValue(QtProperty* property, const QWorkspace
d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToWavePath[property], value.GetWavePath()); d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToWavePath[property], value.GetWavePath());
d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToReportPath[property], value.GetReportPath()); d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToReportPath[property], value.GetReportPath());
d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToRDPath[property], value.GetRDPath()); d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToRDPath[property], value.GetRDPath());
d_ptr->m_filesProperyManager->setValue(d_ptr->m_properyToCommondPath[property], value.GetCommondFilePath());
auto syncGroup = [&](FileEntryType type, auto syncGroup = [&](FileEntryType type,
QMap<const QtProperty*, QtProperty*>& propToGroup, QMap<const QtProperty*, QtProperty*>& propToGroup,
@ -8334,6 +8341,14 @@ void QtWorkspacePropertyManager::initializeProperty(QtProperty* property) {
d_ptr->m_rdPathToPropery[prop] = property; d_ptr->m_rdPathToPropery[prop] = property;
property->addSubProperty(prop); property->addSubProperty(prop);
// Command XML path
prop = d_ptr->m_filesProperyManager->addProperty();
prop->setPropertyName(tr("CommondPath"));
d_ptr->m_filesProperyManager->setValueOnly(prop, val.GetCommondFilePath());
d_ptr->m_properyToCommondPath[property] = prop;
d_ptr->m_commondPathToPropery[prop] = property;
property->addSubProperty(prop);
// Add grouped file sections // Add grouped file sections
auto addGroup = [&](FileEntryType type, const QString& groupName, auto addGroup = [&](FileEntryType type, const QString& groupName,
QMap<const QtProperty*, QtProperty*>& propToGroup, QMap<const QtProperty*, QtProperty*>& propToGroup,
@ -8455,6 +8470,13 @@ void QtWorkspacePropertyManager::uninitializeProperty(QtProperty* property) {
} }
d_ptr->m_properyToRDPath.remove(property); d_ptr->m_properyToRDPath.remove(property);
prop = d_ptr->m_commondPathToPropery[property];
if (prop) {
d_ptr->m_commondPathToPropery.remove(prop);
delete prop;
}
d_ptr->m_properyToCommondPath.remove(property);
// Cleanup grouped file properties // Cleanup grouped file properties
auto cleanupGroup = [&](QMap<const QtProperty*, QtProperty*>& propToGroup, auto cleanupGroup = [&](QMap<const QtProperty*, QtProperty*>& propToGroup,
QMap<const QtProperty*, QtProperty*>& groupToProp, QMap<const QtProperty*, QtProperty*>& groupToProp,

View File

@ -174,6 +174,22 @@ const QString QWorkspaceAttribute::GetRDPath() const
return workspace_->GetRDPath(); return workspace_->GetRDPath();
} }
void QWorkspaceAttribute::SetCommondFilePath(const QString& path)
{
if (nullptr == workspace_) {
return;
}
workspace_->SetCommondFilePath(path);
}
const QString QWorkspaceAttribute::GetCommondFilePath() const
{
if (nullptr == workspace_) {
return "";
}
return workspace_->GetCommondFilePath();
}
std::vector<FileEntry> QWorkspaceAttribute::GetFileEntries(FileEntryType type) const { std::vector<FileEntry> QWorkspaceAttribute::GetFileEntries(FileEntryType type) const {
if (nullptr == workspace_) { if (nullptr == workspace_) {
return {}; return {};

View File

@ -80,6 +80,10 @@ public:
void SetRDPath(const QString& path); void SetRDPath(const QString& path);
const QString GetRDPath() const; const QString GetRDPath() const;
// Command XML path
void SetCommondFilePath(const QString& path);
const QString GetCommondFilePath() const;
// Grouped files API // Grouped files API
std::vector<FileEntry> GetFileEntries(FileEntryType type) const; std::vector<FileEntry> GetFileEntries(FileEntryType type) const;
void SetFileEntryCount(FileEntryType type, int count); void SetFileEntryCount(FileEntryType type, int count);

View File

@ -115,3 +115,31 @@ void CommandManager::Execute(WorkSpace* ws, WorkSpace::CommandWhen when) {
exec->Execute(ws, when); exec->Execute(ws, when);
} }
} }
std::vector<Command> CommandManager::ListCommands(WorkSpace* ws) {
std::vector<Command> items;
Reload(ws);
for (auto& exec : onCreate_) {
items.push_back(exec->Get());
}
for (auto& exec : onLoad_) {
items.push_back(exec->Get());
}
return items;
}
bool CommandManager::ExecuteByName(WorkSpace* ws, const QString& name) {
Reload(ws);
auto matchAndRun = [&](std::vector<std::unique_ptr<CommandExecutor>>& list, WorkSpace::CommandWhen when) -> bool {
for (auto& exec : list) {
if (exec->Get().name == name) {
exec->Execute(ws, when);
return true;
}
}
return false;
};
if (matchAndRun(onCreate_, WorkSpace::CommandWhen::OnCreate)) return true;
if (matchAndRun(onLoad_, WorkSpace::CommandWhen::OnLoad)) return true;
return false;
}

View File

@ -11,6 +11,11 @@ public:
void Reload(WorkSpace* ws); void Reload(WorkSpace* ws);
void Execute(WorkSpace* ws, WorkSpace::CommandWhen when); void Execute(WorkSpace* ws, WorkSpace::CommandWhen when);
// List parsed commands (no trigger distinction for UI consumption)
std::vector<Command> ListCommands(WorkSpace* ws);
// Execute a single command by its name (exact match)
bool ExecuteByName(WorkSpace* ws, const QString& name);
private: private:
std::vector<std::unique_ptr<CommandExecutor>> onCreate_; std::vector<std::unique_ptr<CommandExecutor>> onCreate_;
std::vector<std::unique_ptr<CommandExecutor>> onLoad_; std::vector<std::unique_ptr<CommandExecutor>> onLoad_;