3 # vim: sw=4 ts=4 expandtab ai
7 from heapq import nlargest
8 from misc import size_hum_read
10 class Search_Pkg_Control(object):
12 def __init__(self, config, show_funct):
13 count = config.get('default_pkg_count')
14 self.show_func = show_funct
15 self.abstr = Search_Pkg_Abstraction()
16 self.present = Search_Pkg_Presentation(count, self.start_search)
18 def start_search(self, count, show_type):
20 for psize, packg in nlargest(count, self.abstr.pkggetter()):
21 pkglist.append([packg, size_hum_read(psize), psize])
23 if show_type is 'table_view':
24 from outtable import Out_Table_Control
25 out = Out_Table_Control()
26 #elif show_type is 'diag_view':
27 # from outdiag import Out_Diag_Control
28 # out = Out_Diag_Control(self.cfg)
29 out.show(pkglist, self.abstr.full())
30 self.show_func(None, out.get_ui())
33 return self.present.get_ui()
35 class Search_Pkg_Abstraction(object):
40 self.cache = apt_pkg.GetCache()
44 for pkg in self.cache.Packages:
45 # pkg is from a list of packages, sorted by name.
46 if pkg.CurrentState == apt_pkg.CurStateInstalled:
47 pkgsize = [version.InstalledSize for version in pkg.VersionList][0]
48 self.fullsize = self.fullsize + pkgsize
49 yield pkgsize, pkg.Name
55 #==============================================================================
57 class Gtk_Presentation(object):
62 # "Packages quantity" label
63 qty_label = gtk.Label('Files quantity')
65 # "Packages quantity" spin
66 qty_spin = gtk.SpinButton()
67 qty_spin.set_numeric(True)
68 qty_spin.set_range(0, 65536)
69 qty_spin.set_increments(1, 10)
72 start_btn = gtk.Button('Start')
73 start_btn.connect('released', self.start_search)
76 outtable_rbtn = gtk.RadioButton(None, 'Table')
77 outdiagram_rbtn = gtk.RadioButton(outtable_rbtn, 'Diagram')
78 out1_rbtn = gtk.RadioButton(outtable_rbtn, 'Another 1')
79 out_rbtns = [outtable_rbtn, outdiagram_rbtn, out1_rbtn]
81 hbox = gtk.HBox(False, 4)
82 hbox.pack_start(qty_label, False, False, 0)
83 hbox.pack_start(qty_spin, False, False, 0)
84 hbox.pack_start(start_btn, False, False, 0)
85 for btn in reversed(out_rbtns):
86 hbox.pack_end(btn, False, False, 0)
88 statusbar = gtk.Statusbar()
89 context_id = statusbar.get_context_id('Selected package')
90 statusbar.push(context_id, 'test')
92 self.vbox = gtk.VBox(False, 4)
93 self.vbox.set_border_width(4)
94 self.vbox.pack_start(hbox, False, False, 0)
95 self.vbox.pack_end(statusbar, False, False, 0)
97 self.show_out_toplevel(None, 'outtable') ###
98 self.frame = gtk.Frame('Deb packages search')
99 self.frame.add(self.vbox)
100 self.frame.show_all()
102 #=== Functions ============================================================
103 def start_search(self, widget, start_func):
105 self.butt_stop.set_sensitive(True)
106 self.butt_start.set_sensitive(False)
107 start_func(self.get_data, self.get_stopit, self.currfilelbl, self.kill_wind)
109 def stop_search(self, widget):
111 self.butt_stop.set_sensitive(False)
112 self.butt_start.set_sensitive(True)
114 def get_stopit(self):
117 #=== Toplevel widget for embedding to main window =========================
118 def get_toplevel(self):
119 return self.frame ###
121 #=== Output type selecting ================================================
122 def show_out_toplevel(self, btn, output):
123 print 'Entering <' + output + '> output mode...'
124 from files.outtable import Gtk_Presentation ###
125 toplevel = Gtk_Presentation().get_toplevel()
126 ###self.vbox.remove(self.vbox.get_children()[2])
127 #self.vbox.add(toplevel)
128 self.vbox.pack_start(toplevel)