qt/LedOK/wProgramManager/wprogramitem.cpp
2022-08-25 18:37:24 +08:00

224 lines
8.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 "wprogramitem.h"
#include "tools.h"
#include "progeditorwin.h"
#include "mconverter.h"
#include "LoUIClass/loemptydialog.h"
#include "usbdetectdialog.h"
#include <globaldefine.h>
#include "sendprogramdialog.h"
#include "mainwindow.h"
wProgramItem::wProgramItem(const QString &pRoot, const QString &name, int w, int h, const QString &remarks, LoQTreeWidget *parent,QWidget *pWnd) :
QObject(parent),
QTreeWidgetItem(UserType),
m_parent(parent)
{
m_name = name;
m_width = w;
m_height = h;
m_remarks = remarks;
m_fsize = 0;
m_last = QDateTime::currentDateTime();
m_strSavePath = pRoot;
mProgDir = pRoot + MACRO_FENGEFU + m_name;
m_orgName = m_name;
m_pWnd = pWnd;
init();
emit sigEditProgram();
}
wProgramItem::wProgramItem(const QString &pRoot, const QJsonObject &json, LoQTreeWidget *parent,QWidget *pWnd) :
QObject(parent),
QTreeWidgetItem(UserType),
m_parent(parent)
{
m_name = json["name"].toString();
m_width = json["resolution"]["w"].toInt();
m_height = json["resolution"]["h"].toInt();
m_remarks = json["remarks"].toString();
m_fsize = json["file_size"].toDouble();
m_last = QDateTime::fromString(json["last_edit"].toString(), "yyyy-MM-dd hh:mm:ss");
m_strSavePath = pRoot;
mProgDir = pRoot + MACRO_FENGEFU + m_name;
m_orgName = m_name;
m_pWnd = pWnd;
init();
}
QString wProgramItem::GetBnName()
{
return m_bnName->text();
}
void wProgramItem::init()
{
auto cfg = Tools::getInstance();
setData(ENUM_PROGRAMLISTHEADERITEM_NAME, 0,m_name);
setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(m_width).arg(m_height));
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);
m_parent->insertTopLevelItem(0,this);
m_bnName = new QPushButton(m_name);
m_bnName->setStyleSheet(R"delimiter(
QPushButton{border-radius: 4px;}
QPushButton:hover {
background-color: #cccccc;
text-decoration: underline;
}
)delimiter");
m_bnName->setCursor(QCursor(Qt::PointingHandCursor));
m_parent->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_NAME, m_bnName);
connect(m_bnName, SIGNAL(clicked()), this, SLOT(onEditProgram()));
connect(this,SIGNAL(sigEditProgram()),this, SLOT(onEditProgram()));
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");
m_parent->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");
m_parent->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_SEND, m_bnSend);
connect(m_bnSend, SIGNAL(clicked()), this, SLOT(onSendProgram()));
}
void wProgramItem::refreshLable()
{
m_bnExport->setToolTip(tr("ExportButtonTip"));
m_bnSend->setToolTip(tr("SendButtonTip"));
}
QJsonObject wProgramItem::jRoot()
{
QJsonObject oRoot;
QJsonObject oSize;
oRoot["name"] = m_name;
oSize["w"] = m_width;
oSize["h"] = m_height;
oRoot["resolution"] = oSize;
oRoot["remarks"] = m_remarks;
oRoot["file_size"] = m_fsize;
oRoot["last_edit"] = m_last.toString("yyyy-MM-dd hh:mm:ss");
return oRoot;
}
void wProgramItem::save() {
QDir dRoot(mProgDir);
QDir dParent(m_strSavePath);
if(!dRoot.exists()) {
dParent.mkdir(m_name);
} else if(m_name != m_orgName) {
dParent.rename(m_orgName, m_name);
m_orgName = m_name;
mProgDir = m_strSavePath + MACRO_FENGEFU + m_name;
}
dRoot = QDir(mProgDir);
if(dRoot.exists()) {
QJsonDocument json(jRoot());
QFile f(mProgDir + MACRO_FENGEFU+"pro.json");
f.open(QIODevice::WriteOnly);
f.write(json.toJson());
f.close();
}
}
void wProgramItem::del()
{
QDir dRoot(mProgDir);
if(dRoot.exists()) {
dRoot.removeRecursively();
}
}
//设置列表项的值
void wProgramItem::onSetProgram()
{
auto cfg = Tools::getInstance();
m_bnName->setText(m_name);
setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(m_width).arg(m_height));
if(m_fsize<=0)
setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, cfg->convertFileSize(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"));
save();
}
void wProgramItem::onEditProgram() {
auto editor = new ProgEditorWin(m_name, m_width, m_height, m_remarks, mProgDir, m_strSavePath, gMainWin);
connect(editor, &ProgEditorWin::sProgramChanged, this, [this]{
m_last = QDateTime::currentDateTime();
m_fsize = dirFileSize(mProgDir);
onSetProgram();
});//编辑窗口发送节目变化信号到该ITEM响应属性变化槽函数
connect(editor, &ProgEditorWin::sProgramSaveAs, (ProgPanel*)m_pWnd, &ProgPanel::onCreateNewProgramOnOpenEditProgramWidget);//编辑窗口另存为按钮触发后发送信号到播放列表增加一行
editor->show();
}
void wProgramItem::onUsbExportProgram(){
auto pDlg = new UsbDetectDialog(gMainWin);
connect(pDlg, &UsbDetectDialog::acceptData, this, &wProgramItem::onUsbExportProgramPro);
pDlg->exec();
}
void wProgramItem::onUsbExportProgramPro(QString strPath, QString strPassword){
LoEmptyDialog * msgbox = new LoEmptyDialog(m_pWnd);
QString strUsbProgramName = m_name;
auto converter = new mConverter(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 wProgramItem::onSendProgram(){
LoEmptyDialog * msgbox = new LoEmptyDialog(m_pWnd);
//转换节目
auto converter = new mConverter(m_name, "", "", 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(m_pWnd, m_name, programsDir());
dlg->show();
}