aboutsummaryrefslogtreecommitdiff
path: root/lib/downloads/widgets/downloaditemwidget.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/widgets/downloaditemwidget.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/widgets/downloaditemwidget.cpp')
-rw-r--r--lib/downloads/widgets/downloaditemwidget.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/lib/downloads/widgets/downloaditemwidget.cpp b/lib/downloads/widgets/downloaditemwidget.cpp
new file mode 100644
index 0000000..fff3cfc
--- /dev/null
+++ b/lib/downloads/widgets/downloaditemwidget.cpp
@@ -0,0 +1,103 @@
+/*
+ * 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 "downloaditemwidget.h"
+#include "ui_downloaditemform.h"
+
+#include <QUrl>
+#include <QLabel>
+
+DownloadItemWidget::DownloadItemWidget(QWebEngineDownloadItem *item, QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::DownloadItemForm)
+{
+ m_item = item;
+
+ ui->setupUi(this);
+
+ ui->url_label->setContent(item->url().toString());
+ ui->detailsWidget->hide();
+
+ ui->path_label->setText(item->path());
+
+ connect(item, &QWebEngineDownloadItem::stateChanged, this, &DownloadItemWidget::updateState);
+ connect(item, &QWebEngineDownloadItem::downloadProgress, this, &DownloadItemWidget::updateProgress);
+ connect(item, &QWebEngineDownloadItem::finished, this, &DownloadItemWidget::updateFinished);
+}
+
+DownloadItemWidget::~DownloadItemWidget()
+{
+ delete ui;
+}
+
+void DownloadItemWidget::showDetails()
+{
+ ui->detailsWidget->show();
+}
+
+void DownloadItemWidget::hideDetails()
+{
+ ui->detailsWidget->hide();
+}
+
+QWebEngineDownloadItem *DownloadItemWidget::item() const
+{
+ return m_item;
+}
+
+QString DownloadItemWidget::sizeString(int size) const
+{
+ if(size < 1024) {
+ return QString("%1 bytes").arg(size);
+ }
+ // KiB
+ if(size < 1024 * 1024) {
+ return QString("%1 kB").arg(size / 1024);
+ }
+ // MiB
+ if(size < 1024 * 1024 * 1024) {
+ return QString("%1 MB").arg(size / (1024 * 1024));
+ }
+ // GiB
+ return QString("%1 GB").arg(size / (1024 * 1024 * 1024));
+}
+
+void DownloadItemWidget::updateState(QWebEngineDownloadItem::DownloadState state)
+{
+ switch (state) {
+ case QWebEngineDownloadItem::DownloadRequested:
+ ui->status_label->setText(tr("Requested"));
+ break;
+ case QWebEngineDownloadItem::DownloadInProgress:
+ ui->status_label->setText(tr("In progress"));
+ break;
+ case QWebEngineDownloadItem::DownloadCompleted:
+ ui->status_label->setText(tr("Completed"));
+ break;
+ case QWebEngineDownloadItem::DownloadCancelled:
+ ui->status_label->setText(tr("Cancelled"));
+ break;
+ case QWebEngineDownloadItem::DownloadInterrupted:
+ ui->status_label->setText(tr("Interrupted"));
+ break;
+ default:
+ break;
+ }
+}
+
+void DownloadItemWidget::updateProgress(qint64 value, qint64 total)
+{
+ ui->progressBar->setMaximum(total);
+ ui->progressBar->setValue(value);
+ ui->progressBar->setFormat(QString("%1 / %2").arg(sizeString(value), sizeString(total)));
+}
+
+void DownloadItemWidget::updateFinished()
+{
+ ui->progressBar->setValue(ui->progressBar->maximum());
+}