summaryrefslogtreecommitdiff
path: root/src/webenginequick/api/qquickwebenginehistory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webenginequick/api/qquickwebenginehistory.cpp')
-rw-r--r--src/webenginequick/api/qquickwebenginehistory.cpp355
1 files changed, 355 insertions, 0 deletions
diff --git a/src/webenginequick/api/qquickwebenginehistory.cpp b/src/webenginequick/api/qquickwebenginehistory.cpp
new file mode 100644
index 000000000..50feb067c
--- /dev/null
+++ b/src/webenginequick/api/qquickwebenginehistory.cpp
@@ -0,0 +1,355 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qquickwebenginehistory_p.h"
+#include "qquickwebenginehistory_p_p.h"
+
+#include "qquickwebenginefaviconprovider_p_p.h"
+#include "qquickwebengineview_p_p.h"
+#include "web_contents_adapter.h"
+
+QT_BEGIN_NAMESPACE
+
+QQuickWebEngineHistoryListModelPrivate::QQuickWebEngineHistoryListModelPrivate(QQuickWebEngineViewPrivate *view)
+ : view(view)
+{
+}
+
+QQuickWebEngineHistoryListModelPrivate::~QQuickWebEngineHistoryListModelPrivate()
+{
+}
+
+int QQuickWebEngineHistoryListModelPrivate::count() const
+{
+ return adapter()->navigationEntryCount();
+}
+
+int QQuickWebEngineHistoryListModelPrivate::index(int index) const
+{
+ return index;
+}
+
+int QQuickWebEngineHistoryListModelPrivate::offsetForIndex(int index) const
+{
+ return index - adapter()->currentNavigationEntryIndex();
+}
+
+QtWebEngineCore::WebContentsAdapter *QQuickWebEngineHistoryListModelPrivate::adapter() const
+{
+ return view->adapter.data();
+}
+
+QQuickWebEngineBackHistoryListModelPrivate::QQuickWebEngineBackHistoryListModelPrivate(QQuickWebEngineViewPrivate *view)
+ : QQuickWebEngineHistoryListModelPrivate(view)
+{
+}
+
+int QQuickWebEngineBackHistoryListModelPrivate::count() const
+{
+ return adapter()->currentNavigationEntryIndex();
+}
+
+int QQuickWebEngineBackHistoryListModelPrivate::index(int i) const
+{
+ Q_ASSERT(i >= 0 && i < count());
+ return count() - 1 - i;
+}
+
+int QQuickWebEngineBackHistoryListModelPrivate::offsetForIndex(int index) const
+{
+ return - index - 1;
+}
+
+QQuickWebEngineForwardHistoryListModelPrivate::QQuickWebEngineForwardHistoryListModelPrivate(QQuickWebEngineViewPrivate *view)
+ : QQuickWebEngineHistoryListModelPrivate(view)
+{
+}
+
+int QQuickWebEngineForwardHistoryListModelPrivate::count() const
+{
+ if (!adapter()->isInitialized())
+ return 0;
+ return adapter()->navigationEntryCount() - adapter()->currentNavigationEntryIndex() - 1;
+}
+
+int QQuickWebEngineForwardHistoryListModelPrivate::index(int i) const
+{
+ return adapter()->currentNavigationEntryIndex() + i + 1;
+}
+
+int QQuickWebEngineForwardHistoryListModelPrivate::offsetForIndex(int index) const
+{
+ return index + 1;
+}
+
+/*!
+ \qmltype WebEngineHistoryListModel
+ \instantiates QQuickWebEngineHistoryListModel
+ \inqmlmodule QtWebEngine
+ \since QtWebEngine 1.1
+
+ \brief A data model that represents the history of a web engine page.
+
+ The WebEngineHistoryListModel type exposes the \e title, \e url, \e icon, and \e offset roles.
+ The \e title, \e url and \e icon specify the title, URL, and favicon of the visited page.
+ The \e offset specifies
+ the position of the page in respect to the current page (0). A positive number indicates that
+ the page was visited after the current page, whereas a negative number indicates that the page
+ was visited before the current page.
+
+ This type is uncreatable, but it can be accessed by using the
+ \l{WebEngineView::navigationHistory}{WebEngineView.navigationHistory} property.
+
+ \sa WebEngineHistory
+*/
+
+QQuickWebEngineHistoryListModel::QQuickWebEngineHistoryListModel()
+ : QAbstractListModel()
+{
+}
+
+QQuickWebEngineHistoryListModel::QQuickWebEngineHistoryListModel(QQuickWebEngineHistoryListModelPrivate *d)
+ : QAbstractListModel()
+ , d_ptr(d)
+{
+}
+
+QQuickWebEngineHistoryListModel::~QQuickWebEngineHistoryListModel()
+{
+}
+
+QHash<int, QByteArray> QQuickWebEngineHistoryListModel::roleNames() const
+{
+ QHash<int, QByteArray> roles;
+ roles[QQuickWebEngineHistory::UrlRole] = "url";
+ roles[QQuickWebEngineHistory::TitleRole] = "title";
+ roles[QQuickWebEngineHistory::OffsetRole] = "offset";
+ roles[QQuickWebEngineHistory::IconUrlRole] = "icon";
+ return roles;
+}
+
+int QQuickWebEngineHistoryListModel::rowCount(const QModelIndex &index) const
+{
+ Q_UNUSED(index);
+ Q_D(const QQuickWebEngineHistoryListModel);
+ return d->count();
+}
+
+QVariant QQuickWebEngineHistoryListModel::data(const QModelIndex &index, int role) const
+{
+ Q_D(const QQuickWebEngineHistoryListModel);
+
+ if (!index.isValid())
+ return QVariant();
+
+ if (role < QQuickWebEngineHistory::UrlRole || role > QQuickWebEngineHistory::IconUrlRole)
+ return QVariant();
+
+ if (role == QQuickWebEngineHistory::UrlRole)
+ return QUrl(d->adapter()->getNavigationEntryUrl(d->index(index.row())));
+
+ if (role == QQuickWebEngineHistory::TitleRole)
+ return QString(d->adapter()->getNavigationEntryTitle(d->index(index.row())));
+
+ if (role == QQuickWebEngineHistory::OffsetRole)
+ return d->offsetForIndex(index.row());
+
+ if (role == QQuickWebEngineHistory::IconUrlRole) {
+ QUrl iconUrl = QUrl(d->adapter()->getNavigationEntryIconUrl(d->index(index.row())));
+ return QQuickWebEngineFaviconProvider::faviconProviderUrl(iconUrl);
+ }
+
+ return QVariant();
+}
+
+void QQuickWebEngineHistoryListModel::reset()
+{
+ beginResetModel();
+ endResetModel();
+}
+
+QQuickWebEngineHistoryPrivate::QQuickWebEngineHistoryPrivate(QQuickWebEngineViewPrivate *view)
+ : m_view(view)
+{
+}
+
+QQuickWebEngineHistoryPrivate::~QQuickWebEngineHistoryPrivate()
+{
+}
+
+/*!
+ \qmltype WebEngineHistory
+ \instantiates QQuickWebEngineHistory
+ \inqmlmodule QtWebEngine
+ \since QtWebEngine 1.1
+
+ \brief Provides data models that represent the history of a web engine page.
+
+ The WebEngineHistory type can be accessed by using the
+ \l{WebEngineView::navigationHistory}{WebEngineView.navigationHistory} property.
+
+ The WebEngineHistory type provides the following WebEngineHistoryListModel data model objects:
+
+ \list
+ \li \c backItems, which contains the URLs of visited pages.
+ \li \c forwardItems, which contains the URLs of the pages that were visited after visiting
+ the current page.
+ \li \c items, which contains the URLs of the back and forward items, as well as the URL of
+ the current page.
+ \endlist
+
+ The easiest way to use these models is to use them in a ListView as illustrated by the
+ following code snippet:
+
+ \code
+ ListView {
+ id: historyItemsList
+ anchors.fill: parent
+ model: webEngineView.navigationHistory.items
+ delegate:
+ Text {
+ color: "black"
+ text: model.title + " - " + model.url + " (" + model.offset + ")"
+ }
+ }
+ \endcode
+
+ The ListView shows the content of the corresponding model. The delegate is responsible for the
+ format of the list items. The appearance of each item of the list in the delegate can be defined
+ separately (it is not web engine specific).
+
+ The model roles \e title, \e url, and \e icon specify the title, URL, and favicon of the
+ visited page. The \e offset
+ role specifies the position of the page in respect to the current page (0). A positive number
+ indicates that the page was visited after the current page, whereas a negative number indicates
+ that the page was visited before the current page.
+
+ The data models can also be used to create a menu, as illustrated by the following code
+ snippet:
+
+ \quotefromfile webengine/quicknanobrowser/BrowserWindow.qml
+ \skipto ToolBar
+ \printuntil onObjectRemoved
+ \printuntil }
+ \printuntil }
+ \printuntil }
+
+ For the complete example, see \l{WebEngine Quick Nano Browser}.
+
+ \sa WebEngineHistoryListModel
+*/
+
+QQuickWebEngineHistory::QQuickWebEngineHistory(QQuickWebEngineViewPrivate *view)
+ : d_ptr(new QQuickWebEngineHistoryPrivate(view))
+{
+}
+
+QQuickWebEngineHistory::~QQuickWebEngineHistory()
+{
+}
+
+/*!
+ \qmlproperty WebEngineHistoryListModel WebEngineHistory::items
+ \readonly
+
+ URLs of back items, forward items, and the current item in the history.
+*/
+QQuickWebEngineHistoryListModel *QQuickWebEngineHistory::items() const
+{
+ Q_D(const QQuickWebEngineHistory);
+ if (!d->m_navigationModel)
+ d->m_navigationModel.reset(new QQuickWebEngineHistoryListModel(new QQuickWebEngineHistoryListModelPrivate(d->m_view)));
+ return d->m_navigationModel.data();
+}
+
+/*!
+ \qmlproperty WebEngineHistoryListModel WebEngineHistory::backItems
+ \readonly
+
+ URLs of visited pages.
+*/
+QQuickWebEngineHistoryListModel *QQuickWebEngineHistory::backItems() const
+{
+ Q_D(const QQuickWebEngineHistory);
+ if (!d->m_backNavigationModel)
+ d->m_backNavigationModel.reset(new QQuickWebEngineHistoryListModel(new QQuickWebEngineBackHistoryListModelPrivate(d->m_view)));
+ return d->m_backNavigationModel.data();
+}
+
+/*!
+ \qmlproperty WebEngineHistoryListModel WebEngineHistory::forwardItems
+ \readonly
+
+ URLs of the pages that were visited after visiting the current page.
+*/
+QQuickWebEngineHistoryListModel *QQuickWebEngineHistory::forwardItems() const
+{
+ Q_D(const QQuickWebEngineHistory);
+ if (!d->m_forwardNavigationModel)
+ d->m_forwardNavigationModel.reset(new QQuickWebEngineHistoryListModel(new QQuickWebEngineForwardHistoryListModelPrivate(d->m_view)));
+ return d->m_forwardNavigationModel.data();
+}
+
+/*!
+ \qmlmethod void WebEngineHistory::clear()
+ \since QtWebEngine 1.11
+
+ Clears the history.
+*/
+void QQuickWebEngineHistory::clear()
+{
+ Q_D(QQuickWebEngineHistory);
+ d->m_view->adapter->clearNavigationHistory();
+ d->m_view->updateNavigationActions();
+ reset();
+}
+
+void QQuickWebEngineHistory::reset()
+{
+ Q_D(QQuickWebEngineHistory);
+ if (d->m_navigationModel)
+ d->m_navigationModel->reset();
+ if (d->m_backNavigationModel)
+ d->m_backNavigationModel->reset();
+ if (d->m_forwardNavigationModel)
+ d->m_forwardNavigationModel->reset();
+}
+
+
+QT_END_NAMESPACE