2022-09-30 18:08:39 +08:00
|
|
|
|
#include "progitem.h"
|
2023-04-18 14:14:46 +08:00
|
|
|
|
#include "gutil/qcore.h"
|
2022-08-25 18:37:24 +08:00
|
|
|
|
#include "tools.h"
|
|
|
|
|
#include "progeditorwin.h"
|
2023-04-18 14:14:46 +08:00
|
|
|
|
#include "base/waitingdlg.h"
|
2022-10-27 15:07:45 +08:00
|
|
|
|
#include "gentmpthread.h"
|
|
|
|
|
#include "base/loemptydialog.h"
|
2022-01-04 18:11:48 +08:00
|
|
|
|
#include "usbdetectdialog.h"
|
|
|
|
|
#include <globaldefine.h>
|
|
|
|
|
#include "sendprogramdialog.h"
|
|
|
|
|
#include "mainwindow.h"
|
2023-04-18 14:14:46 +08:00
|
|
|
|
#include <QJsonArray>
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2023-04-18 14:14:46 +08:00
|
|
|
|
ProgItem::ProgItem(const QString &progsDir, const QString &name, int w, int h, const QString &remarks, QList<int> &splitWidths, int maxWidth, LoQTreeWidget *tree, ProgPanel *progPanel) : QTreeWidgetItem(UserType),
|
|
|
|
|
mName(name), mWidth(w), mHeight(h), mRemark(remarks), mSplitWidths(splitWidths), mMaxWidth(maxWidth), mProgsDir(progsDir), mProgPanel(progPanel), mTree(tree) {
|
2022-10-27 15:07:45 +08:00
|
|
|
|
m_last = QDateTime::currentDateTime();
|
|
|
|
|
mProgDir = progsDir + "/" + mName;
|
|
|
|
|
m_orgName = mName;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
init();
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-27 15:07:45 +08:00
|
|
|
|
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();
|
2023-04-18 14:14:46 +08:00
|
|
|
|
auto splitWidths = json["splitWidths"].toArray();
|
|
|
|
|
foreach(auto splitWidth, splitWidths) {
|
|
|
|
|
int width = splitWidth.toInt();
|
|
|
|
|
if(mMaxWidth < width) mMaxWidth = width;
|
|
|
|
|
mSplitWidths.append(width);
|
|
|
|
|
}
|
2022-10-27 15:07:45 +08:00
|
|
|
|
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;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
init();
|
|
|
|
|
}
|
2022-09-30 18:08:39 +08:00
|
|
|
|
|
2023-04-18 14:14:46 +08:00
|
|
|
|
void ProgItem::init() {
|
|
|
|
|
setForeground(ENUM_PROGRAMLISTHEADERITEM_NAME, Qt::transparent);
|
|
|
|
|
setText(ENUM_PROGRAMLISTHEADERITEM_NAME, mName);
|
2022-10-27 15:07:45 +08:00
|
|
|
|
setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(mWidth).arg(mHeight));
|
2023-04-18 14:14:46 +08:00
|
|
|
|
if(m_fsize<=0) setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, byteSizeStr((qint64)100));
|
|
|
|
|
else setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, byteSizeStr(m_fsize));
|
2022-01-04 18:11:48 +08:00
|
|
|
|
setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, 0, m_last.toString("yyyy-MM-dd hh:mm:ss"));
|
|
|
|
|
setTextAlignment(ENUM_PROGRAMLISTHEADERITEM_NAME, Qt::AlignLeft | Qt::AlignVCenter);
|
2023-04-18 14:14:46 +08:00
|
|
|
|
for(int i=1; i<ENUM_PROGRAMLISTHEADERITEM_END; i++) setTextAlignment(i, Qt::AlignCenter);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
|
|
|
|
|
setCheckState(0, Qt::Unchecked);
|
2022-10-27 15:07:45 +08:00
|
|
|
|
mTree->insertTopLevelItem(0,this);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-10-27 15:07:45 +08:00
|
|
|
|
m_bnName = new QPushButton(mName);
|
2022-08-25 18:37:24 +08:00
|
|
|
|
m_bnName->setStyleSheet(R"delimiter(
|
|
|
|
|
QPushButton{border-radius: 4px;}
|
|
|
|
|
QPushButton:hover {
|
|
|
|
|
background-color: #cccccc;
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
}
|
|
|
|
|
)delimiter");
|
|
|
|
|
|
2022-01-04 18:11:48 +08:00
|
|
|
|
m_bnName->setCursor(QCursor(Qt::PointingHandCursor));
|
2022-10-27 15:07:45 +08:00
|
|
|
|
mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_NAME, m_bnName);
|
|
|
|
|
connect(m_bnName, &QPushButton::clicked, this, [this] {
|
2023-04-27 15:06:24 +08:00
|
|
|
|
ProgEditorWin editor(this, gMainWin);
|
|
|
|
|
editor.exec();
|
2022-10-27 15:07:45 +08:00
|
|
|
|
});
|
2022-01-04 18:11:48 +08:00
|
|
|
|
m_bnExport = new QPushButton();
|
|
|
|
|
m_bnExport->setCursor(QCursor(Qt::PointingHandCursor));
|
|
|
|
|
m_bnExport->setToolTip(tr("ExportButtonTip"));
|
2022-08-25 18:37:24 +08:00
|
|
|
|
m_bnExport->setStyleSheet(R"rrr(
|
|
|
|
|
QPushButton {
|
|
|
|
|
border-radius: 4px;
|
2023-04-18 14:14:46 +08:00
|
|
|
|
image: url(:/res/program/bnExport_u.png);
|
2022-08-25 18:37:24 +08:00
|
|
|
|
}
|
2023-04-18 14:14:46 +08:00
|
|
|
|
QPushButton:pressed{image: url(:/res/program/bnExport_s.png);}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
QPushButton:hover{background-color: #cccccc;}
|
|
|
|
|
)rrr");
|
|
|
|
|
|
2022-10-27 15:07:45 +08:00
|
|
|
|
mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, m_bnExport);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
connect(m_bnExport, SIGNAL(clicked()), this, SLOT(onUsbExportProgram()));
|
|
|
|
|
|
|
|
|
|
m_bnSend = new QPushButton();
|
|
|
|
|
m_bnSend->setCursor(QCursor(Qt::PointingHandCursor));
|
|
|
|
|
m_bnSend->setToolTip(tr("SendButtonTip"));
|
2022-08-25 18:37:24 +08:00
|
|
|
|
m_bnSend->setStyleSheet(R"rrr(
|
|
|
|
|
QPushButton{
|
|
|
|
|
border-radius: 4px;
|
2023-04-18 14:14:46 +08:00
|
|
|
|
image: url(:/res/program/bnSend_u.png);
|
2022-08-25 18:37:24 +08:00
|
|
|
|
}
|
2023-04-18 14:14:46 +08:00
|
|
|
|
QPushButton:pressed{image: url(:/res/program/bnSend_s.png);}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
QPushButton:hover{background-color: #cccccc;}
|
|
|
|
|
)rrr");
|
|
|
|
|
|
2022-10-27 15:07:45 +08:00
|
|
|
|
mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_SEND, m_bnSend);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
connect(m_bnSend, SIGNAL(clicked()), this, SLOT(onSendProgram()));
|
|
|
|
|
}
|
2022-10-27 15:07:45 +08:00
|
|
|
|
void ProgItem::refreshLable() {
|
2022-01-04 18:11:48 +08:00
|
|
|
|
m_bnExport->setToolTip(tr("ExportButtonTip"));
|
|
|
|
|
m_bnSend->setToolTip(tr("SendButtonTip"));
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-30 18:08:39 +08:00
|
|
|
|
void ProgItem::save() {
|
2022-08-25 18:37:24 +08:00
|
|
|
|
QDir dRoot(mProgDir);
|
2022-10-27 15:07:45 +08:00
|
|
|
|
QDir dParent(mProgsDir);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
if(!dRoot.exists()) {
|
2022-10-27 15:07:45 +08:00
|
|
|
|
dParent.mkdir(mName);
|
|
|
|
|
} else if(mName != m_orgName) {
|
|
|
|
|
dParent.rename(m_orgName, mName);
|
|
|
|
|
m_orgName = mName;
|
2023-04-18 14:14:46 +08:00
|
|
|
|
mProgDir = mProgsDir + "/" + mName;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
dRoot = QDir(mProgDir);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
if(dRoot.exists()) {
|
2022-10-27 15:07:45 +08:00
|
|
|
|
QJsonObject obj;
|
|
|
|
|
QJsonObject oSize;
|
|
|
|
|
obj["name"] = mName;
|
|
|
|
|
obj["resolution"] = QJsonObject{{"w", mWidth}, {"h", mHeight}};
|
|
|
|
|
obj["remarks"] = mRemark;
|
2023-04-18 14:14:46 +08:00
|
|
|
|
QJsonArray splitWidths;
|
|
|
|
|
foreach(auto splitWidth, mSplitWidths) splitWidths.append(splitWidth);
|
|
|
|
|
obj["splitWidths"] = splitWidths;
|
2022-10-27 15:07:45 +08:00
|
|
|
|
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");
|
2022-01-04 18:11:48 +08:00
|
|
|
|
f.open(QIODevice::WriteOnly);
|
|
|
|
|
f.write(json.toJson());
|
|
|
|
|
f.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-27 15:07:45 +08:00
|
|
|
|
void ProgItem::del() {
|
2022-08-25 18:37:24 +08:00
|
|
|
|
QDir dRoot(mProgDir);
|
2022-10-27 15:07:45 +08:00
|
|
|
|
if(dRoot.exists()) dRoot.removeRecursively();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
//设置列表项的值
|
2022-10-27 15:07:45 +08:00
|
|
|
|
void ProgItem::onSetProgram() {
|
|
|
|
|
m_bnName->setText(mName);
|
|
|
|
|
setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(mWidth).arg(mHeight));
|
2023-04-18 14:14:46 +08:00
|
|
|
|
setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, byteSizeStr(m_fsize<=0 ? 100 : m_fsize));
|
2022-01-04 18:11:48 +08:00
|
|
|
|
setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, 0, m_last.toString("yyyy-MM-dd hh:mm:ss"));
|
|
|
|
|
save();
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-30 18:08:39 +08:00
|
|
|
|
void ProgItem::onUsbExportProgram(){
|
2022-08-25 18:37:24 +08:00
|
|
|
|
auto pDlg = new UsbDetectDialog(gMainWin);
|
2022-09-30 18:08:39 +08:00
|
|
|
|
connect(pDlg, &UsbDetectDialog::acceptData, this, &ProgItem::onUsbExportProgramPro);
|
2022-08-25 18:37:24 +08:00
|
|
|
|
pDlg->exec();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2023-04-18 14:14:46 +08:00
|
|
|
|
void ProgItem::onUsbExportProgramPro(QString strPath, QString strPassword) {
|
|
|
|
|
auto waitingDlg = new WaitingDlg(mProgPanel, tr("Convertering")+" ...");
|
|
|
|
|
auto converter = new GenTmpThread(this, mName, strPath + (strPath.endsWith('/') ? "program.zip" : "/program.zip"), strPassword, this);
|
|
|
|
|
connect(converter, &QThread::finished, waitingDlg, &WaitingDlg::success);
|
|
|
|
|
connect(converter, &GenTmpThread::sProgress, waitingDlg->mIndicator, &CustomProgressIndicator::onProgress);
|
|
|
|
|
converter->start();
|
|
|
|
|
waitingDlg->exec();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-04-18 14:14:46 +08:00
|
|
|
|
void ProgItem::onSendProgram() {
|
|
|
|
|
auto waitingDlg = new WaitingDlg(mProgPanel, tr("Convertering")+" ...");
|
2022-10-27 15:07:45 +08:00
|
|
|
|
auto converter = new GenTmpThread(this, mName, "", "", this);
|
2023-04-18 14:14:46 +08:00
|
|
|
|
connect(converter, &QThread::finished, waitingDlg, &WaitingDlg::close);
|
|
|
|
|
connect(converter, &GenTmpThread::sProgress, waitingDlg->mIndicator, &CustomProgressIndicator::onProgress);
|
|
|
|
|
converter->start();
|
|
|
|
|
waitingDlg->exec();
|
|
|
|
|
SendProgramDialog dlg(mName, mProgPanel);
|
|
|
|
|
dlg.exec();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|