DYTSrouce/src/ui/Layout/CodeEdtUI.cpp

214 lines
5.9 KiB
C++
Raw Normal View History

2025-01-04 04:12:51 +00:00
#include "CodeEdtUI.h"
#include <QPlainTextEdit>
#include <QMenuBar>
#include <QAction>
#include <QStatusBar>
#include <QFileDialog>
#include <QTextStream>
#include <QVBoxLayout>
#include <QFont>
#include <qdebug.h>
2025-01-19 15:11:20 +00:00
#include <QDir>
#include <QProcess>
2025-01-04 04:12:51 +00:00
2025-01-19 15:11:20 +00:00
#include "../../common/RecourceHelper.h"
2025-01-05 14:29:59 +00:00
#include "../../workspace/WorkSpaceManager.h"
2025-01-04 04:12:51 +00:00
#include "SyntaxHighlighter.h"
#include "../DockTitleBar.h"
#include "../DockWidget.h"
CodeEdtUI::CodeEdtUI(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BCAD>
editor = new QPlainTextEdit(this);
QFont serifFont("Times", 20, QFont::Bold);
editor->setFont(serifFont);
syntaxHighlighter = new SyntaxHighlighter(editor->document());
setCentralWidget(editor);
2025-01-19 15:11:20 +00:00
InitBat();
// // <20><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>
// 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);
// // ״̬<D7B4><CCAC>
// statusBar();
2025-01-04 04:12:51 +00:00
}
void CodeEdtUI::AttachDock(DockWidget* dockWidget)
{
if (nullptr == dockWidget) {
qDebug() << __FUNCTION__ << "dockwidget is nullptr";
return;
}
dockWidget->SetDockWidgetTitleBar(nullptr);
dockWidget->setWidget(this);
DockTitleBar* dockTitleBar = new DockTitleBar;
2025-07-05 16:10:59 +00:00
dockTitleBar->SetTitle(u8"bat<EFBFBD>ļ<EFBFBD>");
2025-01-04 04:12:51 +00:00
dockWidget->SetDockWidgetTitleBar(dockTitleBar);
}
2025-01-19 15:11:20 +00:00
void CodeEdtUI::InitBat()
{
2025-01-05 14:29:59 +00:00
{
2025-07-05 16:10:59 +00:00
QMenu* fileMenu = menuBar()->addMenu(u8"<EFBFBD>ļ<EFBFBD>");
2025-01-19 15:11:20 +00:00
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);
}
}
}
{
2025-07-05 16:10:59 +00:00
QMenu* ctrlMenu = menuBar()->addMenu(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
2025-01-19 15:11:20 +00:00
2025-07-05 16:10:59 +00:00
QAction* runAction = new QAction(tr(u8"ִ<EFBFBD><EFBFBD>"), this);
2025-01-19 15:11:20 +00:00
ctrlMenu->addAction(runAction);
2025-07-05 16:10:59 +00:00
QAction* saveAction = new QAction(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", this);
2025-01-19 15:11:20 +00:00
ctrlMenu->addAction(saveAction);
connect(runAction, &QAction::triggered, this, &CodeEdtUI::runFile);
connect(saveAction, &QAction::triggered, this, &CodeEdtUI::saveFile);
2025-01-05 14:29:59 +00:00
}
2025-01-19 15:11:20 +00:00
}
void CodeEdtUI::openMainFile() {
2025-01-05 14:29:59 +00:00
2025-01-19 15:11:20 +00:00
QAction* fileAction = (QAction*)(sender());
QString fileName = RecourceHelper::Get().GetBasePath() + "/bat/" + fileAction->text(); //QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.bat)");
2025-01-04 04:12:51 +00:00
if (!fileName.isEmpty()) {
QFile file(fileName);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
2025-01-05 14:29:59 +00:00
editor->clear();
2025-01-04 04:12:51 +00:00
QTextStream in(&file);
2025-01-19 15:11:20 +00:00
in.setCodec("utf-8");
2025-01-04 04:12:51 +00:00
editor->setPlainText(in.readAll());
file.close();
}
}
2025-01-19 15:11:20 +00:00
m_strCurOpenFile = fileName;
2025-01-04 04:12:51 +00:00
}
2025-01-05 14:29:59 +00:00
void CodeEdtUI::openLDFile()
{
2025-01-07 15:45:23 +00:00
QString fileName = ""; //QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)");
2025-01-05 14:29:59 +00:00
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()
{
2025-01-07 15:45:23 +00:00
QString fileName = ""; //QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)");
2025-01-05 14:29:59 +00:00
if (fileName.isEmpty())
{
fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Matlab Files (*.m)");
}
2025-01-04 04:12:51 +00:00
if (!fileName.isEmpty()) {
QFile file(fileName);
2025-01-05 14:29:59 +00:00
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
editor->clear();
QTextStream in(&file);
editor->setPlainText(in.readAll());
file.close();
m_strCurOpenFile = fileName;
}
}
}
2025-01-19 15:11:20 +00:00
void CodeEdtUI::runFile()
{
if (!m_strCurOpenFile.isEmpty())
{
saveFile();
// <20><><EFBFBD><EFBFBD>QProcess<73><73><EFBFBD><EFBFBD>
QProcess process;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
process.start(m_strCurOpenFile);
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
process.waitForFinished();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
QString output = process.readAllStandardOutput();
QString errorOutput = process.readAllStandardError();
// <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
qDebug() << "Output:" << output;
qDebug() << "Error Output:" << errorOutput;
}
}
2025-01-05 14:29:59 +00:00
void CodeEdtUI::saveFile() {
2025-01-19 15:11:20 +00:00
if (!m_strCurOpenFile.isEmpty()) {
QFile file(m_strCurOpenFile);
2025-01-04 04:12:51 +00:00
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&file);
2025-01-19 15:11:20 +00:00
out.setCodec("utf-8");
2025-01-04 04:12:51 +00:00
out << editor->toPlainText();
file.close();
}
}
}