qt/LedOK/wProgramManager/progitem.cpp
2022-10-27 15:07:45 +08:00

182 lines
7.3 KiB
C++
Raw 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.

#include "progitem.h"
#include "tools.h"
#include "progeditorwin.h"
#include "gentmpthread.h"
#include "base/loemptydialog.h"
#include "usbdetectdialog.h"
#include <globaldefine.h>
#include "sendprogramdialog.h"
#include "mainwindow.h"
ProgItem::ProgItem(const QString &progsDir, const QString &name, int w, int h, const QString &remarks, int splitWidth, LoQTreeWidget *tree, ProgPanel *progPanel) : QTreeWidgetItem(UserType),
mName(name), mWidth(w), mHeight(h), mRemark(remarks), mSplitWidth(splitWidth), mProgsDir(progsDir), mProgPanel(progPanel), mTree(tree) {
m_last = QDateTime::currentDateTime();
mProgDir = progsDir + "/" + mName;
m_orgName = mName;
init();
}
ProgItem::ProgItem(const QString &progsDir, const QJsonObject &json, LoQTreeWidget *tree, ProgPanel *progPanel) : QTreeWidgetItem(UserType), mProgsDir(progsDir), mProgPanel(progPanel), mTree(tree) {
mName = json["name"].toString();
mWidth = json["resolution"]["w"].toInt();
mHeight = json["resolution"]["h"].toInt();
mRemark = json["remarks"].toString();
mSplitWidth = json["splitWidth"].toInt();
m_fsize = json["file_size"].toDouble();
m_last = QDateTime::fromString(json["last_edit"].toString(), "yyyy-MM-dd hh:mm:ss");
mProgDir = progsDir + "/" + mName;
m_orgName = mName;
mProgPanel = progPanel;
init();
}
void ProgItem::init()
{
auto cfg = Tools::getInstance();
setData(ENUM_PROGRAMLISTHEADERITEM_NAME, 0,mName);
setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(mWidth).arg(mHeight));
if(m_fsize<=0)
setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, cfg->convertFileSize((qint64)100));
else
setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, cfg->convertFileSize(m_fsize));
setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, 0, m_last.toString("yyyy-MM-dd hh:mm:ss"));
setTextAlignment(ENUM_PROGRAMLISTHEADERITEM_NAME, Qt::AlignLeft | Qt::AlignVCenter);
for(int i=1; i<ENUM_PROGRAMLISTHEADERITEM_END; i++) {
setTextAlignment(i, Qt::AlignCenter);
}
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
setCheckState(0, Qt::Unchecked);
mTree->insertTopLevelItem(0,this);
m_bnName = new QPushButton(mName);
m_bnName->setStyleSheet(R"delimiter(
QPushButton{border-radius: 4px;}
QPushButton:hover {
background-color: #cccccc;
text-decoration: underline;
}
)delimiter");
m_bnName->setCursor(QCursor(Qt::PointingHandCursor));
mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_NAME, m_bnName);
connect(m_bnName, &QPushButton::clicked, this, [this] {
auto editor = new ProgEditorWin(this, gMainWin);
editor->show();
});
m_bnExport = new QPushButton();
m_bnExport->setCursor(QCursor(Qt::PointingHandCursor));
m_bnExport->setToolTip(tr("ExportButtonTip"));
m_bnExport->setStyleSheet(R"rrr(
QPushButton {
border-radius: 4px;
image: url(:/res/ProgramManager/bnExport_u.png);
}
QPushButton:pressed{image: url(:/res/ProgramManager/bnExport_s.png);}
QPushButton:hover{background-color: #cccccc;}
)rrr");
mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, m_bnExport);
connect(m_bnExport, SIGNAL(clicked()), this, SLOT(onUsbExportProgram()));
m_bnSend = new QPushButton();
m_bnSend->setCursor(QCursor(Qt::PointingHandCursor));
m_bnSend->setToolTip(tr("SendButtonTip"));
m_bnSend->setStyleSheet(R"rrr(
QPushButton{
border-radius: 4px;
image: url(:/res/ProgramManager/bnSend_u.png);
}
QPushButton:pressed{image: url(:/res/ProgramManager/bnSend_s.png);}
QPushButton:hover{background-color: #cccccc;}
)rrr");
mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_SEND, m_bnSend);
connect(m_bnSend, SIGNAL(clicked()), this, SLOT(onSendProgram()));
}
void ProgItem::refreshLable() {
m_bnExport->setToolTip(tr("ExportButtonTip"));
m_bnSend->setToolTip(tr("SendButtonTip"));
}
void ProgItem::save() {
QDir dRoot(mProgDir);
QDir dParent(mProgsDir);
if(!dRoot.exists()) {
dParent.mkdir(mName);
} else if(mName != m_orgName) {
dParent.rename(m_orgName, mName);
m_orgName = mName;
mProgDir = mProgsDir + MACRO_FENGEFU + mName;
}
dRoot = QDir(mProgDir);
if(dRoot.exists()) {
QJsonObject obj;
QJsonObject oSize;
obj["name"] = mName;
obj["resolution"] = QJsonObject{{"w", mWidth}, {"h", mHeight}};
obj["remarks"] = mRemark;
obj["splitWidth"] = mSplitWidth;
obj["file_size"] = m_fsize;
obj["last_edit"] = m_last.toString("yyyy-MM-dd hh:mm:ss");
QJsonDocument json(obj);
QFile f(mProgDir + "/pro.json");
f.open(QIODevice::WriteOnly);
f.write(json.toJson());
f.close();
}
}
void ProgItem::del() {
QDir dRoot(mProgDir);
if(dRoot.exists()) dRoot.removeRecursively();
}
//设置列表项的值
void ProgItem::onSetProgram() {
auto cfg = Tools::getInstance();
m_bnName->setText(mName);
setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(mWidth).arg(mHeight));
setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, cfg->convertFileSize(m_fsize<=0 ? 100 : m_fsize));
setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, 0, m_last.toString("yyyy-MM-dd hh:mm:ss"));
save();
}
void ProgItem::onUsbExportProgram(){
auto pDlg = new UsbDetectDialog(gMainWin);
connect(pDlg, &UsbDetectDialog::acceptData, this, &ProgItem::onUsbExportProgramPro);
pDlg->exec();
}
void ProgItem::onUsbExportProgramPro(QString strPath, QString strPassword){
LoEmptyDialog *msgbox = new LoEmptyDialog(mProgPanel);
QString strUsbProgramName = mName;
auto converter = new GenTmpThread(this, strUsbProgramName, strPath + (strPath.endsWith('/') ? "program.zip" : "/program.zip"), strPassword, this);
connect(converter, &QThread::finished, converter, &QThread::deleteLater);
//转换结束发送信号触发converter释放内存
connect(converter, SIGNAL(finished()), msgbox, SLOT(unlock()));
connect(converter, SIGNAL(finished()), this, SLOT(UsbExportFinished()));
//链接转换进度信号到进度条槽函数
connect(converter, SIGNAL(sProgress(QString,int,bool)), msgbox->mIndicator, SLOT(onProgress(QString,int,bool)));
//链接进度对话框启动信号到转换开始槽函数
connect(msgbox, SIGNAL(startUp()), converter, SLOT(start()));
msgbox->lock(tr("Convertering")+"...",tr("USB Export Successed"),tr("USB Export TimeOut"));
msgbox->exec();
}
void ProgItem::onSendProgram(){
LoEmptyDialog *msgbox = new LoEmptyDialog(mProgPanel);
//转换节目
auto converter = new GenTmpThread(this, mName, "", "", this);
connect(converter, &QThread::finished, converter, &QThread::deleteLater);
//转换结束发送信号触发converter释放内存
connect(converter, SIGNAL(finished()), msgbox, SLOT(unlock()));
//链接转换进度信号到进度条槽函数
connect(converter, SIGNAL(sProgress(QString,int,bool)), msgbox->mIndicator, SLOT(onProgress(QString,int,bool)));
//链接进度对话框启动信号到转换开始槽函数
connect(msgbox, SIGNAL(startUp()), converter, SLOT(start()));
msgbox->lock(tr("Convertering")+"...",tr("Converter Successed"),tr("Converter TimeOut"));
msgbox->exec();
auto dlg = new SendProgramDialog(mProgPanel, mName, programsDir());
dlg->show();
}