modify commond

This commit is contained in:
brige 2025-10-15 00:41:12 +08:00
parent c3f7978df9
commit 5bafe0d383
10 changed files with 104 additions and 22 deletions

View File

@ -1780,17 +1780,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="80"/>
<source>OnCreate</source>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="72"/>
<source>Commands</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"/>
<location filename="../ui/Menu/SimuRunMenu.cpp" line="87"/>
<source>unnamed</source>
<translation type="unfinished"></translation>
</message>

View File

@ -187,7 +187,9 @@ const QString QWorkspaceAttribute::GetCommondFilePath() const
if (nullptr == workspace_) {
return "";
}
return workspace_->GetCommondFilePath();
QString path = QString("%1/%2").arg(workspace_->GetDir(), workspace_->GetCommondFilePath());
return path;
}
std::vector<FileEntry> QWorkspaceAttribute::GetFileEntries(FileEntryType type) const {

View File

@ -21,7 +21,7 @@ void CommandManager::Reload(WorkSpace* ws) {
onLoad_.clear();
if (!ws) return;
const QString cmdPath = ws->GetCommondFilePath();
const QString cmdPath = QString("%1/%2").arg(ws->GetDir(), ws->GetCommondFilePath());
if (cmdPath.isEmpty()) {
LOG_INFO("no command xml configured");
return;

View File

@ -54,11 +54,6 @@ void WorkSpace::SetCommondFilePath(const QString& path) {
commondPath_ = fileInfo.fileName();
}
const QString WorkSpace::GetCommondFilePath() const {
QString path = QString("%1/%2").arg(GetDir(), commondPath_);
return path;
}
void WorkSpace::SetSimMatlab(const QString& path) {
QFileInfo fileInfo(path);
QString dirPath = QString("%1/%2").arg(GetDir(), fileInfo.fileName());

View File

@ -52,7 +52,9 @@ public:
}
void SetCommondFilePath(const QString& path);
const QString GetCommondFilePath() const;
const QString GetCommondFilePath() const {
return commondPath_;
}
// Execute command xml according to trigger
enum class CommandWhen { OnCreate, OnLoad };
@ -183,5 +185,6 @@ private:
public:
std::uint64_t GetFilesSeq() const { return filesSeq_; }
friend class WorkSpaceXMLWrite;
friend class WorkSpaceXMLParse;
};

View File

@ -84,6 +84,23 @@ bool WorkSpaceXMLParse::ParseLamp(const tinyxml2::XMLElement* element) {
return workSpace_->SetLampPath(path);
}
bool WorkSpaceXMLParse::ParseCommond(const tinyxml2::XMLElement* element) {
if (nullptr == element) {
LOG_WARN("commond element is nullptr");
return false;
}
const char* path = element->Attribute("path");
if (nullptr == path) {
LOG_WARN("commond element not has path");
return false;
}
// Set the command file path using the filename stored in XML
workSpace_->commondPath_ = path;
return true;
}
bool WorkSpaceXMLParse::ParseFiles(const tinyxml2::XMLElement* element) {
if (nullptr == element) {
LOG_WARN("element is nullptr");
@ -252,6 +269,8 @@ bool WorkSpaceXMLParse::Load(const QString& dyt) {
ParseTimestep(xmlElement);
} else if (0 == strcmp(name, "lamp")) {
ParseLamp(xmlElement);
} else if (0 == strcmp(name, "commond")) {
ParseCommond(xmlElement);
}
else if (0 == strcmp(name, "charts")) {
ParseChart(xmlElement);

View File

@ -31,6 +31,7 @@ private:
bool ParseScene(const tinyxml2::XMLElement* element);
bool ParseTimestep(const tinyxml2::XMLElement* element);
bool ParseLamp(const tinyxml2::XMLElement* element);
bool ParseCommond(const tinyxml2::XMLElement* element);
bool ParseEntities(const tinyxml2::XMLElement* element);
bool ParseChart(const tinyxml2::XMLElement* element);
bool ParseReport(const tinyxml2::XMLElement* element);

View File

@ -12,6 +12,8 @@
#include "workspace/WorkSpaceManager.h"
#include "workspace/FileEntry.h"
#include <QFileInfo>
WorkSpaceXMLWrite::WorkSpaceXMLWrite(WorkSpace* workspace, QObject* parent) noexcept
: QObject(parent)
, workSpace_(workspace) {}
@ -36,6 +38,7 @@ bool WorkSpaceXMLWrite::Save(const QString& path) {
SaveChart(scene, &doc);
SaveTimeStep(scene);
SaveLamp(scene);
SaveCommond(scene);
SaveFiles(scene, &doc);
tinyxml2::XMLElement* entitiesXml = scene->InsertNewChildElement("entities");
@ -58,6 +61,8 @@ bool WorkSpaceXMLWrite::SaveScene(tinyxml2::XMLElement* scene) {
scene->SetAttribute("describe", workSpace_->GetDescribe().toStdString().c_str());
scene->SetAttribute("uuid", workSpace_->GetUUid().toStdString().c_str());
scene->SetAttribute("viewpoint", StringUtils::ViewpointToString(workSpace_->GetHomeViewpoint()).c_str());
scene->SetAttribute("commondPath", "");
return true;
}
@ -72,12 +77,22 @@ bool WorkSpaceXMLWrite::SaveTimeStep(tinyxml2::XMLElement* scene) {
}
bool WorkSpaceXMLWrite::SaveLamp(tinyxml2::XMLElement* scene) {
LampStatus* lampStatus = workSpace_->GetLampStatus();
if (nullptr == lampStatus) {
return false;
tinyxml2::XMLElement* lamp = scene->InsertNewChildElement("lamp");
const QString lampPath = workSpace_->GetLampStatus()->GetPath();
if (!lampPath.isEmpty()) {
lamp->SetAttribute("path", lampPath.toStdString().c_str());
}
return true;
}
bool WorkSpaceXMLWrite::SaveCommond(tinyxml2::XMLElement* scene) {
const QString commondPath = workSpace_->GetCommondFilePath();
if (!commondPath.isEmpty()) {
tinyxml2::XMLElement* commond = scene->InsertNewChildElement("commond");
// Extract just the filename from the full path for storage
QFileInfo fileInfo(commondPath);
commond->SetAttribute("path", fileInfo.fileName().toStdString().c_str());
}
tinyxml2::XMLElement* timestepXml = scene->InsertNewChildElement("lamp");
timestepXml->SetAttribute("path", lampStatus->GetPath().toStdString().c_str());
return true;
}

View File

@ -19,6 +19,7 @@ protected:
bool SaveScene(tinyxml2::XMLElement* scene);
bool SaveTimeStep(tinyxml2::XMLElement* scene);
bool SaveLamp(tinyxml2::XMLElement* scene);
bool SaveCommond(tinyxml2::XMLElement* scene);
bool SaveEntities(tinyxml2::XMLElement* scene, tinyxml2::XMLDocument* doc);
bool SaveChart(tinyxml2::XMLElement* scene, tinyxml2::XMLDocument* doc);
bool SaveFiles(tinyxml2::XMLElement* scene, tinyxml2::XMLDocument* doc);

51
workspace/command.xml Normal file
View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<commands>
<!-- 创建时执行的命令 -->
<command name="初始化环境"
program="cmd.exe"
path="echo Initializing workspace environment..."
description="初始化工作空间环境"
when="oncreate"
enabled="true" />
<command name="检查Python版本"
program="python"
args="--version"
description="检查Python版本信息"
when="oncreate"
enabled="true" />
<!-- 加载时执行的命令 -->
<command name="启动服务"
program="cmd.exe"
path="echo Starting services..."
description="启动相关服务"
when="onload"
enabled="true" />
<command name="检查系统状态"
program="powershell.exe"
args="Get-Process | Select-Object -First 5"
description="检查系统进程状态"
when="onload"
enabled="true" />
<!-- 通用命令默认为oncreate -->
<command name="打开记事本"
program="notepad.exe"
description="打开Windows记事本"
enabled="true" />
<command name="查看目录"
program="cmd.exe"
args="/c dir"
description="查看当前目录内容"
enabled="true" />
<!-- 禁用的命令示例 -->
<command name="禁用命令"
program="cmd.exe"
path="echo This command is disabled"
description="这是一个被禁用的命令示例"
enabled="false" />
</commands>