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