diff options
-rw-r--r-- | src/forms/downloaddialog.cpp | 46 | ||||
-rw-r--r-- | src/forms/downloaddialog.h | 26 | ||||
-rw-r--r-- | src/forms/downloaddialog.ui | 67 | ||||
-rw-r--r-- | src/mainwindow.cpp | 5 | ||||
-rw-r--r-- | src/mainwindow.h | 2 | ||||
-rw-r--r-- | src/smolbote.pro | 12 | ||||
-rw-r--r-- | src/webengine/downloaditemform.cpp | 57 | ||||
-rw-r--r-- | src/webengine/downloaditemform.h | 28 | ||||
-rw-r--r-- | src/webengine/downloaditemform.ui | 57 |
9 files changed, 297 insertions, 3 deletions
diff --git a/src/forms/downloaddialog.cpp b/src/forms/downloaddialog.cpp new file mode 100644 index 0000000..4943fcc --- /dev/null +++ b/src/forms/downloaddialog.cpp @@ -0,0 +1,46 @@ +#include "downloaddialog.h" +#include "ui_downloaddialog.h" + +#include <QWebEngineDownloadItem> +#include <QUrl> +#include <QFileDialog> +#include <QListWidget> +#include <QLabel> +#include "webengine/downloaditemform.h" + +DownloadDialog::DownloadDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::DownloadDialog) +{ + ui->setupUi(this); +} + +DownloadDialog::~DownloadDialog() +{ + delete ui; +} + +void DownloadDialog::addDownload(QWebEngineDownloadItem *item) +{ + qDebug("download item: %s", qUtf8Printable(item->url().toString())); + QString filepath = QFileDialog::getSaveFileName(this, tr("Save")); + + 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); + + DownloadItemForm *form = new DownloadItemForm(item, this); + listItem->setSizeHint(form->size()); + ui->listWidget->setItemWidget(listItem, form); + + item->accept(); + this->show(); +} diff --git a/src/forms/downloaddialog.h b/src/forms/downloaddialog.h new file mode 100644 index 0000000..bec0037 --- /dev/null +++ b/src/forms/downloaddialog.h @@ -0,0 +1,26 @@ +#ifndef DOWNLOADDIALOG_H +#define DOWNLOADDIALOG_H + +#include <QDialog> + +namespace Ui { +class DownloadDialog; +} + +class QWebEngineDownloadItem; +class DownloadDialog : public QDialog +{ + Q_OBJECT + +public: + explicit DownloadDialog(QWidget *parent = 0); + ~DownloadDialog(); + +public slots: + void addDownload(QWebEngineDownloadItem *item); + +private: + Ui::DownloadDialog *ui; +}; + +#endif // DOWNLOADDIALOG_H diff --git a/src/forms/downloaddialog.ui b/src/forms/downloaddialog.ui new file mode 100644 index 0000000..75a6faa --- /dev/null +++ b/src/forms/downloaddialog.ui @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>DownloadDialog</class> + <widget class="QDialog" name="DownloadDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>640</width> + <height>480</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QListWidget" name="listWidget"/> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>DownloadDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>DownloadDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 638ba7f..9e028e4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -9,9 +9,11 @@ #include "forms/profiledialog.h"
#include <QApplication>
#include <QInputDialog>
+#include <QWebEngineDownloadItem>
MainWindow::MainWindow(Browser *instance, QUrl defaultUrl, QWidget *parent) :
QMainWindow(parent),
+ downloadManager(new DownloadDialog(this)),
ui(new Ui::MainWindow),
navigationToolBar(new QToolBar(this)),
tabToolBar(new QToolBar(this)),
@@ -43,6 +45,7 @@ MainWindow::MainWindow(Browser *instance, QUrl defaultUrl, QWidget *parent) : ui->menuBar->setCornerWidget(rightBar);
profileMenu->addAction(tr("Edit profile"), this, SLOT(createProfileDialog()));
profileMenu->addAction(tr("Load profile"), this, SLOT(handleLoadProfile()));
+ profileMenu->addAction(tr("Downloads"), downloadManager, SLOT(show()));
//profileMenu->addAction(tr("Settings"));
//profileMenu->addAction(tr("Cookies"));
@@ -99,6 +102,8 @@ void MainWindow::loadProfile(const QString &name) qDebug("Using profile: %s", qUtf8Printable(profileName));
profile = new WebEngineProfile(profileName, this);
}
+
+ connect(profile, SIGNAL(downloadRequested(QWebEngineDownloadItem*)), downloadManager, SLOT(addDownload(QWebEngineDownloadItem*)));
}
void MainWindow::handleLoadProfile()
diff --git a/src/mainwindow.h b/src/mainwindow.h index 2eedebf..2ad88b8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -8,6 +8,7 @@ #include "webengine/webengineprofile.h"
#include <QUrl>
#include "widgets/webviewtabbar.h"
+#include "forms/downloaddialog.h"
namespace Ui {
class MainWindow;
@@ -42,6 +43,7 @@ private slots: private:
Browser *browserInstance;
+ DownloadDialog *downloadManager;
QString profileName;
WebEngineProfile *profile = nullptr;
diff --git a/src/smolbote.pro b/src/smolbote.pro index d2eaa8c..bf7a05d 100644 --- a/src/smolbote.pro +++ b/src/smolbote.pro @@ -17,14 +17,20 @@ SOURCES += main.cpp \ widgets/webviewtabbar.cpp \ settings.cpp \ forms/profiledialog.cpp \ - webengine/webengineprofile.cpp + webengine/webengineprofile.cpp \ + forms/downloaddialog.cpp \ + webengine/downloaditemform.cpp HEADERS += mainwindow.h \ browser.h \ widgets/webviewtabbar.h \ settings.h \ forms/profiledialog.h \ - webengine/webengineprofile.h + webengine/webengineprofile.h \ + forms/downloaddialog.h \ + webengine/downloaditemform.h FORMS += mainwindow.ui \ - forms/profiledialog.ui + forms/profiledialog.ui \ + forms/downloaddialog.ui \ + webengine/downloaditemform.ui diff --git a/src/webengine/downloaditemform.cpp b/src/webengine/downloaditemform.cpp new file mode 100644 index 0000000..717a41d --- /dev/null +++ b/src/webengine/downloaditemform.cpp @@ -0,0 +1,57 @@ +#include "downloaditemform.h" +#include "ui_downloaditemform.h" + +#include <QUrl> +#include <QLabel> + +DownloadItemForm::DownloadItemForm(QWebEngineDownloadItem *item, QWidget *parent) : + QWidget(parent), + ui(new Ui::DownloadItemForm) +{ + ui->setupUi(this); + ui->url_lineEdit->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())); +} + +DownloadItemForm::~DownloadItemForm() +{ + delete ui; +} + +void DownloadItemForm::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 DownloadItemForm::updateProgress(qint64 value, qint64 total) +{ + ui->progressBar->setMaximum(total); + ui->progressBar->setValue(value); +} + +void DownloadItemForm::updateFinished() +{ + ui->progressBar->setMaximum(100); + ui->progressBar->setValue(100); +} diff --git a/src/webengine/downloaditemform.h b/src/webengine/downloaditemform.h new file mode 100644 index 0000000..996b876 --- /dev/null +++ b/src/webengine/downloaditemform.h @@ -0,0 +1,28 @@ +#ifndef DOWNLOADITEMFORM_H +#define DOWNLOADITEMFORM_H + +#include <QWidget> +#include <QWebEngineDownloadItem> + +namespace Ui { +class DownloadItemForm; +} + +class DownloadItemForm : public QWidget +{ + Q_OBJECT + +public: + explicit DownloadItemForm(QWebEngineDownloadItem *item, QWidget *parent = 0); + ~DownloadItemForm(); + +private slots: + void updateState(QWebEngineDownloadItem::DownloadState state); + void updateProgress(qint64 value, qint64 total); + void updateFinished(); + +private: + Ui::DownloadItemForm *ui; +}; + +#endif // DOWNLOADITEMFORM_H diff --git a/src/webengine/downloaditemform.ui b/src/webengine/downloaditemform.ui new file mode 100644 index 0000000..5aa46bd --- /dev/null +++ b/src/webengine/downloaditemform.ui @@ -0,0 +1,57 @@ +<?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>600</width> + <height>80</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>URL</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="url_lineEdit"> + <property name="enabled"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </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="QProgressBar" name="progressBar"> + <property name="value"> + <number>24</number> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> |