From 442ba9f09a8ee18609361f3971b5da7f40eb5c35 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 10 Oct 2017 19:25:44 +0200 Subject: Split off DownloadsWidget into library Fixed bug with BookmarksWidget crashing the program on exit --- src/widgets/dockingwidget.cpp | 82 ----------------------------- src/widgets/dockingwidget.h | 55 -------------------- src/widgets/downloaditemform.ui | 53 ------------------- src/widgets/downloaditemwidget.cpp | 102 ------------------------------------- src/widgets/downloaditemwidget.h | 52 ------------------- src/widgets/mainwindowmenubar.cpp | 11 +++- 6 files changed, 9 insertions(+), 346 deletions(-) delete mode 100644 src/widgets/dockingwidget.cpp delete mode 100644 src/widgets/dockingwidget.h delete mode 100644 src/widgets/downloaditemform.ui delete mode 100644 src/widgets/downloaditemwidget.cpp delete mode 100644 src/widgets/downloaditemwidget.h (limited to 'src/widgets') diff --git a/src/widgets/dockingwidget.cpp b/src/widgets/dockingwidget.cpp deleted file mode 100644 index e501f16..0000000 --- a/src/widgets/dockingwidget.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - ** - ** 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 . - ** - ******************************************************************************/ - -#include "dockingwidget.h" -#include "mainwindow.h" - -#include - -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(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 deleted file mode 100644 index 4b35758..0000000 --- a/src/widgets/dockingwidget.h +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - ** - ** 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 . - ** - ******************************************************************************/ - -#ifndef DOCKINGWIDGET_H -#define DOCKINGWIDGET_H - -#include -#include - -// 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 deleted file mode 100644 index 8a8d148..0000000 --- a/src/widgets/downloaditemform.ui +++ /dev/null @@ -1,53 +0,0 @@ - - - DownloadItemForm - - - - 0 - 0 - 500 - 70 - - - - Form - - - - - - [url] - - - - - - - - - Unknown - - - - - - - x MiB / y MiB - - - - - - - 24 - - - - - - - - - - diff --git a/src/widgets/downloaditemwidget.cpp b/src/widgets/downloaditemwidget.cpp deleted file mode 100644 index 02fc215..0000000 --- a/src/widgets/downloaditemwidget.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - ** - ** 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 . - ** - ******************************************************************************/ - -#include "downloaditemwidget.h" -#include "ui_downloaditemform.h" - -#include -#include - -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/widgets/downloaditemwidget.h b/src/widgets/downloaditemwidget.h deleted file mode 100644 index e2f764e..0000000 --- a/src/widgets/downloaditemwidget.h +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - ** - ** 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 . - ** - ******************************************************************************/ - -#ifndef DOWNLOADITEMFORM_H -#define DOWNLOADITEMFORM_H - -#include -#include - -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 diff --git a/src/widgets/mainwindowmenubar.cpp b/src/widgets/mainwindowmenubar.cpp index 95cb280..964d9fd 100644 --- a/src/widgets/mainwindowmenubar.cpp +++ b/src/widgets/mainwindowmenubar.cpp @@ -47,12 +47,19 @@ MainWindowMenuBar::MainWindowMenuBar(MainWindow *parent) : // Tools menu QMenu *toolsMenu = new QMenu(tr("Tools"), this); addMenu(toolsMenu); - QAction *downloadsAction = toolsMenu->addAction(tr("Downloads"), Browser::instance()->downloads(), SLOT(show())); + QAction *downloadsAction = toolsMenu->addAction(tr("Downloads")); downloadsAction->setParent(parent); downloadsAction->setShortcut(QKeySequence::fromString(browser->settings()->value("downloads.dialogShortcut").toString())); - QAction *bookmarksAction = toolsMenu->addAction(tr("Bookmarks"), Browser::instance()->bookmarks(), SLOT(show())); + connect(downloadsAction, &QAction::triggered, this, [&]() { + m_parentWindow->addTabbedDock(Qt::RightDockWidgetArea, browser->downloads()); + }); + + QAction *bookmarksAction = toolsMenu->addAction(tr("Bookmarks")); bookmarksAction->setParent(parent); bookmarksAction->setShortcut(QKeySequence(browser->settings()->value("bookmarks.dialogShortcut").toString())); + connect(bookmarksAction, &QAction::triggered, this, [&]() { + m_parentWindow->addTabbedDock(Qt::RightDockWidgetArea, browser->bookmarks()); + }); toolsMenu->addSeparator(); toolsMenu->addAction(tr("Filter"), browser->blocklists(), SLOT(show()), QKeySequence::fromString(browser->settings()->value("blocker.shortcut").toString())); -- cgit v1.2.1