Example #1
0
 def linkHovered(self, url, title, text):
     if url and QUrl(url).scheme() != "chrome":
         if self.previewTooltip and self.previewTooltip.url == url:
             return
         self.previewTooltip = PreviewTooltip(url)
         self.previewTooltip.show()
     else:
         if self.previewTooltip:
             self.previewTooltip.deleteLater()
         self.previewTooltip = None
Example #2
0
class FeedView(QWebView):
    def __init__(self, parent = None):
        QWebView.__init__(self, parent)
        self.setMinimumSize(320, 480)
        self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        self.page().setForwardUnsupportedContent(True)
        self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        QWebSettings.setWebGraphic(QWebSettings.MissingImageGraphic, QPixmap("data/media/missing.png"))
        self.siteServer = SiteServer(self)
        self.previewTooltip = None
        self.connect(self.page(), SIGNAL("linkClicked(const QUrl&)"), self.slotLinkClicked)
        self.connect(self.page(), SIGNAL("unsupportedContent(QNetworkReply*)"), self.slotHandleReply)
        self.connect(self.page(), SIGNAL("frameCreated(QWebFrame*)"), self.setupFrame)
        # NOTE: This simplified mechanism depends on the application NEVER using framesets!
        self.connect(self.page().mainFrame(), SIGNAL("javaScriptWindowObjectCleared()"), self.setupFrame)
        self.connect(self.page(), SIGNAL("linkHovered(const QString&, const QString&, const QString&)"), self.linkHovered)
        
    def goHome(self):
        self.load(QUrl("chrome:/"))
    
    def goToUserPage(self):
        self.load(QUrl("chrome:/user/me"))
        
    def logout(self):
        self.siteServer.session.logout()
        self.goHome()

    def slotLinkClicked(self, url):
        print "clicked:", url
        if url.scheme() == "chrome":
            self.loadPage(url)
        else:
            QDesktopServices.openUrl(url)
    
    def slotHandleReply(self, reply):
        print "unhandled:", reply.url()
        if reply.url().scheme() == "chrome":
            self.loadPage(reply.url())
        return
    
    def setupFrame(self, frame = None):
        if not frame:
            frame = self.page().mainFrame()
        frame.addToJavaScriptWindowObject("feedlol", JavascriptAPI(self.siteServer))

    def loadPage(self, url):
        self.siteServer.request(url, self)

    def linkHovered(self, url, title, text):
        if url and QUrl(url).scheme() != "chrome":
            if self.previewTooltip and self.previewTooltip.url == url:
                return
            self.previewTooltip = PreviewTooltip(url)
            self.previewTooltip.show()
        else:
            if self.previewTooltip:
                self.previewTooltip.deleteLater()
            self.previewTooltip = None

    def leaveEvent(self, event):
        self.linkHovered(None, None, None)

    def focusOutEvent(self, event):
        self.linkHovered(None, None, None)