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.
|