aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2019-01-25 15:42:37 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2019-01-31 12:42:56 +0000
commit3625e5a8caa66b702ab52659a47f882dcc69804f (patch)
tree62d156e45e4aae780043c732b57c38ae25e07723
parentcd3f41774909b0d773baaa0e649b0561cfdb08e6 (diff)
Tabbed browser example: Add history list
Change-Id: I4b668b7d14a872a5d140a53f22249d7778750679 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r--examples/webenginewidgets/tabbedbrowser/browsertabwidget.py27
-rw-r--r--examples/webenginewidgets/tabbedbrowser/historywindow.py107
-rw-r--r--examples/webenginewidgets/tabbedbrowser/main.py6
-rw-r--r--examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc1
4 files changed, 139 insertions, 2 deletions
diff --git a/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py b/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py
index d85b8ad3d..29411d368 100644
--- a/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py
+++ b/examples/webenginewidgets/tabbedbrowser/browsertabwidget.py
@@ -43,11 +43,12 @@ import sys
from bookmarkwidget import BookmarkWidget
from webengineview import WebEngineView
+from historywindow import HistoryWindow
from PySide2 import QtCore
from PySide2.QtCore import QPoint, Qt, QUrl
from PySide2.QtWidgets import (QAction, QMenu, QTabBar, QTabWidget)
from PySide2.QtWebEngineWidgets import (QWebEngineDownloadItem,
- QWebEnginePage, QWebEngineProfile)
+ QWebEngineHistory, QWebEnginePage, QWebEngineProfile)
class BrowserTabWidget(QTabWidget):
"""Enables having several tabs with QWebEngineView."""
@@ -61,6 +62,7 @@ class BrowserTabWidget(QTabWidget):
self.setTabsClosable(True)
self._window_factory_function = window_factory_function
self._webengineviews = []
+ self._history_windows = {} # map WebengineView to HistoryWindow
self.currentChanged.connect(self._current_changed)
self.tabCloseRequested.connect(self.handle_tab_close_request)
self._actions_enabled = {}
@@ -165,6 +167,24 @@ class BrowserTabWidget(QTabWidget):
def select_all(self):
self._trigger_action(QWebEnginePage.SelectAll)
+ def show_history(self):
+ index = self.currentIndex()
+ if index >= 0:
+ webengineview = self._webengineviews[index]
+ history_window = self._history_windows.get(webengineview)
+ if not history_window:
+ history = webengineview.page().history()
+ history_window = HistoryWindow(history, self)
+ history_window.open_url.connect(self.load)
+ history_window.setWindowFlags(history_window.windowFlags()
+ | Qt.Window)
+ history_window.setWindowTitle('History')
+ self._history_windows[webengineview] = history_window
+ else:
+ history_window.refresh()
+ history_window.show()
+ history_window.raise_()
+
def zoom_factor(self):
return self._webengineviews[0].zoomFactor() if self._webengineviews else 1.0
@@ -200,7 +220,10 @@ class BrowserTabWidget(QTabWidget):
def handle_tab_close_request(self, index):
if (index >= 0 and self.count() > 1):
- self._webengineviews.remove(self._webengineviews[index])
+ webengineview = self._webengineviews[index]
+ if self._history_windows.get(webengineview):
+ del self._history_windows[webengineview]
+ self._webengineviews.remove(webengineview)
self.removeTab(index)
def close_current_tab(self):
diff --git a/examples/webenginewidgets/tabbedbrowser/historywindow.py b/examples/webenginewidgets/tabbedbrowser/historywindow.py
new file mode 100644
index 000000000..06c9b73be
--- /dev/null
+++ b/examples/webenginewidgets/tabbedbrowser/historywindow.py
@@ -0,0 +1,107 @@
+#############################################################################
+##
+## Copyright (C) 2019 The Qt Company Ltd.
+## Contact: http://www.qt.io/licensing/
+##
+## This file is part of the Qt for Python examples of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright
+## notice, this list of conditions and the following disclaimer in
+## the documentation and/or other materials provided with the
+## distribution.
+## * Neither the name of The Qt Company Ltd nor the names of its
+## contributors may be used to endorse or promote products derived
+## from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+from PySide2.QtWebEngineWidgets import (QWebEnginePage, QWebEngineView,
+ QWebEngineHistory, QWebEngineHistoryItem)
+
+from PySide2.QtWidgets import QApplication, QDesktopWidget, QTreeView
+
+from PySide2.QtCore import (Signal, QAbstractTableModel, QModelIndex, Qt,
+ QRect, QUrl)
+
+
+class HistoryModel(QAbstractTableModel):
+
+ def __init__(self, history, parent = None):
+ super(HistoryModel, self).__init__(parent)
+ self._history = history
+
+ def headerData(self, section, orientation, role=Qt.DisplayRole):
+ if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+ return 'Title' if section == 0 else 'Url'
+ return None
+
+ def rowCount(self, index=QModelIndex()):
+ return self._history.count()
+
+ def columnCount(self, index=QModelIndex()):
+ return 2
+
+ def item_at(self, model_index):
+ return self._history.itemAt(model_index.row())
+
+ def data(self, index, role=Qt.DisplayRole):
+ item = self.item_at(index)
+ column = index.column()
+ if role == Qt.DisplayRole:
+ return item.title() if column == 0 else item.url().toString()
+ return None
+
+ def refresh(self):
+ self.beginResetModel()
+ self.endResetModel()
+
+
+class HistoryWindow(QTreeView):
+
+ open_url = Signal(QUrl)
+
+ def __init__(self, history, parent):
+ super(HistoryWindow, self).__init__(parent)
+
+ self._model = HistoryModel(history, self)
+ self.setModel(self._model)
+ self.activated.connect(self._activated)
+
+ screen = QApplication.desktop().screenGeometry(parent)
+ self.resize(screen.width() / 3, screen.height() / 3)
+ self._adjustSize()
+
+ def refresh(self):
+ self._model.refresh()
+ self._adjustSize()
+
+ def _adjustSize(self):
+ if (self._model.rowCount() > 0):
+ self.resizeColumnToContents(0)
+
+ def _activated(self, index):
+ item = self._model.item_at(index)
+ self.open_url.emit(item.url())
diff --git a/examples/webenginewidgets/tabbedbrowser/main.py b/examples/webenginewidgets/tabbedbrowser/main.py
index 31714a535..51220469a 100644
--- a/examples/webenginewidgets/tabbedbrowser/main.py
+++ b/examples/webenginewidgets/tabbedbrowser/main.py
@@ -171,6 +171,12 @@ class MainWindow(QMainWindow):
triggered = self._close_current_tab)
navigation_menu.addAction(close_tab_action)
+ navigation_menu.addSeparator()
+
+ history_action = QAction("History...", self,
+ triggered = self._tab_widget.show_history)
+ navigation_menu.addAction(history_action)
+
edit_menu = self.menuBar().addMenu("&Edit")
find_action = QAction("Find", self,
diff --git a/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc b/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc
index 1ad61c350..b5fbffa28 100644
--- a/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc
+++ b/examples/webenginewidgets/tabbedbrowser/tabbedbrowser.pyqtc
@@ -3,4 +3,5 @@ bookmarkwidget.py
browsertabwidget.py
downloadwidget.py
findtoolbar.py
+historywindow.py
webengineview.py