aboutsummaryrefslogtreecommitdiffstats
path: root/examples/webenginewidgets/simplebrowser/downloadmanagerwidget.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/webenginewidgets/simplebrowser/downloadmanagerwidget.py')
-rw-r--r--examples/webenginewidgets/simplebrowser/downloadmanagerwidget.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/webenginewidgets/simplebrowser/downloadmanagerwidget.py b/examples/webenginewidgets/simplebrowser/downloadmanagerwidget.py
new file mode 100644
index 000000000..7096b8b57
--- /dev/null
+++ b/examples/webenginewidgets/simplebrowser/downloadmanagerwidget.py
@@ -0,0 +1,51 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+from PySide6.QtWebEngineCore import QWebEngineDownloadRequest
+from PySide6.QtWidgets import QWidget, QFileDialog
+from PySide6.QtCore import QDir, QFileInfo, Qt
+
+from downloadwidget import DownloadWidget
+from ui_downloadmanagerwidget import Ui_DownloadManagerWidget
+
+
+# Displays a list of downloads.
+class DownloadManagerWidget(QWidget):
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self._ui = Ui_DownloadManagerWidget()
+ self._num_downloads = 0
+ self._ui.setupUi(self)
+
+ def download_requested(self, download):
+ assert (download and download.state() == QWebEngineDownloadRequest.DownloadRequested)
+
+ proposal_dir = download.downloadDirectory()
+ proposal_name = download.downloadFileName()
+ proposal = QDir(proposal_dir).filePath(proposal_name)
+ path, _ = QFileDialog.getSaveFileName(self, "Save as", proposal)
+ if not path:
+ return
+
+ fi = QFileInfo(path)
+ download.setDownloadDirectory(fi.path())
+ download.setDownloadFileName(fi.fileName())
+ download.accept()
+ self.add(DownloadWidget(download))
+
+ self.show()
+
+ def add(self, downloadWidget):
+ downloadWidget.remove_clicked.connect(self.remove)
+ self._ui.m_itemsLayout.insertWidget(0, downloadWidget, 0, Qt.AlignTop)
+ if self._num_downloads == 0:
+ self._ui.m_zeroItemsLabel.hide()
+ self._num_downloads += 1
+
+ def remove(self, downloadWidget):
+ self._ui.m_itemsLayout.removeWidget(downloadWidget)
+ downloadWidget.deleteLater()
+ self._num_downloads -= 1
+ if self._num_downloads == 0:
+ self._ui.m_zeroItemsLabel.show()