summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@dhcp-5-230.str.redhat.com>2010-08-26 15:17:24 +0200
committerroot <root@dhcp-5-230.str.redhat.com>2010-08-26 15:17:24 +0200
commit626f0f9c999a16084f968215d5963c0be1f8d8d4 (patch)
treeec1f50d60606bafa3e9f0cd6e700c3b0d8b237d8
parentf6afdd31acf58d4ecf49d9b5ed726be0f7f6e5ca (diff)
downloadpkggui-626f0f9c999a16084f968215d5963c0be1f8d8d4.tar.gz
pkggui-626f0f9c999a16084f968215d5963c0be1f8d8d4.tar.xz
pkggui-626f0f9c999a16084f968215d5963c0be1f8d8d4.zip
Convert tags-and-groups- list to a QTreeWidget
Implement yum searches
-rwxr-xr-xgui.py105
-rw-r--r--packages.ui28
2 files changed, 86 insertions, 47 deletions
diff --git a/gui.py b/gui.py
index f90d5d2..c626367 100755
--- a/gui.py
+++ b/gui.py
@@ -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
diff --git a/packages.ui b/packages.ui
index 40784e1..dc14e65 100644
--- a/packages.ui
+++ b/packages.ui
@@ -38,7 +38,7 @@
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <widget class="QWidget" name="">
+ <widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>6</number>
@@ -47,10 +47,30 @@
<widget class="QLineEdit" name="searchBox"/>
</item>
<item>
- <widget class="QListView" name="tagList">
+ <widget class="QTreeWidget" name="tagList">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
+ <property name="indentation">
+ <number>10</number>
+ </property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <attribute name="headerDefaultSectionSize">
+ <number>200</number>
+ </attribute>
+ <attribute name="headerDefaultSectionSize">
+ <number>200</number>
+ </attribute>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string notr="true">1</string>
+ </property>
+ </column>
</widget>
</item>
</layout>
@@ -59,7 +79,7 @@
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <widget class="QWidget" name="">
+ <widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="searchItemLayout" stretch="0,0">
@@ -84,7 +104,7 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="">
+ <widget class="QWidget" name="layoutWidget">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QTextBrowser" name="packageDescription"/>