From 85d9f14aa8bac16ab341662c770b64a15c21628b Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Wed, 3 Jan 2018 16:39:32 +0100 Subject: Changed from qbs to cmake --- lib/navigation/navigationbutton.cpp | 141 ++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 lib/navigation/navigationbutton.cpp (limited to 'lib/navigation/navigationbutton.cpp') diff --git a/lib/navigation/navigationbutton.cpp b/lib/navigation/navigationbutton.cpp new file mode 100644 index 0000000..13daebc --- /dev/null +++ b/lib/navigation/navigationbutton.cpp @@ -0,0 +1,141 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: git://neueland.iserlohn-fortress.net/smolbote.git + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "navigationbutton.h" + +#include +#include +#include + +NavigationButton::NavigationButton(Type type, QWidget *parent) : + QToolButton(parent) +{ + m_type = type; + menu = new QMenu(this); + + switch (type) { + case BackButton: + setIcon(style()->standardIcon(QStyle::SP_ArrowBack)); + setMenu(menu); + connect(menu, &QMenu::aboutToShow, this, &NavigationButton::prepareMenu); + break; + case ForwardButton: + setIcon(style()->standardIcon(QStyle::SP_ArrowForward)); + setMenu(menu); + connect(menu, &QMenu::aboutToShow, this, &NavigationButton::prepareMenu); + break; + case ReloadButton: + setIcon(style()->standardIcon(QStyle::SP_BrowserReload)); + break; + case StopButton: + setIcon(style()->standardIcon(QStyle::SP_BrowserStop)); + break; + } + + connect(this, &NavigationButton::clicked, this, &NavigationButton::doAction); + +} + + +void NavigationButton::setView(WebView *view) +{ + disconnect(loadStartedConnection); + disconnect(loadFinishedConnection); + + m_view = view; + if(m_type == BackButton || m_type == ForwardButton) { + updateOnLoadFinished(); + } + + loadStartedConnection = connect(view, &WebView::loadStarted, this, &NavigationButton::updateOnLoadStarted); + loadFinishedConnection = connect(view, &WebView::loadFinished, this, &NavigationButton::updateOnLoadFinished); +} + +void NavigationButton::updateOnLoadStarted() +{ + switch (m_type) { + case BackButton: + break; + case ForwardButton: + break; + case ReloadButton: + m_type = StopButton; + setIcon(style()->standardIcon(QStyle::SP_BrowserStop)); + break; + case StopButton: + break; + } +} + +void NavigationButton::updateOnLoadFinished() +{ + switch (m_type) { + case BackButton: + if(m_view->history()->canGoBack()) { + setEnabled(true); + } else { + setEnabled(false); + } + break; + case ForwardButton: + if(m_view->history()->canGoForward()) { + setEnabled(true); + } else { + setEnabled(false); + } + break; + case ReloadButton: + break; + case StopButton: + m_type = ReloadButton; + setIcon(style()->standardIcon(QStyle::SP_BrowserReload)); + break; + } +} + +void NavigationButton::doAction() +{ + switch (m_type) { + case BackButton: + m_view->history()->back(); + break; + case ForwardButton: + m_view->history()->forward(); + break; + case ReloadButton: + m_view->reload(); + break; + case StopButton: + m_view->stop(); + break; + } +} + +void NavigationButton::prepareMenu() +{ + menu->clear(); + + QList items; + switch (m_type) { + case BackButton: + items = m_view->history()->backItems(10); + break; + case ForwardButton: + items = m_view->history()->forwardItems(10); + break; + default: + break; + } + + for(QWebEngineHistoryItem i : items) { + QAction *a = menu->addAction(i.title()); + connect(a, &QAction::triggered, [i, this]() { + m_view->history()->goToItem(i); + }); + } +} -- cgit v1.2.1