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> | 
