#include "CodeEdtUI.h" #include #include #include #include #include #include #include #include #include #include #include #include "../../common/RecourceHelper.h" #include "../../workspace/WorkSpaceManager.h" #include "SyntaxHighlighter.h" #include "../DockTitleBar.h" #include "../DockWidget.h" CodeEdtUI::CodeEdtUI(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); // 创建代码编辑器 editor = new QPlainTextEdit(this); QFont serifFont("Times", 20, QFont::Bold); editor->setFont(serifFont); syntaxHighlighter = new SyntaxHighlighter(editor->document()); setCentralWidget(editor); InitBat(); // // 创建菜单 // QMenu* fileMenu = menuBar()->addMenu(tr("&file")); // QAction* openMainAction = new QAction(tr("&Import the template"), this); ///* QAction* openLDAction = new QAction(tr("&Import the LD template"), this); // QAction* openSeekerSimAction = new QAction(tr("&Import the SeekerSim template"), this);*/ // QAction* saveAction = new QAction(tr("&save"), this); // fileMenu->addAction(openMainAction); // //fileMenu->addAction(openLDAction); // //fileMenu->addAction(openSeekerSimAction); // fileMenu->addAction(saveAction); // connect(openMainAction, &QAction::triggered, this, &CodeEdtUI::openMainFile); ///* connect(openLDAction, &QAction::triggered, this, &CodeEdtUI::openLDFile); // connect(openSeekerSimAction, &QAction::triggered, this, &CodeEdtUI::openSeekerSimFile);*/ // connect(saveAction, &QAction::triggered, this, &CodeEdtUI::saveFile); // // 状态栏 // statusBar(); } void CodeEdtUI::AttachDock(DockWidget* dockWidget) { if (nullptr == dockWidget) { qDebug() << __FUNCTION__ << "dockwidget is nullptr"; return; } dockWidget->SetDockWidgetTitleBar(nullptr); dockWidget->setWidget(this); DockTitleBar* dockTitleBar = new DockTitleBar; dockTitleBar->SetTitle(tr("matlab editor")); dockWidget->SetDockWidgetTitleBar(dockTitleBar); } void CodeEdtUI::InitBat() { { QMenu* fileMenu = menuBar()->addMenu(tr("&bat")); QDir dir(RecourceHelper::Get().GetBasePath() + "/bat"); QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks); for (int i = 0; i < fileInfoList.size(); i++) { QFileInfo fileInfo = fileInfoList[i]; QString strSuff = fileInfo.suffix(); strSuff = strSuff.toLower(); if (strSuff == "bat") { QAction* fileAction = new QAction(fileInfo.fileName(), this); fileMenu->addAction(fileAction); connect(fileAction, &QAction::triggered, this, &CodeEdtUI::openMainFile); } } } { QMenu* ctrlMenu = menuBar()->addMenu(tr("&Control")); QAction* runAction = new QAction(tr("&Run"), this); ctrlMenu->addAction(runAction); QAction* saveAction = new QAction(tr("&Save"), this); ctrlMenu->addAction(saveAction); connect(runAction, &QAction::triggered, this, &CodeEdtUI::runFile); connect(saveAction, &QAction::triggered, this, &CodeEdtUI::saveFile); } } void CodeEdtUI::openMainFile() { QAction* fileAction = (QAction*)(sender()); QString fileName = RecourceHelper::Get().GetBasePath() + "/bat/" + fileAction->text(); //QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.bat)"); if (!fileName.isEmpty()) { QFile file(fileName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { editor->clear(); QTextStream in(&file); in.setCodec("utf-8"); editor->setPlainText(in.readAll()); file.close(); } } m_strCurOpenFile = fileName; } void CodeEdtUI::openLDFile() { QString fileName = ""; //QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)"); if (fileName.isEmpty()) { fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)"); } if (!fileName.isEmpty()) { QFile file(fileName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { editor->clear(); QTextStream in(&file); editor->setPlainText(in.readAll()); file.close(); m_strCurOpenFile = fileName; } } } void CodeEdtUI::openSeekerSimFile() { QString fileName = ""; //QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)"); if (fileName.isEmpty()) { fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)"); } if (!fileName.isEmpty()) { QFile file(fileName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { editor->clear(); QTextStream in(&file); editor->setPlainText(in.readAll()); file.close(); m_strCurOpenFile = fileName; } } } void CodeEdtUI::runFile() { if (!m_strCurOpenFile.isEmpty()) { saveFile(); // 创建QProcess对象 QProcess process; // 启动批处理文件 process.start(m_strCurOpenFile); // 等待过程完成 process.waitForFinished(); // 获取输出 QString output = process.readAllStandardOutput(); QString errorOutput = process.readAllStandardError(); // 打印输出 qDebug() << "Output:" << output; qDebug() << "Error Output:" << errorOutput; } } void CodeEdtUI::saveFile() { if (!m_strCurOpenFile.isEmpty()) { QFile file(m_strCurOpenFile); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); out.setCodec("utf-8"); out << editor->toPlainText(); file.close(); } } }