/* ============================================================ * 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 * ============================================================ */ #include "rekonqwindow.hpp" #include "application.hpp" #include "settings/settingsdialog.h" #include "taskmanager.h" #include "ui_rekonqwindow.h" #include #include #ifdef QT_DEBUG #include "test/rview_fake.h" #endif RekonqWindow::RekonqWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::RekonqWindow) { ui->setupUi(this); connect(ui->tabs, &TabBar::currentChanged, this, [this](RekonqView *view) { if (view == nullptr) { // last tab has been closed close(); return; } ui->views->setCurrentWidget(view); ui->urlBar->setCurrentView(view); }); 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(rekonq::HomePage, rekonq::CurrentTab); }); // connect menu actions // file menu #ifdef QT_DEBUG { auto *actionNewDebugTab = new QAction(tr("New Debug Tab"), ui->menuFile); connect(actionNewDebugTab, &QAction::triggered, this, [this]() { addView(new RekonqView_fake(this)); }); ui->menuFile->insertAction(ui->actionNewTab, actionNewDebugTab); } #endif connect(ui->actionNewTab, &QAction::triggered, this, [this]() { loadUrl(rekonq::NewTabPage, 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 // history menu // bookmarks menu // settings menu connect(ui->actionSettings, &QAction::triggered, this, [this]() { (new SettingsDialog(Application::instance()->settings(), this))->show(); }); connect(ui->actionTaskManager, &QAction::triggered, this, [this]() { (new TaskManager(this))->show(); }); // help menu connect(ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt); connect(ui->newTab, &QToolButton::clicked, ui->actionNewTab, &QAction::trigger); } RekonqWindow::~RekonqWindow() { delete ui; } // -------------------------------------------------------------------------------------------------- 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); 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 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); return index; } void RekonqWindow::loadUrl(rekonq::DefaultUrl url, rekonq::OpenType type) { auto *settings = Application::instance()->settings(); switch (url) { case rekonq::NewTabPage: loadUrl(settings->value("newtab").toUrl(), type); break; case rekonq::HomePage: loadUrl(settings->value("homepage").toUrl(), type); break; case rekonq::AboutBlank: loadUrl(QUrl("about:blank"), type); break; } } void RekonqWindow::loadUrl(const QUrl &url, rekonq::OpenType type) { 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; } } // -------------------------------------------------------------------------------------------------- /* void RekonqWindow::showBookmarksPanel(bool on) { if (on) { if (_bookmarksPanel.isNull()) { _bookmarksPanel = new BookmarksPanel(i18n("Bookmarks Panel"), this); connect(_bookmarksPanel.data(), SIGNAL(openUrl(KUrl,Rekonq::OpenType)), this, SLOT(loadUrl(KUrl,Rekonq::OpenType))); QAction *a = _tabWidget->actionByName(QL1S("show_bookmarks_panel")); connect(_bookmarksPanel.data(), SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool))); } _splitter->insertWidget(0, _bookmarksPanel.data()); _bookmarksPanel.data()->show(); } else { _bookmarksPanel.data()->hide(); delete _bookmarksPanel.data(); _bookmarksPanel.clear(); } } void RekonqWindow::showHistoryPanel(bool on) { if (on) { if (_historyPanel.isNull()) { _historyPanel = new HistoryPanel(i18n("History Panel"), this); connect(_historyPanel.data(), SIGNAL(openUrl(KUrl,Rekonq::OpenType)), this, SLOT(loadUrl(KUrl,Rekonq::OpenType))); QAction *a = _tabWidget->actionByName(QL1S("show_history_panel")); connect(_historyPanel.data(), SIGNAL(visibilityChanged(bool)), a, SLOT(setChecked(bool))); } _splitter->insertWidget(0, _historyPanel.data()); _historyPanel.data()->show(); } else { _historyPanel.data()->hide(); delete _historyPanel.data(); _historyPanel.clear(); } } */