SF.net SVN: fclient:[913] trunk/fclient/fclient/impl/SideBarLoadDetails.py
Status: Pre-Alpha
Brought to you by:
jurner
From: <jU...@us...> - 2008-08-16 08:00:03
|
Revision: 913 http://fclient.svn.sourceforge.net/fclient/?rev=913&view=rev Author: jUrner Date: 2008-08-16 08:00:12 +0000 (Sat, 16 Aug 2008) Log Message: ----------- no longer needed Removed Paths: ------------- trunk/fclient/fclient/impl/SideBarLoadDetails.py Deleted: trunk/fclient/fclient/impl/SideBarLoadDetails.py =================================================================== --- trunk/fclient/fclient/impl/SideBarLoadDetails.py 2008-08-16 07:59:09 UTC (rev 912) +++ trunk/fclient/fclient/impl/SideBarLoadDetails.py 2008-08-16 08:00:12 UTC (rev 913) @@ -1,270 +0,0 @@ -"""sideBar for the browser to show detailed information on page load""" -#******************************************************************************** -#TODO: -# -# x. how to adjust item colors via stylesheet? -# x. limit number of requests we keep track off (performance)? -# x. context menu actions for items like ...load in browser ..download key (...) -# x. save column widths -# -#******************************************************************************** -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 posixpath -from PyQt4 import QtCore, QtGui - -from . import config -from .tpls.Ui_SideBarLoadDetailsTpl import Ui_SideBarLoadDetails -#********************************************************************************** -# -#********************************************************************************** -class SideBarLoadDetailsSettings(config.SettingsBase): - _key_ = config.IdSideBarLoadDetails - _settings_ = ( - ('ColorFgItem', 'QColor', QtGui.QColor('black')), - ('ColorBgItem', 'QColor', QtGui.QColor('white')), - ('ColorFgItemError', 'QColor', QtGui.QColor('red')), - ('ColorBgItemError', 'QColor', QtGui.QColor('white')), - ('ColorFgItemComplete', 'QColor', QtGui.QColor('green')), - ('ColorBgItemComplete', 'QColor', QtGui.QColor('white')), - ) - - -class TreeItem(QtGui.QTreeWidgetItem): - - StatusNone = 0 - StatusLoading = 1 - StatusComplete = 2 - StatusError = 3 - def __init__(self, *args): - QtGui.QTreeWidgetItem.__init__(self, *args) - self.status = self.StatusNone - self.url = None - - - -class SideBarLoadDetails(QtGui.QWidget, Ui_SideBarLoadDetails): - - IdTree = 'tree' - IdBtClose = 'btClose' - - IndexProgress = 0 - IndexStatus = 1 - IndexName = 2 - - - def __init__(self, parent=None, closeAction=None): - QtGui.QWidget.__init__(self, parent) - self.statusNames = {} # TreeItem.Status* --> displayName - - self.setupUi(self) - - config.ObjectRegistry.register(self) - self.fcSettings = SideBarLoadDetailsSettings(self).restore() - self.baseKey = None # base key of the page - - # setup tree - tree = self.controlById(self.IdTree) - tree.setUniformRowHeights(True) - tree.setRootIsDecorated(False) - - # setup close button - if closeAction is not None: - bt = self.controlById(self.IdBtClose) - bt.setDefaultAction(closeAction) - - ############################## - ## private methods - ############################## - def _splitBaseKey(self, url): - baseKey = '' - fileName = tmp_fileName = unicode(url.path()) - if tmp_fileName: - tmp_fileName = tmp_fileName.lstrip('/') - if tmp_fileName: - # prep fileName to extract freenetKey - T = tmp_fileName.split('/', 1) - if len(T) == 2: - tmp_baseKey, tmp_fileName = T - else: - tmp_baseKey, tmp_fileName = T[0], '' - # check if baseKey is a freenet key - if config.qStringToFcpKey(tmp_baseKey) is not None: - baseKey = tmp_baseKey - fileName = tmp_fileName - else: - fileName = fileName.lstrip('/') - return baseKey, fileName - - ############################## - ## methods - ############################## - def addNetworkReply(self, indexReply, networkReplyData): - #TODO: better extraction of filename part - tree = self.controlById(self.IdTree) - n = tree.topLevelItemCount() - if indexReply < n: - return - - if indexReply == 0: - self.baseKey, fileName = self._splitBaseKey(networkReplyData.url) - else: - #problem: index page may point somewhere deep into a container - # ..so we can not assume all following requests of are lokated deeper - # ..in the age hirarchy. anyways. links to external resources are - # ..always displayed as absolute urls - baseKey, fileName = self._splitBaseKey(networkReplyData.url) - if baseKey != self.baseKey: - fileName = unicode(networkReplyData.url.toString()) - if not fileName: - fileName = '/' - - item = TreeItem(tree) - item.url = networkReplyData.url - # set progress - if networkReplyData.bytesTotal < 1: - progress = '0%' - else: - progress = str(int((float(networkReplyData.bytesReceived) / networkReplyData.bytesTotal * 100))) + '%' - item.setData( - self.IndexProgress, - QtCore.Qt.DisplayRole, - QtCore.QVariant(progress), - ) - # set status - if networkReplyData.bytesReceived: - item.status = TreeItem.StatusLoading - if networkReplyData.errorCode is not None: - item.status = TreeItem.StatusError - if networkReplyData.finished: - item.status = TreeItem.StatusComplete - item.setData( - self.IndexStatus, - QtCore.Qt.DisplayRole, - QtCore.QVariant(self.statusNames[item.status]), - ) - # set fileName - item.setData( - self.IndexName, - QtCore.Qt.DisplayRole, - QtCore.QVariant(fileName), - ) - # set vcolors - item.setForeground(self.IndexStatus, self.fcSettings.value('ColorFgItem')) - item.setBackground(self.IndexStatus, self.fcSettings.value('ColorBgItem')) - - - def controlById(self, idControl): - return getattr(self, idControl) - - def setCurrent(self, browserWidget, flag): - if flag: - self.setBrowser(browserWidget.currentBrowser()) - else: - tree = self.controlById(self.IdTree) - tree.clear() - self.baseUrl = None - - def setBrowser(self, browser): - tree = self.controlById(self.IdTree) - tree.clear() - self.baseUrl = None - # setup browser - if browser is not None: - self.connect(browser, QtCore.SIGNAL('networkGetRequestCreated(int, QObject*)'), self.addNetworkReply) - self.connect(browser, QtCore.SIGNAL('networkReplyProgress(int, QObject*)'), self.onBrowserNetworkReplyProgress) - self.connect(browser, QtCore.SIGNAL('networkReplyError(int, QObject*)'), self.onBrowserNetworkReplyError) - self.connect(browser, QtCore.SIGNAL('networkReplyFinished(int, QObject*)'), self.onBrowserNetworkReplyFinished) - self.connect(browser, QtCore.SIGNAL('loadStarted()'), self.onBrowserLoadStarted) - for indexReply, networkReplyData in enumerate(browser.networkGetReplies()): - self.addNetworkReply(indexReply, networkReplyData) - - ########################### - ## overwritten methods - ########################### - def retranslateUi(self, this): - Ui_SideBarLoadDetails.retranslateUi(self, this) - tree = self.controlById(self.IdTree) - headerLabels = [ - (self.IndexProgress, self.trUtf8('Progress')), - (self.IndexStatus, self.trUtf8('Status')), - (self.IndexName, self.trUtf8('Name')), - ] - headerLabels.sort() - tree.setHeaderLabels([i[1] for i in headerLabels]) - self.statusNames = { - TreeItem.StatusNone: self.trUtf8('waiting'), - TreeItem.StatusLoading: self.trUtf8('loading'), - TreeItem.StatusComplete: self.trUtf8('complete'), - TreeItem.StatusError: self.trUtf8('error'), - } - root = tree.invisibleRootItem() - for i in xrange(root.childCount()): - item = root.child(i) - item.setData( - self.IndexStatus, - QtCore.Qt.DisplayRole, - QtCore.QVariant(self.statusNames[item.status]), - ) - ############################## - ## event handlers - ############################## - def onBrowserLoadStarted(self): - tree = self.controlById(self.IdTree) - tree.clear() - - def onBrowserNetworkReplyProgress(self, indexReply, networkReplyData): - tree = self.controlById(self.IdTree) - item = tree.invisibleRootItem().child(indexReply) - if item is None: - return - if item.status != TreeItem.StatusError: - item.status = item.StatusLoading - if networkReplyData.bytesTotal < 1: - progress = '0%' - else: - progress = str(int((float(networkReplyData.bytesReceived) / networkReplyData.bytesTotal * 100))) + '%' - - item.setData( - self.IndexProgress, - QtCore.Qt.DisplayRole, - QtCore.QVariant(progress), - ) - item.setData( - self.IndexStatus, - QtCore.Qt.DisplayRole, - QtCore.QVariant(self.statusNames[item.status]), - ) - - def onBrowserNetworkReplyError(self, indexReply, networkReplyData): - tree = self.controlById(self.IdTree) - item = tree.invisibleRootItem().child(indexReply) - if item is None: - return - item.setForeground(self.IndexStatus, self.fcSettings.value('ColorFgItemError')) - item.setBackground(self.IndexStatus, self.fcSettings.value('ColorBgItemError')) - item.status = item.StatusError - item.setData( - self.IndexStatus, - QtCore.Qt.DisplayRole, - QtCore.QVariant(self.statusNames[item.status]), - ) - - def onBrowserNetworkReplyFinished(self, indexReply, networkReplyData): - tree = self.controlById(self.IdTree) - item = tree.invisibleRootItem().child(indexReply) - if item is None: - return - if item.status != TreeItem.StatusError: - item.status = item.StatusComplete - item.setData( - self.IndexStatus, - QtCore.Qt.DisplayRole, - QtCore.QVariant(self.statusNames[item.status]), - ) - item.setForeground(self.IndexStatus, self.fcSettings.value('ColorFgItemComplete')) - item.setBackground(self.IndexStatus, self.fcSettings.value('ColorBgItemComplete')) - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |