From 32693ab1efcd708f0eba06c33fb5b52a59fd377b Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Mon, 20 Mar 2017 16:27:03 +0100 Subject: Fixed opening bookmarks with multiple windows --- smolbote.qbs | 6 +-- src/browser.cpp | 4 +- src/browser.h | 6 +-- src/forms/bookmarksdialog.cpp | 114 --------------------------------------- src/forms/bookmarksdialog.h | 60 --------------------- src/forms/bookmarksdialog.ui | 118 ---------------------------------------- src/forms/bookmarksform.ui | 104 +++++++++++++++++++++++++++++++++++ src/forms/bookmarkswidget.cpp | 122 ++++++++++++++++++++++++++++++++++++++++++ src/forms/bookmarkswidget.h | 62 +++++++++++++++++++++ 9 files changed, 296 insertions(+), 300 deletions(-) delete mode 100644 src/forms/bookmarksdialog.cpp delete mode 100644 src/forms/bookmarksdialog.h delete mode 100644 src/forms/bookmarksdialog.ui create mode 100644 src/forms/bookmarksform.ui create mode 100644 src/forms/bookmarkswidget.cpp create mode 100644 src/forms/bookmarkswidget.h diff --git a/smolbote.qbs b/smolbote.qbs index 21e0165..46af2d5 100644 --- a/smolbote.qbs +++ b/smolbote.qbs @@ -79,9 +79,9 @@ Project { Group { name: "bookmarks" files: [ - "src/forms/bookmarksdialog.cpp", - "src/forms/bookmarksdialog.h", - "src/forms/bookmarksdialog.ui", + "src/forms/bookmarksform.ui", + "src/forms/bookmarkswidget.cpp", + "src/forms/bookmarkswidget.h", "src/xbel.cpp", "src/xbel.h", ] diff --git a/src/browser.cpp b/src/browser.cpp index 2c7115d..f96a881 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -99,7 +99,7 @@ bool Browser::preLaunch(QStringList urls) } m_networkAccessManager = new QNetworkAccessManager(); - m_bookmarksManager = new BookmarksDialog; + m_bookmarksManager = new BookmarksWidget; m_downloadManager = new DownloadDialog; QtWebEngine::initialize(); @@ -122,7 +122,7 @@ QNetworkAccessManager *Browser::network() return m_networkAccessManager; } -BookmarksDialog *Browser::bookmarks() +BookmarksWidget *Browser::bookmarks() { return m_bookmarksManager; } diff --git a/src/browser.h b/src/browser.h index a6820c8..41a55f3 100644 --- a/src/browser.h +++ b/src/browser.h @@ -23,7 +23,7 @@ #include #include -#include "forms/bookmarksdialog.h" +#include "forms/bookmarkswidget.h" #include "forms/downloaddialog.h" #include #include "settings.h" @@ -54,7 +54,7 @@ public: Settings *settings(); QNetworkAccessManager *network(); - BookmarksDialog *bookmarks(); + BookmarksWidget *bookmarks(); DownloadDialog *downloads(); void setConfigPath(const QString &path); @@ -72,7 +72,7 @@ private: QLocalServer *m_localServer; QVector m_windows; QNetworkAccessManager *m_networkAccessManager; - BookmarksDialog *m_bookmarksManager; + BookmarksWidget *m_bookmarksManager; DownloadDialog *m_downloadManager; }; diff --git a/src/forms/bookmarksdialog.cpp b/src/forms/bookmarksdialog.cpp deleted file mode 100644 index becac56..0000000 --- a/src/forms/bookmarksdialog.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/** 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 . - ** - ******************************************************************************/ - -#include "bookmarksdialog.h" -#include "ui_bookmarksdialog.h" -#include "browser.h" -#include -#include - -BookmarksDialog::BookmarksDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::BookmarksDialog) -{ - // make sure this dialog does not get deleted on close - setAttribute(Qt::WA_DeleteOnClose, false); - - ui->setupUi(this); - ui->treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch); - - QStyle *style = ui->treeWidget->style(); - ui->addFolder_toolButton->setIcon(style->standardPixmap(QStyle::SP_DirIcon)); - ui->addBookmark_toolButton->setIcon(style->standardPixmap(QStyle::SP_FileIcon)); - ui->addSeparator_toolButton->setText("---"); - ui->deleteItem_toolButton->setIcon(style->standardPixmap(QStyle::SP_TrashIcon)); - - connect(ui->treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(showItemDetails())); - connect(ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(openItem(QTreeWidgetItem*,int))); - - ui->deleteItem_toolButton->setShortcut(QKeySequence::Delete); - connect(ui->deleteItem_toolButton, SIGNAL(clicked(bool)), this, SLOT(deleteCurrentItem())); - - xbel = new Xbel(ui->treeWidget); - xbel->read(sSettings->value("bookmarks.path").toString()); - - connect(ui->addFolder_toolButton, &QToolButton::clicked, [this]() { - xbel->addFolder(ui->treeWidget->currentItem()); - }); - connect(ui->addBookmark_toolButton, &QToolButton::clicked, [this]() { - xbel->addBookmark(ui->treeWidget->currentItem()); - }); - connect(ui->addSeparator_toolButton, &QToolButton::clicked, [this]() { - xbel->addSeparator(ui->treeWidget->currentItem()); - }); -} - -BookmarksDialog::~BookmarksDialog() -{ - qDebug("Destroying BookmarksManager"); - - if(ui->treeWidget->topLevelItemCount() > 0) { - xbel->write(sSettings->value("bookmarks.path").toString()); - } - - delete xbel; - delete ui; -} - -void BookmarksDialog::show() -{ - // show() is called by a QAction in MainWindow - w = qobject_cast(sender()->parent()); - - // dockable widgets - QDockWidget *bookmarksDock = new QDockWidget(tr("Bookmarks"), w); - bookmarksDock->setWidget(this); - bookmarksDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - w->addDockWidget(Qt::RightDockWidgetArea, bookmarksDock); - bookmarksDock->setFloating(true); - - QDialog::show(); -} - -void BookmarksDialog::deleteCurrentItem() -{ - delete ui->treeWidget->currentItem(); -} - -void BookmarksDialog::openItem(QTreeWidgetItem *item, int column) -{ - Q_UNUSED(column) - - if(w) { - w->addNewTab(QUrl::fromUserInput(item->text(1))); - } -} - -void BookmarksDialog::showItemDetails() -{ - QTreeWidgetItem *item = ui->treeWidget->currentItem(); - if(!item) { - ui->title_lineEdit->setText(""); - ui->href_label->setText(""); - return; - } - ui->title_lineEdit->setText(item->text(0)); - ui->href_lineEdit->setText(item->text(1)); -} diff --git a/src/forms/bookmarksdialog.h b/src/forms/bookmarksdialog.h deleted file mode 100644 index 0fcab42..0000000 --- a/src/forms/bookmarksdialog.h +++ /dev/null @@ -1,60 +0,0 @@ -/** 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 . - ** - ******************************************************************************/ - -#ifndef BOOKMARKSDIALOG_H -#define BOOKMARKSDIALOG_H - -#include -#include "xbel.h" -#include "mainwindow.h" - -namespace Ui { -class BookmarksDialog; -} - -class BookmarksDialog : public QDialog -{ - Q_OBJECT - -public: - explicit BookmarksDialog(QWidget *parent = 0); - ~BookmarksDialog(); - -signals: - void openUrl(const QUrl &url); - -public slots: - void show(); - // void addFolder(const QString &title); - // void addBookmark(const QString &title, const QString &href); - // void addSeparator(); - void deleteCurrentItem(); - -private slots: - void openItem(QTreeWidgetItem *item, int column); - void showItemDetails(); - -private: - MainWindow *w; - Ui::BookmarksDialog *ui; - Xbel *xbel; -}; - -#endif // BOOKMARKSDIALOG_H diff --git a/src/forms/bookmarksdialog.ui b/src/forms/bookmarksdialog.ui deleted file mode 100644 index f528528..0000000 --- a/src/forms/bookmarksdialog.ui +++ /dev/null @@ -1,118 +0,0 @@ - - - BookmarksDialog - - - - 0 - 0 - 820 - 480 - - - - Bookmarks - - - - - - - - true - - - QAbstractItemView::InternalMove - - - Qt::MoveAction - - - - Title - - - - - href - - - - - - - - - - - - ... - - - - - - - ... - - - - - - - ... - - - - - - - ... - - - - - - - - - - 250 - 0 - - - - - 250 - 16777215 - - - - Details - - - - - - href - - - - - - - - - - - - - - - - - - - - - diff --git a/src/forms/bookmarksform.ui b/src/forms/bookmarksform.ui new file mode 100644 index 0000000..2df0c4b --- /dev/null +++ b/src/forms/bookmarksform.ui @@ -0,0 +1,104 @@ + + + BookmarksDialog + + + + 0 + 0 + 420 + 600 + + + + + 420 + 600 + + + + Bookmarks + + + + + + + + ... + + + + + + + ... + + + + + + + ... + + + + + + + ... + + + + + + + + + true + + + QAbstractItemView::InternalMove + + + Qt::MoveAction + + + + Title + + + + + href + + + + + + + + Details + + + + + + href + + + + + + + + + + + + + + + + + diff --git a/src/forms/bookmarkswidget.cpp b/src/forms/bookmarkswidget.cpp new file mode 100644 index 0000000..8985fff --- /dev/null +++ b/src/forms/bookmarkswidget.cpp @@ -0,0 +1,122 @@ +/** 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 . + ** + ******************************************************************************/ + +#include "bookmarkswidget.h" +#include "ui_bookmarksform.h" +#include "browser.h" +#include + +BookmarksWidget::BookmarksWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::BookmarksDialog) +{ + // make sure this dialog does not get deleted on close + setAttribute(Qt::WA_DeleteOnClose, false); + + ui->setupUi(this); + ui->treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch); + + window = nullptr; + dock = new QDockWidget(tr("Bookmarks"), 0); + dock->setWidget(this); + dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + + QStyle *style = ui->treeWidget->style(); + ui->addFolder_toolButton->setIcon(style->standardPixmap(QStyle::SP_DirIcon)); + ui->addBookmark_toolButton->setIcon(style->standardPixmap(QStyle::SP_FileIcon)); + ui->addSeparator_toolButton->setText("---"); + ui->deleteItem_toolButton->setIcon(style->standardPixmap(QStyle::SP_TrashIcon)); + + connect(ui->treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(showItemDetails())); + connect(ui->treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(openItem(QTreeWidgetItem*,int))); + + ui->deleteItem_toolButton->setShortcut(QKeySequence::Delete); + connect(ui->deleteItem_toolButton, SIGNAL(clicked(bool)), this, SLOT(deleteCurrentItem())); + + xbel = new Xbel(ui->treeWidget); + xbel->read(sSettings->value("bookmarks.path").toString()); + + connect(ui->addFolder_toolButton, &QToolButton::clicked, [this]() { + xbel->addFolder(ui->treeWidget->currentItem()); + }); + connect(ui->addBookmark_toolButton, &QToolButton::clicked, [this]() { + xbel->addBookmark(ui->treeWidget->currentItem()); + }); + connect(ui->addSeparator_toolButton, &QToolButton::clicked, [this]() { + xbel->addSeparator(ui->treeWidget->currentItem()); + }); +} + +BookmarksWidget::~BookmarksWidget() +{ + qDebug("Destroying BookmarksManager"); + + if(ui->treeWidget->topLevelItemCount() > 0) { + xbel->write(sSettings->value("bookmarks.path").toString()); + } + + delete xbel; + delete ui; +} + +void BookmarksWidget::show() +{ + // show() gets called by a QAction in MainWindow + window = qobject_cast(sender()->parent()); + if(window) { + + // dockable widgets + dock->setParent(window); + window->addDockWidget(Qt::RightDockWidgetArea, dock); + + } else { + qWarning("BookmarksWidget not called by MainWindow"); + } + + QWidget::show(); +} + +void BookmarksWidget::deleteCurrentItem() +{ + delete ui->treeWidget->currentItem(); +} + +void BookmarksWidget::openItem(QTreeWidgetItem *item, int column) +{ + Q_UNUSED(column) + + if(window) { + window->addNewTab(QUrl::fromUserInput(item->text(1))); + } else { + qWarning("Trying to open a link without a MainWindow set"); + } +} + +void BookmarksWidget::showItemDetails() +{ + QTreeWidgetItem *item = ui->treeWidget->currentItem(); + if(!item) { + ui->title_lineEdit->setText(""); + ui->href_label->setText(""); + return; + } + ui->title_lineEdit->setText(item->text(0)); + ui->href_lineEdit->setText(item->text(1)); +} diff --git a/src/forms/bookmarkswidget.h b/src/forms/bookmarkswidget.h new file mode 100644 index 0000000..9164079 --- /dev/null +++ b/src/forms/bookmarkswidget.h @@ -0,0 +1,62 @@ +/** 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 . + ** + ******************************************************************************/ + +#ifndef BOOKMARKSDIALOG_H +#define BOOKMARKSDIALOG_H + +#include +#include +#include "xbel.h" +#include "mainwindow.h" + +namespace Ui { +class BookmarksDialog; +} + +class BookmarksWidget : public QWidget +{ + Q_OBJECT + +public: + explicit BookmarksWidget(QWidget *parent = 0); + ~BookmarksWidget(); + +signals: + void openUrl(const QUrl &url); + +public slots: + void show(); + // void addFolder(const QString &title); + // void addBookmark(const QString &title, const QString &href); + // void addSeparator(); + void deleteCurrentItem(); + +private slots: + void openItem(QTreeWidgetItem *item, int column); + void showItemDetails(); + +private: + MainWindow *window; + QDockWidget *dock; + Ui::BookmarksDialog *ui; + Xbel *xbel; +}; + +#endif // BOOKMARKSDIALOG_H -- cgit v1.2.1