5 |
5 |
6 |
6 |
7 """ |
7 """ |
8 Module implementing the helpbrowser using QWebView. |
8 Module implementing the helpbrowser using QWebView. |
9 """ |
9 """ |
|
10 |
|
11 from __future__ import unicode_literals # __IGNORE_WARNING__ |
|
12 try: |
|
13 str = unicode |
|
14 except (NameError): |
|
15 pass |
10 |
16 |
11 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, QUrl, \ |
17 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, QUrl, \ |
12 QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, QRect, QFile, QPoint, \ |
18 QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, QRect, QFile, QPoint, \ |
13 QByteArray, qVersion |
19 QByteArray, qVersion |
14 from PyQt4.QtGui import qApp, QDesktopServices, QStyle, QMenu, QApplication, \ |
20 from PyQt4.QtGui import qApp, QDesktopServices, QStyle, QMenu, QApplication, \ |
45 Constructor |
51 Constructor |
46 |
52 |
47 @param mw reference to the main window 8HelpWindow) |
53 @param mw reference to the main window 8HelpWindow) |
48 @param parent reference to the parent object (QObject) |
54 @param parent reference to the parent object (QObject) |
49 """ |
55 """ |
50 super().__init__(parent) |
56 super(JavaScriptExternalObject, self).__init__(parent) |
51 |
57 |
52 self.__mw = mw |
58 self.__mw = mw |
53 |
59 |
54 @pyqtSlot(str) |
60 @pyqtSlot(str) |
55 def AddSearchProvider(self, url): |
61 def AddSearchProvider(self, url): |
94 Constructor |
100 Constructor |
95 |
101 |
96 @param mw reference to the main window 8HelpWindow) |
102 @param mw reference to the main window 8HelpWindow) |
97 @param parent reference to the parent object (QObject) |
103 @param parent reference to the parent object (QObject) |
98 """ |
104 """ |
99 super().__init__(parent) |
105 super(JavaScriptEricObject, self).__init__(parent) |
100 |
106 |
101 self.__mw = mw |
107 self.__mw = mw |
102 |
108 |
103 @pyqtSlot(str, result=str) |
109 @pyqtSlot(str, result=str) |
104 def translate(self, trans): |
110 def translate(self, trans): |
152 """ |
158 """ |
153 Constructor |
159 Constructor |
154 |
160 |
155 @param parent parent widget of this window (QWidget) |
161 @param parent parent widget of this window (QWidget) |
156 """ |
162 """ |
157 super().__init__(parent) |
163 super(HelpWebPage, self).__init__(parent) |
158 |
164 |
159 self.setPluginFactory(self.webPluginFactory()) |
165 self.setPluginFactory(self.webPluginFactory()) |
160 |
166 |
161 self.__lastRequest = None |
167 self.__lastRequest = None |
162 self.__lastRequestType = QWebPage.NavigationTypeOther |
168 self.__lastRequestType = QWebPage.NavigationTypeOther |
258 """ |
264 """ |
259 if extension == QWebPage.ChooseMultipleFilesExtension: |
265 if extension == QWebPage.ChooseMultipleFilesExtension: |
260 info = sip.cast(option, QWebPage.ChooseMultipleFilesExtensionOption) |
266 info = sip.cast(option, QWebPage.ChooseMultipleFilesExtensionOption) |
261 files = sip.cast(output, QWebPage.ChooseMultipleFilesExtensionReturn) |
267 files = sip.cast(output, QWebPage.ChooseMultipleFilesExtensionReturn) |
262 if info is None or files is None: |
268 if info is None or files is None: |
263 return super().extension(extension, option, output) |
269 return super(HelpWebPage, self).extension(extension, option, output) |
264 |
270 |
265 suggestedFileName = "" |
271 suggestedFileName = "" |
266 if info.suggestedFileNames: |
272 if info.suggestedFileNames: |
267 suggestedFileName = info.suggestedFileNames[0] |
273 suggestedFileName = info.suggestedFileNames[0] |
268 |
274 |
560 # Fake a mouse move event just outside of the widget to trigger |
566 # Fake a mouse move event just outside of the widget to trigger |
561 # the WebKit event handler's mouseMoved function. This implements |
567 # the WebKit event handler's mouseMoved function. This implements |
562 # the interesting mouse-out behavior like invalidating scrollbars. |
568 # the interesting mouse-out behavior like invalidating scrollbars. |
563 fakeEvent = QMouseEvent(QEvent.MouseMove, QPoint(0, -1), |
569 fakeEvent = QMouseEvent(QEvent.MouseMove, QPoint(0, -1), |
564 Qt.NoButton, Qt.NoButton, Qt.NoModifier) |
570 Qt.NoButton, Qt.NoButton, Qt.NoModifier) |
565 return super().event(fakeEvent) |
571 return super(HelpWebPage, self).event(fakeEvent) |
566 |
572 |
567 return super().event(evt) |
573 return super(HelpWebPage, self).event(evt) |
568 |
574 |
569 ########################################################################################## |
575 ########################################################################################## |
570 |
576 |
571 |
577 |
572 class HelpBrowser(QWebView): |
578 class HelpBrowser(QWebView): |
603 |
609 |
604 @param mainWindow reference to the main window (HelpWindow) |
610 @param mainWindow reference to the main window (HelpWindow) |
605 @param parent parent widget of this window (QWidget) |
611 @param parent parent widget of this window (QWidget) |
606 @param name name of this window (string) |
612 @param name name of this window (string) |
607 """ |
613 """ |
608 super().__init__(parent) |
614 super(HelpBrowser, self).__init__(parent) |
609 self.setObjectName(name) |
615 self.setObjectName(name) |
610 self.setWhatsThis(self.trUtf8( |
616 self.setWhatsThis(self.trUtf8( |
611 """<b>Help Window</b>""" |
617 """<b>Help Window</b>""" |
612 """<p>This window displays the selected help information.</p>""" |
618 """<p>This window displays the selected help information.</p>""" |
613 )) |
619 )) |
1521 url = QUrl(evt.mimeData().text()) |
1527 url = QUrl(evt.mimeData().text()) |
1522 if url.isValid(): |
1528 if url.isValid(): |
1523 evt.acceptProposedAction() |
1529 evt.acceptProposedAction() |
1524 |
1530 |
1525 if not evt.isAccepted(): |
1531 if not evt.isAccepted(): |
1526 super().dragMoveEvent(evt) |
1532 super(HelpBrowser, self).dragMoveEvent(evt) |
1527 |
1533 |
1528 def dropEvent(self, evt): |
1534 def dropEvent(self, evt): |
1529 """ |
1535 """ |
1530 Protected method called by a drop event. |
1536 Protected method called by a drop event. |
1531 |
1537 |
1532 @param evt reference to the drop event (QDropEvent) |
1538 @param evt reference to the drop event (QDropEvent) |
1533 """ |
1539 """ |
1534 super().dropEvent(evt) |
1540 super(HelpBrowser, self).dropEvent(evt) |
1535 if not evt.isAccepted() and \ |
1541 if not evt.isAccepted() and \ |
1536 evt.source() != self and \ |
1542 evt.source() != self and \ |
1537 evt.possibleActions() & Qt.CopyAction: |
1543 evt.possibleActions() & Qt.CopyAction: |
1538 url = QUrl() |
1544 url = QUrl() |
1539 if len(evt.mimeData().urls()) > 0: |
1545 if len(evt.mimeData().urls()) > 0: |
1556 if evt.button() == Qt.XButton1: |
1562 if evt.button() == Qt.XButton1: |
1557 self.pageAction(QWebPage.Back).trigger() |
1563 self.pageAction(QWebPage.Back).trigger() |
1558 elif evt.button() == Qt.XButton2: |
1564 elif evt.button() == Qt.XButton2: |
1559 self.pageAction(QWebPage.Forward).trigger() |
1565 self.pageAction(QWebPage.Forward).trigger() |
1560 else: |
1566 else: |
1561 super().mousePressEvent(evt) |
1567 super(HelpBrowser, self).mousePressEvent(evt) |
1562 |
1568 |
1563 def mouseReleaseEvent(self, evt): |
1569 def mouseReleaseEvent(self, evt): |
1564 """ |
1570 """ |
1565 Protected method called by a mouse release event. |
1571 Protected method called by a mouse release event. |
1566 |
1572 |
1624 self.__hideAccessKeys() |
1630 self.__hideAccessKeys() |
1625 else: |
1631 else: |
1626 QTimer.singleShot(300, self.__accessKeyShortcut) |
1632 QTimer.singleShot(300, self.__accessKeyShortcut) |
1627 |
1633 |
1628 self.ctrlPressed = (evt.key() == Qt.Key_Control) |
1634 self.ctrlPressed = (evt.key() == Qt.Key_Control) |
1629 super().keyPressEvent(evt) |
1635 super(HelpBrowser, self).keyPressEvent(evt) |
1630 |
1636 |
1631 def keyReleaseEvent(self, evt): |
1637 def keyReleaseEvent(self, evt): |
1632 """ |
1638 """ |
1633 Protected method called by a key release. |
1639 Protected method called by a key release. |
1634 |
1640 |
1636 """ |
1642 """ |
1637 if self.__enableAccessKeys: |
1643 if self.__enableAccessKeys: |
1638 self.__accessKeysPressed = evt.key() == Qt.Key_Control |
1644 self.__accessKeysPressed = evt.key() == Qt.Key_Control |
1639 |
1645 |
1640 self.ctrlPressed = False |
1646 self.ctrlPressed = False |
1641 super().keyReleaseEvent(evt) |
1647 super(HelpBrowser, self).keyReleaseEvent(evt) |
1642 |
1648 |
1643 def focusOutEvent(self, evt): |
1649 def focusOutEvent(self, evt): |
1644 """ |
1650 """ |
1645 Protected method called by a focus out event. |
1651 Protected method called by a focus out event. |
1646 |
1652 |
1648 """ |
1654 """ |
1649 if self.__accessKeysPressed: |
1655 if self.__accessKeysPressed: |
1650 self.__hideAccessKeys() |
1656 self.__hideAccessKeys() |
1651 self.__accessKeysPressed = False |
1657 self.__accessKeysPressed = False |
1652 |
1658 |
1653 super().focusOutEvent(evt) |
1659 super(HelpBrowser, self).focusOutEvent(evt) |
1654 |
1660 |
1655 def event(self, evt): |
1661 def event(self, evt): |
1656 """ |
1662 """ |
1657 Protected method handling events. |
1663 Protected method handling events. |
1658 |
1664 |
1661 """ |
1667 """ |
1662 if evt.type() == QEvent.Gesture: |
1668 if evt.type() == QEvent.Gesture: |
1663 self.gestureEvent(evt) |
1669 self.gestureEvent(evt) |
1664 return True |
1670 return True |
1665 |
1671 |
1666 return super().event(evt) |
1672 return super(HelpBrowser, self).event(evt) |
1667 |
1673 |
1668 def gestureEvent(self, evt): |
1674 def gestureEvent(self, evt): |
1669 """ |
1675 """ |
1670 Protected method handling gesture events. |
1676 Protected method handling gesture events. |
1671 |
1677 |