From 72190e0977c0e352e5055e6f65bf2095efa77805 Mon Sep 17 00:00:00 2001 From: aqua Date: Sun, 28 Aug 2022 17:36:28 +0300 Subject: Add actions to RekonqView - back, forward, refresh, reload --- include/rview.hpp | 6 +++ plugins/webengine/webview.cpp | 6 +++ plugins/webengine/webview.h | 6 +++ src/CMakeLists.txt | 2 +- src/application.cpp | 2 +- src/rekonqwindow.cpp | 112 ++++++++++++++++++++++-------------------- src/rekonqwindow.h | 65 ------------------------ src/rekonqwindow.hpp | 60 ++++++++++++++++++++++ src/rekonqwindow.ui | 66 ++++++++++++++++++++++++- src/tabbar/tabbar.cpp | 1 - src/tabbar/tabbar.h | 6 +++ src/taskmanager.cpp | 2 +- src/test/rview_fake.h | 6 +++ 13 files changed, 217 insertions(+), 123 deletions(-) delete mode 100644 src/rekonqwindow.h create mode 100644 src/rekonqwindow.hpp diff --git a/include/rview.hpp b/include/rview.hpp index 46cba67c..f92aee7f 100644 --- a/include/rview.hpp +++ b/include/rview.hpp @@ -25,6 +25,12 @@ public: [[nodiscard]] virtual QString title() const = 0; [[nodiscard]] virtual QUrl url() const = 0; +public slots: + virtual void back() = 0; + virtual void forward() = 0; + virtual void refresh() = 0; + virtual void reload() = 0; + signals: void loadStarted(); void loadProgress(int); diff --git a/plugins/webengine/webview.cpp b/plugins/webengine/webview.cpp index fc2e4642..07385933 100644 --- a/plugins/webengine/webview.cpp +++ b/plugins/webengine/webview.cpp @@ -44,3 +44,9 @@ void WebView::load(const QUrl &url) { view->load(url); } QUrl WebView::url() const { return view->url(); } QString WebView::title() const { return view->title(); } QIcon WebView::icon() const { return view->icon(); } + +// slots +void WebView::back() { view->back(); } +void WebView::forward() { view->forward(); } +void WebView::refresh() { view->triggerPageAction(QWebEnginePage::Reload); } +void WebView::reload() { view->triggerPageAction(QWebEnginePage::ReloadAndBypassCache); } diff --git a/plugins/webengine/webview.h b/plugins/webengine/webview.h index 103b98b3..e4de8ac0 100644 --- a/plugins/webengine/webview.h +++ b/plugins/webengine/webview.h @@ -27,6 +27,12 @@ public: [[nodiscard]] QString title() const override; [[nodiscard]] QIcon icon() const override; +public slots: + void back() override; + void forward() override; + void refresh() override; + void reload() override; + private: QWebEngineView *view; int m_loadProgress = 0; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 75905f36..cc197ee3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,7 +13,7 @@ set(rekonq_SRCS #---------------------------------------- main.cpp application.cpp application_instance.cpp application.hpp #---------------------------------------- - rekonqwindow.cpp rekonqwindow.h rekonqwindow.ui + rekonqwindow.cpp rekonqwindow.hpp rekonqwindow.ui taskmanager.cpp taskmanager.h taskmanager.ui #---------------------------------------- plugins/rplugininterface.hpp diff --git a/src/application.cpp b/src/application.cpp index d18c0231..944d6ea1 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -12,7 +12,7 @@ #include "application.hpp" #include "plugins/pluginloader.h" #include "plugins/rplugininterface.hpp" -#include "rekonqwindow.h" +#include "rekonqwindow.hpp" #include "settings/settings.hpp" #include "settings/settingsdialog.h" #include diff --git a/src/rekonqwindow.cpp b/src/rekonqwindow.cpp index 4f3e57f1..094dc1ff 100644 --- a/src/rekonqwindow.cpp +++ b/src/rekonqwindow.cpp @@ -5,15 +5,14 @@ * Copyright (C) 2013 by Andrea Diamantini * SPDX-License-Identifier: GPL-3.0-only * Copyright (C) 2022 aqua - * ============================================================ - * Description: Main Window class * ============================================================ */ -#include "rekonqwindow.h" +#include "rekonqwindow.hpp" #include "application.hpp" #include "settings/settingsdialog.h" #include "taskmanager.h" #include "ui_rekonqwindow.h" +#include #include RekonqWindow::RekonqWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::RekonqWindow) @@ -29,8 +28,21 @@ RekonqWindow::RekonqWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::Re }); connect(ui->tabs, &TabBar::removeView, this, [this](RekonqView *view) { ui->views->removeWidget(view); }); + connect(ui->back, &QToolButton::clicked, this, [this]() { currentView()->back(); }); + connect(ui->forward, &QToolButton::clicked, this, [this]() { currentView()->forward(); }); + connect(ui->refresh, &QToolButton::clicked, this, [this]() { currentView()->refresh(); }); + connect(ui->home, &QToolButton::clicked, this, [this]() { loadUrl(QUrl()); }); + // connect menu actions // file menu + connect(ui->actionNewTab, &QAction::triggered, this, [this]() { + auto *app = Application::instance(); + Q_CHECK_PTR(app); + auto newTabUrl = app->settings()->value("newtab").toUrl(); + loadUrl(newTabUrl, rekonq::NewFocusedTab); + }); + connect(ui->actionCloseTab, &QAction::triggered, this, + [this]() { emit ui->tabs->tabCloseRequested(ui->tabs->currentIndex()); }); connect(ui->actionQuit, &QAction::triggered, qApp, &QApplication::quit); // edit menu // view menu @@ -49,79 +61,73 @@ RekonqWindow::RekonqWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::Re RekonqWindow::~RekonqWindow() { delete ui; } -void RekonqWindow::addView(RekonqView *view) +// -------------------------------------------------------------------------------------------------- + +RekonqView *RekonqWindow::currentView() +{ + auto *view = ui->tabs->view(ui->tabs->currentIndex()); + Q_CHECK_PTR(view); + return view; +} + +int RekonqWindow::addView(RekonqView *view) { Q_CHECK_PTR(view); ui->views->addWidget(view); - ui->tabs->addTab(view); - connect(view, &RekonqView::urlChanged, ui->urlBar, &UrlBar::setUrl); + const auto index = ui->tabs->addTab(view); + connect(view, &RekonqView::urlChanged, [this, view](const QUrl &url) { + if (view == currentView()) ui->urlBar->setUrl(url); + }); connect(view, &RekonqView::titleChanged, [this, view](const QString &title) { - const auto index = ui->views->indexOf(view); - ui->tabs->setTabText(index, view->title()); + const auto idx = ui->views->indexOf(view); + ui->tabs->setTabText(idx, title); + }); + connect(view, &RekonqView::iconChanged, [this, view](const QIcon &icon) { + const auto idx = ui->views->indexOf(view); + ui->tabs->setTabIcon(idx, icon); }); connect(view, &RekonqView::loadStarted, ui->urlBar, &UrlBar::loadStarted); connect(view, &RekonqView::loadProgress, ui->urlBar, &UrlBar::loadProgress); connect(view, &RekonqView::loadFinished, ui->urlBar, &UrlBar::loadFinished); -} - -/* -void RekonqWindow::init() -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - - if (ReKonfig::showBookmarksPanel()) - showBookmarksPanel(true); - - if (ReKonfig::showHistoryPanel()) - showHistoryPanel(true); - _splitter->addWidget(_tabWidget); - _tabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - l->addWidget(_splitter); - - // fix focus handling - setFocusProxy(_tabWidget); - - // signals - connect(_tabWidget, SIGNAL(closeWindow()), this, SLOT(close())); - connect(_tabWidget, SIGNAL(windowTitleChanged(QString)), this, SLOT(setWindowTitle(QString))); + return index; } -// -------------------------------------------------------------------------------------------------- - - -TabWidget *RekonqWindow::tabWidget() +void RekonqWindow::loadUrl(const QUrl &url, rekonq::OpenType type) { - return _tabWidget; -} - - -TabBar *RekonqWindow::tabBar() -{ - return _tabWidget->tabBar(); -} - - -WebWindow *RekonqWindow::currentWebWindow() const -{ - return _tabWidget->currentWebWindow(); + switch (type) { + case rekonq::CurrentTab: + currentView()->load(url); + break; + case rekonq::NewTab: + Application::instance()->newView(url, this); + break; + case rekonq::NewFocusedTab: + ui->tabs->setCurrentView(Application::instance()->newView(url, this)); + break; + case rekonq::NewBackGroundTab: + break; + case rekonq::NewWindow: + break; + case rekonq::NewPrivateWindow: + break; + case rekonq::WebApp: + Application::instance()->newView(url, nullptr); + break; + } } +// -------------------------------------------------------------------------------------------------- +/* bool RekonqWindow::isPrivateBrowsingMode() { return _tabWidget->isPrivateBrowsingWindowMode(); } -// -------------------------------------------------------------------------------------------------- void RekonqWindow::loadUrl(const KUrl &url, Rekonq::OpenType type, TabHistory *history) diff --git a/src/rekonqwindow.h b/src/rekonqwindow.h deleted file mode 100644 index e6316819..00000000 --- a/src/rekonqwindow.h +++ /dev/null @@ -1,65 +0,0 @@ -/* ============================================================ - * The rekonq project - * ============================================================ - * SPDX-License-Identifier: GPL-2.0-or-later - * Copyright (C) 2013 by Andrea Diamantini - * SPDX-License-Identifier: GPL-3.0-only - * Copyright (C) 2022 aqua - * ============================================================ - * Description: Main Window class - * ============================================================ */ - -#pragma once - -#include "rekonq.hpp" -//#include "rwindow.h" -//#include "tabwidget.h" -//#include "bookmarkspanel.h" -//#include "historypanel.h" -#include -#include - -// Forward Declarations -class RekonqView; -// class TabBar; -// class WebPage; -// class WebWindow; - -namespace Ui { -class RekonqWindow; -} - -class RekonqWindow : public QMainWindow { - Q_OBJECT - -public: - explicit RekonqWindow(QWidget *parent = nullptr); - // explicit RekonqWindow(WebPage *pg, QWidget *parent = 0); - ~RekonqWindow() override; - - // TabWidget *tabWidget(); - // TabBar *tabBar(); - // WebWindow *currentWebWindow() const; - - // bool isPrivateBrowsingMode(); - -private: - // void init(); - -public slots: - void addView(RekonqView *view); - // void loadUrl(const KUrl &, Rekonq::OpenType type = Rekonq::CurrentTab, TabHistory *history = 0); - -private slots: - // void showBookmarksPanel(bool); - // void showHistoryPanel(bool); - -private: - Ui::RekonqWindow *ui; - // TabWidget *_tabWidget; - - QSplitter *_splitter = nullptr; - - // QWeakPointer _historyPanel; - // QWeakPointer _bookmarksPanel; -}; diff --git a/src/rekonqwindow.hpp b/src/rekonqwindow.hpp new file mode 100644 index 00000000..ba1fd70f --- /dev/null +++ b/src/rekonqwindow.hpp @@ -0,0 +1,60 @@ +/* ============================================================ + * The rekonq project + * ============================================================ + * SPDX-License-Identifier: GPL-2.0-or-later + * Copyright (C) 2013 by Andrea Diamantini + * SPDX-License-Identifier: GPL-3.0-only + * Copyright (C) 2022 aqua + * ============================================================ + * Description: Main Window class + * ============================================================ */ + +#pragma once + +#include "rekonq.hpp" +//#include "rwindow.h" +//#include "tabwidget.h" +//#include "bookmarkspanel.h" +//#include "historypanel.h" +#include +#include + +// Forward Declarations +class RekonqView; +// class TabBar; +// class WebPage; +// class WebWindow; + +namespace Ui { +class RekonqWindow; +} + +class RekonqWindow : public QMainWindow { + Q_OBJECT + +public: + explicit RekonqWindow(QWidget *parent = nullptr); + ~RekonqWindow() override; + + [[nodiscard]] RekonqView *currentView(); + + // bool isPrivateBrowsingMode(); + +public slots: + int addView(RekonqView *view); + void loadUrl(const QUrl &url, rekonq::OpenType type = rekonq::CurrentTab); + // void loadUrl(const KUrl &, Rekonq::OpenType type = Rekonq::CurrentTab, TabHistory *history = 0); + +private slots: + // void showBookmarksPanel(bool); + // void showHistoryPanel(bool); + +private: + Ui::RekonqWindow *ui; + // TabWidget *_tabWidget; + + QSplitter *_splitter = nullptr; + + // QWeakPointer _historyPanel; + // QWeakPointer _bookmarksPanel; +}; diff --git a/src/rekonqwindow.ui b/src/rekonqwindow.ui index 9e3986e1..323a500a 100644 --- a/src/rekonqwindow.ui +++ b/src/rekonqwindow.ui @@ -22,9 +22,16 @@ + + border: none; + Add Tab + + + .. + @@ -36,6 +43,10 @@ Back + + + .. + @@ -43,6 +54,32 @@ Forward + + + .. + + + + + + + Reload + + + + .. + + + + + + + Home + + + + .. + @@ -53,6 +90,10 @@ Load + + + .. + @@ -60,6 +101,10 @@ Menu + + + .. + @@ -75,13 +120,16 @@ 0 0 800 - 22 + 30 File + + + @@ -159,6 +207,22 @@ About Qt + + + New Tab + + + Ctrl+T + + + + + Close Tab + + + Ctrl+W + + diff --git a/src/tabbar/tabbar.cpp b/src/tabbar/tabbar.cpp index c8624bda..9bb05d43 100644 --- a/src/tabbar/tabbar.cpp +++ b/src/tabbar/tabbar.cpp @@ -15,7 +15,6 @@ static inline QByteArray highlightPropertyName(int index) return QByteArray("hAnim").append(QByteArray::number(index)); } - // ------------------------------------------------------------------------------------ TabBar::TabBar(QWidget *parent) : QTabBar(parent) diff --git a/src/tabbar/tabbar.h b/src/tabbar/tabbar.h index c305d1b5..077255a4 100644 --- a/src/tabbar/tabbar.h +++ b/src/tabbar/tabbar.h @@ -29,6 +29,12 @@ public: QRect tabTextRect(int index); */ + void setCurrentView(RekonqView *view) + { + const auto index = m_views.indexOf(view); + setCurrentIndex(index); + } + signals: void removeView(RekonqView *); diff --git a/src/taskmanager.cpp b/src/taskmanager.cpp index ef1f44fb..6f90bf89 100644 --- a/src/taskmanager.cpp +++ b/src/taskmanager.cpp @@ -10,7 +10,7 @@ #include "taskmanager.h" #include "application.hpp" #include "plugins/pluginloader.h" -#include "rekonqwindow.h" +#include "rekonqwindow.hpp" #include "ui_taskmanager.h" TaskManager::TaskManager(QWidget *parent) : QDialog(parent), ui(new Ui::TaskManager) diff --git a/src/test/rview_fake.h b/src/test/rview_fake.h index 33685e7c..ebebe977 100644 --- a/src/test/rview_fake.h +++ b/src/test/rview_fake.h @@ -26,6 +26,12 @@ public: QString title() const override; QUrl url() const override; +public slots: + void back() override {} + void forward() override {} + void refresh() override {} + void reload() override {} + private: Ui::RekonqView_fake *ui; }; -- cgit v1.2.1