165 lines
4.5 KiB
C++
165 lines
4.5 KiB
C++
|
||
#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::openCurFile:openFile 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();
|
||
} |