From 20f7c0e65607f2fb8607ed0e5e96181a36be76ca Mon Sep 17 00:00:00 2001 From: mkaay Date: Mon, 21 Dec 2009 14:24:51 +0100 Subject: new update threads, link dock works now --- module/gui/Collector.py | 210 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 module/gui/Collector.py (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py new file mode 100644 index 000000000..0dbccab1f --- /dev/null +++ b/module/gui/Collector.py @@ -0,0 +1,210 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . + + @author: mkaay +""" + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from time import sleep + +class PackageCollector(QThread): + def __init__(self, view, connector): + QThread.__init__(self) + self.view = view + self.connector = connector + self.collector = [] + self.interval = 2 + self.running = True + self.mutex = QMutex() + + def run(self): + while self.running: + self.update() + sleep(self.interval) + + def stop(self): + self.running = False + + def update(self): + locker = QMutexLocker(self.mutex) + packs = self.connector.getPackageCollector() + for data in packs: + pack = self.getPack(data["id"]) + if not pack: + pack = self.PackageCollectorPack(self) + pack.setData(data) + self.addPack(data["id"], pack) + files = self.connector.getPackageFiles(data["id"]) + for fid in files: + info = self.connector.getLinkInfo(fid) + child = pack.getChild(fid) + if not child: + child = self.PackageCollectorFile(self, pack) + child.setData(info) + pack.addChild(fid, child) + + def addPack(self, pid, newPack): + pos = None + try: + for k, pack in enumerate(self.collector): + if pack.getData()["id"] == pid: + pos = k + break + if pos == None: + raise Exception() + self.collector[pos] = newPack + except: + self.collector.append(newPack) + pos = self.collector.index(newPack) + item = self.view.topLevelItem(pos) + if not item: + item = QTreeWidgetItem() + self.view.insertTopLevelItem(pos, item) + item.setData(0, Qt.DisplayRole, QVariant(newPack.getData()["package_name"])) + item.setData(0, Qt.UserRole, QVariant(pid)) + + def getPack(self, pid): + for k, pack in enumerate(self.collector): + if pack.getData()["id"] == pid: + return pack + return None + + class PackageCollectorPack(): + def __init__(self, collector): + self.collector = collector + self.data = [] + self.children = [] + + def addChild(self, cid, newChild): + pos = None + try: + for k, child in enumerate(self.getChildren()): + if child.getData()["id"] == cid: + pos = k + break + if pos == None: + raise Exception() + self.children[pos] = newChild + except: + self.children.append(newChild) + pos = self.children.index(newChild) + ppos = self.queue.queue.index(self) + parent = self.queue.view.topLevelItem(ppos) + item = parent.child(pos) + if not item: + item = QTreeWidgetItem() + parent.insertChild(pos, item) + status = "%s (%s)" % (newChild.getData()["status_type"], newChild.getData()["plugin"]) + item.setData(0, Qt.DisplayRole, QVariant(newChild.getData()["filename"])) + item.setData(0, Qt.UserRole, QVariant(cid)) + + def getChildren(self): + return self.children + + def getChild(self, cid): + try: + return self.children[cid] + except: + return None + + def hasChildren(self, data): + return (len(self.children) > 0) + + def setData(self, data): + self.data = data + + def getData(self): + return self.data + + class PackageCollectorFile(): + def __init__(self, collector, pack): + self.collector = collector + self.pack = pack + + def getData(self): + return self.data + + def setData(self, data): + self.data = data + + def getPack(self): + return self.pack + +class LinkCollector(QThread): + def __init__(self, view, connector): + QThread.__init__(self) + self.view = view + self.connector = connector + self.collector = [] + self.interval = 2 + self.running = True + self.mutex = QMutex() + + def run(self): + while self.running: + self.update() + sleep(self.interval) + + def stop(self): + self.running = False + + def update(self): + locker = QMutexLocker(self.mutex) + ids = self.connector.getLinkCollector() + for id in ids: + data = self.connector.getLinkInfo(id) + file = self.getFile(id) + if not file: + file = self.LinkCollectorFile(self) + file.setData(data) + self.addFile(id, file) + + def addFile(self, pid, newFile): + pos = None + try: + for k, file in enumerate(self.collector): + if file.getData()["id"] == pid: + pos = k + break + if pos == None: + raise Exception() + self.collector[pos] = newFile + except: + self.collector.append(newFile) + pos = self.collector.index(newFile) + item = self.view.topLevelItem(pos) + if not item: + item = QTreeWidgetItem() + self.view.insertTopLevelItem(pos, item) + item.setData(0, Qt.DisplayRole, QVariant(newFile.getData()["filename"])) + item.setData(0, Qt.UserRole, QVariant(pid)) + + def getFile(self, pid): + for k, file in enumerate(self.collector): + if file.getData()["id"] == pid: + return file + return None + + class LinkCollectorFile(): + def __init__(self, collector): + self.collector = collector + + def getData(self): + return self.data + + def setData(self, data): + self.data = data -- cgit v1.2.3 From ff7fa4a0d1aa1c09e563d2086704aa7e2acea716 Mon Sep 17 00:00:00 2001 From: mkaay Date: Mon, 21 Dec 2009 17:07:16 +0100 Subject: package creation works --- module/gui/Collector.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 0dbccab1f..28cac097b 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -102,8 +102,8 @@ class PackageCollector(QThread): except: self.children.append(newChild) pos = self.children.index(newChild) - ppos = self.queue.queue.index(self) - parent = self.queue.view.topLevelItem(ppos) + ppos = self.collector.collector.index(self) + parent = self.collector.view.topLevelItem(ppos) item = parent.child(pos) if not item: item = QTreeWidgetItem() @@ -172,6 +172,7 @@ class LinkCollector(QThread): file = self.LinkCollectorFile(self) file.setData(data) self.addFile(id, file) + self.clear(ids) def addFile(self, pid, newFile): pos = None @@ -192,12 +193,28 @@ class LinkCollector(QThread): self.view.insertTopLevelItem(pos, item) item.setData(0, Qt.DisplayRole, QVariant(newFile.getData()["filename"])) item.setData(0, Qt.UserRole, QVariant(pid)) + flags = Qt.ItemIsSelectable | Qt.ItemIsDragEnabled | Qt.ItemIsEnabled + item.setFlags(flags) def getFile(self, pid): for k, file in enumerate(self.collector): if file.getData()["id"] == pid: return file return None + + def clear(self, ids): + toremove = [] + for k, file in enumerate(self.collector): + id = file.getData()["id"] + if not id in ids: + toremove.append(k) + if not toremove: + return + toremove.sort() + toremove.reverse() + for pos in toremove: + del self.collector[k] + self.view.takeTopLevelItem(k) class LinkCollectorFile(): def __init__(self, collector): -- cgit v1.2.3 From ed36dd5988907019cc9cc5b98265f00a52462c85 Mon Sep 17 00:00:00 2001 From: mkaay Date: Tue, 22 Dec 2009 17:07:35 +0100 Subject: more docstrings, small design changes --- module/gui/Collector.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 28cac097b..1d622b006 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -42,7 +42,9 @@ class PackageCollector(QThread): def update(self): locker = QMutexLocker(self.mutex) packs = self.connector.getPackageCollector() + ids = [] for data in packs: + ids.append(data["id"]) pack = self.getPack(data["id"]) if not pack: pack = self.PackageCollectorPack(self) @@ -56,6 +58,8 @@ class PackageCollector(QThread): child = self.PackageCollectorFile(self, pack) child.setData(info) pack.addChild(fid, child) + #pack.clear(files) + self.clear(ids) def addPack(self, pid, newPack): pos = None @@ -83,6 +87,18 @@ class PackageCollector(QThread): return pack return None + def clear(self, ids): + toremove = [] + for k, pack in enumerate(self.collector): + id = pack.getData()["id"] + if not id in ids: + toremove.append(k) + if not toremove: + return + self.collector = [] + #self.view.clear() + self.view.emit(SIGNAL("clear")) + class PackageCollectorPack(): def __init__(self, collector): self.collector = collector @@ -111,6 +127,8 @@ class PackageCollector(QThread): status = "%s (%s)" % (newChild.getData()["status_type"], newChild.getData()["plugin"]) item.setData(0, Qt.DisplayRole, QVariant(newChild.getData()["filename"])) item.setData(0, Qt.UserRole, QVariant(cid)) + flags = Qt.ItemIsEnabled + item.setFlags(flags) def getChildren(self): return self.children @@ -129,6 +147,22 @@ class PackageCollector(QThread): def getData(self): return self.data + + def clear(self, ids): + toremove = [] + for k, file in enumerate(self.getChildren()): + id = file.getData()["id"] + if not id in ids: + toremove.append(k) + if not toremove: + return + ppos = self.collector.collector.index(self) + parent = self.collector.view.topLevelItem(ppos) + toremove.sort() + toremove.reverse() + for pos in toremove: + del self.children[k] + parent.takeChild(k) class PackageCollectorFile(): def __init__(self, collector, pack): -- cgit v1.2.3 From ea04c11ce1fb52895449a56e862eff5448ea456a Mon Sep 17 00:00:00 2001 From: mkaay Date: Thu, 24 Dec 2009 01:28:08 +0100 Subject: downloads are now aborted correctly, gui: remove downloads, new icons --- module/gui/Collector.py | 55 +++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 1d622b006..1f89670ce 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -58,7 +58,7 @@ class PackageCollector(QThread): child = self.PackageCollectorFile(self, pack) child.setData(info) pack.addChild(fid, child) - #pack.clear(files) + pack.clear(files) self.clear(ids) def addPack(self, pid, newPack): @@ -88,15 +88,14 @@ class PackageCollector(QThread): return None def clear(self, ids): - toremove = [] - for k, pack in enumerate(self.collector): - id = pack.getData()["id"] - if not id in ids: - toremove.append(k) - if not toremove: + clear = False + for pack in self.collector: + if not pack.getData()["id"] in ids: + clear = True + break + if not clear: return self.collector = [] - #self.view.clear() self.view.emit(SIGNAL("clear")) class PackageCollectorPack(): @@ -149,20 +148,15 @@ class PackageCollector(QThread): return self.data def clear(self, ids): - toremove = [] - for k, file in enumerate(self.getChildren()): - id = file.getData()["id"] - if not id in ids: - toremove.append(k) - if not toremove: + clear = False + for file in self.getChildren(): + if not file.getData()["id"] in ids: + clear = True + break + if not clear: return - ppos = self.collector.collector.index(self) - parent = self.collector.view.topLevelItem(ppos) - toremove.sort() - toremove.reverse() - for pos in toremove: - del self.children[k] - parent.takeChild(k) + self.collector.collector = [] + self.collector.view.emit(SIGNAL("clear")) class PackageCollectorFile(): def __init__(self, collector, pack): @@ -237,18 +231,15 @@ class LinkCollector(QThread): return None def clear(self, ids): - toremove = [] - for k, file in enumerate(self.collector): - id = file.getData()["id"] - if not id in ids: - toremove.append(k) - if not toremove: + clear = False + for pack in self.collector: + if not pack.getData()["id"] in ids: + clear = True + break + if not clear: return - toremove.sort() - toremove.reverse() - for pos in toremove: - del self.collector[k] - self.view.takeTopLevelItem(k) + self.collector = [] + self.view.emit(SIGNAL("clear")) class LinkCollectorFile(): def __init__(self, collector): -- cgit v1.2.3 From 8888b714d748398e99f7425fa861f4e165579da6 Mon Sep 17 00:00:00 2001 From: mkaay Date: Sat, 26 Dec 2009 20:46:36 +0100 Subject: fixed view update --- module/gui/Collector.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 1f89670ce..bf0e50349 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -29,6 +29,7 @@ class PackageCollector(QThread): self.collector = [] self.interval = 2 self.running = True + self.rootItem = self.view.invisibleRootItem() self.mutex = QMutex() def run(self): @@ -43,6 +44,9 @@ class PackageCollector(QThread): locker = QMutexLocker(self.mutex) packs = self.connector.getPackageCollector() ids = [] + for data in packs: + ids.append(data["id"]) + self.clear(ids) for data in packs: ids.append(data["id"]) pack = self.getPack(data["id"]) @@ -51,6 +55,7 @@ class PackageCollector(QThread): pack.setData(data) self.addPack(data["id"], pack) files = self.connector.getPackageFiles(data["id"]) + pack.clear(files) for fid in files: info = self.connector.getLinkInfo(fid) child = pack.getChild(fid) @@ -58,8 +63,6 @@ class PackageCollector(QThread): child = self.PackageCollectorFile(self, pack) child.setData(info) pack.addChild(fid, child) - pack.clear(files) - self.clear(ids) def addPack(self, pid, newPack): pos = None @@ -74,10 +77,10 @@ class PackageCollector(QThread): except: self.collector.append(newPack) pos = self.collector.index(newPack) - item = self.view.topLevelItem(pos) + item = self.rootItem.child(pos) if not item: item = QTreeWidgetItem() - self.view.insertTopLevelItem(pos, item) + self.rootItem.insertChild(pos, item) item.setData(0, Qt.DisplayRole, QVariant(newPack.getData()["package_name"])) item.setData(0, Qt.UserRole, QVariant(pid)) @@ -95,8 +98,8 @@ class PackageCollector(QThread): break if not clear: return - self.collector = [] - self.view.emit(SIGNAL("clear")) + self.queue = [] + self.rootItem.takeChildren() class PackageCollectorPack(): def __init__(self, collector): @@ -118,7 +121,7 @@ class PackageCollector(QThread): self.children.append(newChild) pos = self.children.index(newChild) ppos = self.collector.collector.index(self) - parent = self.collector.view.topLevelItem(ppos) + parent = self.collector.rootItem.child(ppos) item = parent.child(pos) if not item: item = QTreeWidgetItem() @@ -149,14 +152,23 @@ class PackageCollector(QThread): def clear(self, ids): clear = False + children = {} for file in self.getChildren(): if not file.getData()["id"] in ids: clear = True break + try: + children[file.getData()["id"]] + clear = True + except: + children[file.getData()["id"]] = True + if not clear: return - self.collector.collector = [] - self.collector.view.emit(SIGNAL("clear")) + ppos = self.collector.collector.index(self) + parent = self.collector.rootItem.child(ppos) + parent.takeChildren() + self.children = [] class PackageCollectorFile(): def __init__(self, collector, pack): @@ -193,6 +205,7 @@ class LinkCollector(QThread): def update(self): locker = QMutexLocker(self.mutex) ids = self.connector.getLinkCollector() + self.clear(ids) for id in ids: data = self.connector.getLinkInfo(id) file = self.getFile(id) @@ -200,7 +213,6 @@ class LinkCollector(QThread): file = self.LinkCollectorFile(self) file.setData(data) self.addFile(id, file) - self.clear(ids) def addFile(self, pid, newFile): pos = None -- cgit v1.2.3 From ce2a8294b5aefe4497c88f24c817084868b8b1eb Mon Sep 17 00:00:00 2001 From: mkaay Date: Mon, 28 Dec 2009 15:32:06 +0100 Subject: gui now stable --- module/gui/Collector.py | 184 +++++++++++++++++++++++------------------------- 1 file changed, 87 insertions(+), 97 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index bf0e50349..c2d167291 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -21,6 +21,8 @@ from PyQt4.QtGui import * from time import sleep +from module.gui.Queue import ItemIterator + class PackageCollector(QThread): def __init__(self, view, connector): QThread.__init__(self) @@ -52,7 +54,7 @@ class PackageCollector(QThread): pack = self.getPack(data["id"]) if not pack: pack = self.PackageCollectorPack(self) - pack.setData(data) + pack.setPackData(data) self.addPack(data["id"], pack) files = self.connector.getPackageFiles(data["id"]) pack.clear(files) @@ -61,125 +63,115 @@ class PackageCollector(QThread): child = pack.getChild(fid) if not child: child = self.PackageCollectorFile(self, pack) - child.setData(info) - pack.addChild(fid, child) + child.setFileData(info) + pack.addPackChild(fid, child) def addPack(self, pid, newPack): pos = None try: - for k, pack in enumerate(self.collector): - if pack.getData()["id"] == pid: - pos = k + for pack in ItemIterator(self.rootItem): + if pack.getPackData()["id"] == pid: + pos = self.rootItem.indexOfChild(pack) break if pos == None: raise Exception() - self.collector[pos] = newPack + item = self.rootItem.child(pos) + item.setPackData(newPack.getPackData()) except: - self.collector.append(newPack) - pos = self.collector.index(newPack) - item = self.rootItem.child(pos) - if not item: - item = QTreeWidgetItem() - self.rootItem.insertChild(pos, item) - item.setData(0, Qt.DisplayRole, QVariant(newPack.getData()["package_name"])) + self.rootItem.addChild(newPack) + item = newPack + item.setData(0, Qt.DisplayRole, QVariant(item.getPackData()["package_name"])) item.setData(0, Qt.UserRole, QVariant(pid)) def getPack(self, pid): - for k, pack in enumerate(self.collector): - if pack.getData()["id"] == pid: + for k, pack in enumerate(ItemIterator(self.rootItem)): + if pack.getPackData()["id"] == pid: return pack return None def clear(self, ids): clear = False - for pack in self.collector: - if not pack.getData()["id"] in ids: + for pack in ItemIterator(self.rootItem): + if not pack.getPackData()["id"] in ids: clear = True break if not clear: return - self.queue = [] self.rootItem.takeChildren() - class PackageCollectorPack(): + class PackageCollectorPack(QTreeWidgetItem): def __init__(self, collector): + QTreeWidgetItem.__init__(self) self.collector = collector - self.data = [] - self.children = [] + self._data = {} - def addChild(self, cid, newChild): + def addPackChild(self, cid, newChild): pos = None try: - for k, child in enumerate(self.getChildren()): + for child in ItemIterator(self): if child.getData()["id"] == cid: - pos = k + pos = self.indexOfChild(child) break if pos == None: raise Exception() - self.children[pos] = newChild + item = self.child(pos) + item.setFileData(newChild.getFileData()) except: - self.children.append(newChild) - pos = self.children.index(newChild) - ppos = self.collector.collector.index(self) - parent = self.collector.rootItem.child(ppos) - item = parent.child(pos) - if not item: - item = QTreeWidgetItem() - parent.insertChild(pos, item) - status = "%s (%s)" % (newChild.getData()["status_type"], newChild.getData()["plugin"]) - item.setData(0, Qt.DisplayRole, QVariant(newChild.getData()["filename"])) + self.addChild(newChild) + item = newChild + item.setData(0, Qt.DisplayRole, QVariant(item.getFileData()["filename"])) item.setData(0, Qt.UserRole, QVariant(cid)) - flags = Qt.ItemIsEnabled - item.setFlags(flags) - def getChildren(self): - return self.children + def setPackData(self, data): + self._data = data - def getChild(self, cid): - try: - return self.children[cid] - except: - return None - - def hasChildren(self, data): - return (len(self.children) > 0) + def getPackData(self): + return self._data - def setData(self, data): - self.data = data + def getChildren(self): + ret = [] + for item in ItemIterator(self): + ret.append(item) + return ret - def getData(self): - return self.data + def getChild(self, cid): + for item in ItemIterator(self): + if item.getFileData()["id"] == cid: + return item + return None def clear(self, ids): clear = False - children = {} - for file in self.getChildren(): - if not file.getData()["id"] in ids: - clear = True - break - try: - children[file.getData()["id"]] - clear = True - except: - children[file.getData()["id"]] = True - - if not clear: + remove = [] + children = [] + for k, file in enumerate(self.getChildren()): + if not file.getFileData()["id"] in ids: + remove.append(file.getFileData()["id"]) + if file.getFileData()["id"] in children and not file.getFileData()["id"] in remove: + remove.append(file.getFileData()["id"]) + continue + children.append(file.getFileData()["id"]) + if not remove: return - ppos = self.collector.collector.index(self) - parent = self.collector.rootItem.child(ppos) - parent.takeChildren() - self.children = [] + remove.sort() + remove.reverse() + parent = self + for k in remove: + parent.takeChild(k) - class PackageCollectorFile(): + class PackageCollectorFile(QTreeWidgetItem): def __init__(self, collector, pack): + QTreeWidgetItem.__init__(self) self.collector = collector self.pack = pack + self._data = {} + self.wait_since = None - def getData(self): - return self.data + def getFileData(self): + return self._data - def setData(self, data): - self.data = data + def setFileData(self, data): + self._data = data def getPack(self): return self.pack @@ -189,9 +181,9 @@ class LinkCollector(QThread): QThread.__init__(self) self.view = view self.connector = connector - self.collector = [] self.interval = 2 self.running = True + self.rootItem = self.view.invisibleRootItem() self.mutex = QMutex() def run(self): @@ -211,54 +203,52 @@ class LinkCollector(QThread): file = self.getFile(id) if not file: file = self.LinkCollectorFile(self) - file.setData(data) + file.setFileData(data) self.addFile(id, file) def addFile(self, pid, newFile): pos = None try: - for k, file in enumerate(self.collector): - if file.getData()["id"] == pid: - pos = k + for pack in ItemIterator(self.rootItem): + if file.getFileData()["id"] == pid: + pos = self.rootItem.indexOfChild(file) break if pos == None: raise Exception() - self.collector[pos] = newFile + item = self.rootItem.child(pos) + item.setFileData(newFile.getPackData()) except: - self.collector.append(newFile) - pos = self.collector.index(newFile) - item = self.view.topLevelItem(pos) - if not item: - item = QTreeWidgetItem() - self.view.insertTopLevelItem(pos, item) - item.setData(0, Qt.DisplayRole, QVariant(newFile.getData()["filename"])) + self.rootItem.addChild(newFile) + item = newFile + item.setData(0, Qt.DisplayRole, QVariant(newFile.getFileData()["filename"])) item.setData(0, Qt.UserRole, QVariant(pid)) flags = Qt.ItemIsSelectable | Qt.ItemIsDragEnabled | Qt.ItemIsEnabled item.setFlags(flags) def getFile(self, pid): - for k, file in enumerate(self.collector): - if file.getData()["id"] == pid: + for file in ItemIterator(self.rootItem): + if file.getFileData()["id"] == pid: return file return None def clear(self, ids): clear = False - for pack in self.collector: - if not pack.getData()["id"] in ids: + for file in ItemIterator(self.rootItem): + if not file.getFileData()["id"] in ids: clear = True break if not clear: return - self.collector = [] - self.view.emit(SIGNAL("clear")) + self.rootItem.takeChildren() - class LinkCollectorFile(): + class LinkCollectorFile(QTreeWidgetItem): def __init__(self, collector): + QTreeWidgetItem.__init__(self) self.collector = collector + self._data = {} - def getData(self): - return self.data + def getFileData(self): + return self._data - def setData(self, data): - self.data = data + def setFileData(self, data): + self._data = data -- cgit v1.2.3 From da359f8c770bac754234e0f899058b25126cd476 Mon Sep 17 00:00:00 2001 From: mkaay Date: Mon, 28 Dec 2009 19:51:37 +0100 Subject: gui: easier package management --- module/gui/Collector.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index c2d167291..07a5203e9 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -33,6 +33,12 @@ class PackageCollector(QThread): self.running = True self.rootItem = self.view.invisibleRootItem() self.mutex = QMutex() + item = self.PackageCollectorPack(self) + item.setPackData({"id":"fixed"}) + item.setData(0, Qt.DisplayRole, QVariant("Single Links")) + item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) + self.rootItem.addChild(item) + self.linkCollector = item def run(self): while self.running: @@ -78,10 +84,11 @@ class PackageCollector(QThread): item = self.rootItem.child(pos) item.setPackData(newPack.getPackData()) except: - self.rootItem.addChild(newPack) + self.rootItem.insertChild(self.rootItem.childCount()-1, newPack) item = newPack item.setData(0, Qt.DisplayRole, QVariant(item.getPackData()["package_name"])) item.setData(0, Qt.UserRole, QVariant(pid)) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) def getPack(self, pid): for k, pack in enumerate(ItemIterator(self.rootItem)): @@ -91,13 +98,17 @@ class PackageCollector(QThread): def clear(self, ids): clear = False - for pack in ItemIterator(self.rootItem): - if not pack.getPackData()["id"] in ids: + remove = [] + for k, pack in enumerate(ItemIterator(self.rootItem)): + if not pack.getPackData()["id"] in ids and not pack.getPackData()["id"] == "fixed": clear = True - break + remove.append(k) if not clear: return - self.rootItem.takeChildren() + remove.sort() + remove.reverse() + for k in remove: + self.rootItem.takeChild(k) class PackageCollectorPack(QTreeWidgetItem): def __init__(self, collector): @@ -121,6 +132,7 @@ class PackageCollector(QThread): item = newChild item.setData(0, Qt.DisplayRole, QVariant(item.getFileData()["filename"])) item.setData(0, Qt.UserRole, QVariant(cid)) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) def setPackData(self, data): self._data = data @@ -177,13 +189,13 @@ class PackageCollector(QThread): return self.pack class LinkCollector(QThread): - def __init__(self, view, connector): + def __init__(self, view, root, connector): QThread.__init__(self) self.view = view self.connector = connector self.interval = 2 self.running = True - self.rootItem = self.view.invisibleRootItem() + self.rootItem = root self.mutex = QMutex() def run(self): -- cgit v1.2.3 From c225a31e70e85c6e400a7ed4407a1fa53de29689 Mon Sep 17 00:00:00 2001 From: mkaay Date: Mon, 28 Dec 2009 20:44:49 +0100 Subject: you can now drop single links directly into a package --- module/gui/Collector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 07a5203e9..1b1a6b654 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -88,7 +88,7 @@ class PackageCollector(QThread): item = newPack item.setData(0, Qt.DisplayRole, QVariant(item.getPackData()["package_name"])) item.setData(0, Qt.UserRole, QVariant(pid)) - item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled) def getPack(self, pid): for k, pack in enumerate(ItemIterator(self.rootItem)): -- cgit v1.2.3 From 86949a6240bc6d5a5fd5e5677925e0d945686d3e Mon Sep 17 00:00:00 2001 From: mkaay Date: Mon, 28 Dec 2009 22:21:35 +0100 Subject: package renaming in collector works --- module/gui/Collector.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 1b1a6b654..8b421001e 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -39,6 +39,7 @@ class PackageCollector(QThread): item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) self.rootItem.addChild(item) self.linkCollector = item + self.pauseIDs = [] def run(self): while self.running: @@ -56,6 +57,8 @@ class PackageCollector(QThread): ids.append(data["id"]) self.clear(ids) for data in packs: + if data["id"] in self.pauseIDs: + continue ids.append(data["id"]) pack = self.getPack(data["id"]) if not pack: @@ -88,7 +91,7 @@ class PackageCollector(QThread): item = newPack item.setData(0, Qt.DisplayRole, QVariant(item.getPackData()["package_name"])) item.setData(0, Qt.UserRole, QVariant(pid)) - item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled) + item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled | Qt.ItemIsEditable) def getPack(self, pid): for k, pack in enumerate(ItemIterator(self.rootItem)): @@ -110,6 +113,16 @@ class PackageCollector(QThread): for k in remove: self.rootItem.takeChild(k) + def pauseItemUpdate(self, pid, pause=True): + locker = QMutexLocker(self.mutex) + if pause and not pid in self.pauseIDs: + self.pauseIDs.append(int(pid)) + else: + try: + self.pauseIDs.remove(int(pid)) + except: + pass + class PackageCollectorPack(QTreeWidgetItem): def __init__(self, collector): QTreeWidgetItem.__init__(self) @@ -210,13 +223,13 @@ class LinkCollector(QThread): locker = QMutexLocker(self.mutex) ids = self.connector.getLinkCollector() self.clear(ids) - for id in ids: - data = self.connector.getLinkInfo(id) - file = self.getFile(id) + for fid in ids: + data = self.connector.getLinkInfo(fid) + file = self.getFile(fid) if not file: file = self.LinkCollectorFile(self) file.setFileData(data) - self.addFile(id, file) + self.addFile(fid, file) def addFile(self, pid, newFile): pos = None -- cgit v1.2.3 From fa9cce4987da585f5bf21274cfbe5f046f46f703 Mon Sep 17 00:00:00 2001 From: mkaay Date: Tue, 29 Dec 2009 16:50:13 +0100 Subject: : Bitte gib eine Versions-Meldung ein. Zeilen beginnend mit 'HG:' werden entfernt. --- module/gui/Collector.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 8b421001e..356ab36ec 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -112,6 +112,15 @@ class PackageCollector(QThread): remove.reverse() for k in remove: self.rootItem.takeChild(k) + for pack in ItemIterator(self.rootItem): + if pack.getPackData()["id"] == "fixed": + return + item = self.PackageCollectorPack(self) + item.setPackData({"id":"fixed"}) + item.setData(0, Qt.DisplayRole, QVariant("Single Links")) + item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) + self.rootItem.addChild(item) + self.linkCollector = item def pauseItemUpdate(self, pid, pause=True): locker = QMutexLocker(self.mutex) -- cgit v1.2.3 From 4f904bd9610795c36d9e896bdf44c263ff43f5fd Mon Sep 17 00:00:00 2001 From: mkaay Date: Fri, 1 Jan 2010 17:13:43 +0100 Subject: fixed SerienjunkiesOrg, no more segfault in gui? --- module/gui/Collector.py | 58 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 16 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 356ab36ec..112eb1cd5 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -23,14 +23,13 @@ from time import sleep from module.gui.Queue import ItemIterator -class PackageCollector(QThread): +class PackageCollector(QObject): def __init__(self, view, connector): - QThread.__init__(self) + QObject.__init__(self) self.view = view self.connector = connector self.collector = [] self.interval = 2 - self.running = True self.rootItem = self.view.invisibleRootItem() self.mutex = QMutex() item = self.PackageCollectorPack(self) @@ -40,14 +39,28 @@ class PackageCollector(QThread): self.rootItem.addChild(item) self.linkCollector = item self.pauseIDs = [] + self.updater = self.CollectorUpdater(self.interval) + self.connect(self.updater, SIGNAL("update()"), self.update) - def run(self): - while self.running: - self.update() - sleep(self.interval) + class CollectorUpdater(QThread): + def __init__(self, interval): + QThread.__init__(self) + self.interval = interval + self.running = True + + def run(self): + while self.running: + self.emit(SIGNAL("update()")) + self.sleep(self.interval) + + def start(self): + self.updater.start() + + def wait(self): + self.updater.wait() def stop(self): - self.running = False + self.updater.running = False def update(self): locker = QMutexLocker(self.mutex) @@ -210,23 +223,36 @@ class PackageCollector(QThread): def getPack(self): return self.pack -class LinkCollector(QThread): +class LinkCollector(QObject): def __init__(self, view, root, connector): - QThread.__init__(self) + QObject.__init__(self) self.view = view self.connector = connector self.interval = 2 - self.running = True self.rootItem = root self.mutex = QMutex() + self.updater = self.CollectorUpdater(self.interval) + self.connect(self.updater, SIGNAL("update()"), self.update) + + class CollectorUpdater(QThread): + def __init__(self, interval): + QThread.__init__(self) + self.interval = interval + self.running = True + + def run(self): + while self.running: + self.emit(SIGNAL("update()")) + self.sleep(self.interval) + + def start(self): + self.updater.start() - def run(self): - while self.running: - self.update() - sleep(self.interval) + def wait(self): + self.updater.wait() def stop(self): - self.running = False + self.updater.running = False def update(self): locker = QMutexLocker(self.mutex) -- cgit v1.2.3 From 3d655ddbfbd96abecb9a9c9bebf6e43eb710ab12 Mon Sep 17 00:00:00 2001 From: RaNaN Date: Sun, 10 Jan 2010 16:20:31 +0100 Subject: fixed manage.py, addBox working, some code formatted and cleaned --- module/gui/Collector.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'module/gui/Collector.py') diff --git a/module/gui/Collector.py b/module/gui/Collector.py index 112eb1cd5..0aad5d1ba 100644 --- a/module/gui/Collector.py +++ b/module/gui/Collector.py @@ -19,8 +19,6 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * -from time import sleep - from module.gui.Queue import ItemIterator class PackageCollector(QObject): -- cgit v1.2.3