#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2017, Marten de Vries
#
# This file is part of OpenTeacher.
#
# OpenTeacher 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.
#
# OpenTeacher 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 OpenTeacher. If not, see <http://www.gnu.org/licenses/>.
class View:
def __init__(self, Event):
self.widget = QtWebKitWidgets.QWebView()
self.onFinished = Event() # parameter: ok (bool)
self.urlChanged = Event() # parameter: url (string)
self.widget.loadFinished.connect(self.onFinished.send)
self.widget.urlChanged.connect(lambda url: self.urlChanged.send(url.toString()))
def forward(self):
self.widget.forward()
def back(self):
self.widget.back()
def reload(self):
self.widget.reload()
def enablePlugins(self):
self.widget.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True)
def request(self, url, headers=None):
request = QtNetwork.QNetworkRequest(QtCore.QUrl(url))
for header, value in (headers or {}).items():
request.setRawHeader(header, value)
self.widget.load(request)
def setHtml(self, html):
self.widget.setHtml(html)
def print_(self, printer, cb):
self.widget.print_(printer)
cb()
class QtWebKitWebEngineModule:
def __init__(self, moduleManager, *args, **kwargs):
super().__init__(*args, **kwargs)
self._mm = moduleManager
self.type = "webEngine"
self.requires = (
self._mm.mods(type='event'),
)
def createView(self):
""""Returns a View object, which has the following fields:
- widget: a Qt widget that displays a web page.
- onFinished: an Event; handlers get a single boolean value as argument
that tells you if a previous request succeeded.
- request(url, headers); headers is optional, but if supplied should be
a dict. Use this to set a User Agent, also.
- setHtml(html); for if you don't want to specify a web address
- enablePlugins(); does what it says
"""
Event = self._modules.default('active', type='event').createEvent
return View(Event)
def enable(self):
global QtWebKit, QtWebKitWidgets, QtCore, QtNetwork
try:
from PyQt5 import QtWebKit, QtWebKitWidgets, QtCore, QtNetwork
except ImportError:
# remain inactive
return
self._modules = next(iter(self._mm.mods(type='modules')))
self.active = True
def disable(self):
self.active = False
del self._modules
def init(moduleManager):
return QtWebKitWebEngineModule(moduleManager)