diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-10-10 19:25:44 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-10-10 19:25:44 +0200 |
commit | 442ba9f09a8ee18609361f3971b5da7f40eb5c35 (patch) | |
tree | fd612714e7df77ff3523a6773b6e9c3e60084809 /src/lib | |
parent | Cleaned up WebViewTabBar (diff) | |
download | smolbote-442ba9f09a8ee18609361f3971b5da7f40eb5c35.tar.xz |
Split off DownloadsWidget into library
Fixed bug with BookmarksWidget crashing the program on exit
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/bookmarks/bookmarkswidget.cpp | 9 | ||||
-rw-r--r-- | src/lib/bookmarks/bookmarkswidget.h | 5 | ||||
-rw-r--r-- | src/lib/downloads/downloads.qbs | 27 | ||||
-rw-r--r-- | src/lib/downloads/downloadsform.ui | 81 | ||||
-rw-r--r-- | src/lib/downloads/downloadswidget.cpp | 86 | ||||
-rw-r--r-- | src/lib/downloads/downloadswidget.h | 50 | ||||
-rw-r--r-- | src/lib/downloads/widgets/downloaditemform.ui | 53 | ||||
-rw-r--r-- | src/lib/downloads/widgets/downloaditemwidget.cpp | 102 | ||||
-rw-r--r-- | src/lib/downloads/widgets/downloaditemwidget.h | 52 |
9 files changed, 458 insertions, 7 deletions
diff --git a/src/lib/bookmarks/bookmarkswidget.cpp b/src/lib/bookmarks/bookmarkswidget.cpp index 38716ce..f2781da 100644 --- a/src/lib/bookmarks/bookmarkswidget.cpp +++ b/src/lib/bookmarks/bookmarkswidget.cpp @@ -24,11 +24,12 @@ #include <QUrl> BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent) : - DockingWidget(tr("Bookmarks"), parent), + QWidget(parent), ui(new Ui::BookmarksDialog) { // make sure this dialog does not get deleted on close setAttribute(Qt::WA_DeleteOnClose, false); + setWindowTitle(tr("Bookmarks")); ui->setupUi(this); ui->treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch); @@ -49,13 +50,13 @@ BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent) : xbel = new Xbel(ui->treeWidget); xbel->read(m_path); - connect(ui->addFolder_toolButton, &QToolButton::clicked, [this]() { + connect(ui->addFolder_toolButton, &QToolButton::clicked, this, [&]() { xbel->addFolder(ui->treeWidget->currentItem()); }); - connect(ui->addBookmark_toolButton, &QToolButton::clicked, [this]() { + connect(ui->addBookmark_toolButton, &QToolButton::clicked, this, [&]() { xbel->addBookmark(ui->treeWidget->currentItem()); }); - connect(ui->addSeparator_toolButton, &QToolButton::clicked, [this]() { + connect(ui->addSeparator_toolButton, &QToolButton::clicked, this, [&]() { xbel->addSeparator(ui->treeWidget->currentItem()); }); } diff --git a/src/lib/bookmarks/bookmarkswidget.h b/src/lib/bookmarks/bookmarkswidget.h index a31cfea..86f83be 100644 --- a/src/lib/bookmarks/bookmarkswidget.h +++ b/src/lib/bookmarks/bookmarkswidget.h @@ -21,15 +21,14 @@ #ifndef BOOKMARKSDIALOG_H #define BOOKMARKSDIALOG_H -#include "widgets/dockingwidget.h" -#include <QDockWidget> +#include <QWidget> #include "xbel.h" namespace Ui { class BookmarksDialog; } -class BookmarksWidget : public DockingWidget +class BookmarksWidget : public QWidget { Q_OBJECT diff --git a/src/lib/downloads/downloads.qbs b/src/lib/downloads/downloads.qbs new file mode 100644 index 0000000..121b425 --- /dev/null +++ b/src/lib/downloads/downloads.qbs @@ -0,0 +1,27 @@ +import qbs 1.0 + +Project { + name: "downloads" + + StaticLibrary { + id: downloads + name: "downloads" + + cpp.includePaths: ['../..'] + + Depends { + name: "Qt" + versionAtLeast: "5.9.0" + submodules: ["core", "widgets", "webenginewidgets"] + } + + files: [ + "downloadsform.ui", + "downloadswidget.cpp", + "downloadswidget.h", + "widgets/downloaditemform.ui", + "widgets/downloaditemwidget.cpp", + "widgets/downloaditemwidget.h", + ] + } +} diff --git a/src/lib/downloads/downloadsform.ui b/src/lib/downloads/downloadsform.ui new file mode 100644 index 0000000..5ab770f --- /dev/null +++ b/src/lib/downloads/downloadsform.ui @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>DownloadDialog</class> + <widget class="QWidget" name="DownloadDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>420</width> + <height>600</height> + </rect> + </property> + <property name="minimumSize"> + <size> + <width>420</width> + <height>600</height> + </size> + </property> + <property name="windowTitle"> + <string>Downloads</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QListWidget" name="listWidget"/> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Details</string> + </property> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="mimeType"> + <property name="text"> + <string>Type</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="mimeType_label"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="filePath"> + <property name="text"> + <string>Path</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="fileSize"> + <property name="text"> + <string>Size</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="fileSize_label"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="filePath_label"> + <property name="text"> + <string/> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/lib/downloads/downloadswidget.cpp b/src/lib/downloads/downloadswidget.cpp new file mode 100644 index 0000000..651e5a7 --- /dev/null +++ b/src/lib/downloads/downloadswidget.cpp @@ -0,0 +1,86 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#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 path, QWidget *parent) : + QWidget(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); + ui->filePath->setWordWrap(true); + + m_downloadPath = path; + + connect(ui->listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(showItemDetails(int))); +} + +DownloadsWidget::~DownloadsWidget() +{ + qDebug("Destroying DownloadsManager"); + + delete ui; +} + +void DownloadsWidget::addDownload(QWebEngineDownloadItem *item) +{ + 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); + listItem->setSizeHint(form->size()); + ui->listWidget->setItemWidget(listItem, form); + + item->accept(); + this->show(); +} + +void DownloadsWidget::showItemDetails(int index) +{ + DownloadItemWidget *form = qobject_cast<DownloadItemWidget *>(ui->listWidget->itemWidget(ui->listWidget->item(index))); + ui->mimeType_label->setText(form->item()->mimeType()); + ui->filePath_label->setText(form->item()->path()); + ui->fileSize_label->setText(QString("%1 bytes").arg(form->item()->totalBytes())); +} diff --git a/src/lib/downloads/downloadswidget.h b/src/lib/downloads/downloadswidget.h new file mode 100644 index 0000000..8bfff48 --- /dev/null +++ b/src/lib/downloads/downloadswidget.h @@ -0,0 +1,50 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef DOWNLOADDIALOG_H +#define DOWNLOADDIALOG_H + +#include <QWidget> + +namespace Ui { +class DownloadDialog; +} + +class QWebEngineDownloadItem; +class DownloadsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit DownloadsWidget(const QString path, QWidget *parent = 0); + ~DownloadsWidget(); + +public slots: + void addDownload(QWebEngineDownloadItem *item); + +private slots: + void showItemDetails(int index); + +private: + Ui::DownloadDialog *ui; + QString m_downloadPath; +}; + +#endif // DOWNLOADDIALOG_H diff --git a/src/lib/downloads/widgets/downloaditemform.ui b/src/lib/downloads/widgets/downloaditemform.ui new file mode 100644 index 0000000..8a8d148 --- /dev/null +++ b/src/lib/downloads/widgets/downloaditemform.ui @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>DownloadItemForm</class> + <widget class="QWidget" name="DownloadItemForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>500</width> + <height>70</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="url_label"> + <property name="text"> + <string>[url]</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="status_label"> + <property name="text"> + <string>Unknown</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="filesize_label"> + <property name="text"> + <string>x MiB / y MiB</string> + </property> + </widget> + </item> + <item> + <widget class="QProgressBar" name="progressBar"> + <property name="value"> + <number>24</number> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/lib/downloads/widgets/downloaditemwidget.cpp b/src/lib/downloads/widgets/downloaditemwidget.cpp new file mode 100644 index 0000000..02fc215 --- /dev/null +++ b/src/lib/downloads/widgets/downloaditemwidget.cpp @@ -0,0 +1,102 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#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->setText(item->url().toString()); + + connect(item, SIGNAL(stateChanged(QWebEngineDownloadItem::DownloadState)), this, SLOT(updateState(QWebEngineDownloadItem::DownloadState))); + connect(item, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateProgress(qint64,qint64))); + connect(item, SIGNAL(finished()), this, SLOT(updateFinished())); +} + +DownloadItemWidget::~DownloadItemWidget() +{ + delete ui; +} + +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->filesize_label->setText(QString("%1 / %2").arg(sizeString(value), sizeString(total))); +} + +void DownloadItemWidget::updateFinished() +{ + ui->progressBar->setMaximum(100); + ui->progressBar->setValue(100); +} diff --git a/src/lib/downloads/widgets/downloaditemwidget.h b/src/lib/downloads/widgets/downloaditemwidget.h new file mode 100644 index 0000000..e2f764e --- /dev/null +++ b/src/lib/downloads/widgets/downloaditemwidget.h @@ -0,0 +1,52 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef DOWNLOADITEMFORM_H +#define DOWNLOADITEMFORM_H + +#include <QWidget> +#include <QWebEngineDownloadItem> + +namespace Ui { +class DownloadItemForm; +} + +class DownloadItemWidget : public QWidget +{ + Q_OBJECT + +public: + explicit DownloadItemWidget(QWebEngineDownloadItem *item, QWidget *parent = 0); + ~DownloadItemWidget(); + + QWebEngineDownloadItem *item() const; + QString sizeString(int size) const; + +private slots: + void updateState(QWebEngineDownloadItem::DownloadState state); + void updateProgress(qint64 value, qint64 total); + void updateFinished(); + +private: + Ui::DownloadItemForm *ui; + QWebEngineDownloadItem *m_item; +}; + +#endif // DOWNLOADITEMFORM_H |