#include "progitem.h" #include "tools.h" #include "progeditorwin.h" #include "gentmpthread.h" #include "base/loemptydialog.h" #include "usbdetectdialog.h" #include #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; iinsertTopLevelItem(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(); }