diff options
Diffstat (limited to 'src/lib/navigation')
| -rw-r--r-- | src/lib/navigation/navigation.qbs | 2 | ||||
| -rw-r--r-- | src/lib/navigation/navigationbutton.cpp | 110 | ||||
| -rw-r--r-- | src/lib/navigation/navigationbutton.h | 58 | 
3 files changed, 170 insertions, 0 deletions
| diff --git a/src/lib/navigation/navigation.qbs b/src/lib/navigation/navigation.qbs index 7ffb3ee..ebe2713 100644 --- a/src/lib/navigation/navigation.qbs +++ b/src/lib/navigation/navigation.qbs @@ -18,6 +18,8 @@ Project {          files: [              "addressbar.cpp",              "addressbar.h", +            "navigationbutton.cpp", +            "navigationbutton.h",              "urllineedit.cpp",              "urllineedit.h",          ] diff --git a/src/lib/navigation/navigationbutton.cpp b/src/lib/navigation/navigationbutton.cpp new file mode 100644 index 0000000..7065535 --- /dev/null +++ b/src/lib/navigation/navigationbutton.cpp @@ -0,0 +1,110 @@ +/******************************************************************************* + ** + ** 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 <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#include "navigationbutton.h" + +#include <QStyle> +#include <QWebEngineHistory> +#include <QMenu> + +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); +        break; +    case ForwardButton: +        setIcon(style()->standardIcon(QStyle::SP_ArrowForward)); +        setMenu(menu); +        break; +    } + +    connect(this, &NavigationButton::clicked, this, &NavigationButton::doAction); +    connect(menu, &QMenu::aboutToShow, this, &NavigationButton::prepareMenu); +} + + +void NavigationButton::setView(const WebView *view) +{ +    disconnect(loadFinishedConnection); + +    m_view = view; +    updateEnableState(); +    loadFinishedConnection = connect(view, &WebView::loadFinished, this, &NavigationButton::updateEnableState); +} + +void NavigationButton::updateEnableState() +{ +    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; +    } +} + +void NavigationButton::doAction() +{ +    switch (m_type) { +    case BackButton: +        m_view->history()->back(); +        break; +    case ForwardButton: +        m_view->history()->forward(); +        break; +    } +} + +void NavigationButton::prepareMenu() +{ +    menu->clear(); + +    QList<QWebEngineHistoryItem> items; +    switch (m_type) { +    case BackButton: +        items = m_view->history()->backItems(10); +        break; +    case ForwardButton: +        items = m_view->history()->forwardItems(10); +        break; +    } + +    for(QWebEngineHistoryItem i : items) { +        QAction *a = menu->addAction(i.title()); +        connect(a, &QAction::triggered, [i, this]() { +            m_view->history()->goToItem(i); +        }); +    } +} diff --git a/src/lib/navigation/navigationbutton.h b/src/lib/navigation/navigationbutton.h new file mode 100644 index 0000000..44e3ceb --- /dev/null +++ b/src/lib/navigation/navigationbutton.h @@ -0,0 +1,58 @@ +/******************************************************************************* + ** + ** 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 <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef NAVIGATIONBUTTON_H +#define NAVIGATIONBUTTON_H + +#include <QToolButton> +#include <webengine/webview.h> + +class QMenu; + +class NavigationButton : public QToolButton +{ +    Q_OBJECT +public: + +    enum Type { +        BackButton, +        ForwardButton +    }; + +    explicit NavigationButton(Type type, QWidget *parent = nullptr); + +    void setView(const WebView *view); + +signals: + +private slots: +    void updateEnableState(); +    void doAction(); +    void prepareMenu(); + +private: +    Type m_type; +    QMenu *menu; +    const WebView *m_view; + +    QMetaObject::Connection loadFinishedConnection; +}; + +#endif // NAVIGATIONBUTTON_H | 
