Helpviewer/HelpBrowserWV.py

changeset 1947
84626f18f2c3
parent 1945
47016f5af3b8
child 1950
4f004ec74b48
equal deleted inserted replaced
1945:47016f5af3b8 1947:84626f18f2c3
11 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, QUrl, \ 11 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QObject, QT_TRANSLATE_NOOP, QUrl, \
12 QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, QRect, QFile, QPoint 12 QBuffer, QIODevice, QFileInfo, Qt, QTimer, QEvent, QRect, QFile, QPoint
13 from PyQt4.QtGui import qApp, QDesktopServices, QStyle, QMenu, QApplication, \ 13 from PyQt4.QtGui import qApp, QDesktopServices, QStyle, QMenu, QApplication, \
14 QInputDialog, QLineEdit, QClipboard, QMouseEvent, QLabel, QToolTip, QColor, \ 14 QInputDialog, QLineEdit, QClipboard, QMouseEvent, QLabel, QToolTip, QColor, \
15 QPalette, QFrame, QPrinter, QPrintDialog, QDialog 15 QPalette, QFrame, QPrinter, QPrintDialog, QDialog
16 from PyQt4 import QtWebKit
17 from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings 16 from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings
18 try: 17 try:
19 from PyQt4.QtWebKit import QWebElement 18 from PyQt4.QtWebKit import QWebElement
20 except ImportError: 19 except ImportError:
21 pass 20 pass
27 import Preferences 26 import Preferences
28 import UI.PixmapCache 27 import UI.PixmapCache
29 28
30 from .Bookmarks.AddBookmarkDialog import AddBookmarkDialog 29 from .Bookmarks.AddBookmarkDialog import AddBookmarkDialog
31 from .Bookmarks.BookmarkNode import BookmarkNode 30 from .Bookmarks.BookmarkNode import BookmarkNode
32 from .JavaScriptResources import fetchLinks_js
33 try: 31 try:
34 from .SslInfoDialog import SslInfoDialog 32 from .SslInfoDialog import SslInfoDialog
35 from PyQt4.QtNetwork import QSslCertificate 33 from PyQt4.QtNetwork import QSslCertificate
36 SSL_AVAILABLE = True 34 SSL_AVAILABLE = True
37 except ImportError: 35 except ImportError:
588 self.mw.openSearchManager().currentEngineChanged.connect( 586 self.mw.openSearchManager().currentEngineChanged.connect(
589 self.__currentEngineChanged) 587 self.__currentEngineChanged)
590 588
591 self.setAcceptDrops(True) 589 self.setAcceptDrops(True)
592 590
593 if hasattr(QtWebKit, 'QWebElement'): 591 self.__enableAccessKeys = Preferences.getHelp("AccessKeysEnabled")
594 self.__enableAccessKeys = Preferences.getHelp("AccessKeysEnabled") 592 self.__accessKeysPressed = False
595 self.__accessKeysPressed = False 593 self.__accessKeyLabels = []
596 self.__accessKeyLabels = [] 594 self.__accessKeyNodes = {}
597 self.__accessKeyNodes = {} 595
598 596 self.page().loadStarted.connect(self.__hideAccessKeys)
599 self.page().loadStarted.connect(self.__hideAccessKeys) 597 self.page().scrollRequested.connect(self.__hideAccessKeys)
600 self.page().scrollRequested.connect(self.__hideAccessKeys)
601 598
602 self.__rss = [] 599 self.__rss = []
603 600
604 self.__clickedFrame = None 601 self.__clickedFrame = None
605 602
611 """ 608 """
612 Private slot to add javascript bindings for adding search providers. 609 Private slot to add javascript bindings for adding search providers.
613 610
614 @param frame reference to the web frame (QWebFrame) 611 @param frame reference to the web frame (QWebFrame)
615 """ 612 """
616 if not hasattr(QtWebKit, 'QWebElement'):
617 # test this only for Qt < 4.6.0
618 if not QWebSettings.globalSettings()\
619 .testAttribute(QWebSettings.JavascriptEnabled):
620 return
621
622 self.page().settings().setAttribute(QWebSettings.JavascriptEnabled, True) 613 self.page().settings().setAttribute(QWebSettings.JavascriptEnabled, True)
623 if self.__javaScriptBinding is None: 614 if self.__javaScriptBinding is None:
624 self.__javaScriptBinding = JavaScriptExternalObject(self.mw, self) 615 self.__javaScriptBinding = JavaScriptExternalObject(self.mw, self)
625 616
626 if frame is None: 617 if frame is None:
647 @param relation relation to extract (string) 638 @param relation relation to extract (string)
648 @return list of linked resources (list of LinkedResource) 639 @return list of linked resources (list of LinkedResource)
649 """ 640 """
650 resources = [] 641 resources = []
651 642
652 if hasattr(QtWebKit, 'QWebElement'): 643 baseUrl = self.page().mainFrame().baseUrl()
653 baseUrl = self.page().mainFrame().baseUrl() 644
645 linkElements = self.page().mainFrame().findAllElements("html > head > link")
646
647 for linkElement in linkElements.toList():
648 rel = linkElement.attribute("rel")
649 href = linkElement.attribute("href")
650 type_ = linkElement.attribute("type")
651 title = linkElement.attribute("title")
654 652
655 linkElements = self.page().mainFrame().findAllElements("html > head > link") 653 if href == "" or type_ == "":
654 continue
655 if relation and rel != relation:
656 continue
656 657
657 for linkElement in linkElements.toList(): 658 resource = LinkedResource()
658 rel = linkElement.attribute("rel") 659 resource.rel = rel
659 href = linkElement.attribute("href") 660 resource.type_ = type_
660 type_ = linkElement.attribute("type") 661 resource.href = baseUrl.resolved(QUrl.fromEncoded(href))
661 title = linkElement.attribute("title") 662 resource.title = title
662
663 if href == "" or type_ == "":
664 continue
665 if relation and rel != relation:
666 continue
667
668 resource = LinkedResource()
669 resource.rel = rel
670 resource.type_ = type_
671 resource.href = baseUrl.resolved(QUrl.fromEncoded(href))
672 resource.title = title
673
674 resources.append(resource)
675 else:
676 baseUrlString = self.page().mainFrame().evaluateJavaScript("document.baseURI")
677 baseUrl = QUrl.fromEncoded(baseUrlString)
678 663
679 lst = self.page().mainFrame().evaluateJavaScript(fetchLinks_js) 664 resources.append(resource)
680 for m in lst:
681 rel = m["rel"]
682 type_ = m["type"]
683 href = m["href"]
684 title = m["title"]
685
686 if href == "" or type_ == "":
687 continue
688 if relation and rel != relation:
689 continue
690
691 resource = LinkedResource()
692 resource.rel = rel
693 resource.type_ = type_
694 resource.href = baseUrl.resolved(QUrl.fromEncoded(href))
695 resource.title = title
696
697 resources.append(resource)
698 665
699 return resources 666 return resources
700 667
701 def __currentEngineChanged(self): 668 def __currentEngineChanged(self):
702 """ 669 """
1152 if self.__isUrlValid(guessedUrl): 1119 if self.__isUrlValid(guessedUrl):
1153 menu.addAction(self.trUtf8("Go to web address"), self.__openLinkInNewTab)\ 1120 menu.addAction(self.trUtf8("Go to web address"), self.__openLinkInNewTab)\
1154 .setData(guessedUrl) 1121 .setData(guessedUrl)
1155 menu.addSeparator() 1122 menu.addSeparator()
1156 1123
1157 if hasattr(QtWebKit, 'QWebElement'): 1124 element = hit.element()
1158 element = hit.element() 1125 if not element.isNull() and \
1159 if not element.isNull() and \ 1126 element.tagName().lower() == "input" and \
1160 element.tagName().lower() == "input" and \ 1127 element.attribute("type", "text") == "text":
1161 element.attribute("type", "text") == "text": 1128 menu.addAction(self.trUtf8("Add to web search toolbar"),
1162 menu.addAction(self.trUtf8("Add to web search toolbar"), 1129 self.__addSearchEngine).setData(element)
1163 self.__addSearchEngine).setData(element) 1130 menu.addSeparator()
1164 menu.addSeparator()
1165 1131
1166 menu.addAction(UI.PixmapCache.getIcon("webInspector.png"), 1132 menu.addAction(UI.PixmapCache.getIcon("webInspector.png"),
1167 self.trUtf8("Web Inspector..."), self.__webInspector) 1133 self.trUtf8("Web Inspector..."), self.__webInspector)
1168 1134
1169 menu.exec_(evt.globalPos()) 1135 menu.exec_(evt.globalPos())
1539 @param evt reference to the key event (QKeyEvent) 1505 @param evt reference to the key event (QKeyEvent)
1540 """ 1506 """
1541 if self.mw.personalInformationManager().viewKeyPressEvent(self, evt): 1507 if self.mw.personalInformationManager().viewKeyPressEvent(self, evt):
1542 return 1508 return
1543 1509
1544 if hasattr(QtWebKit, 'QWebElement'): 1510 if self.__enableAccessKeys:
1545 if self.__enableAccessKeys: 1511 self.__accessKeysPressed = (
1546 self.__accessKeysPressed = ( 1512 evt.modifiers() == Qt.ControlModifier and \
1547 evt.modifiers() == Qt.ControlModifier and \ 1513 evt.key() == Qt.Key_Control)
1548 evt.key() == Qt.Key_Control) 1514 if not self.__accessKeysPressed:
1549 if not self.__accessKeysPressed: 1515 if self.__checkForAccessKey(evt):
1550 if self.__checkForAccessKey(evt):
1551 self.__hideAccessKeys()
1552 evt.accept()
1553 return
1554 self.__hideAccessKeys() 1516 self.__hideAccessKeys()
1555 else: 1517 evt.accept()
1556 QTimer.singleShot(300, self.__accessKeyShortcut) 1518 return
1519 self.__hideAccessKeys()
1520 else:
1521 QTimer.singleShot(300, self.__accessKeyShortcut)
1557 1522
1558 self.ctrlPressed = (evt.key() == Qt.Key_Control) 1523 self.ctrlPressed = (evt.key() == Qt.Key_Control)
1559 super().keyPressEvent(evt) 1524 super().keyPressEvent(evt)
1560 1525
1561 def keyReleaseEvent(self, evt): 1526 def keyReleaseEvent(self, evt):
1562 """ 1527 """
1563 Protected method called by a key release. 1528 Protected method called by a key release.
1564 1529
1565 @param evt reference to the key event (QKeyEvent) 1530 @param evt reference to the key event (QKeyEvent)
1566 """ 1531 """
1567 if hasattr(QtWebKit, 'QWebElement'): 1532 if self.__enableAccessKeys:
1568 if self.__enableAccessKeys: 1533 self.__accessKeysPressed = evt.key() == Qt.Key_Control
1569 self.__accessKeysPressed = evt.key() == Qt.Key_Control
1570 1534
1571 self.ctrlPressed = False 1535 self.ctrlPressed = False
1572 super().keyReleaseEvent(evt) 1536 super().keyReleaseEvent(evt)
1573 1537
1574 def focusOutEvent(self, evt): 1538 def focusOutEvent(self, evt):
1575 """ 1539 """
1576 Protected method called by a focus out event. 1540 Protected method called by a focus out event.
1577 1541
1578 @param evt reference to the focus event (QFocusEvent) 1542 @param evt reference to the focus event (QFocusEvent)
1579 """ 1543 """
1580 if hasattr(QtWebKit, 'QWebElement'): 1544 if self.__accessKeysPressed:
1581 if self.__accessKeysPressed: 1545 self.__hideAccessKeys()
1582 self.__hideAccessKeys() 1546 self.__accessKeysPressed = False
1583 self.__accessKeysPressed = False
1584 1547
1585 super().focusOutEvent(evt) 1548 super().focusOutEvent(evt)
1586 1549
1587 def event(self, evt): 1550 def event(self, evt):
1588 """ 1551 """
2024 1987
2025 def preferencesChanged(self): 1988 def preferencesChanged(self):
2026 """ 1989 """
2027 Public method to indicate a change of the settings. 1990 Public method to indicate a change of the settings.
2028 """ 1991 """
2029 if hasattr(QtWebKit, 'QWebElement'): 1992 self.__enableAccessKeys = Preferences.getHelp("AccessKeysEnabled")
2030 self.__enableAccessKeys = Preferences.getHelp("AccessKeysEnabled") 1993 if not self.__enableAccessKeys:
2031 if not self.__enableAccessKeys: 1994 self.__hideAccessKeys()
2032 self.__hideAccessKeys()
2033 1995
2034 self.reload() 1996 self.reload()
2035 1997
2036 ############################################################################ 1998 ############################################################################
2037 ## RSS related methods below 1999 ## RSS related methods below

eric ide

mercurial