DPS/DataPlatform/CodeDisplayView.cpp

165 lines
4.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma execution_character_set("utf-8")
#include "CodeDisplayView.h"
#include <QVBoxLayout>
#include "Base.h"
#include "SysManager.h"
#include <QFileinfo>
#include <QProcess>
#include <QDesktopServices>
CodeDisplayView::CodeDisplayView(QWidget* parent)
: QDialog(parent)
{
_webView = new WebEngineView(QUrl(BaseUrl + "#/codedisplay"), this);
QVBoxLayout* layout = new QVBoxLayout();
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
layout->addWidget(_webView);
_eventModule = new SignalEventModule("CodeDisplayView");
QObject::connect(_eventModule, &SignalEventModule::onmessage, this, &CodeDisplayView::onMessage);
_webView->addEventModule(_eventModule);
#ifdef Q_OS_WIN
_frameless = std::move(std::unique_ptr<QFramelessHelper>(new QFramelessHelper(this, _webView, true, (QDialog*)this)));
#endif
}
CodeDisplayView::~CodeDisplayView()
{
}
void CodeDisplayView::Close()
{
this->close();
}
bool CodeDisplayView::onMessage(const std::string& eventName, json& parameter)
{
LOG(INFO) << CommonHelper::utf8ToStdString("CodeDisplayView receive message.......");
LOG(INFO) << eventName;
LOG(INFO) << CommonHelper::jsonToString(parameter);
TRY{
if (eventName == "close") {
Close();
return true;
}
else if (eventName == "opened") {
updateFileList();
return true;
}
else if (eventName == "open-file")
{
//源码浏览打开
openCurFile(parameter);
return true;
}
else if (eventName == "save-code-file")
{
saveCodeFile(parameter);
}
else if (eventName == "open-directory")
{
openDir(parameter);
}
}
CATCH(parameter);
return false;
}
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))
bool CodeDisplayView::nativeEvent(const QByteArray& eventType, void* message, qintptr* result)
#else
bool CodeDisplayView::nativeEvent(const QByteArray& eventType, void* message, long* result)
#endif
{
if (_frameless && _frameless->nativeEvent(eventType, message, result))
return true;
return QDialog::nativeEvent(eventType, message, result);
}
void CodeDisplayView::updateFileList()
{
//std::vector<std::string> clist;
//for (auto j : cfileList)
//{
// QFileInfo fileInfo(j);
// clist.push_back(fileInfo.fileName().toStdString());
//}
json data;
data["CFileList"] = json::array();
data["NetFileList"] = json::array();
for (auto j : cfileList)
{
QFileInfo fileInfo(j);
data["CFileList"].push_back(fileInfo.fileName().toStdString());
}
for (auto i : netfileList)
{
QFileInfo fileInfo(i);
data["NetFileList"].push_back(fileInfo.fileName().toStdString());
}
_eventModule->send("update-filelist", data);
LOG(INFO) << CommonHelper::utf8ToStdString("向前端发送 update-filelist message.......");
LOG(INFO) << CommonHelper::jsonToString(data);
}
//打开选定文件
void CodeDisplayView::openCurFile(json& parameter)
{
auto data = parameter["data"];
QString filePath = CommonHelper::utf8ToQString(data["filePath"]);
SysManager& sysMgr = GetSysManager();
QString fileFullPath = sysMgr._codeGeneratePath + "/" + filePath;
// QTextCodec* codec = QTextCodec::codecForName("utf-8");
QFile file(fileFullPath);
if (file.open(QIODevice::ReadOnly))
{
QByteArray array = file.readAll();
QString str = QString::fromLocal8Bit(array);
parameter["response"] = CommonHelper::qstringToUtf8(str);
file.close();
}
else
{
LOG(ERROR) << CommonHelper::utf8ToStdString("CodeDisplayView::openCurFileopenFile failed ");
parameter["response"] = "";
}
}
void CodeDisplayView::openDir(json& parameter)
{
auto data = parameter["data"];
QString filename = CommonHelper::utf8ToQString(data["path"]);
//先用系统配置中的生成代码路径来确认位置
SysManager& sysMgr = GetSysManager();
QString fileFullPath = sysMgr._codeGeneratePath + "/" + filename;
// QString folderPath = "D:/测试db/DBConfig.dbp";
QString cmd = QString("explorer.exe /select,%1").arg(fileFullPath.replace('/', '\\'));
QProcess::startDetached(cmd);
}
void CodeDisplayView::saveCodeFile(json& parameter)
{
auto data = parameter["data"];
QString content = CommonHelper::utf8ToQString(data["content"]);
QString filename = CommonHelper::utf8ToQString(data["filePath"]);
SysManager& sysMgr = GetSysManager();
QString fileFullPath = sysMgr._codeGeneratePath + "/" + filename;
QFile sFile(fileFullPath);
//以重写、只写方式打开文件(运行到此时,文件已经存在目录中)
if (!sFile.open(QIODevice::Truncate | QIODevice::WriteOnly | QIODevice::Text))
printf("Open jsonfile failed!\n");
//写入文件内容
sFile.write(content.toStdString().c_str());
//关闭文件
sFile.close();
}