SF.net SVN: fclient:[817] trunk/fclient/src/fclient/impl/ViewDownloads.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-07-29 11:45:07
|
Revision: 817
http://fclient.svn.sourceforge.net/fclient/?rev=817&view=rev
Author: jUrner
Date: 2008-07-29 11:45:16 +0000 (Tue, 29 Jul 2008)
Log Message:
-----------
more work on dls. requests can be removed now
Modified Paths:
--------------
trunk/fclient/src/fclient/impl/ViewDownloads.py
Modified: trunk/fclient/src/fclient/impl/ViewDownloads.py
===================================================================
--- trunk/fclient/src/fclient/impl/ViewDownloads.py 2008-07-29 11:44:21 UTC (rev 816)
+++ trunk/fclient/src/fclient/impl/ViewDownloads.py 2008-07-29 11:45:16 UTC (rev 817)
@@ -18,10 +18,12 @@
# should be enough. maybe along with a separate widget or some separate color code for pendings
#
# x. performance
-# start with a standard model and improve it over time. no need to set any hard
-# limits. the user will find out by himself how many dls his machine can handle.
-# have to be carefrul though when adding dls, like from a *.frdx to provide appropriate
-# warnings
+# start with a standard model and improve it over time. no need to set any hard
+# limits. the user will find out by himself how many dls his machine can handle.
+# have to be carefrul though when adding dls, like from a *.frdx to provide appropriate
+# warnings
+# x. it may take a while untill the final DataFound message arrives when a request is % completed. feedback would be nice
+# x. DataFound for a request the file has been removed by the user. no idea what happens. have to test this
#**************************************************************************************************************
from __future__ import absolute_import
if __name__ == '__main__': # see --> http://bugs.python.org/issue1510172 . works only current dir and below
@@ -33,6 +35,7 @@
from . import config
from .lib import fcp2
from .lib.fcp2.lib import pmstruct
+from .lib.qt4ex import treewidgetwrap
from . import DlgDownloadKeyToDisk
from .tpls.Ui_ViewDownloadsWidgetTpl import Ui_ViewDownloadsWidget
@@ -92,7 +95,7 @@
def setVisible(self, flag):
if self.menuBar is not None:
for menu in self.menus:
- menu.children()[0].setVisible(flag)
+ menu.children()[0].setEnabled(flag)
#if self.statusBar is not None:
# self.progress.setVisible(flag)
# self.labelStatus.setVisible(flag)
@@ -119,8 +122,14 @@
name='ActionDownloadKeyToDisk',
text=self.trUtf8('Download &key...'),
trigger=parent.onDownloadKey,
- )
-
+ )
+ self.action(
+ name='ActionRemoveSelectedRequests',
+ text=self.trUtf8('Remove'),
+ trigger=parent.onRemoveSelectedRequests,
+ isEnabled=False,
+ )
+
#**********************************************************************************
#
#**********************************************************************************
@@ -183,20 +192,6 @@
#**********************************************************************************
#
#**********************************************************************************
-class Requests(object):
-
- def __init__(self):
- self.identifiers = []
- self.items = []
-
- def addRequest(self, identifier, item):
- self.identifiers.append(identifier)
- self.items.append(item)
-
- def itemFromIndex(self, index):
- return self.items[index]
-
-
class ViewDownloadsWidget(QtGui.QWidget, Ui_ViewDownloadsWidget):
IdTree = 'tree'
@@ -222,14 +217,12 @@
(config.fcpClient.events.RequestModified, self.onFcpRequestModified),
(config.fcpClient.events.RequestProgress, self.onFcpRequestProgress),
(config.fcpClient.events.RequestStarted, self.onFcpRequestStarted),
+ (config.fcpClient.events.RequestRemoved, self.onFcpRequestRemoved),
)
config.fcpClient.events += self.fcpEvents
self.fcHeadeLabels = {}
self.fcpRequests = {}
- #XXX
- self.foo = False
-
############################
## private methods
############################
@@ -251,28 +244,43 @@
##
############################
def retranslateUi(self, parent):
+ Ui_ViewDownloadsWidget.retranslateUi(self, parent)
+ tree = self.controlById(self.IdTree)
self.fcHeadeLabels = {
self.HeaderIndexName: self.trUtf8('Name'),
self.HeaderIndexFoo: self.trUtf8('Foo'),
self.HeaderIndexProgress: self.trUtf8('Progress'),
}
- self.tree.setHeaderLabels([i[1] for i in sorted(self.fcHeadeLabels.items())])
-
-
+ tree.setHeaderLabels([i[1] for i in sorted(self.fcHeadeLabels.items())])
+
def closeEvent(self):
self.viewClose()
-
-
+
def hideEvent(self, event):
self.fcGlobalFeedback.setVisible(False)
def showEvent(self, event):
self.fcGlobalFeedback.setVisible(True)
+ if not self._isCreated:
+ self._isCreated = True
+
+ # setup tree
+ tree = self.controlById(self.IdTree)
+ tree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
+ tree.setSelectionMode(tree.ExtendedSelection)
+ tree.setUniformRowHeights(True)
+ self.connect(tree, QtCore.SIGNAL('customContextMenuRequested(const QPoint &)'), self.onTreeCustomContextMenuRequested)
+ self.connect(tree, QtCore.SIGNAL('itemSelectionChanged() '), self.onTreeItemSelectionChanged)
def viewClose(self):
config.fcpClient.events -= self.fcpEvents
-
+ #########################################
+ ## methods
+ #########################################
+ def controlById(idGlobalFeedback, idControl):
+ return getattr(idGlobalFeedback, idControl)
+
def downloadFile(self, fcpKey, fileName, **kws):
""""""
fileName = unicode(fileName)
@@ -288,14 +296,7 @@
menu.addAction(self.fcActions['ActionDownloadKeyToDisk'])
return menu
-
#########################################
- ## methods
- #########################################
- def controlById(idGlobalFeedback, idControl):
- return getattr(idGlobalFeedback, idControl)
-
- #########################################
## event handlers
#########################################
def onDownloadKey(self, action):
@@ -308,20 +309,41 @@
handleFilenameCollision=True,
)
+
+ def onRemoveSelectedRequests(self, action):
+ tree = self.controlById(self.IdTree)
+ for item in tree.selectedItems():
+ parent = item.parent()
+ if parent is None:
+ parent = tree.invisibleRootItem()
+ it = treewidgetwrap.TreeWidgetIterator(parent)
+ it.next()
+ for tmp_item in it:
+ config.fcpClient.removeRequest(tmp_item.fcpIdentifier)
+ del self.fcpRequests[tmp_item.fcpIdentifier]
+ parent.removeChild(item)
+
+
+ def onTreeCustomContextMenuRequested(self, pt):
+ tree = self.controlById(self.IdTree)
+ pt = tree.viewport().mapToGlobal(pt)
+
+ menu = QtGui.QMenu(self)
+ menu.addAction(self.fcActions['ActionRemoveSelectedRequests'])
+
+ menu.exec_(pt)
+
+ def onTreeItemSelectionChanged(self):
+ tree = self.controlById(self.IdTree)
+ hasSelectedItems = tree.selectionModel().hasSelection()
+
+ self.fcActions['ActionRemoveSelectedRequests'].setEnabled(hasSelectedItems)
+
#########################################
## fcp event handlers
#########################################
def onFcpConfigData(self, fcpEvent, fcpRequest):
- if not self.foo:
- self.foo = True
-
- return
- # for testing: dl some frost.zip
- key = fcp2.Key('CHK@tJ0qyIr8dwvYKoSkmR1N-soABstL0RjgiYqQm3Gtv8g,Pqj7jpPUBzRgnVTaA3fEw6gE8QHcJsTwA4liL9FZ-Fg,AAIC--8/frost-04-Mar-2008.zip')
- fileName = config.guessFileNameFromKey(key, default=self.trUtf8('Unknown.file'))
- directory = config.fcSettings.value('DownloadDir')
- fpath = os.path.join(unicode(directory), unicode(fileName))
- self.downloadFile(key, fpath)
+ pass
def onFcpRequestCompleted(self, fcpEvent, fcpRequest):
@@ -365,6 +387,9 @@
progressBar.setValue(fcpRequest['ProgressSucceeded'])
+ def onFcpRequestRemoved(self, fcpEvent, fcpRequest):
+ pass
+
def onFcpRequestStarted(self, fcpEvent, fcpRequest):
if fcpRequest['RequestStatus'] & fcp2.ConstRequestStatus.Restored:
try:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|