diff options
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/dockingwidget.cpp | 82 | ||||
| -rw-r--r-- | src/widgets/dockingwidget.h | 55 | ||||
| -rw-r--r-- | src/widgets/downloaditemform.ui | 53 | ||||
| -rw-r--r-- | src/widgets/downloaditemwidget.cpp | 102 | ||||
| -rw-r--r-- | src/widgets/downloaditemwidget.h | 52 | 
5 files changed, 344 insertions, 0 deletions
diff --git a/src/widgets/dockingwidget.cpp b/src/widgets/dockingwidget.cpp new file mode 100644 index 0000000..d7f7d30 --- /dev/null +++ b/src/widgets/dockingwidget.cpp @@ -0,0 +1,82 @@ +/** LICENSE ******************************************************************** + ** + ** 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 "dockingwidget.h" +#include "mainwindow.h" + +#include <QApplication> + +DockWidget::DockWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags) : +    QDockWidget(title, parent, flags) +{ +} + +void DockWidget::closeEvent(QCloseEvent *event) +{ +    setParent(0); +    event->ignore(); +} + +DockingWidget::DockingWidget(const QString &title, QWidget *parent) : +    QWidget(parent) +{ +    window = nullptr; +    dock = new DockWidget(title, 0); +    dock->setWidget(this); +    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + +    connect(qApp, &QApplication::aboutToQuit, [this]() { +        this->setParent(0); +    }); +} + +DockingWidget::~DockingWidget() +{ +    // If the dock has a parent, it will take care of it +    // calling delete later here if the dock has a parent causes a crash +    if(!dock->parent()) { +        dock->deleteLater(); +    } +} + +void DockingWidget::show() +{ +    MainWindow *caller = qobject_cast<MainWindow *>(sender()->parent()); +    // if already shown and on the same window - hide the widget +    if(isVisible() && window == caller) { +        dock->setParent(0); +        return; +    } + +    // show() gets called by a QAction in MainWindow +    window = caller; +    if(window) { + +        // dockable widgets +        dock->setParent(window); +        //window->addDockWidget(Qt::RightDockWidgetArea, dock); +        window->addTabbedDock(Qt::RightDockWidgetArea, dock); + +    } else { +        qWarning("DockingWidget not called by MainWindow"); +    } + +    QWidget::show(); +} diff --git a/src/widgets/dockingwidget.h b/src/widgets/dockingwidget.h new file mode 100644 index 0000000..bd1d210 --- /dev/null +++ b/src/widgets/dockingwidget.h @@ -0,0 +1,55 @@ +/** LICENSE ******************************************************************** + ** + ** 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 DOCKINGWIDGET_H +#define DOCKINGWIDGET_H + +#include <QWidget> +#include <QDockWidget> + +// Subclass DockWidget to disable QDockWidget from committing sudoku when closing +class DockWidget : public QDockWidget +{ +    Q_OBJECT + +public: +    explicit DockWidget(const QString &title, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags()); + +protected: +    void closeEvent(QCloseEvent *event); +}; + +class MainWindow; +class DockingWidget : public QWidget +{ +    Q_OBJECT +public: +    explicit DockingWidget(const QString &title, QWidget *parent = 0); +    ~DockingWidget(); + +public slots: +    void show(); + +private: +    MainWindow *window; +    DockWidget *dock; +}; + +#endif // DOCKINGWIDGET_H diff --git a/src/widgets/downloaditemform.ui b/src/widgets/downloaditemform.ui new file mode 100644 index 0000000..8a8d148 --- /dev/null +++ b/src/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/widgets/downloaditemwidget.cpp b/src/widgets/downloaditemwidget.cpp new file mode 100644 index 0000000..78b8a7c --- /dev/null +++ b/src/widgets/downloaditemwidget.cpp @@ -0,0 +1,102 @@ +/** LICENSE ******************************************************************** + ** + ** 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)).arg(sizeString(total))); +} + +void DownloadItemWidget::updateFinished() +{ +    ui->progressBar->setMaximum(100); +    ui->progressBar->setValue(100); +} diff --git a/src/widgets/downloaditemwidget.h b/src/widgets/downloaditemwidget.h new file mode 100644 index 0000000..a27f9a8 --- /dev/null +++ b/src/widgets/downloaditemwidget.h @@ -0,0 +1,52 @@ +/** LICENSE ******************************************************************** + ** + ** 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  | 
