玉兔远程控制 0.1.0-bate4
载入中...
搜索中...
未找到
FrmDownloadManager.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QFileDialog>
4#include <QLoggingCategory>
5#include <QScrollArea>
6#include <QUrl>
7#include <QFileInfo>
8#include <QDir>
9#include "FrmDownloadManager.h"
10
11static Q_LOGGING_CATEGORY(log, "WebBrowser.Download.Manager")
13 : QWidget{parent}
14 , m_nCount(0)
15 , m_pItems(nullptr)
16 , m_pPara(para)
17{
18 setWindowTitle(tr("Download manager"));
19 auto layout = new QVBoxLayout(this);
20 setLayout(layout);
21 auto scroll = new QScrollArea(this);
22 scroll->setWidgetResizable(true);
23 layout->addWidget(scroll);
24 QWidget *pWin = new QWidget(scroll);
25 scroll->setWidget(pWin);
26 m_pItems = new QVBoxLayout(pWin);
27 pWin->setLayout (m_pItems);
28 m_pItems->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding));
29 resize(600, 300);
30}
31
32CFrmDownloadManager::~CFrmDownloadManager()
33{
34 qDebug(log) << Q_FUNC_INFO;
35}
36
37void CFrmDownloadManager::slotDownloadRequested(QWebEngineDownloadRequest *download)
38{
39 qDebug(log) << Q_FUNC_INFO;
40 Q_ASSERT(download && download->state() == QWebEngineDownloadRequest::DownloadRequested);
41 QString szPath;
42 szPath = m_pPara->GetDownloadFolder();
43 if(m_pPara->GetShowDownloadLocation()) {
44 szPath = QFileDialog::getExistingDirectory(this, tr("Save as ......"), szPath);
45 if(szPath.isEmpty())
46 return;
47 }
48
49#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
50 download->setDownloadDirectory(szPath);
51 qDebug(log) << "slotDownloadRequested:" << download->downloadDirectory() << download->downloadFileName() << download->url();
52#else
53 QFileInfo fi(download->path());
54 download->setPath(szPath + QDir::separator() + fi.fileName());
55 qDebug(log) << "slotDownloadRequested:" << download->path() << download->url();
56#endif
57 auto pDownload = new CFrmDownload(download);
58 Add(pDownload);
59 if(m_pPara) {
60 if(m_pPara->GetShowDownloadManager()) {
61 show();
62 activateWindow();
63 }
64 }
65}
66
67void CFrmDownloadManager::Add(CFrmDownload *item)
68{
69 if(!item || !m_pItems) return;
70 bool check = connect(item, &CFrmDownload::sigRemoveClicked, this, &CFrmDownloadManager::Remove);
71 Q_ASSERT(check);
72 check = connect(item, &CFrmDownload::sigSelected, this, &CFrmDownloadManager::slotSelected);
73 Q_ASSERT(check);
74 m_pItems->insertWidget(0, item, 0, Qt::AlignTop);
75 m_nCount++;
76}
77
78void CFrmDownloadManager::Remove(CFrmDownload *item)
79{
80 if(!item || !m_pItems) return;
81 m_pItems->removeWidget(item);
82 item->deleteLater();
83 m_nCount--;
84}
85
86void CFrmDownloadManager::slotSelected(CFrmDownload *item)
87{
88 for(int i = 0; i < m_pItems->count(); i++)
89 {
90 auto it = m_pItems->itemAt(i);
91 if(!it) continue;
92 auto w = it->widget();
93 if(!w) continue;
94 if(w == item) {
95 item->setFrameShadow(QFrame::Sunken);
96 }
97 }
98 item->setFrameShadow(QFrame::Raised);
99}
100
101void CFrmDownloadManager::showEvent(QShowEvent *event)
102{
103 emit sigVisible(true);
104}
105
106void CFrmDownloadManager::hideEvent(QHideEvent *event)
107{
108 emit sigVisible(false);
109}