Thread: SF.net SVN: fclient:[657] trunk/fclient/src/fclient/Ui_ViewBrowser.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-07-17 00:59:56
|
Revision: 657
http://fclient.svn.sourceforge.net/fclient/?rev=657&view=rev
Author: jUrner
Date: 2008-07-17 01:00:03 +0000 (Thu, 17 Jul 2008)
Log Message:
-----------
massive comb over
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-16 21:16:35 UTC (rev 656)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-17 01:00:03 UTC (rev 657)
@@ -26,21 +26,22 @@
self.action(
name='ActionCloseCurrentBrowser',
- text=self.trUtf8('&Close'),
+ text=self.trUtf8('&Close tab'),
trigger=parent.handleActionCloseCurrentBrowser,
- isEnabled=False,
+ #isEnabled=False,
)
- self.action(
+ self.action( # context menu only
name='ActionCloseBrowserUnderMouse',
- text=self.trUtf8('&Close'),
+ text=self.trUtf8('&Close tab'),
trigger=None,
- isEnabled=False,
+ #isEnabled=False,
)
+
self.action(
- name='ActionHomePage',
- text=self.trUtf8('&Home page'),
- trigger=parent.handleActionHomePage,
- isEnabled=False,
+ name='ActionGoToFProxy',
+ text=self.trUtf8('F&Proxy homepage'),
+ trigger=parent.handleActionGoToFProxy,
+ isEnabled=True,
)
class GlobalFeedback(config.GlobalFeedbackBase):
@@ -135,26 +136,38 @@
#**********************************************************************************
#
#**********************************************************************************
-#TODO: except from but ugly code. opening links is a bit strange currently. have
-# to check policy
+##class Page(QtWebKit.QWebPage):
+## def __init__(self, parent):
+## QtWebKit.QWebPage.__init__(self, parent)
+##
+## def acceptNavigationRequest(self, frame, request, type):
+## return True
+
+
class Browser(QtWebKit.QWebView):
- def __init__(self, browserWidget):
- QtWebKit.QWebView.__init__(self, browserWidget)
+ def __init__(self, parent, tabWidget=None, navBar=None, globalFeedback=None, browserSettings=None, browserActions=None):
+ QtWebKit.QWebView.__init__(self, parent)
+ self.browserActions = browserActions
+ self.browserSettings = browserSettings
+ self.globalFeedback = globalFeedback
+ self.navBar = navBar
+ self.tabWidget = tabWidget
+ self.lastProgress = 0
+ self.lastStatusMessage = self.trUtf8('Waiting')
- #self.nm = NetworkAccessManager(self)
- #self.page().setNetworkAccessManager(self.nm)
-
-
- self.browserWidget = browserWidget
-
#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.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)
@@ -162,61 +175,71 @@
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.lastProgress = 0
- self.lastStatusMessage = self.trUtf8('Waiting')
+
self.setStatusMessage(self.lastStatusMessage)
self.setProgress(self.lastProgress)
-
-
+
+
+ def createWindow(self, typeWindow=QtWebKit.QWebPage.WebBrowserWindow):
+
+ if typeWindow == QtWebKit.QWebPage.WebBrowserWindow:
+ if self.tabWidget is None:
+ return self
+
+ browser = self.__class__(self.tabWidget,
+ tabWidget=self.tabWidget,
+ navBar=self.navBar,
+ globalFeedback=self.globalFeedback,
+ browserSettings=self.browserSettings,
+ browserActions=self.browserActions,
+ )
+ self.tabWidget.addTab(browser, self.trUtf8('Loading'))
+ n = self.tabWidget.count()
+ self.tabWidget.tabBar().setVisible(n)
+ return browser
+
+
def load(self, url):
if self.isCurrentBrowser():
- ed = self.browserWidget.controlById(self.browserWidget.IdEdNavBar)
- ed.setText(url.toString())
+ if self.navBar is not None:
+ self.navBar.setText(url.toString())
QtWebKit.QWebView.load(self, url)
-
- #
- # page = QtWebKit.QWebPage(self)
- # self.setPage(page)
- # QtWebKit.QWebView.load(self, url)
-
+
def showEvent(self, event):
self.setProgress(self.lastProgress)
self.setStatusMessage(self.lastStatusMessage)
- ed = self.browserWidget.controlById(self.browserWidget.IdEdNavBar)
- ed.setText(self.url().toString())
+ if self.navBar is not None:
+ self.navBar.setText(self.url().toString())
-
+
def hideEvent(self, event):
pass
def isCurrentBrowser(self):
- tab = self.browserWidget.controlById(self.browserWidget.IdTabBrowsers)
- return tab.currentWidget() == self
+ if self.tabWidget is not None:
+ return self.tabWidget.currentWidget() == self
+ return False
+
def tabIndex(self):
- tab = self.browserWidget.controlById(self.browserWidget.IdTabBrowsers)
- return tab.indexOf(self)
+ if self.tabWidget is not None:
+ return self.tabWidget.indexOf(self)
+ return -1
def setStatusMessage(self, text):
self.lastStatusMessage = text
- if self.isCurrentBrowser():
- self.browserWidget.fclientGlobalFeedback.setStatusMessage(text)
+ if self.globalFeedback is not None and self.isCurrentBrowser():
+ self.globalFeedback.setStatusMessage(text)
def setProgress(self, percent):
self.lastProgress = percent
- if self.isCurrentBrowser():
- self.browserWidget.fclientGlobalFeedback.setProgress(percent)
+ if self.globalFeedback is not None and self.isCurrentBrowser():
+ self.globalFeedback.setProgress(percent)
-
- def createWindow(self, typeWindow):
- if typeWindow == QtWebKit.QWebPage.WebBrowserWindow:
- return self.browserWidget.newBrowser()
-
-
+
def handleLoadStarted(self):
self.setProgress(0)
self.setStatusMessage(self.trUtf8('Loading'))
@@ -237,35 +260,34 @@
def handleUrlChanged(self, url):
- if self.isCurrentBrowser():
- ed = self.browserWidget.controlById(self.browserWidget.IdEdNavBar)
- ed.setText(url.toString())
+ if self.navBar is not None and self.isCurrentBrowser():
+ self.navBar.setText(url.toString())
def handleIconChanged(self):
i = self.tabIndex()
if i > -1:
- tab.setTabIcon(i, self.icon)
+ self.tabWidget.setTabIcon(i, self.icon)
def handleTitleChanged(self, text):
# add title to tab
- tab = self.browserWidget.controlById(self.browserWidget.IdTabBrowsers)
- i = tab.indexOf(self)
- if i > -1:
- # truncate text if necessary
- maxText = self.browserWidget.fclientSettings.value('MaxTabText')
-
- ellipsis = self.trUtf8('..')
- if text.count() > maxText and text.count() > ellipsis.count()*2:
- n = maxText - ellipsis.count()
- if n < 0:
- n = 0
- text.truncate(n)
- text.append(ellipsis)
- if text.isEmpty():
- text = self.trUtf8('<untitled>')
- tab.setTabText(i, text)
+ if self.tabWidget is not None:
+ i = self.tabIndex()
+ if i > -1:
+ # truncate text if necessary
+ maxText = self.browserSettings.value('MaxTabText')
+
+ ellipsis = self.trUtf8('..')
+ if text.count() > maxText and text.count() > ellipsis.count() * 2: #TODO: * 2 ???
+ n = maxText - ellipsis.count()
+ if n < 0:
+ n = 0
+ text.truncate(n)
+ text.append(ellipsis)
+ if text.isEmpty():
+ text = self.trUtf8('<untitled>')
+ self.tabWidget.setTabText(i, text)
#***********************************************************************
@@ -307,56 +329,61 @@
)
config.fcpClient.events += self.fcpEventHandlers
- ed = self.controlById(self.IdEdNavBar)
- self.connect(ed, QtCore.SIGNAL('returnPressed()'), self.handleNavBarReturnPressed)
+ navBar = self.controlById(self.IdEdNavBar)
+ self.connect(navBar, QtCore.SIGNAL('returnPressed()'), self.handleNavBarReturnPressed)
# setup tab bar
- tab = self.controlById(self.IdTabBrowsers)
- tab.clear()
- tab.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
- self.connect(tab, QtCore.SIGNAL('currentChanged(int)'), self.handleTabBrowsersCurrentChanged)
- self.connect(tab, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.handleTabBrowsersContextMenuEvent)
+ 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.newTab(tabText=self.trUtf8('Waiting for fproxy'))
-
#########################################
## methods
#########################################
def controlById(self, idControl):
return getattr(self, idControl)
-
+
- def newBrowser(self):
- tab = self.controlById(self.IdTabBrowsers)
- #TODO: addTab seems to reparent browser
- browser = Browser(self)
- tab.addTab(browser, self.trUtf8('Loading'))
- tab.tabBar().setVisible(tab.count())
- self.fclientActions['ActionCloseCurrentBrowser'].setEnabled(tab.count() > 1)
- self.fclientActions['ActionCloseBrowserUnderMouse'].setEnabled(tab.count() > 1)
+ def newTab(self, tabText=''):
+ """creates a new tab"""
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ browser = Browser(self,
+ tabWidget=self.controlById(self.IdTabBrowsers),
+ navBar=self.controlById(self.IdEdNavBar),
+ globalFeedback=self.fclientGlobalFeedback,
+ browserSettings=self.fclientSettings,
+ browserActions=self.fclientActions,
+ )
+ tabWidget.addTab(browser, tabText)
return browser
-
-
+
def load(self, url):
- # url: can be QString or QUrl
- if self.fproxyHost is None:
- #TODO: handle
+ """loads a page in the current tab
+
+ @param url: (QUrl) to load. can be a string as well. if '', fproxys homepage is loaded
+ """
+ if self.fproxyHost is None or url is None:
return
-
+
+ # enforce fproxy. we don't want to surf the web
url = QtCore.QUrl(url)
url.setHost(self.fproxyHost)
url.setPort(self.fproxyPort)
url.setScheme('http')
-
- tab = self.controlById(self.IdTabBrowsers)
- browser = tab.currentWidget()
- if browser is None:
- return
-
- browser.load(url)
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ browser = tabWidget.currentWidget()
+ if browser is not None:
+ browser.load(url)
+ #TODO: rework. we need more then one menu
def populateMenu(self, menu):
+ menu.addAction(self.fclientActions['ActionGoToFProxy'])
menu.addAction(self.fclientActions['ActionCloseCurrentBrowser'])
return menu
@@ -378,31 +405,33 @@
def closeEvent(self):
self.viewClose()
+
#########################################
## fcp event handlers
#########################################
+ #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):
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
-
-
- #TODO: just a sketch. when to create the initial browser? what if the user has already entered an url
- # what to do if fproxy is disabled?
+
if not self._initialConfigDataArrived:
self._initialConfigDataArrived = True
-
- self.newBrowser()
- ed = self.controlById(self.IdEdNavBar)
- text = ed.text()
+ navBar = self.controlById(self.IdEdNavBar)
+ text = navBar.text()
if text.isEmpty():
- self.fclientActions['ActionHomePage'].trigger()
+ self.fclientActions['ActionGoToFProxy'].trigger()
else:
self.load(text)
@@ -411,11 +440,9 @@
##
#########################################
def handleActionCloseCurrentBrowser(self, action):
- tab = self.controlById(self.IdTabBrowsers)
- tab.removeTab(tab.currentIndex())
- self.fclientActions['ActionCloseCurrentBrowser'].setEnabled(tab.count() > 1)
- self.fclientActions['ActionCloseBrowserUnderMouse'].setEnabled(tab.count() > 1)
-
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ tabWidget.removeTab(tabWidget.currentIndex())
+
def handleTabBrowsersContextMenuEvent(self, pt):
menu = QtGui.QMenu()
@@ -432,11 +459,8 @@
i = tab.tabBar().tabAt(pt)
if i > -1:
tab.removeTab(i)
- self.fclientActions['ActionCloseCurrentBrowser'].setEnabled(tab.count() > 1)
- self.fclientActions['ActionCloseBrowserUnderMouse'].setEnabled(tab.count() > 1)
-
+
-
def handleTabBrowsersCurrentChanged(self, index):
browser = self.controlById(self.IdTabBrowsers).currentWidget()
if browser is None:
@@ -456,26 +480,25 @@
def handleNavBarReturnPressed(self):
ed = self.controlById(self.IdEdNavBar)
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ if not tabWidget.count():
+ self.newTab(tabText=self.trUtf8(''))
+
self.load(ed.text())
- def handleActionHomePage(self, action):
+ def handleActionGoToFProxy(self, action):
if self.fproxyHost is None:
#TODO: handle
return
url = QtCore.QUrl()
- url.setHost(self.fproxyHost)
- url.setPort(self.fproxyPort)
- url.setScheme('http')
- tab = self.controlById(self.IdTabBrowsers)
- browser = tab.currentWidget()
- if browser is not None:
- browser.load(url)
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ if not tabWidget.count():
+ self.newTab(tabText=self.trUtf8('Waiting for fproxy'))
+ self.load(url)
-
-
#**********************************************************************************
#
#**********************************************************************************
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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.
|
|
From: <jU...@us...> - 2008-07-18 02:58:11
|
Revision: 666
http://fclient.svn.sourceforge.net/fclient/?rev=666&view=rev
Author: jUrner
Date: 2008-07-18 02:58:19 +0000 (Fri, 18 Jul 2008)
Log Message:
-----------
ViewObject is now in config
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-18 02:57:21 UTC (rev 665)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-18 02:58:19 UTC (rev 666)
@@ -12,7 +12,6 @@
from PyQt4 import QtCore, QtGui, QtWebKit, QtNetwork
from . import config
-from . import Ui_View
from .lib import fcp2
from .tpls.Ui_ViewBrowserWidgetTpl import Ui_ViewBrowserWidget
@@ -114,10 +113,10 @@
)
-class BrowserViewObject(Ui_View.ViewObject):
+class BrowserViewObject(config.ViewObject):
def __init__(self, parent):
- Ui_View.ViewObject. __init__(self, parent)
+ config.ViewObject. __init__(self, parent)
self.name=parent.objectName()
self.displayName=self.trUtf8('Browser')
@@ -157,8 +156,8 @@
QtWebKit.QWebPage.__init__(self, parent)
def acceptNavigationRequest(self, frame, request, type):
- print frame, request, type
- print request.url()
+ #print frame, request, type
+ #print request.url()
# have to on query here: "?forcedownload" for dl. "?force=abcdef" for app exec on the link
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 06:37:38
|
Revision: 675
http://fclient.svn.sourceforge.net/fclient/?rev=675&view=rev
Author: jUrner
Date: 2008-07-19 06:37:43 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
continued working on browser impl
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-19 06:37:06 UTC (rev 674)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 06:37:43 UTC (rev 675)
@@ -1,4 +1,8 @@
-
+#******************************************************************************************
+#TODO:
+#
+#
+#******************************************************************************************
from __future__ import absolute_import
if __name__ == '__main__': # see --> http://bugs.python.org/issue1510172 . works only current dir and below
import os; __path__ = [os.path.dirname(__file__)]
@@ -51,23 +55,23 @@
trigger=None,
#isEnabled=False,
)
-
self.action(
name='ActionGoToFProxy',
text=self.trUtf8('F&Proxy homepage'),
trigger=parent.onActionGoToFProxy,
isEnabled=True,
)
+
class GlobalFeedback(config.GlobalFeedbackBase):
"""wrapper for global statusbar widgets, menus"""
- def __init__(self, parent, idFeedbackParent):
- config.GlobalFeedbackBase.__init__(self, parent, idFeedbackParent)
+ def __init__(self, parent, idGlobalFeedback):
+ config.GlobalFeedbackBase.__init__(self, parent, idGlobalFeedback)
# menus
self.menus = []
- if self.menuBar is not None:
+ if self.menuBar is not None and hasattr(parent, 'fcViewObject'):
menu = QtGui.QMenu(parent.fcViewObject.displayName, self.menuBar)
parent.populateMenu(menu)
self.menus.append(menu)
@@ -109,7 +113,6 @@
class Settings(config.SettingsBase):
_key_ = config.IdViewBrowserWidget
_settings_ = (
- ('MaxTabText', 'UInt', 20, config.SettingScopeUser),
)
@@ -151,43 +154,69 @@
#**********************************************************************************
#
#**********************************************************************************
+class BrowserActions(config.ActionsBase):
+
+ def __init__(self, webView):
+ config.ActionsBase.__init__(self, webView)
+
+class BrowserSettings(config.SettingsBase):
+ _key_ = config.IdViewBrowserWidget
+ _settings_ = (
+ ('AlwaysOpenLinksInNewTab', 'Bool', False, config.SettingScopeUser),
+ ('BackIsClose', 'Bool', False, config.SettingScopeUser),
+ ('MaxTabText', 'UInt', 20, config.SettingScopeUser),
+ )
+
+
+
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
-
+ def acceptNavigationRequest(self, frame, request, typeRequest):
return True
class Browser(QtWebKit.QWebView):
- def __init__(self, parent, tabWidget=None, navBar=None, globalFeedback=None, browserSettings=None, browserActions=None):
+ def __init__(self, parent, idGlobalFeedback=config.IdMainWindow, tabWidget=None, navBar=None):
QtWebKit.QWebView.__init__(self, parent)
- self.browserActions = browserActions
- self.browserSettings = browserSettings
- self.globalFeedback = globalFeedback
+ self.fcActions = BrowserActions(self)
+ self.fcSettings = BrowserSettings(self)
+ self.fcGlobalFeedback = GlobalFeedback(self, idGlobalFeedback)
+
self.navBar = navBar
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.setLinkDelegationPolicy(page.DelegateAllLinks)
+ self.lastProgress = 0
+ self.lastStatusMessage = self.trUtf8('Waiting')
+ #NOTE: opening a browser in a new tab may take a while to load.
+ # self.url() will return '' untill the page is found, so we handle
+ # it ourself and keep track of the last known url in self.lastUrl
+ # to give feedback to the user on the navbar. downside is we have
+ # to reimplement contextMenuEvent() :-(
+ self.lastUrl = QtCore.QUrl()
+ #self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
+ page.setLinkDelegationPolicy(page.DelegateAllLinks)
+
+ # adjust actions
+ act = self.pageAction(page.OpenLinkInNewWindow)
+ act.setText(self.trUtf8('Open page in new tab'))
+ act = self.pageAction(page.OpenImageInNewWindow)
+ act.setText(self.trUtf8('Open image in new tab'))
+ act = self.pageAction(page.OpenFrameInNewWindow)
+ act.setText(self.trUtf8('Open frame in new tab'))
+
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)
@@ -195,47 +224,89 @@
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)
+
+ #TODO:
+ #
+ # x. set busy cursor if loading
+ # x. page history is cleared if we get an error on loading a page. reimpl page history
+ # x. back-is close like behaviour
+ # x. always open links in new tabs
- def createWindow(self, typeWindow=QtWebKit.QWebPage.WebBrowserWindow):
-
- if typeWindow == QtWebKit.QWebPage.WebBrowserWindow:
- if self.tabWidget is None:
- return self
-
- browser = self.__class__(self.tabWidget,
- tabWidget=self.tabWidget,
- navBar=self.navBar,
- globalFeedback=self.globalFeedback,
- browserSettings=self.browserSettings,
- browserActions=self.browserActions,
- )
- self.tabWidget.addTab(browser, self.trUtf8('Loading'))
- n = self.tabWidget.count()
- self.tabWidget.tabBar().setVisible(n)
- return browser
-
+ # not needed. we handle OpenLinkInNewWindow et al in contextMenuEvent
+ #def createWindow(self, typeWindow):
+ # pass
def load(self, url):
+ self.lastUrl = QtCore.QUrl(url)
if self.isCurrentBrowser():
- if self.navBar is not None:
- self.navBar.setText(url.toString())
+ if self.fcGlobalFeedback is not None and self.isCurrentBrowser():
+ self.navBar.setText(self.lastUrl.toString())
QtWebKit.QWebView.load(self, url)
+
+ setUrl = load
+
+
+ #################################
+ ## overwritten events
+ ################################
+ def contextMenuEvent(self, event):
+
+ frame = self.page().currentFrame()
+ page = self.page()
+ hitTest = frame.hitTestContent(event.pos())
+
+ #if not hitTest.isNull(): #TODO: hitTest.isNull() returns alwas True?
+ menu = QtGui.QMenu()
+
+ menu.addAction(self.pageAction(page.OpenLink))
+ menu.addAction(self.pageAction(page.OpenLinkInNewWindow))
+ menu.addAction(self.pageAction(page.CopyLinkToClipboard))
+ ##menu.addAction(DownloadLinkToDisk))
+
+ menu.addSeparator()
+ menu.addAction(self.pageAction(page.OpenImageInNewWindow))
+ menu.addAction(self.pageAction(page.DownloadImageToDisk))
+ menu.addAction(self.pageAction(page.CopyImageToClipboard))
+
+ menu.addSeparator()
+ menu.addAction(self.pageAction(page.OpenFrameInNewWindow))
+
+ menu.addSeparator()
+ menu.addAction(self.pageAction(page.Copy))
+
+ action = menu.exec_(event.globalPos())
+ if action in (self.pageAction(page.OpenLinkInNewWindow), self.pageAction(page.OpenImageInNewWindow), self.pageAction(page.OpenFrameInNewWindow)):
+ if self.tabWidget is not None:
+ browser = self.__class__(self.tabWidget,
+ idGlobalFeedback=self.fcGlobalFeedback.id,
+ tabWidget=self.tabWidget,
+ navBar=self.navBar,
+ )
+ self.tabWidget.addTab(browser, self.trUtf8('Loading'))
+ self.tabWidget.tabBar().setVisible(self.tabWidget.count())
+ if action == self.pageAction(page.OpenLinkInNewWindow):
+ browser.load(hitTest.linkUrl())
+ elif action == self.pageAction(page.OpenImageInNewWindow):
+ browser.load(hitTest.imageUrl())
+ elif action == self.pageAction(page.OpenFrameInNewWindow):
+ browser.load(hitTest.frame().url())
+ elif self.pageAction(page.DownloadImageToDisk):
+ #TODO: implement
+ pass
+
+
def showEvent(self, event):
self.setProgress(self.lastProgress)
self.setStatusMessage(self.lastStatusMessage)
if self.navBar is not None:
- self.navBar.setText(self.url().toString())
-
-
- def hideEvent(self, event):
- pass
-
+ self.navBar.setText(self.lastUrl.toString())
+
+ #################################
+ ## overwritten events
+ ################################
def isCurrentBrowser(self):
if self.tabWidget is not None:
return self.tabWidget.currentWidget() == self
@@ -250,25 +321,44 @@
def setStatusMessage(self, text):
self.lastStatusMessage = text
- if self.globalFeedback is not None and self.isCurrentBrowser():
- self.globalFeedback.setStatusMessage(text)
+ if self.fcGlobalFeedback is not None and self.isCurrentBrowser():
+ self.fcGlobalFeedback.setStatusMessage(text)
def setProgress(self, percent):
self.lastProgress = percent
- if self.globalFeedback is not None and self.isCurrentBrowser():
- self.globalFeedback.setProgress(percent)
+ if self.fcGlobalFeedback is not None and self.isCurrentBrowser():
+ self.fcGlobalFeedback.setProgress(percent)
-
- def onLoadStarted(self):
- self.setProgress(0)
- self.setStatusMessage(self.trUtf8('Loading'))
-
+ ##############################################
+ ## event handlers
+ ##############################################
+ def onIconChanged(self):
+ i = self.tabIndex()
+ if i > -1:
+ self.tabWidget.setTabIcon(i, self.icon)
- def onLoadProgress(self, percent):
- self.setProgress(percent)
-
-
+
+ def onTitleChanged(self, text):
+ # add title to tab
+ if self.tabWidget is not None:
+ i = self.tabIndex()
+ if i > -1:
+ # truncate text if necessary
+ maxText = self.fcSettings.value('MaxTabText')
+
+ ellipsis = self.trUtf8('..')
+ if text.count() > maxText and text.count() > ellipsis.count() * 2: #TODO: * 2 ???
+ n = maxText - ellipsis.count()
+ if n < 0:
+ n = 0
+ text.truncate(n)
+ text.append(ellipsis)
+ if text.isEmpty():
+ text = self.trUtf8('<untitled>')
+ self.tabWidget.setTabText(i, text)
+
+
def onLoadFinished(self, ok):
self.setProgress(100)
if ok:
@@ -284,7 +374,7 @@
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
+ self.trUtf8('''one reason may be 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'''),
@@ -294,44 +384,26 @@
)
self.setHtml(page)
+
+ def onLoadProgress(self, percent):
+ self.setProgress(percent)
+
+
+ def onLoadStarted(self):
+ self.setProgress(0)
+ self.setStatusMessage(self.trUtf8('Loading'))
+
-
def onStatusBarMessage(self, text):
if not text.isEmpty():
self.setStatusMessage(text)
def onUrlChanged(self, url):
+ self.lastUrl = QtCore.QUrl(url) # copy url. qt nukes it on return
if self.navBar is not None and self.isCurrentBrowser():
- self.navBar.setText(url.toString())
+ self.navBar.setText(self.lastUrl.toString())
-
- def onIconChanged(self):
- i = self.tabIndex()
- if i > -1:
- self.tabWidget.setTabIcon(i, self.icon)
-
-
- def onTitleChanged(self, text):
- # add title to tab
- if self.tabWidget is not None:
- i = self.tabIndex()
- if i > -1:
- # truncate text if necessary
- maxText = self.browserSettings.value('MaxTabText')
-
- ellipsis = self.trUtf8('..')
- if text.count() > maxText and text.count() > ellipsis.count() * 2: #TODO: * 2 ???
- n = maxText - ellipsis.count()
- if n < 0:
- n = 0
- text.truncate(n)
- text.append(ellipsis)
- if text.isEmpty():
- text = self.trUtf8('<untitled>')
- self.tabWidget.setTabText(i, text)
-
-
#***********************************************************************
#
#***********************************************************************
@@ -348,7 +420,7 @@
IdBtStop = 'btStop'
- def __init__(self, parent, idFeedbackParent=config.IdMainWindow):
+ def __init__(self, parent, idGlobalFeedback=config.IdMainWindow):
QtGui.QWidget.__init__(self, parent)
self._isCreated = False
@@ -360,7 +432,7 @@
self.fcActions = Actions(self)
self.fcSettings = Settings()
self.fcViewObject = BrowserViewObject(self)
- self.fcGlobalFeedback = GlobalFeedback(self, idFeedbackParent)
+ self.fcGlobalFeedback = GlobalFeedback(self, idGlobalFeedback)
self.fproxyHost = None
@@ -394,11 +466,9 @@
"""creates a new tab"""
tabWidget = self.controlById(self.IdTabBrowsers)
browser = Browser(self,
+ idGlobalFeedback=self.fcGlobalFeedback.id,
tabWidget=self.controlById(self.IdTabBrowsers),
navBar=self.controlById(self.IdEdNavBar),
- globalFeedback=self.fcGlobalFeedback,
- browserSettings=self.fcSettings,
- browserActions=self.fcActions,
)
tabWidget.addTab(browser, tabText)
return browser
@@ -542,10 +612,8 @@
for idControl, webAction in actions:
bt = self.controlById(idControl)
bt.setDefaultAction(browser.pageAction(webAction))
-
- ed = self.controlById(self.IdEdNavBar).setText(browser.url().toString())
+
-
def onNavBarReturnPressed(self):
ed = self.controlById(self.IdEdNavBar)
tabWidget = self.controlById(self.IdTabBrowsers)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 06:48:40
|
Revision: 676
http://fclient.svn.sourceforge.net/fclient/?rev=676&view=rev
Author: jUrner
Date: 2008-07-19 06:48:49 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
fix global feedback for browser
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-19 06:37:43 UTC (rev 675)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 06:48:49 UTC (rev 676)
@@ -61,8 +61,8 @@
trigger=parent.onActionGoToFProxy,
isEnabled=True,
)
-
+
class GlobalFeedback(config.GlobalFeedbackBase):
"""wrapper for global statusbar widgets, menus"""
@@ -77,39 +77,14 @@
self.menus.append(menu)
self.menuBar.addViewMenu(menu)
- # status bar widgets
- self.label1 = None
- self.progress = None
- if self.statusBar is not None:
- self.label1 = QtGui.QLabel(parent.trUtf8('progress: '), self.statusBar)
- self.statusBar.addWidget(self.label1)
- self.progress = QtGui.QProgressBar(self.statusBar)
- self.progress.setRange(0, 100)
- self.progress.setValue(0)
- self.statusBar.addWidget(self.progress)
-
- self.labelStatus = QtGui.QLabel(QtCore.QString(), self.statusBar)
- self.statusBar.addWidget(self.labelStatus)
-
-
def setVisible(self, flag):
if self.menuBar is not None:
for menu in self.menus:
menu.children()[0].setVisible(flag)
- if self.statusBar is not None:
- self.label1.setVisible(flag)
- self.progress.setVisible(flag)
- self.labelStatus.setVisible(flag)
-
- def setProgress(self, n):
- if self.progress is not None:
- self.progress.setValue(n)
-
- def setStatusMessage(self, text):
- if self.labelStatus is not None:
- self.labelStatus.setText(text)
+
+
class Settings(config.SettingsBase):
_key_ = config.IdViewBrowserWidget
_settings_ = (
@@ -159,6 +134,55 @@
def __init__(self, webView):
config.ActionsBase.__init__(self, webView)
+
+class BrowserGlobalFeedback(config.GlobalFeedbackBase):
+ """wrapper for global statusbar widgets, menus"""
+
+ def __init__(self, parent, idGlobalFeedback):
+ config.GlobalFeedbackBase.__init__(self, parent, idGlobalFeedback)
+
+ # menus
+ self.menus = []
+ if self.menuBar is not None and hasattr(parent, 'fcViewObject'):
+ menu = QtGui.QMenu(parent.fcViewObject.displayName, self.menuBar)
+ parent.populateMenu(menu)
+ self.menus.append(menu)
+ self.menuBar.addViewMenu(menu)
+
+ # status bar widgets
+ self.label1 = None
+ self.progress = None
+ if self.statusBar is not None:
+ self.label1 = QtGui.QLabel(parent.trUtf8('progress: '), self.statusBar)
+ self.statusBar.addWidget(self.label1)
+
+ self.progress = QtGui.QProgressBar(self.statusBar)
+ self.progress.setRange(0, 100)
+ self.progress.setValue(0)
+ self.statusBar.addWidget(self.progress)
+
+ self.labelStatus = QtGui.QLabel(QtCore.QString(), self.statusBar)
+ self.statusBar.addWidget(self.labelStatus)
+
+
+ def setVisible(self, flag):
+ if self.menuBar is not None:
+ for menu in self.menus:
+ menu.children()[0].setVisible(flag)
+ if self.statusBar is not None:
+ self.label1.setVisible(flag)
+ self.progress.setVisible(flag)
+ self.labelStatus.setVisible(flag)
+
+ def setProgress(self, n):
+ if self.progress is not None:
+ self.progress.setValue(n)
+
+ def setStatusMessage(self, text):
+ if self.labelStatus is not None:
+ self.labelStatus.setText(text)
+
+
class BrowserSettings(config.SettingsBase):
_key_ = config.IdViewBrowserWidget
_settings_ = (
@@ -169,6 +193,7 @@
+
class Page(QtWebKit.QWebPage):
def __init__(self, parent):
QtWebKit.QWebPage.__init__(self, parent)
@@ -185,7 +210,7 @@
self.fcActions = BrowserActions(self)
self.fcSettings = BrowserSettings(self)
- self.fcGlobalFeedback = GlobalFeedback(self, idGlobalFeedback)
+ self.fcGlobalFeedback = BrowserGlobalFeedback(self, idGlobalFeedback)
self.navBar = navBar
self.tabWidget = tabWidget
@@ -299,11 +324,16 @@
def showEvent(self, event):
+ self.fcGlobalFeedback.setVisible(True)
self.setProgress(self.lastProgress)
self.setStatusMessage(self.lastStatusMessage)
if self.navBar is not None:
self.navBar.setText(self.lastUrl.toString())
+
+ def hideEvent(self, event):
+ self.fcGlobalFeedback.setVisible(False)
+
#################################
## overwritten events
################################
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 07:49:22
|
Revision: 677
http://fclient.svn.sourceforge.net/fclient/?rev=677&view=rev
Author: jUrner
Date: 2008-07-19 07:49:30 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
set busy cursor if necessary
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-19 06:48:49 UTC (rev 676)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 07:49:30 UTC (rev 677)
@@ -192,8 +192,6 @@
)
-
-
class Page(QtWebKit.QWebPage):
def __init__(self, parent):
QtWebKit.QWebPage.__init__(self, parent)
@@ -242,6 +240,9 @@
act = self.pageAction(page.OpenFrameInNewWindow)
act.setText(self.trUtf8('Open frame in new tab'))
+ self.connect(self.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
+
+
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)
@@ -281,8 +282,8 @@
page = self.page()
hitTest = frame.hitTestContent(event.pos())
- #if not hitTest.isNull(): #TODO: hitTest.isNull() returns alwas True?
-
+ #if not hitTest.isNull(): #TODO: looks like hitTest.isNull() alwas returns True
+
menu = QtGui.QMenu()
menu.addAction(self.pageAction(page.OpenLink))
@@ -334,9 +335,15 @@
def hideEvent(self, event):
self.fcGlobalFeedback.setVisible(False)
- #################################
- ## overwritten events
+ def mouseMoveEvent(self, event):
+ if self.lastProgress < 100:
+ self.setCursor(QtCore.Qt.BusyCursor)
+ else:
+ QtWebKit.QWebView.mouseMoveEvent(self, event)
+
################################
+ ## methods
+ ################################
def isCurrentBrowser(self):
if self.tabWidget is not None:
return self.tabWidget.currentWidget() == self
@@ -363,6 +370,20 @@
##############################################
## event handlers
##############################################
+ def onActionStopTriggered(self):
+ # check wich cursor to set cos we may have busy cursor set
+ pt = self.mapFromGlobal(self.cursor().pos()) #TODO: self.mapFromGlobal(self.viewPort().cursor().pos()) ??
+ frame = self.page().currentFrame()
+ hitTest = frame.hitTestContent(pt)
+
+ #if not hitTest.isNull(): #TODO: looks like hitTest.isNull() alwas returns True
+
+ if hitTest.linkUrl().isValid() or hitTest.imageUrl().isValid():
+ self.setCursor(QtCore.Qt.PointingHandCursor)
+ else:
+ self.setCursor(QtCore.Qt.ArrowCursor)
+
+
def onIconChanged(self):
i = self.tabIndex()
if i > -1:
@@ -390,6 +411,7 @@
def onLoadFinished(self, ok):
+ self.onActionStopTriggered()
self.setProgress(100)
if ok:
self.setStatusMessage(self.trUtf8('Complete'))
@@ -420,6 +442,7 @@
def onLoadStarted(self):
+ self.setCursor(QtCore.Qt.BusyCursor)
self.setProgress(0)
self.setStatusMessage(self.trUtf8('Loading'))
@@ -427,8 +450,8 @@
def onStatusBarMessage(self, text):
if not text.isEmpty():
self.setStatusMessage(text)
+
-
def onUrlChanged(self, url):
self.lastUrl = QtCore.QUrl(url) # copy url. qt nukes it on return
if self.navBar is not None and self.isCurrentBrowser():
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 08:59:54
|
Revision: 679
http://fclient.svn.sourceforge.net/fclient/?rev=679&view=rev
Author: jUrner
Date: 2008-07-19 08:59:59 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
icon size and theme is user adjustable
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-19 08:59:28 UTC (rev 678)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 08:59:59 UTC (rev 679)
@@ -189,6 +189,7 @@
('AlwaysOpenLinksInNewTab', 'Bool', False, config.SettingScopeUser),
('BackIsClose', 'Bool', False, config.SettingScopeUser),
('MaxTabText', 'UInt', 20, config.SettingScopeUser),
+ ('IconSize', 'UInt', 32, config.SettingScopeUser)
)
@@ -240,9 +241,24 @@
act = self.pageAction(page.OpenFrameInNewWindow)
act.setText(self.trUtf8('Open frame in new tab'))
+ # adjust action icons
+ #TODO: tool buttons do not adjust themselves to huge icons. how to adjust?
+ iconSize = self.fcSettings.value('IconSize')
+ iconTheme = config.settings.value('IconTheme')
+ acts = (
+ (page.Back, 'back'),
+ (page.Forward, 'forward'),
+ (page.Reload, 'reload_page'),
+ (page.Stop, 'stop'),
+ )
+ for a, iconName in acts:
+ act = self.pageAction(a)
+ act.setIcon(config.resources.getIcon(iconName, iconSize, iconTheme=iconTheme))
+
self.connect(self.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
-
+ # connect actions
+ #TODO: download action
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)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 09:19:04
|
Revision: 681
http://fclient.svn.sourceforge.net/fclient/?rev=681&view=rev
Author: jUrner
Date: 2008-07-19 09:19:07 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
added "close all tabs" action ++ 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-19 09:02:08 UTC (rev 680)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 09:19:07 UTC (rev 681)
@@ -44,23 +44,29 @@
config.ActionsBase.__init__(self, parent)
self.action(
- name='ActionCloseCurrentBrowser',
- text=self.trUtf8('&Close tab'),
- trigger=parent.onActionCloseCurrentBrowser,
+ name='ActionCloseCurrentTab',
+ text=self.trUtf8('Close ¤t tab'),
+ trigger=parent.onActionCloseCurrentTab,
#isEnabled=False,
)
self.action( # context menu only
name='ActionCloseBrowserUnderMouse',
- text=self.trUtf8('&Close tab'),
+ text=self.trUtf8('&Close tab under mouse'),
trigger=None,
#isEnabled=False,
)
self.action(
name='ActionGoToFProxy',
- text=self.trUtf8('F&Proxy homepage'),
+ text=self.trUtf8('Go to f&Proxy homepage'),
trigger=parent.onActionGoToFProxy,
isEnabled=True,
)
+ self.action(
+ name='ActionCloseAllTabs',
+ text=self.trUtf8('Close &all tabs'),
+ trigger=parent.onActionCloseAllTabs,
+ isEnabled=True,
+ )
class GlobalFeedback(config.GlobalFeedbackBase):
@@ -255,8 +261,6 @@
act = self.pageAction(a)
act.setIcon(config.resources.getIcon(iconName, iconSize, iconTheme=iconTheme))
- self.connect(self.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
-
# connect actions
#TODO: download action
self.connect(self, QtCore.SIGNAL('loadStarted()'), self.onLoadStarted)
@@ -267,12 +271,14 @@
self.connect(self, QtCore.SIGNAL('titleChanged(const QString &)'), self.onTitleChanged)
self.connect(self, QtCore.SIGNAL('iconChanged()'), self.onIconChanged)
+ self.connect(self.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
+
#TODO:
#
- # x. set busy cursor if loading
- # x. page history is cleared if we get an error on loading a page. reimpl page history
+ # x. page history is cleared if we get an error on loading a page. reimpl page history?
# x. back-is close like behaviour
# x. always open links in new tabs
+ # x. backand forward buttons sucks somehow. sometimed fwd is enabled even if no fwd is available. reimpl page history?
# not needed. we handle OpenLinkInNewWindow et al in contextMenuEvent
@@ -581,7 +587,8 @@
#TODO: rework. we need more then one menu
def populateMenu(self, menu):
menu.addAction(self.fcActions['ActionGoToFProxy'])
- menu.addAction(self.fcActions['ActionCloseCurrentBrowser'])
+ menu.addAction(self.fcActions['ActionCloseCurrentTab'])
+ menu.addAction(self.fcActions['ActionCloseAllTabs'])
return menu
#########################################
@@ -602,7 +609,6 @@
def closeEvent(self):
self.viewClose()
-
#########################################
## fcp event onrs
#########################################
@@ -646,7 +652,7 @@
#########################################
##
#########################################
- def onActionCloseCurrentBrowser(self, action):
+ def onActionCloseCurrentTab(self, action):
tabWidget = self.controlById(self.IdTabBrowsers)
tabWidget.removeTab(tabWidget.currentIndex())
@@ -688,10 +694,14 @@
tabWidget = self.controlById(self.IdTabBrowsers)
if not tabWidget.count():
self.newTab(tabText=self.trUtf8(''))
-
self.load(ed.text())
+ def onActionCloseAllTabs(self, action):
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ tabWidget.clear()
+
+
def onActionGoToFProxy(self, action):
if self.fproxyHost is None:
#TODO: on
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 09:48:50
|
Revision: 683
http://fclient.svn.sourceforge.net/fclient/?rev=683&view=rev
Author: jUrner
Date: 2008-07-19 09:48:57 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
some notes
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-19 09:48:44 UTC (rev 682)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 09:48:57 UTC (rev 683)
@@ -1,7 +1,19 @@
#******************************************************************************************
#TODO:
+# x. someday. maybe. reimpl to browse via fcp.
+# x. page history is cleared if we get an error on loading a page. reimpl page history?
+# x. back-is-close like behaviour
+# x. always open links in new tabs
+# x. backand forward buttons suck somehow. sometimes fwd is enabled even if no fwd is available. reimpl page history?
+# x. save page / image whatever
+# x. download. idea is to add dls to global download widget and mark them (some color code) as new content.
+# alt would be to to do it firefox like in a separate widget. maybe an option to adjust if browser dls should be
+# persistent or not
+# x. tool buttons do not adjust their size to icon size. maybe it is some global setting via qt-config
+# x. fProxy is a bit tight-lipped when it comes to feedback. no idea
+# x. give feedback on tabs about load / finisched / error. maybe some color code. wait for new QTabWidget features (qt4.5)
+# x. close button on tabs. wait for new QTabWidget features (qt4.5)
#
-#
#******************************************************************************************
from __future__ import absolute_import
if __name__ == '__main__': # see --> http://bugs.python.org/issue1510172 . works only current dir and below
@@ -272,15 +284,8 @@
self.connect(self, QtCore.SIGNAL('iconChanged()'), self.onIconChanged)
self.connect(self.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
-
- #TODO:
- #
- # x. page history is cleared if we get an error on loading a page. reimpl page history?
- # x. back-is close like behaviour
- # x. always open links in new tabs
- # x. backand forward buttons sucks somehow. sometimed fwd is enabled even if no fwd is available. reimpl page history?
+
-
# not needed. we handle OpenLinkInNewWindow et al in contextMenuEvent
#def createWindow(self, typeWindow):
# pass
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-19 10:54:56
|
Revision: 684
http://fclient.svn.sourceforge.net/fclient/?rev=684&view=rev
Author: jUrner
Date: 2008-07-19 10:55:05 +0000 (Sat, 19 Jul 2008)
Log Message:
-----------
more todos
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-19 09:48:57 UTC (rev 683)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-19 10:55:05 UTC (rev 684)
@@ -13,6 +13,7 @@
# x. fProxy is a bit tight-lipped when it comes to feedback. no idea
# x. give feedback on tabs about load / finisched / error. maybe some color code. wait for new QTabWidget features (qt4.5)
# x. close button on tabs. wait for new QTabWidget features (qt4.5)
+# x. zoom in/out
#
#******************************************************************************************
from __future__ import absolute_import
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-21 10:57:21
|
Revision: 713
http://fclient.svn.sourceforge.net/fclient/?rev=713&view=rev
Author: jUrner
Date: 2008-07-21 10:57:23 +0000 (Mon, 21 Jul 2008)
Log Message:
-----------
a few actions more and a props dialog
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-21 10:54:28 UTC (rev 712)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-21 10:57:23 UTC (rev 713)
@@ -31,6 +31,7 @@
from . import config
from .lib import fcp2
+from . import Ui_DlgPropsBrowserObject
from .tpls.Ui_ViewBrowserWidgetTpl import Ui_ViewBrowserWidget
#**********************************************************************************
#
@@ -75,6 +76,13 @@
isEnabled=True,
)
self.action(
+ name='ActionGoToHomePage',
+ text=self.trUtf8('Go to &homepage'),
+ trigger=parent.onActionGoToHomePage,
+ isEnabled=True,
+ )
+
+ self.action(
name='ActionCloseAllTabs',
text=self.trUtf8('Close &all tabs'),
trigger=parent.onActionCloseAllTabs,
@@ -107,6 +115,8 @@
class Settings(config.SettingsBase):
_key_ = config.IdViewBrowserWidget
_settings_ = (
+ ('HomePage', 'String', '', config.SettingScopeUser),
+ ('HomePageIsStartPage', 'Bool', False, config.SettingScopeUser),
)
@@ -152,6 +162,13 @@
def __init__(self, webView):
config.ActionsBase.__init__(self, webView)
+
+ self.action(
+ name='ActionObjectProperties',
+ text=self.trUtf8('Properties..'),
+ trigger=None,
+ isEnabled=True,
+ )
class BrowserGlobalFeedback(config.GlobalFeedbackBase):
@@ -329,7 +346,12 @@
menu.addSeparator()
menu.addAction(self.pageAction(page.Copy))
+
+ menu.addAction(self.fcActions['ActionObjectProperties'])
+ downloadsWidget = config.ObjectRegistry.get(config.IdViewCDownloadsWidget)
+ self.pageAction(page.DownloadImageToDisk).setEnabled(downloadsWidget is not None)
+
action = menu.exec_(event.globalPos())
if action in (self.pageAction(page.OpenLinkInNewWindow), self.pageAction(page.OpenImageInNewWindow), self.pageAction(page.OpenFrameInNewWindow)):
if self.tabWidget is not None:
@@ -347,9 +369,26 @@
elif action == self.pageAction(page.OpenFrameInNewWindow):
browser.load(hitTest.frame().url())
- elif self.pageAction(page.DownloadImageToDisk):
- #TODO: implement
- pass
+ elif action == self.pageAction(page.DownloadImageToDisk):
+ url = hitTest.imageUrl().toString()
+ try:
+ url = str(url)
+ except UnicodeEncodeError:
+ #TODO: handle
+ return
+ try:
+ key = fcp2.Key(url)
+ except ValueError:
+ #TODO: handle
+ return
+ requestIdentifier = config.fcpClient.getData(key)
+ downloadsWidget.addRequest(requestIdentifier)
+
+ elif action == self.fcActions['ActionObjectProperties']:
+ dlg = Ui_DlgPropsBrowserObject.PropsBrowserObjectDlg(self, hitTest=hitTest)
+ if dlg.exec_() == dlg.Accepted:
+ pass
+
def showEvent(self, event):
@@ -511,7 +550,7 @@
config.ObjectRegistry.register(self)
self.fcActions = Actions(self)
- self.fcSettings = Settings()
+ self.fcSettings = Settings().restore()
self.fcViewObject = BrowserViewObject(self)
self.fcGlobalFeedback = GlobalFeedback(self, idGlobalFeedback)
@@ -519,10 +558,10 @@
self.fproxyHost = None
self.fproxyPort = None
- self.fcpEventonrs = (
+ self.fcpEvents = (
(config.fcpClient.events.ConfigData, self.onFcpConfigData),
)
- config.fcpClient.events += self.fcpEventonrs
+ config.fcpClient.events += self.fcpEvents
navBar = self.controlById(self.IdEdNavBar)
self.connect(navBar, QtCore.SIGNAL('returnPressed()'), self.onNavBarReturnPressed)
@@ -593,6 +632,7 @@
#TODO: rework. we need more then one menu
def populateMenu(self, menu):
menu.addAction(self.fcActions['ActionGoToFProxy'])
+ menu.addAction(self.fcActions['ActionGoToHomePage'])
menu.addAction(self.fcActions['ActionCloseCurrentTab'])
menu.addAction(self.fcActions['ActionCloseAllTabs'])
return menu
@@ -615,6 +655,10 @@
def closeEvent(self):
self.viewClose()
+
+ def viewClose(self):
+ config.fcpClient.events -= self.fcpEvents
+
#########################################
## fcp event onrs
#########################################
@@ -651,7 +695,10 @@
navBar = self.controlById(self.IdEdNavBar)
text = navBar.text()
if text.isEmpty():
- self.fcActions['ActionGoToFProxy'].trigger()
+ if self.fcSettings.value('HomePageIsStartPage'):
+ self.fcActions['ActionGoToHomePage'].trigger()
+ else:
+ self.fcActions['ActionGoToFProxy'].trigger()
else:
self.load(text)
@@ -710,14 +757,21 @@
def onActionGoToFProxy(self, action):
if self.fproxyHost is None:
- #TODO: on
+ #TODO: handle
return
url = QtCore.QUrl()
tabWidget = self.controlById(self.IdTabBrowsers)
if not tabWidget.count():
self.newTab(tabText=self.trUtf8('Waiting for fproxy'))
+ self.load(url)
+ def onActionGoToHomePage(self, action):
+ home = self.fcSettings.value('HomePage')
+ url = QtCore.QUrl(home)
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ if not tabWidget.count():
+ self.newTab(tabText=self.trUtf8('Waiting for fproxy'))
self.load(url)
#**********************************************************************************
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-21 13:11:08
|
Revision: 717
http://fclient.svn.sourceforge.net/fclient/?rev=717&view=rev
Author: jUrner
Date: 2008-07-21 13:11:16 +0000 (Mon, 21 Jul 2008)
Log Message:
-----------
tab menu
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-21 12:45:47 UTC (rev 716)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-21 13:11:16 UTC (rev 717)
@@ -65,7 +65,7 @@
)
self.action( # context menu only
name='ActionCloseBrowserUnderMouse',
- text=self.trUtf8('&Close tab under mouse'),
+ text=self.trUtf8('&Close tab'),
trigger=None,
#isEnabled=False,
)
@@ -713,8 +713,10 @@
def onTabBrowsersContextMenuEvent(self, pt):
menu = QtGui.QMenu()
+ #TODO: enable / disable actions
actCloseBrowserUnderMouse = self.fcActions['ActionCloseBrowserUnderMouse']
menu.addAction(actCloseBrowserUnderMouse)
+ menu.addAction(self.fcActions['ActionCloseAllTabs'])
tab = self.controlById(self.IdTabBrowsers)
pt = tab.mapToGlobal(pt)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-25 07:13:48
|
Revision: 736
http://fclient.svn.sourceforge.net/fclient/?rev=736&view=rev
Author: jUrner
Date: 2008-07-25 07:13:57 +0000 (Fri, 25 Jul 2008)
Log Message:
-----------
complete rework
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-25 07:13:49 UTC (rev 735)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-25 07:13:57 UTC (rev 736)
@@ -3,9 +3,8 @@
# x. someday. maybe. reimpl to browse via fcp.
# x. page history is cleared if we get an error on loading a page. reimpl page history?
# x. back-is-close like behaviour
-# x. always open links in new tabs
# x. backand forward buttons suck somehow. sometimes fwd is enabled even if no fwd is available. reimpl page history?
-# x. save page / image whatever
+# x. save page to disk
# x. download. idea is to add dls to global download widget and mark them (some color code) as new content.
# alt would be to to do it firefox like in a separate widget. maybe an option to adjust if browser dls should be
# persistent or not
@@ -14,164 +13,138 @@
# x. give feedback on tabs about load / finisched / error. maybe some color code. wait for new QTabWidget features (qt4.5)
# x. close button on tabs. wait for new QTabWidget features (qt4.5)
# x. zoom in/out
-#
+# x. page actions: CopyImageToClipboard,
+# x. when mouse pointer is over an opend image a magnifier cursor appears. no idea how this is handled
#******************************************************************************************
+"""
+
+@newfield signal: signal, signals
+"""
from __future__ import absolute_import
if __name__ == '__main__': # see --> http://bugs.python.org/issue1510172 . works only current dir and below
import os; __path__ = [os.path.dirname(__file__)]
-
-import logging
+
import posixpath
-#import re
-import sys
-logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
+from PyQt4 import QtCore, QtGui, QtWebKit
-from PyQt4 import QtCore, QtGui, QtWebKit, QtNetwork
+from . import config
-from . import config
from .lib import fcp2
+from .lib.qt4ex.lib import tools as qtools
+from .lib.compactpath.qt4 import pathlabelwrap
from . import Ui_DlgPropsBrowserObject
+from . import Ui_DlgDownloadKeyToDisk
from .tpls.Ui_ViewBrowserWidgetTpl import Ui_ViewBrowserWidget
-#**********************************************************************************
+#*****************************************************************************************
#
-#**********************************************************************************
-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 Page(QtWebKit.QWebPage):
+ def __init__(self, parent):
+ QtWebKit.QWebPage.__init__(self, parent)
-#**********************************************************************************
+ #def acceptNavigationRequest(self, frame, request, typeRequest):
+ # return True
+
+#*****************************************************************************************
#
-#**********************************************************************************
-class Actions(config.ActionsBase):
+#*****************************************************************************************
+class Browser(QtWebKit.QWebView):
+ """ browser customized for freenet
+ """
- def __init__(self, parent):
- config.ActionsBase.__init__(self, parent)
+ MaxProgress = 100
- self.action(
- name='ActionCloseCurrentTab',
- text=self.trUtf8('Close ¤t tab'),
- trigger=parent.onActionCloseCurrentTab,
- #isEnabled=False,
- )
- self.action( # context menu only
- name='ActionCloseBrowserUnderMouse',
- text=self.trUtf8('&Close tab'),
- trigger=None,
- #isEnabled=False,
- )
- self.action(
- name='ActionGoToFProxy',
- text=self.trUtf8('Go to f&Proxy homepage'),
- trigger=parent.onActionGoToFProxy,
- isEnabled=True,
- )
- self.action(
- name='ActionGoToHomePage',
- text=self.trUtf8('Go to &homepage'),
- trigger=parent.onActionGoToHomePage,
- isEnabled=True,
- )
+ def __init__(self, parent=None, userData=None):
+ QtWebKit.QWebView.__init__(self, parent)
+
+ page = Page(self)
+ self.setPage(page)
+
+ #NOTE: we store last progress made to set busy cursor accordingly
+ self._lastProgress = 0
+ self._userData = userData
+
+ # connect actions
+ 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.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
+
+ ################################
+ ## methods
+ ################################
+ #def createWindow(self, typeWindow):
+ # pass
+
+ def load(self, url):
+ self._lastProgress = 0
+ return QtWebKit.QWebView.load(self, url)
- self.action(
- name='ActionCloseAllTabs',
- text=self.trUtf8('Close &all tabs'),
- trigger=parent.onActionCloseAllTabs,
- isEnabled=True,
- )
-
-
-class GlobalFeedback(config.GlobalFeedbackBase):
- """wrapper for global statusbar widgets, menus"""
+ def setLastStatusMessage(self, qString):
+ self._lastStatusMessage = qString
- def __init__(self, parent, idGlobalFeedback):
- config.GlobalFeedbackBase.__init__(self, parent, idGlobalFeedback)
-
- # menus
- self.menus = []
- if self.menuBar is not None and hasattr(parent, 'fcViewObject'):
- menu = QtGui.QMenu(parent.fcViewObject.displayName, self.menuBar)
- parent.populateMenu(menu)
- self.menus.append(menu)
- self.menuBar.addViewMenu(menu)
-
+ def setUrl(self, url):
+ return self.load(url)
+
+ def setContents(self, *args):
+ """sets the contents of the browser without changing its url"""
+ self._lastProgress = 0
+ return QtWebKit.QWebView.setContents(self, *args)
+
+ def setHtml(self, *args):
+ """sets the contents of the browser without changing its url"""
+ self._lastProgress = 0
+ return QtWebKit.QWebView.setHtm(self, *args)
+
+ def setPage(self, page):
+ """sets the contents of the browser without changing its url"""
+ self._lastProgress = 0
+ return QtWebKit.QWebView.setPage(self, page)
+
+ def setUserData(self, userData):
+ self._userData = userData
+
+ def mouseMoveEvent(self, event):
+ if self._lastProgress < self.MaxProgress:
+ self.setCursor(QtCore.Qt.BusyCursor)
+ else:
+ QtWebKit.QWebView.mouseMoveEvent(self, event)
- def setVisible(self, flag):
- if self.menuBar is not None:
- for menu in self.menus:
- menu.children()[0].setVisible(flag)
+ def userData(self):
+ return self._userData
+
+ ###############################
+ ## event handlers
+ ###############################
+ def onActionStopTriggered(self):
+ # check wich cursor to set cos we may have busy cursor set
+ pt = self.mapFromGlobal(self.cursor().pos()) #TODO: self.mapFromGlobal(self.viewPort().cursor().pos()) ??
+ frame = self.page().currentFrame()
+ hitTest = frame.hitTestContent(pt)
+ #if not hitTest.isNull(): #TODO: looks like hitTest.isNull() alwas returns True
+ if hitTest.linkUrl().isValid():
+ self.setCursor(QtCore.Qt.PointingHandCursor)
+ else:
+ self.setCursor(QtCore.Qt.ArrowCursor)
+
+ def onLoadStarted(self):
+ self._lastProgress = 0
-
-
-class Settings(config.SettingsBase):
- _key_ = config.IdViewBrowserWidget
- _settings_ = (
- ('HomePage', 'String', '', config.SettingScopeUser),
- ('HomePageIsStartPage', 'Bool', False, config.SettingScopeUser),
- )
-
-
-class BrowserViewObject(config.ViewObject):
+ def onLoadProgress(self, n):
+ self._lastProgress = n
+
+ def onLoadFinished(self):
+ self._lastProgress = self.MaxProgress
+ self.onActionStopTriggered()
+
+ def onPageDownloadRequested(self, networkRequest):
+ self.emit(QtCore.SIGNAL('downloadRequested(const QNetworkRequest &)'), networkRequest)
- def __init__(self, parent):
- config.ViewObject. __init__(self, parent)
-
- self.name=parent.objectName()
- self.displayName=self.trUtf8('Browser')
- self.icon=QtGui.QIcon()
-
#**********************************************************************************
#
#**********************************************************************************
-## looks we could serve pages via fcp, bypassing fproxy
-## no reason to do so..
-##
-##class NetworkAccessManager(QtNetwork.QNetworkAccessManager):
-##
-## def __init__(self, parent):
-## QtNetwork.QNetworkAccessManager.__init__(self, parent)
-##
-## def createRequest(self, operation, request, outgoingData):
-## print 'createRequest', request.url()
-## reply = QtNetwork.QNetworkAccessManager.createRequest(self, operation, request, outgoingData)
-## #TODO: implement QNetworkReply()
-## return reply
-##
-##
-##class Browser(QtWebKit.QWebView):
-##
-##def __init__(self, browserWidget):
-## QtWebKit.QWebView.__init__(self, browserWidget)
-##
-## self.nam = NetworkAccessManager(self)
-## self.page().setNetworkAccessManager(self.nam)
-##
-#**********************************************************************************
-#
-#**********************************************************************************
-class BrowserActions(config.ActionsBase):
-
- def __init__(self, webView):
- config.ActionsBase.__init__(self, webView)
-
- self.action(
- name='ActionObjectProperties',
- text=self.trUtf8('Properties..'),
- trigger=None,
- isEnabled=True,
- )
-
-
-class BrowserGlobalFeedback(config.GlobalFeedbackBase):
+class BrowserWidgetGlobalFeedback(config.GlobalFeedbackBase):
"""wrapper for global statusbar widgets, menus"""
def __init__(self, parent, idGlobalFeedback):
@@ -186,455 +159,398 @@
self.menuBar.addViewMenu(menu)
# status bar widgets
- self.label1 = None
+ self.labelStatus = None
self.progress = None
+ self.labelFeedbackWrap = None
if self.statusBar is not None:
- self.label1 = QtGui.QLabel(parent.trUtf8('progress: '), self.statusBar)
- self.statusBar.addWidget(self.label1)
+ self.labelStatus = QtGui.QLabel(QtCore.QString(), self.statusBar)
+ self.statusBar.addWidget(self.labelStatus)
self.progress = QtGui.QProgressBar(self.statusBar)
- self.progress.setRange(0, 100)
+ self.progress.setRange(0, Browser.MaxProgress)
self.progress.setValue(0)
self.statusBar.addWidget(self.progress)
+
+ label = QtGui.QLabel(self.statusBar)
+ label.setFrameStyle(QtGui.QLabel.Sunken | QtGui.QLabel.Box)
+ self.labelFeedbackWrap = pathlabelwrap.PathLabelWrap(
+ label,
+ path_module=posixpath,
+ )
+ self.statusBar.addWidget(self.labelFeedbackWrap.label, 1)
- self.labelStatus = QtGui.QLabel(QtCore.QString(), self.statusBar)
- self.statusBar.addWidget(self.labelStatus)
-
-
+
def setVisible(self, flag):
if self.menuBar is not None:
for menu in self.menus:
menu.children()[0].setVisible(flag)
if self.statusBar is not None:
- self.label1.setVisible(flag)
self.progress.setVisible(flag)
self.labelStatus.setVisible(flag)
+ self.labelFeedbackWrap.label.setVisible(flag)
def setProgress(self, n):
if self.progress is not None:
self.progress.setValue(n)
- def setStatusMessage(self, text):
+ def setStatusMessage(self, qString):
if self.labelStatus is not None:
- self.labelStatus.setText(text)
+ self.labelStatus.setText(qString)
+
+ def setFeedback(self, qString):
+ if self.labelFeedbackWrap is not None:
+ self.labelFeedbackWrap.setPath(unicode(qString))
+
+class BrowserWidgetViewObject(config.ViewObject):
+
+ def __init__(self, parent):
+ config.ViewObject. __init__(self, parent)
+
+ self.name=parent.objectName()
+ self.displayName=self.trUtf8('Browser')
+ self.icon=QtGui.QIcon()
+
-class BrowserSettings(config.SettingsBase):
+class BrowserWidgetSettings(config.SettingsBase):
_key_ = config.IdViewBrowserWidget
_settings_ = (
- ('AlwaysOpenLinksInNewTab', 'Bool', False, config.SettingScopeUser),
- ('BackIsClose', 'Bool', False, config.SettingScopeUser),
- ('MaxTabText', 'UInt', 20, config.SettingScopeUser),
- ('IconSize', 'UInt', 32, config.SettingScopeUser)
+ ('OpenLinksInNewTab', 'Bool', False, config.SettingScopeUser),
+ ('OpenAddressBarInNewTab', 'Bool', False, config.SettingScopeUser),
+ ('OpenBookmarksInNewTab', 'Bool', False, config.SettingScopeUser),
+ ('OpenHomePageOnNewTabCreated', 'Bool', False, config.SettingScopeUser),
+ ('BackIsClose', 'Bool', False, config.SettingScopeUser), #TODO: not implemented
+ ('HomePage', 'String', QtCore.QString(), config.SettingScopeUser),
+ ('IconSize', 'UInt', 32, config.SettingScopeUser),
+ ('LoadImages', 'Bool', True, config.SettingScopeUser), #TODO: not yet implemented
+ ('MaxTabText', 'UInt', 20, config.SettingScopeUser), #NOTE: make shure Max >= Min and Max and Min > 0
+ ('MinTabText', 'UInt', 7, config.SettingScopeUser),
)
-
-class Page(QtWebKit.QWebPage):
+class BrowserWidgetActions(config.ActionsBase):
+
def __init__(self, parent):
- QtWebKit.QWebPage.__init__(self, parent)
+ config.ActionsBase.__init__(self, parent)
- def acceptNavigationRequest(self, frame, request, typeRequest):
- return True
+ self.action(
+ name='ActionCloseCurrentTab',
+ text=self.trUtf8('Close ¤t tab'),
+ trigger=parent.onCloseCurrentTab,
+ )
+ self.action( # context menu only
+ name='ActionCloseBrowserUnderMouse',
+ text=self.trUtf8('&Close tab'),
+ trigger=None,
+ )
+ self.action(
+ name='ActionCloseAllTabs',
+ text=self.trUtf8('Close &all tabs'),
+ trigger=parent.onCloseAllTabs,
+ )
+ self.action(
+ name='ActionOpenNewTab',
+ text=self.trUtf8('Open &new tab'),
+ trigger=parent.onOpenNewTab,
+ )
+ self.action(
+ name='ActionGoToFProxy',
+ text=self.trUtf8('Go to f&Proxy homepage'),
+ trigger=parent.onGoToFProxy,
+ )
+ self.action(
+ name='ActionGoToHomePage',
+ text=self.trUtf8('Go to &homepage'),
+ trigger=parent.onGoToHomePage,
+ )
+ self.action(
+ name='ActionObjectProperties',
+ text=self.trUtf8('Properties..'),
+ trigger=None,
+ )
+ self.action(
+ name='ActionZoomIn',
+ text=self.trUtf8('Zoom in'),
+ trigger=parent.onZoomIn,
+ )
+ self.action(
+ name='ActionZoomOut',
+ text=self.trUtf8('Zoom out'),
+ trigger=parent.onZoomOut,
+ )
-
-class Browser(QtWebKit.QWebView):
-
+class LastBrowserState(object):
+ """records the last known state browser"""
- def __init__(self, parent, idGlobalFeedback=config.IdMainWindow, tabWidget=None, navBar=None):
- QtWebKit.QWebView.__init__(self, parent)
-
- self.fcActions = BrowserActions(self)
- self.fcSettings = BrowserSettings(self)
- self.fcGlobalFeedback = BrowserGlobalFeedback(self, idGlobalFeedback)
-
- self.navBar = navBar
- self.tabWidget = tabWidget
-
- settings = self.settings()
- settings.setAttribute(settings.PluginsEnabled, False)
- #settings.setAttribute(settings.AutoLoadImages, False)
-
- page = Page(self)
- self.setPage(page)
- #page = self.page()
-
- self.lastProgress = 0
- self.lastStatusMessage = self.trUtf8('Waiting')
+ __slots__ = ('icon', 'progress', 'statusMessage', 'title', 'url')
+
+ def __init__(self, icon=None, progress=0, statusMessage=None, title=None, url=None):
+ self.progress = 0
+ self.icon = tCore.QIcon() if icon is None else icon
+ self.statusMessage = QtCore.QString() if statusMessage is None else statusMessage
+ self.title = QtCore.QString() if title is None else title
#NOTE: opening a browser in a new tab may take a while to load.
# self.url() will return '' untill the page is found, so we handle
- # it ourself and keep track of the last known url in self.lastUrl
+ # it ourself and keep track of the last known url in self._lastUrl
# to give feedback to the user on the navbar. downside is we have
# to reimplement contextMenuEvent() :-(
- self.lastUrl = QtCore.QUrl()
- #self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
- page.setLinkDelegationPolicy(page.DelegateAllLinks)
-
- # adjust actions
- act = self.pageAction(page.OpenLinkInNewWindow)
- act.setText(self.trUtf8('Open page in new tab'))
- act = self.pageAction(page.OpenImageInNewWindow)
- act.setText(self.trUtf8('Open image in new tab'))
- act = self.pageAction(page.OpenFrameInNewWindow)
- act.setText(self.trUtf8('Open frame in new tab'))
-
- # adjust action icons
- #TODO: tool buttons do not adjust themselves to huge icons. how to adjust?
- iconSize = self.fcSettings.value('IconSize')
- iconTheme = config.settings.value('IconTheme')
- acts = (
- (page.Back, 'back'),
- (page.Forward, 'forward'),
- (page.Reload, 'reload_page'),
- (page.Stop, 'stop'),
- )
- for a, iconName in acts:
- act = self.pageAction(a)
- act.setIcon(config.resources.getIcon(iconName, iconSize, iconTheme=iconTheme))
-
- # connect actions
- #TODO: download action
- 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.connect(self.pageAction(QtWebKit.QWebPage.Stop), QtCore.SIGNAL('triggered()'), self.onActionStopTriggered)
-
-
- # not needed. we handle OpenLinkInNewWindow et al in contextMenuEvent
- #def createWindow(self, typeWindow):
- # pass
-
- def load(self, url):
- self.lastUrl = QtCore.QUrl(url)
- if self.isCurrentBrowser():
- if self.fcGlobalFeedback is not None and self.isCurrentBrowser():
- self.navBar.setText(self.lastUrl.toString())
- QtWebKit.QWebView.load(self, url)
-
- setUrl = load
-
-
- #################################
- ## overwritten events
- ################################
- def contextMenuEvent(self, event):
-
- frame = self.page().currentFrame()
- page = self.page()
- hitTest = frame.hitTestContent(event.pos())
-
- #if not hitTest.isNull(): #TODO: looks like hitTest.isNull() alwas returns True
-
- menu = QtGui.QMenu()
-
- menu.addAction(self.pageAction(page.OpenLink))
- menu.addAction(self.pageAction(page.OpenLinkInNewWindow))
- menu.addAction(self.pageAction(page.CopyLinkToClipboard))
- ##menu.addAction(DownloadLinkToDisk))
-
- menu.addSeparator()
- menu.addAction(self.pageAction(page.OpenImageInNewWindow))
- menu.addAction(self.pageAction(page.DownloadImageToDisk))
- menu.addAction(self.pageAction(page.CopyImageToClipboard))
-
- menu.addSeparator()
- menu.addAction(self.pageAction(page.OpenFrameInNewWindow))
-
- menu.addSeparator()
- menu.addAction(self.pageAction(page.Copy))
-
- menu.addAction(self.fcActions['ActionObjectProperties'])
-
- downloadsWidget = config.ObjectRegistry.get(config.IdViewCDownloadsWidget)
- self.pageAction(page.DownloadImageToDisk).setEnabled(downloadsWidget is not None)
-
- action = menu.exec_(event.globalPos())
- if action in (self.pageAction(page.OpenLinkInNewWindow), self.pageAction(page.OpenImageInNewWindow), self.pageAction(page.OpenFrameInNewWindow)):
- if self.tabWidget is not None:
- browser = self.__class__(self.tabWidget,
- idGlobalFeedback=self.fcGlobalFeedback.id,
- tabWidget=self.tabWidget,
- navBar=self.navBar,
- )
- self.tabWidget.addTab(browser, self.trUtf8('Loading'))
- self.tabWidget.tabBar().setVisible(self.tabWidget.count())
- if action == self.pageAction(page.OpenLinkInNewWindow):
- browser.load(hitTest.linkUrl())
- elif action == self.pageAction(page.OpenImageInNewWindow):
- browser.load(hitTest.imageUrl())
- elif action == self.pageAction(page.OpenFrameInNewWindow):
- browser.load(hitTest.frame().url())
-
- elif action == self.pageAction(page.DownloadImageToDisk):
- url = hitTest.imageUrl().toString()
- try:
- url = str(url)
- except UnicodeEncodeError:
- #TODO: handle
- return
- try:
- key = fcp2.Key(url)
- except ValueError:
- #TODO: handle
- return
- requestIdentifier = config.fcpClient.getData(key)
- downloadsWidget.addRequest(requestIdentifier)
-
- elif action == self.fcActions['ActionObjectProperties']:
- dlg = Ui_DlgPropsBrowserObject.PropsBrowserObjectDlg(self, hitTest=hitTest)
- if dlg.exec_() == dlg.Accepted:
- pass
-
-
-
- def showEvent(self, event):
- self.fcGlobalFeedback.setVisible(True)
- self.setProgress(self.lastProgress)
- self.setStatusMessage(self.lastStatusMessage)
- if self.navBar is not None:
- self.navBar.setText(self.lastUrl.toString())
-
-
- def hideEvent(self, event):
- self.fcGlobalFeedback.setVisible(False)
-
- def mouseMoveEvent(self, event):
- if self.lastProgress < 100:
- self.setCursor(QtCore.Qt.BusyCursor)
- else:
- QtWebKit.QWebView.mouseMoveEvent(self, event)
-
- ################################
- ## methods
- ################################
- def isCurrentBrowser(self):
- if self.tabWidget is not None:
- return self.tabWidget.currentWidget() == self
- return False
-
-
- def tabIndex(self):
- if self.tabWidget is not None:
- return self.tabWidget.indexOf(self)
- return -1
-
-
- def setStatusMessage(self, text):
- self.lastStatusMessage = text
- if self.fcGlobalFeedback is not None and self.isCurrentBrowser():
- self.fcGlobalFeedback.setStatusMessage(text)
-
-
- def setProgress(self, percent):
- self.lastProgress = percent
- if self.fcGlobalFeedback is not None and self.isCurrentBrowser():
- self.fcGlobalFeedback.setProgress(percent)
-
- ##############################################
- ## event handlers
- ##############################################
- def onActionStopTriggered(self):
- # check wich cursor to set cos we may have busy cursor set
- pt = self.mapFromGlobal(self.cursor().pos()) #TODO: self.mapFromGlobal(self.viewPort().cursor().pos()) ??
- frame = self.page().currentFrame()
- hitTest = frame.hitTestContent(pt)
-
- #if not hitTest.isNull(): #TODO: looks like hitTest.isNull() alwas returns True
-
- if hitTest.linkUrl().isValid() or hitTest.imageUrl().isValid():
- self.setCursor(QtCore.Qt.PointingHandCursor)
- else:
- self.setCursor(QtCore.Qt.ArrowCursor)
-
-
- def onIconChanged(self):
- i = self.tabIndex()
- if i > -1:
- self.tabWidget.setTabIcon(i, self.icon)
-
-
- def onTitleChanged(self, text):
- # add title to tab
- if self.tabWidget is not None:
- i = self.tabIndex()
- if i > -1:
- # truncate text if necessary
- maxText = self.fcSettings.value('MaxTabText')
-
- ellipsis = self.trUtf8('..')
- if text.count() > maxText and text.count() > ellipsis.count() * 2: #TODO: * 2 ???
- n = maxText - ellipsis.count()
- if n < 0:
- n = 0
- text.truncate(n)
- text.append(ellipsis)
- if text.isEmpty():
- text = self.trUtf8('<untitled>')
- self.tabWidget.setTabText(i, text)
-
-
- def onLoadFinished(self, ok):
- self.onActionStopTriggered()
- self.setProgress(100)
- 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('''one reason may be 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 onLoadProgress(self, percent):
- self.setProgress(percent)
-
-
- def onLoadStarted(self):
- self.setCursor(QtCore.Qt.BusyCursor)
- self.setProgress(0)
- self.setStatusMessage(self.trUtf8('Loading'))
-
-
- def onStatusBarMessage(self, text):
- if not text.isEmpty():
- self.setStatusMessage(text)
-
-
- def onUrlChanged(self, url):
- self.lastUrl = QtCore.QUrl(url) # copy url. qt nukes it on return
- if self.navBar is not None and self.isCurrentBrowser():
- self.navBar.setText(self.lastUrl.toString())
-
-#***********************************************************************
+ self.url = QtCore.QUrl() if url is None else url
+
+#**********************************************************************************
#
-#***********************************************************************
+#**********************************************************************************
+#TODO: strip host:port on address bar?
+#TODO: rename home page to start page
class ViewBrowserWidget(QtGui.QWidget, Ui_ViewBrowserWidget):
IdTabBrowsers = 'tabBrowsers'
IdFrameTools = 'frameTools'
- IdFrameNavBar = 'frameNavBar'
- IdEdNavBar = 'edNavBar'
+ IdFrameAddressBar = 'frameAddressBar'
+ IdEdAddressBar = 'edAddressBar'
IdBtBack = 'btBack'
IdBtFwd = 'btFwd'
IdBtReload = 'btReload'
IdBtStop = 'btStop'
+ ForcedMinBrowserTabText = 5 # forced minimum number of chars on browser tabBar
def __init__(self, parent, idGlobalFeedback=config.IdMainWindow):
- QtGui.QWidget.__init__(self, parent)
-
- self._isCreated = False
- self._initialConfigDataArrived = False
-
+ QtGui.QWidget.__init__(self, parent)
+
self.setupUi(self)
config.ObjectRegistry.register(self)
- self.fcActions = Actions(self)
- self.fcSettings = Settings().restore()
- self.fcViewObject = BrowserViewObject(self)
- self.fcGlobalFeedback = GlobalFeedback(self, idGlobalFeedback)
+ self._initialConfigDataArrived = False
+ #XXX ?
+ #self.fproxyHost = None
+ #self.fproxyPort = None
- self.fproxyHost = None
- self.fproxyPort = None
+ self.fcActions = BrowserWidgetActions(self)
+ self.fcSettings = BrowserWidgetSettings(self).restore()
+ self.fcViewObject = BrowserWidgetViewObject(self)
+ self.fcGlobalFeedback = BrowserWidgetGlobalFeedback(self, idGlobalFeedback)
- self.fcpEvents = (
- (config.fcpClient.events.ConfigData, self.onFcpConfigData),
- )
- config.fcpClient.events += self.fcpEvents
-
- navBar = self.controlById(self.IdEdNavBar)
- 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.onTabBrowsersCurrentChanged)
- self.connect(tabWidget, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.onTabBrowsersContextMenuEvent)
+ self.connect(tabWidget, QtCore.SIGNAL('currentChanged(int)'), self.onTabCurrentChanged)
+ self.connect(tabWidget, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.onTabContextMenuEvent)
- self.newTab(tabText=self.trUtf8('Waiting for fproxy'))
+ # setup addressbar
+ addressbar = self.controlById(self.IdEdAddressBar)
+ self.connect(addressbar, QtCore.SIGNAL('returnPressed()'), self.onNavBarReturnPressed)
+
+ # fire up a new broser to make a start
+ self.newBrowser(title=self.trUtf8('Waiting for fproxy'))
+ self.fcActions['ActionGoToHomePage'].trigger()
#########################################
+ ## private methods
+ #########################################
+ def _adjustTabDependendActions(self):
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ self.fcActions['ActionCloseCurrentTab'].setEnabled(tabWidget.count())
+ self.fcActions['ActionCloseAllTabs'].setEnabled(tabWidget.count())
+ self.fcActions['ActionZoomIn'].setEnabled(tabWidget.count())
+ self.fcActions['ActionZoomOut'].setEnabled(tabWidget.count())
+
+ def _downloadImageToDisk(self, hitTestResult):
+ px = hitTestResult.pixmap()
+ if px.isNull():
+ return False
+
+ key = config.qStringToFcpKey(hitTestResult.imageUrl().toString())
+ if key is None:
+ return False
+
+ # thow a dialog box at the user to select a filename
+ # ..qt seems to place the filename part as suggestion into the filename box. so try it
+ caption = config.FclientAppName + self.trUtf8(' - Save Image To..')
+ directory = unicode(config.settings.value('DownloadDir'))
+ fileName = unicode(config.guessFileNameFromKey(key, default=QtCore.QString('')))
+
+ if directory and fileName:
+ directory = os.path.join(directory, fileName)
+ elif not directory:
+ directory = fileName
+ filePath = QtGui.QFileDialog.getSaveFileName(self, caption, directory)
+
+ if filePath:
+ filePath= unicode(filePath)
+ if os.path.exists(filePath):
+ try:
+ os.remove(filePath)
+ except Exception, details:
+ QtGui.QMessageBox.critical(
+ self,
+ caption,
+ self.trUtf8('Could not remove file'), #NOTE: no details please, may contain arbitrary lenght filepath
+ )
+ return False
+ px.save(filePath)
+ return True
+
+ def _downloadKeyToDisk(self, qUrl):
+ """
+ @return: (bool) False if the key in the url is invalid, True otherwise
+ """
+ fcpKey = config.qStringToFcpKey(QtCore.QString(qUrl.encodedPath()))
+ if fcpKey is not ...
[truncated message content] |
|
From: <jU...@us...> - 2008-07-25 08:09:15
|
Revision: 741
http://fclient.svn.sourceforge.net/fclient/?rev=741&view=rev
Author: jUrner
Date: 2008-07-25 08:09:24 +0000 (Fri, 25 Jul 2008)
Log Message:
-----------
beatify
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-25 08:06:56 UTC (rev 740)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-25 08:09:24 UTC (rev 741)
@@ -367,6 +367,29 @@
self.fcActions['ActionZoomIn'].setEnabled(tabWidget.count())
self.fcActions['ActionZoomOut'].setEnabled(tabWidget.count())
+ def _adjustTabText(self, qString):
+ maxTabText = self.fcSettings.value('MaxTabText')
+ minTabText = self.fcSettings.value('MinTabText')
+ ellipsis = self.trUtf8('..')
+
+ if minTabText < self.ForcedMinBrowserTabText:
+ minTabText = self.ForcedMinBrowserTabText
+ self.fcSettings.setValues(MinTabText=minTabText)
+ if maxTabText < self.ForcedMinBrowserTabText:
+ maxTabText = self.ForcedMinBrowserTabText
+ self.fcSettings.setValues(MaxTabText=maxTabText)
+ if minTabText > maxTabText:
+ minTabText = maxTabText
+ self.fcSettings.setValues(MinTabText=maxTabText)
+
+ if qString.count() < minTabText:
+ qString = qString.append('\x20' * (minTabText - qString.count()))
+ else:
+ if maxTabText < self.ForcedMinBrowserTabText:
+ maxTabText = sminTabText
+ qString = qtools.truncateString(maxTabText, qString, ellipsis)
+ return qString
+
def _downloadImageToDisk(self, hitTestResult):
px = hitTestResult.pixmap()
if px.isNull():
@@ -425,29 +448,6 @@
return True
return False
- def _adjustTabText(self, qString):
- maxTabText = self.fcSettings.value('MaxTabText')
- minTabText = self.fcSettings.value('MinTabText')
- ellipsis = self.trUtf8('..')
-
- if minTabText < self.ForcedMinBrowserTabText:
- minTabText = self.ForcedMinBrowserTabText
- self.fcSettings.setValues(MinTabText=minTabText)
- if maxTabText < self.ForcedMinBrowserTabText:
- maxTabText = self.ForcedMinBrowserTabText
- self.fcSettings.setValues(MaxTabText=maxTabText)
- if minTabText > maxTabText:
- minTabText = maxTabText
- self.fcSettings.setValues(MinTabText=maxTabText)
-
- if qString.count() < minTabText:
- qString = qString.append('\x20' * (minTabText - qString.count()))
- else:
- if maxTabText < self.ForcedMinBrowserTabText:
- maxTabText = sminTabText
- qString = qtools.truncateString(maxTabText, qString, ellipsis)
- return qString
-
#########################################
## methods
#########################################
@@ -459,6 +459,34 @@
tabWidget = self.controlById(self.IdTabBrowsers)
return tabWidget.currentWidget()
+ def load(self, url, force=False, browser=None):
+ """loads an url in the current browser. if there is no current browser, a new browser is created
+ @param force: (bool) if True, a new browser is opend if there is no browser available
+ @param browser: browser to load the url in or None to use the current browser
+ @return: (bool)
+ """
+ browser = self.currentBrowser() if browser is None else browser
+ tabWidget = self.controlById(self.IdTabBrowsers)
+ addressBar = self.controlById(self.IdEdAddressBar)
+ url = QtCore.QUrl(url)
+
+ # check if we have a browser at hand
+ if force and browser is None:
+ browser = self.newBrowser()
+ if browser is None:
+ return False
+
+ # load url
+ url.setScheme('http')
+ url.setHost(config.settings.value('FproxyConnectionHost'))
+ url.setPort(config.settings.value('FproxyConnectionPort'))
+ tabWidget.setTabText(tabWidget.indexOf(browser), self._adjustTabText(self.trUtf8('Loading')))
+ addressBar.setText(url.toString())
+ lastBrowserState = browser.userData()
+ lastBrowserState.url = url
+ browser.load(url)
+ return True
+
def newBrowser(self, title=''):
"""opens a browser in a new tab"""
tabWidget = self.controlById(self.IdTabBrowsers)
@@ -526,34 +554,6 @@
self.fcGlobalFeedback.setStatusMessage(lastBrowserState.statusMessage)
return browser
- def load(self, url, force=False, browser=None):
- """loads an url in the current browser. if there is no current browser, a new browser is created
- @param force: (bool) if True, a new browser is opend if there is no browser available
- @param browser: browser to load the url in or None to use the current browser
- @return: (bool)
- """
- browser = self.currentBrowser() if browser is None else browser
- tabWidget = self.controlById(self.IdTabBrowsers)
- addressBar = self.controlById(self.IdEdAddressBar)
- url = QtCore.QUrl(url)
-
- # check if we have a browser at hand
- if force and browser is None:
- browser = self.newBrowser()
- if browser is None:
- return False
-
- # load url
- url.setScheme('http')
- url.setHost(config.settings.value('FproxyConnectionHost'))
- url.setPort(config.settings.value('FproxyConnectionPort'))
- tabWidget.setTabText(tabWidget.indexOf(browser), self._adjustTabText(self.trUtf8('Loading')))
- addressBar.setText(url.toString())
- lastBrowserState = browser.userData()
- lastBrowserState.url = url
- browser.load(url)
- return True
-
#TODO: rework. we need more then one menu
def populateMenu(self, menu):
menu.addAction(self.fcActions['ActionGoToFProxy'])
@@ -568,15 +568,15 @@
#########################################
## overwritten events
#########################################
+ def closeEvent(self):
+ self.viewClose()
+
def hideEvent(self, event):
self.fcGlobalFeedback.setVisible(False)
def showEvent(self, event):
self.fcGlobalFeedback.setVisible(True)
- def closeEvent(self):
- self.viewClose()
-
def viewClose(self):
pass
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-25 17:45:23
|
Revision: 745
http://fclient.svn.sourceforge.net/fclient/?rev=745&view=rev
Author: jUrner
Date: 2008-07-25 17:45:32 +0000 (Fri, 25 Jul 2008)
Log Message:
-----------
reworked browser toolbutton handling
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-25 17:44:42 UTC (rev 744)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-25 17:45:32 UTC (rev 745)
@@ -150,7 +150,7 @@
def __init__(self, parent, idGlobalFeedback):
config.GlobalFeedbackBase.__init__(self, parent, idGlobalFeedback)
-
+
# menus
self.menus = []
if self.menuBar is not None and hasattr(parent, 'fcViewObject'):
@@ -223,6 +223,7 @@
('BackIsClose', 'Bool', False, config.SettingScopeUser), #TODO: not implemented
('HomePage', 'String', QtCore.QString(), config.SettingScopeUser),
('IconSize', 'UInt', 32, config.SettingScopeUser),
+ ('IconTheme', 'String', QtCore.QString('crystal'), config.SettingScopeUser),
('AutoLoadImages', 'Bool', True, config.SettingScopeUser), #TODO: not yet implemented
('MaxTabText', 'UInt', 20, config.SettingScopeUser), #NOTE: make shure Max >= Min and Max and Min > 0
('MinTabText', 'UInt', 7, config.SettingScopeUser),
@@ -238,15 +239,21 @@
settings = browser.settings()
settings.setAttribute(settings.AutoLoadImages, autoLoadImages)
config.SettingsBase.setValues(self, **kws)
+
+ #backIsClose = kws.get('BackIsClose', None)
+ #if backIsClose is not None:
+ # self.parent()._adjustBackIsClose()
-
-
+
class BrowserWidgetActions(config.ActionsBase):
def __init__(self, parent):
config.ActionsBase.__init__(self, parent)
+ iconSize = parent.fcSettings.value('IconSize')
+ iconTheme = parent.fcSettings.value('IconTheme')
+
self.action(
name='ActionCloseCurrentTab',
text=self.trUtf8('Close ¤t tab'),
@@ -292,6 +299,79 @@
text=self.trUtf8('Zoom out'),
trigger=parent.onZoomOut,
)
+
+ # dummy actions to replace default browser actions
+ self.action(
+ name='ActionBack',
+ text=self.trUtf8('Back'),
+ trigger=None,
+ isEnabled=False,
+ icon=config.resources.getIcon('back', iconSize, iconTheme=iconTheme),
+ userData=(None, None),
+ )
+ self.action(
+ name='ActionForward',
+ text=self.trUtf8('Forward'),
+ trigger=None,
+ isEnabled=False,
+ icon=config.resources.getIcon('forward', iconSize, iconTheme=iconTheme),
+ userData=(None, None),
+ )
+ self.action(
+ name='ActionReload',
+ text=self.trUtf8('Reload'),
+ trigger=None,
+ isEnabled=False,
+ icon=config.resources.getIcon('reload_page', iconSize, iconTheme=iconTheme),
+ userData=(None, None),
+ )
+ self.action(
+ name='ActionStop',
+ text=self.trUtf8('Stop'),
+ trigger=None,
+ isEnabled=False,
+ icon=config.resources.getIcon('stop', iconSize, iconTheme=iconTheme),
+ userData=(None, None),
+ )
+
+ self.action(
+ name='ActionBackIsClose',
+ text=self.trUtf8('Back is close'),
+ icon=config.resources.getIcon('button_cancel', iconSize, iconTheme=iconTheme),
+ trigger=None,
+ )
+
+ def intertwineBrowserActions(self, browser=None):
+ """intertwines Browser actions with BrowserWidget actions
+ @note: call everytime the current browser changes
+ """
+ actions = (
+ ('ActionBack', QtWebKit.QWebPage.Back),
+ ('ActionForward', QtWebKit.QWebPage.Forward),
+ ('ActionReload', QtWebKit.QWebPage.Reload),
+ ('ActionStop', QtWebKit.QWebPage.Stop),
+ )
+ for actionName, pageAction in actions:
+ myPageAction = self[actionName]
+ newPageAction = None if browser is None else browser.pageAction(pageAction)
+ oldPageAction, cb = myPageAction.userData()
+
+ if oldPageAction is not None:
+ myPageAction.disconnect(oldPageAction, QtCore.SIGNAL('changed()'), cb)
+ oldPageAction.disconnect(myPageAction, QtCore.SIGNAL('triggered()'), oldPageAction.trigger)
+
+ if newPageAction is None:
+ myPageAction.setUserData((None, None))
+ myPageAction.setEnabled(False)
+ else:
+ def onActionChanged(browser=browser, myPageAction=myPageAction, browserPageAction=newPageAction):
+ myPageAction.setEnabled(browserPageAction.isEnabled())
+
+ myPageAction.setEnabled(newPageAction.isEnabled())
+ myPageAction.setUserData((newPageAction, onActionChanged))
+ myPageAction.connect(newPageAction, QtCore.SIGNAL('changed()'), onActionChanged)
+ newPageAction.connect(myPageAction, QtCore.SIGNAL('triggered()'), newPageAction.trigger)
+
class LastBrowserState(object):
"""records the last known state browser"""
@@ -323,7 +403,7 @@
IdEdAddressBar = 'edAddressBar'
IdBtBack = 'btBack'
- IdBtFwd = 'btFwd'
+ IdBtForward = 'btForward'
IdBtReload = 'btReload'
IdBtStop = 'btStop'
@@ -337,8 +417,8 @@
self._initialConfigDataArrived = False
+ self.fcSettings = BrowserWidgetSettings(self).restore()
self.fcActions = BrowserWidgetActions(self)
- self.fcSettings = BrowserWidgetSettings(self).restore()
self.fcViewObject = BrowserWidgetViewObject(self)
self.fcGlobalFeedback = BrowserWidgetGlobalFeedback(self, idGlobalFeedback)
@@ -353,6 +433,12 @@
addressbar = self.controlById(self.IdEdAddressBar)
self.connect(addressbar, QtCore.SIGNAL('returnPressed()'), self.onNavBarReturnPressed)
+ # setup tool buttons
+ self.controlById(self.IdBtBack).setDefaultAction(self.fcActions['ActionBack'])
+ self.controlById(self.IdBtForward).setDefaultAction(self.fcActions['ActionForward'])
+ self.controlById(self.IdBtReload).setDefaultAction(self.fcActions['ActionReload'])
+ self.controlById(self.IdBtStop).setDefaultAction(self.fcActions['ActionStop'])
+
# fire up a new broser to make a start
self.newBrowser(title=self.trUtf8('Waiting for fproxy'))
self.fcActions['ActionGoToHomePage'].trigger()
@@ -360,13 +446,7 @@
#########################################
## private methods
#########################################
- def _adjustTabDependendActions(self):
- tabWidget = self.controlById(self.IdTabBrowsers)
- self.fcActions['ActionCloseCurrentTab'].setEnabled(tabWidget.count())
- self.fcActions['ActionCloseAllTabs'].setEnabled(tabWidget.count())
- self.fcActions['ActionZoomIn'].setEnabled(tabWidget.count())
- self.fcActions['ActionZoomOut'].setEnabled(tabWidget.count())
-
+ #NOTE: to reduce flicker set min size to max size
def _adjustTabText(self, qString):
maxTabText = self.fcSettings.value('MaxTabText')
minTabText = self.fcSettings.value('MinTabText')
@@ -494,9 +574,7 @@
page = browser.page()
settings = browser.settings()
title = QtCore.QString(title)
- iconSize = self.fcSettings.value('IconSize')
- iconTheme = config.settings.value('IconTheme')
-
+
# attatch browser state information
lastBrowserState = LastBrowserState(
icon=browser.icon(),
@@ -534,15 +612,6 @@
act = browser.pageAction(page.OpenFrameInNewWindow)
act.setText(self.trUtf8('Open frame in new tab'))
- act = browser.pageAction(page.Back)
- act.setIcon(config.resources.getIcon('back', iconSize, iconTheme=iconTheme))
- act = browser.pageAction(page.Forward)
- act.setIcon(config.resources.getIcon('forward', iconSize, iconTheme=iconTheme))
- act = browser.pageAction(page.Reload)
- act.setIcon(config.resources.getIcon('reload_page', iconSize, iconTheme=iconTheme))
- act = browser.pageAction(page.Stop)
- act.setIcon(config.resources.getIcon('stop', iconSize, iconTheme=iconTheme))
-
# customize page
page.setLinkDelegationPolicy(page.DelegateAllLinks)
@@ -744,17 +813,18 @@
addressbar.setText(lastBrowserState.url.toString())
def onCloseAllTabs(self, action):
+ # have to do it by hand to reset [BackIsClose]
tabWidget = self.controlById(self.IdTabBrowsers)
tabWidget.clear()
- self._adjustTabDependendActions()
-
+ self.fcActions.intertwineBrowserActions(self.currentBrowser())
+
def onCloseCurrentTab(self, action):
tabWidget = self.controlById(self.IdTabBrowsers)
i = tabWidget.currentIndex()
if i > -1:
tabWidget.removeTab(i)
- self._adjustTabDependendActions()
-
+ self.fcActions.intertwineBrowserActions(self.currentBrowser())
+
#TODO: open in new tab option?
def onGoToFProxy(self, action):
url = QtCore.QUrl()
@@ -787,6 +857,12 @@
def onPageLinkHovered(self, link, title, textContent):
self.fcGlobalFeedback.setFeedback(QtCore.QString(link))
+ def onPageActionBackChanged(self):
+ act = self.sender()
+ browser = self.currentBrowser()
+ if browser is not None and act is browser.pageAction(browser.page().Back):
+ self._adjustBackIsClose()
+
def onTabContextMenuEvent(self, pt):
menu = QtGui.QMenu()
tabWidget = self.controlById(self.IdTabBrowsers)
@@ -794,7 +870,6 @@
pt2 = tabWidget.tabBar().mapFromGlobal(pt)
i = tabWidget.tabBar().tabAt(pt2)
# setup menu
- self._adjustTabDependendActions()
actCloseBrowserUnderMouse = self.fcActions['ActionCloseBrowserUnderMouse']
actCloseBrowserUnderMouse.setEnabled(i >-1)
menu.addAction(actCloseBrowserUnderMouse)
@@ -802,27 +877,21 @@
act = menu.exec_(pt)
if act == actCloseBrowserUnderMouse:
tabWidget.removeTab(i)
- self._adjustTabDependendActions()
-
+ self.fcActions.intertwineBrowserActions(self.currentBrowser())
+
def onTabCurrentChanged(self, i):
tabWidget = self.controlById(self.IdTabBrowsers)
browser = tabWidget.widget(i)
+
+ self.fcActions.intertwineBrowserActions(browser)
if browser is not None:
- page = browser.page()
lastBrowserState = browser.userData()
- addressbar = self.controlById(self.IdEdAddressBar)
-
+ addressBar = self.controlById(self.IdEdAddressBar)
+
# update status info
- addressbar.setText(lastBrowserState.url.toString())
+ addressBar.setText(lastBrowserState.url.toString())
self.fcGlobalFeedback.setStatusMessage(lastBrowserState.statusMessage)
self.fcGlobalFeedback.setProgress(lastBrowserState.progress)
-
- # adjust actions on addressbar
- self.controlById(self.IdBtBack).setDefaultAction(browser.pageAction(page.Back))
- self.controlById(self.IdBtFwd).setDefaultAction(browser.pageAction(page.Forward))
- self.controlById(self.IdBtReload).setDefaultAction(browser.pageAction(page.Reload))
- self.controlById(self.IdBtStop).setDefaultAction(browser.pageAction(page.Stop))
- self.controlById(self.IdBtBack).setDefaultAction(browser.pageAction(page.Back))
#TODO: enable/disable, but no view gives non feedback on max/min zoom
def onZoomIn(self, action):
@@ -841,7 +910,6 @@
print browser.textSizeMultiplier()
if browser.textSizeMultiplier() >= oldMultiplier:
menu.addAction(self.fcActions['ActionZoomOut']).setEnabled(False)
-
#**********************************************************************************
#
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-26 09:39:45
|
Revision: 752
http://fclient.svn.sourceforge.net/fclient/?rev=752&view=rev
Author: jUrner
Date: 2008-07-26 09:39:55 +0000 (Sat, 26 Jul 2008)
Log Message:
-----------
add download link to disk
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-26 09:15:26 UTC (rev 751)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-26 09:39:55 UTC (rev 752)
@@ -355,7 +355,7 @@
shortcut=QtGui.QKeySequence(self.trUtf8('Ctrl+F')),
trigger=parent.onSearch,
)
-
+
def intertwineBrowserActions(self, browser=None):
"""intertwines Browser actions with BrowserWidget actions
@note: call everytime the current browser changes
@@ -697,8 +697,8 @@
menu.addAction(browser.pageAction(page.OpenLink))
menu.addAction(browser.pageAction(page.OpenLinkInNewWindow))
menu.addAction(browser.pageAction(page.CopyLinkToClipboard))
- ##menu.addAction(DownloadLinkToDisk))
-
+ menu.addAction(browser.pageAction(page.DownloadLinkToDisk))
+
menu.addSeparator()
menu.addAction(browser.pageAction(page.OpenImageInNewWindow))
menu.addAction(browser.pageAction(page.DownloadImageToDisk))
@@ -724,6 +724,8 @@
self.load(hitTestResult.frame().url(), browser=browser)
elif action == browser.pageAction(page.DownloadImageToDisk):
self._downloadImageToDisk(hitTestResult)
+ elif action == browser.pageAction(page.DownloadLinkToDisk):
+ self._downloadKeyToDisk(hitTestResult.linkUrl())
elif action == self.fcActions['ActionObjectProperties']:
dlg = Ui_DlgPropsBrowserObject.PropsBrowserObjectDlg(self, hitTestResult=hitTestResult)
if dlg.exec_() == dlg.Accepted:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-26 09:40:19
|
Revision: 753
http://fclient.svn.sourceforge.net/fclient/?rev=753&view=rev
Author: jUrner
Date: 2008-07-26 09:40:22 +0000 (Sat, 26 Jul 2008)
Log Message:
-----------
beautify
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-26 09:39:55 UTC (rev 752)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-26 09:40:22 UTC (rev 753)
@@ -701,9 +701,9 @@
menu.addSeparator()
menu.addAction(browser.pageAction(page.OpenImageInNewWindow))
+ menu.addAction(browser.pageAction(page.CopyImageToClipboard))
menu.addAction(browser.pageAction(page.DownloadImageToDisk))
- menu.addAction(browser.pageAction(page.CopyImageToClipboard))
-
+
menu.addSeparator()
menu.addAction(browser.pageAction(page.OpenFrameInNewWindow))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jU...@us...> - 2008-07-27 11:11:38
|
Revision: 759
http://fclient.svn.sourceforge.net/fclient/?rev=759&view=rev
Author: jUrner
Date: 2008-07-27 11:11:47 +0000 (Sun, 27 Jul 2008)
Log Message:
-----------
more todos
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-27 11:11:25 UTC (rev 758)
+++ trunk/fclient/src/fclient/Ui_ViewBrowser.py 2008-07-27 11:11:47 UTC (rev 759)
@@ -16,13 +16,13 @@
# x. when mouse pointer is over an opend image a magnifier cursor appears. no idea how this is handled
# x. open new tab on tab bar double click. IIRC looks like no way before qt4.5. tabBars are not stretched to fit in qt4.4
# x. global feedback on statusbar flickers. reason: first label is holds arbitrary length text
-# x. save link to disk
# x. fproxy. "force browser to dl" should we dl it in downloads or store emidiately? no idea
# x. visiting plugins via fproxy does not work
-# real toolbars
+# x. real toolbars
# x. remove host/port from urls?
# x. browser settings - QWebSettings
# x. shortcuts
+# x. user staring gui for first time. maybe we should not connext untill the user connects explicitely
#******************************************************************************************
"""
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|