SF.net SVN: fclient:[745] trunk/fclient/src/fclient/Ui_ViewBrowser.py
Status: Pre-Alpha
Brought to you by:
jurner
|
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.
|