result src/pkgsearch.py to p-a-c view
[findit] / src / pkgsearch.py
1 #!/usr/bin/python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4
5 import apt_pkg
6 from heapq import nlargest
7 from misc import size_hum_read
8
9 class Search_Pkg_Control(object):
10
11     def __init__(self, config, show_funct):
12         win_width = config.get('window_width')
13         win_height = config.get('window_height')
14         self.show_func = show_funct
15         self.abstr = Search_Pkg_Abstraction()
16         self.present = Search_Pkg_Presentation(win_width, win_height, self.start_search)
17
18     def start_search(self, count):
19         pkglist = []
20         for psize, packg in nlargest(count, self.abstr.pkggetter()):
21             pkglist.append([packg, size_hum_read(psize), psize])
22         self.show_func(pkglist)
23
24
25 class Search_Pkg_Abstraction(object):
26
27     def __init__(self):
28         apt_pkg.InitConfig()
29         apt_pkg.InitSystem()
30         self.cache = apt_pkg.GetCache()
31
32     def pkggetter(self):
33         for pkg in self.cache.Packages:
34             # pkg is from a list of packages, sorted by name.
35             if pkg.CurrentState == apt_pkg.CurStateInstalled:
36                 yield [version.InstalledSize for version in pkg.VersionList][0], pkg.Name
37
38
39 class Search_Pkg_Presentation(gtk.Window):
40
41     def __init__(self, win_width, win_height, st_func):
42         """Create MainWindow."""
43         # Создаем новое окно
44         gtk.Window.__init__(self)
45         self.set_default_size(win_width, win_height)
46         self.set_border_width(4)
47         self.connect('delete_event', gtk.main_quit)
48
49         label1 = gtk.Label('Files quantity')
50         # Окошко ввода количества файлов, мин значение=1 макс=65536 по умолчанию 10
51         adj = gtk.Adjustment(count, 1, 65536, 1, 5, 0)
52         self.file_cnt = gtk.SpinButton(adj, 0, 0)
53
54         hbox = gtk.HBox(False, 0)
55         hbox.pack_start(label1, False, False, 5)
56         hbox.pack_start(self.file_cnt, False, False, 0)
57
58         self.butt_start = gtk.Button('Go >')
59         self.butt_start.connect('released', self.start_srch, st_func)
60         
61         self.butt_prev = gtk.Button('< Previous')
62         self.butt_prev.connect('released', self.show_prev, prev_window)
63         
64         hbox1 = gtk.HBox(False, 0)
65         hbox1.pack_start(self.butt_prev, False, False, 5)
66         hbox1.pack_start(self.butt_start, False, False, 5)
67
68         vbox = gtk.VBox(False, 0)
69         vbox.pack_start(hbox, False, False, 5)
70         vbox.pack_start(self.butt_start, False, False, 5)
71
72         self.add(vbox)
73
74     def get_ui(self):
75         return self
76
77     def get_data(self):
78         return int( self.file_cnt.get_value() )
79
80     def run(self):
81         self.show_all()
82         gtk.main()
83
84     def start_srch(self, widget, start_func):
85         self.destroy
86         gtk.main_quit()
87         start_func(self.get_data())