コード例 #1
0
class filetransfersInfoWidget(infoWidget):

	def __init__(self, client, parent = None):
		infoWidget.__init__(self, client, parent)

		self.__informations = []
		self.__loc = QLocale()
		self.__mainLayout = QVBoxLayout()
		self.__treeWidget = QTreeWidget()

		self.__treeWidget.setColumnCount(5)
		#stlpce projekt, nazov, progress, prenesene (kolko z kolko), rychlost
		labels = [self.tr("Project name"), self.tr("File name"), self.tr("Progress"), self.tr("Size"), self.tr("Speed")]
		self.__treeWidget.setHeaderLabels(labels)
		self.__treeWidget.setUniformRowHeights(True)

		self.__mainLayout.addWidget(self.__treeWidget)
		self.setMainLayout(self.__mainLayout)
		
		self.connect(client, SIGNAL("getFileTransfersRecv(PyQt_PyObject)"), self.__updateFileTransfers)
		client.getFileTransfers()

	def __jednotka(self, data):
		if data < 1024:
			return self.__loc.toString(int(data))+" B"
		elif data < 1024*1024:
			return self.__loc.toString(float(data) / float(1024), 'f', 2)+" kB"
		elif data < 1024*1024*1024:
			return self.__loc.toString(float(data) / float(1024*1024), 'f', 2)+" MB"
		elif data < 1024*1024*1024*1024:
			return self.__loc.toString(float(data) / float(1024*1024*1024), 'f', 2)+" GB"
		return self.__loc.toString(int(data))+" B"

	def __updateData(self, data, item, progressBar):
		if data['bytes_xferred'] is None:
			data['bytes_xferred'] = 0
			progressBar.setValue(0)
		else:
			progressBar.setValue(int(100.0 * data['bytes_xferred'] / data['nbytes']))
		item.setData(0, Qt.DisplayRole, QVariant(data['project_name']))
		item.setData(1, Qt.DisplayRole, QVariant(data['name']))
		if data['xfer_speed'] is None:
			data['xfer_speed'] = 0
		item.setData(3, Qt.DisplayRole, QVariant(self.__jednotka(data['bytes_xferred']) + '/' + self.__jednotka(data['nbytes'])))
		item.setData(4, Qt.DisplayRole, QVariant(self.__jednotka(data['xfer_speed'])+self.tr('/s')))


	def __updateFileTransfers(self, transfers):
		pridat = []

		for inf in self.__informations:
			inf[4] = True

		for transfer in transfers:
			pridame = True
			for inf in self.__informations:
				if inf[0] == (transfer['name'], transfer['project_url']):
					pridame = False
					inf[3] = transfer
					inf[4] = False
					break
			if pridame:
				pridat.append(transfer)

		for polozka in pridat:
			treeItem = QTreeWidgetItem(self.__treeWidget)
			progressBar = QProgressBar()
			progressBar.setAutoFillBackground(True)
			progressBar.setFixedHeight(self.__treeWidget.rowHeight(self.__treeWidget.indexFromItem(treeItem)))
			self.__treeWidget.setItemWidget(treeItem, 2, progressBar)
			self.__informations.append([(polozka['name'], polozka['project_url']), treeItem, progressBar, polozka, False])

			self.__updateData(polozka, treeItem, progressBar)

		for i in range(len(self.__informations) - 1, -1, -1):
			# odstranenie
			if self.__informations[i][4]:
				self.__treeWidget.takeTopLevelItem(i)
				self.__informations.pop(i)
			# aktualizacia
			else:
				inf = self.__informations[i]
				self.__updateData(inf[3], inf[1], inf[2])


		QTimer.singleShot(1000, self.sender().getFileTransfers)