SF.net SVN: fclient:[661] trunk/fclient/src/fclient/Ui_ViewBrowser.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-07-17 16:04:39
|
Revision: 661
http://fclient.svn.sourceforge.net/fclient/?rev=661&view=rev
Author: jUrner
Date: 2008-07-17 16:04:41 +0000 (Thu, 17 Jul 2008)
Log Message:
-----------
naming ++ this and that
Modified Paths:
--------------
trunk/fclient/src/fclient/Ui_ViewBrowser.py
Modified: trunk/fclient/src/fclient/Ui_ViewBrowser.py
===================================================================
--- trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-17 15:58:56 UTC (rev 660)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-17 16:04:41 UTC (rev 661)
@@ -19,6 +19,22 @@
#**********************************************************************************
#
#**********************************************************************************
+def htmlPage(title, *contents):
+ p = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <title>%s</title>
+ </head>
+ <body>
+ %s
+ </body>
+</html>
+''' % (title, ''.join([str(i) for i in contents]))
+ return p
+
+#**********************************************************************************
+#
+#**********************************************************************************
class Actions(config.ActionsBase):
def __init__(self, parent):
@@ -27,7 +43,7 @@
self.action(
name='ActionCloseCurrentBrowser',
text=self.trUtf8('&Close tab'),
- trigger=parent.handleActionCloseCurrentBrowser,
+ trigger=parent.onActionCloseCurrentBrowser,
#isEnabled=False,
)
self.action( # context menu only
@@ -40,7 +56,7 @@
self.action(
name='ActionGoToFProxy',
text=self.trUtf8('F&Proxy homepage'),
- trigger=parent.handleActionGoToFProxy,
+ trigger=parent.onActionGoToFProxy,
isEnabled=True,
)
@@ -53,7 +69,7 @@
# menus
self.menus = []
if self.menuBar is not None:
- menu = QtGui.QMenu(parent.fclientViewObject.displayName, self.menuBar)
+ menu = QtGui.QMenu(parent.fcViewObject.displayName, self.menuBar)
parent.populateMenu(menu)
self.menus.append(menu)
self.menuBar.addViewMenu(menu)
@@ -136,12 +152,17 @@
#**********************************************************************************
#
#**********************************************************************************
-##class Page(QtWebKit.QWebPage):
-## def __init__(self, parent):
-## QtWebKit.QWebPage.__init__(self, parent)
-##
-## def acceptNavigationRequest(self, frame, request, type):
-## return True
+class Page(QtWebKit.QWebPage):
+ def __init__(self, parent):
+ QtWebKit.QWebPage.__init__(self, parent)
+
+ def acceptNavigationRequest(self, frame, request, type):
+ print frame, request, type
+ print request.url()
+
+ # have to on query here: "?forcedownload" for dl. "?force=abcdef" for app exec on the link
+
+ return True
class Browser(QtWebKit.QWebView):
@@ -157,24 +178,24 @@
self.tabWidget = tabWidget
self.lastProgress = 0
self.lastStatusMessage = self.trUtf8('Waiting')
-
+
#TODO: set start page, otherwise the view is never updated
settings = self.settings()
settings.setAttribute(settings.PluginsEnabled, False)
#settings.setAttribute(settings.AutoLoadImages, False)
- #page = Page(self)
- #self.setPage(page)
- page = self.page()
+ page = Page(self)
+ self.setPage(page)
+ #page = self.page()
#page.setLinkDelegationPolicy(page.DelegateAllLinks)
- self.connect(self, QtCore.SIGNAL('loadStarted()'), self.handleLoadStarted)
- self.connect(self, QtCore.SIGNAL('loadProgress(int)'), self.handleLoadProgress)
- self.connect(self, QtCore.SIGNAL('loadFinished(bool)'), self.handleLoadFinished)
- self.connect(self, QtCore.SIGNAL('statusBarMessage(const QString &)'), self.handleStatusBarMessage)
- self.connect(self, QtCore.SIGNAL('urlChanged(const QUrl &)'), self.handleUrlChanged)
- self.connect(self, QtCore.SIGNAL('titleChanged(const QString &)'), self.handleTitleChanged)
- self.connect(self, QtCore.SIGNAL('iconChanged()'), self.handleIconChanged)
+ self.connect(self, QtCore.SIGNAL('loadStarted()'), self.onLoadStarted)
+ self.connect(self, QtCore.SIGNAL('loadProgress(int)'), self.onLoadProgress)
+ self.connect(self, QtCore.SIGNAL('loadFinished(bool)'), self.onLoadFinished)
+ self.connect(self, QtCore.SIGNAL('statusBarMessage(const QString &)'), self.onStatusBarMessage)
+ self.connect(self, QtCore.SIGNAL('urlChanged(const QUrl &)'), self.onUrlChanged)
+ self.connect(self, QtCore.SIGNAL('titleChanged(const QString &)'), self.onTitleChanged)
+ self.connect(self, QtCore.SIGNAL('iconChanged()'), self.onIconChanged)
self.setStatusMessage(self.lastStatusMessage)
self.setProgress(self.lastProgress)
@@ -240,37 +261,59 @@
self.globalFeedback.setProgress(percent)
- def handleLoadStarted(self):
+ def onLoadStarted(self):
self.setProgress(0)
self.setStatusMessage(self.trUtf8('Loading'))
- def handleLoadProgress(self, percent):
+ def onLoadProgress(self, percent):
self.setProgress(percent)
- def handleLoadFinished(self, flag):
+ def onLoadFinished(self, ok):
self.setProgress(100)
- self.setStatusMessage(self.trUtf8('Complete'))
+ if ok:
+ self.setStatusMessage(self.trUtf8('Complete'))
+ else:
+ self.setStatusMessage(self.trUtf8('Error'))
+ self.setProgress(0)
+ # something went wrong. most likely fProxy can not be reached
+ #
+ # no access to the Dom, so we dump some html for feedback
+ #TODO: loadFinished() never arrives, so the status bar gets stuck a x percent
+ #TODO: there are more reasons why the request may have failed. we don't get any info
+ page = htmlPage(
+ self.trUtf8('Error'),
+ '<h3>%s</h3>' % self.trUtf8('Request failed'),
+ self.trUtf8('''most likely fProxy can not be reached. check your if fProxy is running
+ and check your node config if host and port are ok. hint: this browser can currently
+ not deal with ipv6 addresses'''),
+
+ '''<br><div style="margin-top: 2em; font-style: italic; text-indent: 1em">
+ congratulations. you validatet. is it still "we are stuck at 90%"? how could you ever be certain? try it.
+ </div>'''
+ )
+ self.setHtml(page)
+
+
-
- def handleStatusBarMessage(self, text):
+ def onStatusBarMessage(self, text):
if not text.isEmpty():
self.setStatusMessage(text)
- def handleUrlChanged(self, url):
+ def onUrlChanged(self, url):
if self.navBar is not None and self.isCurrentBrowser():
self.navBar.setText(url.toString())
- def handleIconChanged(self):
+ def onIconChanged(self):
i = self.tabIndex()
if i > -1:
self.tabWidget.setTabIcon(i, self.icon)
- def handleTitleChanged(self, text):
+ def onTitleChanged(self, text):
# add title to tab
if self.tabWidget is not None:
i = self.tabIndex()
@@ -315,29 +358,29 @@
self.setupUi(self)
config.ObjectRegistry.register(self)
- self.fclientActions = Actions(self)
- self.fclientSettings = Settings()
- self.fclientViewObject = BrowserViewObject(self)
- self.fclientGlobalFeedback = GlobalFeedback(self, idFeedbackParent)
+ self.fcActions = Actions(self)
+ self.fcSettings = Settings()
+ self.fcViewObject = BrowserViewObject(self)
+ self.fcGlobalFeedback = GlobalFeedback(self, idFeedbackParent)
self.fproxyHost = None
self.fproxyPort = None
- self.fcpEventHandlers = (
- (config.fcpClient.events.ConfigData, self.handleFcpConfigData),
+ self.fcpEventonrs = (
+ (config.fcpClient.events.ConfigData, self.onFcpConfigData),
)
- config.fcpClient.events += self.fcpEventHandlers
+ config.fcpClient.events += self.fcpEventonrs
navBar = self.controlById(self.IdEdNavBar)
- self.connect(navBar, QtCore.SIGNAL('returnPressed()'), self.handleNavBarReturnPressed)
+ self.connect(navBar, QtCore.SIGNAL('returnPressed()'), self.onNavBarReturnPressed)
# setup tab bar
tabWidget = self.controlById(self.IdTabBrowsers)
tabWidget.clear()
tabWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
- self.connect(tabWidget, QtCore.SIGNAL('currentChanged(int)'), self.handleTabBrowsersCurrentChanged)
- self.connect(tabWidget, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.handleTabBrowsersContextMenuEvent)
+ self.connect(tabWidget, QtCore.SIGNAL('currentChanged(int)'), self.onTabBrowsersCurrentChanged)
+ self.connect(tabWidget, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.onTabBrowsersContextMenuEvent)
self.newTab(tabText=self.trUtf8('Waiting for fproxy'))
@@ -354,9 +397,9 @@
browser = Browser(self,
tabWidget=self.controlById(self.IdTabBrowsers),
navBar=self.controlById(self.IdEdNavBar),
- globalFeedback=self.fclientGlobalFeedback,
- browserSettings=self.fclientSettings,
- browserActions=self.fclientActions,
+ globalFeedback=self.fcGlobalFeedback,
+ browserSettings=self.fcSettings,
+ browserActions=self.fcActions,
)
tabWidget.addTab(browser, tabText)
return browser
@@ -366,6 +409,7 @@
"""loads a page in the current tab
@param url: (QUrl) to load. can be a string as well. if '', fproxys homepage is loaded
+ @return: (bool) True if a browser is available for display, False otherwise
"""
if self.fproxyHost is None or url is None:
return
@@ -377,25 +421,40 @@
url.setScheme('http')
tabWidget = self.controlById(self.IdTabBrowsers)
browser = tabWidget.currentWidget()
- if browser is not None:
- browser.load(url)
+ if browser is None:
+ browser = self.newTab(self.trUtf8('Loading'))
+ browser.load(url)
+
+
+ def setHtml(self, html, baseUrl=None):
+ """sets the contents of the current browser to the html passed
+ @arg html: (QString)
+ @arg baseUrl: (QUrl) if specified, base url to interpret resources relative to
+ """
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ browser = tabWidget.currentWidget()
+ if browser is None:
+ browser = self.newTab(self.trUtf8('Loading'))
+ baseUrl = QtCore.QUrl() if baseUrl is None else baseUrl
+ browser.setHtml(html, baseUrl)
+
#TODO: rework. we need more then one menu
def populateMenu(self, menu):
- menu.addAction(self.fclientActions['ActionGoToFProxy'])
- menu.addAction(self.fclientActions['ActionCloseCurrentBrowser'])
+ menu.addAction(self.fcActions['ActionGoToFProxy'])
+ menu.addAction(self.fcActions['ActionCloseCurrentBrowser'])
return menu
#########################################
## overwritten events
#########################################
def hideEvent(self, event):
- self.fclientGlobalFeedback.setVisible(False)
+ self.fcGlobalFeedback.setVisible(False)
def showEvent(self, event):
- self.fclientGlobalFeedback.setVisible(True)
+ self.fcGlobalFeedback.setVisible(True)
if self._isCreated:
return
@@ -407,47 +466,57 @@
#########################################
- ## fcp event handlers
+ ## fcp event onrs
#########################################
#TODO: browser should be disabled untill config data has arrived.
#disable navbar, tool buttons, actions. on second thought.. we'll see.
- def handleFcpConfigData(self, event, msg):
+ def onFcpConfigData(self, event, msg):
self.fproxyHost = None
self.fproxyPort = None
#TODO: give feedback in case fproxy is disabled
- if msg.get('current.fproxy.enabled'):
- fproxyHosts = msg.get('current.fproxy.bindTo')
- fproxyPort = msg.get('current.fproxy.port')
- if fproxyHosts:
- #TODO: ups, looks like we can not deal with ipv6 addrs
- ##self.fproxyHost = fproxyHosts[1]
- self.fproxyHost = fproxyHosts[0]
- self.fproxyPort = fproxyPort
-
+ if not msg.get('current.fproxy.enabled'):
+ page = htmlPage(
+ self.trUtf8('Error'),
+ '<h3>%s</h3>' % self.trUtf8('fProxy is disabled'),
+ self.trUtf8('''fProxy must be enabled and running to browse freenet. check your node config.'''),
+ )
+ self.setHtml(page)
+ return
+
+ fproxyHosts = msg.get('current.fproxy.bindTo')
+ if fproxyHosts:
+ #TODO: ups, looks like we can not deal with ipv6 addrs
+ # do an in depth scan to see wich host might be usable ;-)
+ for host in fproxyHosts:
+ if ':'not in host: #TODO: more here
+ break
+ self.fproxyHost = host
+ self.fproxyPort = msg.get('current.fproxy.port')
+
+ # auto load some page if we are starting up
if not self._initialConfigDataArrived:
self._initialConfigDataArrived = True
navBar = self.controlById(self.IdEdNavBar)
text = navBar.text()
if text.isEmpty():
- self.fclientActions['ActionGoToFProxy'].trigger()
+ self.fcActions['ActionGoToFProxy'].trigger()
else:
self.load(text)
-
#########################################
##
#########################################
- def handleActionCloseCurrentBrowser(self, action):
+ def onActionCloseCurrentBrowser(self, action):
tabWidget = self.controlById(self.IdTabBrowsers)
tabWidget.removeTab(tabWidget.currentIndex())
- def handleTabBrowsersContextMenuEvent(self, pt):
+ def onTabBrowsersContextMenuEvent(self, pt):
menu = QtGui.QMenu()
- actCloseBrowserUnderMouse = self.fclientActions['ActionCloseBrowserUnderMouse']
+ actCloseBrowserUnderMouse = self.fcActions['ActionCloseBrowserUnderMouse']
menu.addAction(actCloseBrowserUnderMouse)
tab = self.controlById(self.IdTabBrowsers)
@@ -461,7 +530,7 @@
tab.removeTab(i)
- def handleTabBrowsersCurrentChanged(self, index):
+ def onTabBrowsersCurrentChanged(self, index):
browser = self.controlById(self.IdTabBrowsers).currentWidget()
if browser is None:
return
@@ -478,7 +547,7 @@
ed = self.controlById(self.IdEdNavBar).setText(browser.url().toString())
- def handleNavBarReturnPressed(self):
+ def onNavBarReturnPressed(self):
ed = self.controlById(self.IdEdNavBar)
tabWidget = self.controlById(self.IdTabBrowsers)
if not tabWidget.count():
@@ -487,9 +556,9 @@
self.load(ed.text())
- def handleActionGoToFProxy(self, action):
+ def onActionGoToFProxy(self, action):
if self.fproxyHost is None:
- #TODO: handle
+ #TODO: on
return
url = QtCore.QUrl()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|