aboutsummaryrefslogtreecommitdiff
path: root/lib/downloads/downloadswidget.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-01-03 16:39:32 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-01-03 16:39:32 +0100
commit85d9f14aa8bac16ab341662c770b64a15c21628b (patch)
tree422db18e798646cd4bc98abf342f25c09c0bdf1d /lib/downloads/downloadswidget.cpp
parentDownload items' width should no longer exceed the list width (diff)
downloadsmolbote-85d9f14aa8bac16ab341662c770b64a15c21628b.tar.xz
Changed from qbs to cmake
Diffstat (limited to 'lib/downloads/downloadswidget.cpp')
-rw-r--r--lib/downloads/downloadswidget.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/downloads/downloadswidget.cpp b/lib/downloads/downloadswidget.cpp
new file mode 100644
index 0000000..f9a8f34
--- /dev/null
+++ b/lib/downloads/downloadswidget.cpp
@@ -0,0 +1,91 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "downloadswidget.h"
+#include "ui_downloadsform.h"
+
+#include <QWebEngineDownloadItem>
+#include <QUrl>
+#include <QFileDialog>
+#include <QListWidget>
+#include <QLabel>
+#include "widgets/downloaditemwidget.h"
+
+DownloadsWidget::DownloadsWidget(const QString &downloadPath, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::DownloadDialog)
+{
+ // make sure this dialog does not get deleted on close
+ setAttribute(Qt::WA_DeleteOnClose, false);
+ setWindowTitle(tr("Downloads"));
+
+ ui->setupUi(this);
+
+ m_downloadPath = downloadPath;
+
+ connect(ui->listWidget, &QListWidget::currentItemChanged, this, [this](QListWidgetItem *current, QListWidgetItem *previous) {
+ DownloadItemWidget *currentWidget = qobject_cast<DownloadItemWidget*>(ui->listWidget->itemWidget(current));
+ currentWidget->showDetails();
+ currentWidget->setFixedWidth(ui->listWidget->viewport()->width());
+ currentWidget->adjustSize();
+ current->setSizeHint(currentWidget->size());
+
+ DownloadItemWidget *previousWidget = qobject_cast<DownloadItemWidget*>(ui->listWidget->itemWidget(previous));
+ if(previousWidget != nullptr) {
+ previousWidget->hideDetails();
+ previousWidget->setFixedWidth(ui->listWidget->viewport()->width());
+ previousWidget->adjustSize();
+ previous->setSizeHint(previousWidget->size());
+ }
+ });
+}
+
+DownloadsWidget::~DownloadsWidget()
+{
+ delete ui;
+}
+
+void DownloadsWidget::addDownload(QWebEngineDownloadItem *item)
+{
+ this->show();
+
+ QString filepath = QFileDialog::getSaveFileName(this,
+ tr("Save"),
+ m_downloadPath + "/" + QFileInfo(item->path()).fileName());
+
+ if(filepath.isEmpty()) {
+ // user cancelled the save dialog
+ item->cancel();
+ return;
+ }
+
+ item->setPath(filepath);
+
+ QListWidgetItem *listItem = new QListWidgetItem();
+ int rowIndex = ui->listWidget->count();
+ ui->listWidget->insertItem(rowIndex, listItem);
+
+ DownloadItemWidget *form = new DownloadItemWidget(item, this);
+ ui->listWidget->setItemWidget(listItem, form);
+
+ item->accept();
+
+ ui->listWidget->setCurrentRow(rowIndex);
+}
+
+void DownloadsWidget::resizeEvent(QResizeEvent *event)
+{
+ QWidget::resizeEvent(event);
+
+ for(int i = 0; i < ui->listWidget->count(); ++i) {
+ QWidget *w = ui->listWidget->itemWidget(ui->listWidget->item(i));
+ w->setFixedWidth(ui->listWidget->viewport()->width());
+ w->adjustSize();
+ ui->listWidget->item(i)->setSizeHint(w->size());
+ }
+}