diff options
author | root <root@dhcp-5-230.str.redhat.com> | 2010-08-26 15:17:24 +0200 |
---|---|---|
committer | root <root@dhcp-5-230.str.redhat.com> | 2010-08-26 15:17:24 +0200 |
commit | 626f0f9c999a16084f968215d5963c0be1f8d8d4 (patch) | |
tree | ec1f50d60606bafa3e9f0cd6e700c3b0d8b237d8 /gui.py | |
parent | f6afdd31acf58d4ecf49d9b5ed726be0f7f6e5ca (diff) | |
download | pkggui-626f0f9c999a16084f968215d5963c0be1f8d8d4.tar.gz pkggui-626f0f9c999a16084f968215d5963c0be1f8d8d4.tar.xz pkggui-626f0f9c999a16084f968215d5963c0be1f8d8d4.zip |
Convert tags-and-groups- list to a QTreeWidget
Implement yum searches
Diffstat (limited to 'gui.py')
-rwxr-xr-x | gui.py | 105 |
1 files changed, 62 insertions, 43 deletions
@@ -8,19 +8,6 @@ sys.path.insert(0,'/usr/share/yum-cli') import yum import yum.comps from utils import YumUtilBase - -class Packages(YumUtilBase): - # XXX - NAME= 'appfinder' - VERSION = '1.0' - USAGE = 'appfinder [options] [package globs]' - - def __init__(self): - YumUtilBase.__init__(self, - self.NAME, - self.VERSION, - self.USAGE) - class SearchItem: @@ -36,7 +23,7 @@ class SearchItem: class PackagesUI: def __init__(self): - self.packages = Packages() + self.yum = YumUtilBase("", "", "") self.searchItems = { "search" : [], @@ -46,6 +33,7 @@ class PackagesUI: self.activeSearchItems = [] self.result = set() + self.treeItems = {} self.mainwindow = m = uic.loadUi("packages.ui") @@ -54,10 +42,9 @@ class PackagesUI: self.searchBox.returnPressed.connect(self.search) # tagList - self.tagList = m.findChild(QtGui.QListView, "tagList") - self.tagModel = QtGui.QStandardItemModel() - self.tagList.setModel(self.tagModel) - self.tagList.activated.connect(self.tagActivated) + self.tagList = m.findChild(QtGui.QTreeWidget, "tagList") + self.tagList.setColumnCount(3) + self.tagList.itemActivated.connect(self.searchActivated) # searchItems self.searchItemLayout = m.findChild(QtGui.QHBoxLayout, "searchItemLayout") @@ -73,15 +60,18 @@ class PackagesUI: # tags self.tag2pkgs = {} - for name, tags in self.packages.pkgtags.search_tags('').iteritems(): + for name, tags in self.yum.pkgtags.search_tags('').iteritems(): for tag in tags: self.tag2pkgs.setdefault(tag, set()).add(name) for tag, pkgs in self.tag2pkgs.iteritems(): + if len(pkgs) == 1 or tag.startswith("X-"): + continue self.searchItems["tag"].append(SearchItem(tag, pkgs, "tag")) # groups - for group in self.packages.comps.groups: - print group, group.packages + for group in self.yum.comps.groups: + if not group.user_visible or not group.packages: + continue self.searchItems["group"].append( SearchItem(group.name, set(group.packages), "group")) @@ -105,19 +95,30 @@ class PackagesUI: self.refreshSearchResults() def search(self): - t = self.searchBox.text() - self.tagList.model().insertRow(0, QtGui.QStandardItem(t)) - item = SearchItem(t, set(), 'search') + pattern = str(self.searchBox.text()) + for item in self.searchItems["search"]: + if item.pattern == pattern: + self._addActiveSearchItem(item) + return + + # XXX do a real search! + searchlist = ['name', 'summary', 'description', 'url'] + result = set((p.name for p in + self.yum.searchPackages(searchlist, [pattern], False))) + l = len(result) + item = SearchItem(pattern, result, 'search') self.searchItems["search"].append(item) + treeitem = QtGui.QTreeWidgetItem( + self.treeItems["search"], [pattern, "%i/%i" % (l, l), "%8i" % l], 0) + item.treeItem = treeitem + treeitem.setData(3, 0, item) + self._addActiveSearchItem(item) - def tagActivated(self, index): - text = str(index.data().toString()) - for _type, items in self.searchItems.iteritems(): - for item in items: - if text.endswith(item.pattern): # XXX ugly hack - self._addActiveSearchItem(item) - return + def searchActivated(self, treeitem, column): + searchItem = treeitem.data(3, 0).toPyObject() + if searchItem: + self._addActiveSearchItem(searchItem) def deleteSearchItem(self, w): b = self.mainwindow.sender() @@ -147,26 +148,44 @@ class PackagesUI: for r in result: self.resultList.model().insertRow(0, QtGui.QStandardItem(r)) - self.fillTags() + self.updateSearchItems() def fillTags(self): - self.tagList.model().clear() - - for _type in ("tag", "group", "search"): + for _type, name in (("search", "Searches"), + ("tag", "Package Tags"), + ("group", "Groups")): if self.result: items = [(len(item.result & self.result), item.pattern, len(item.result)) for item in self.searchItems[_type]] else: - items = [(len(item.result), item.pattern, len(item.result)) + items = [(len(item.result), item.pattern, len(item.result), item) for item in self.searchItems[_type]] - items.sort() - - - for hits, pattern, allhits in items: - #if hits == 0: continue - self.tagList.model().insertRow(0, QtGui.QStandardItem( - "%i/%i %s" % (hits, allhits, pattern))) + items.sort(reverse=True) + + parent = QtGui.QTreeWidgetItem(self.tagList, [name], 0) + parent.setExpanded(True) + + self.treeItems[_type] = parent + + for hits, pattern, allhits, item in items: + treeitem = QtGui.QTreeWidgetItem( + parent, [pattern, "%i/%i" % (hits, allhits), "%8i" % hits], 0) + item.treeItem = treeitem + treeitem.setData(3, 0, item) + + def updateSearchItems(self): + for t, l in self.searchItems.iteritems(): + for item in l: + if self.result: + r = len(item.result & self.result) + else: + r = len(item.result) + item.treeItem.setData(1, 0, + "%i/%i" % (r, len(item.result))) + item.treeItem.setData(2, 0, "%8i" % r) + item.treeItem.setHidden(r == 0 and t != "search") + self.tagList.sortItems(2, 1) def packageSelected(self, index): pass |