e8267ee715b5e03d1f30da3652206ad4e379dbbf
[findit] / src / debs / search.py
1 #!/usr/bin/python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4
5 import gtk
6 #import apt_pkg
7 from heapq import nlargest
8 import gtk ###
9
10 from misc import *
11
12 #==============================================================================
13
14 class Control(object):
15
16     def __init__(self):
17         count = 7
18         self.abstrac = Abstraction()
19         self.present = Gtk_Presentation(count, self.start_search)
20
21     def start_search(self, count):
22         deblist = []
23 #         for size, name in nlargest(count, self.abstrac.pkggetter()):
24 #             deblist.append([name, size_hum_read(psize), size])
25         
26         self.search_present.show_out_toplevel(None, 'outtable', deblist)
27
28     def run(self):
29         return self.present.get_toplevel()
30
31 class Abstraction(object):
32     pass
33 #     def __init__(self):
34 #         apt_pkg.InitConfig()
35 #         apt_pkg.InitSystem()
36 #         self.cache = apt_pkg.GetCache()
37
38 #     def pkggetter(self):
39 #         self.fullsize = 0
40 #         for pkg in self.cache.Packages:
41 #             # pkg is from a list of packages, sorted by name.
42 #             if pkg.CurrentState == apt_pkg.CurStateInstalled:
43 #                 pkgsize = [version.InstalledSize for version in pkg.VersionList][0]
44 #                 self.fullsize = self.fullsize + pkgsize
45 #                 yield pkgsize, pkg.Name
46
47 #     def full(self):
48 #         return self.fullsize
49
50
51 #==============================================================================
52
53 class Gtk_Presentation(object):
54
55     def __init__(self, count, start_func):
56         import gtk
57
58         # "Packages quantity" label
59         qty_label = gtk.Label('Debian packages quantity')
60
61         # "Packages quantity" spin
62         qty_spin = gtk.SpinButton()
63         qty_spin.set_numeric(True)
64         qty_spin.set_range(0, 65536)
65         qty_spin.set_increments(1, 10)
66
67         # "Start" button
68         start_btn = gtk.Button('Start')
69         start_btn.connect('released', self.start_search)
70
71         # Output selection
72         outtable_rbtn = gtk.RadioButton(None, 'Table')
73         outdiagram_rbtn = gtk.RadioButton(outtable_rbtn, 'Diagram')
74         out1_rbtn = gtk.RadioButton(outtable_rbtn, 'Another 1')
75         out_rbtns = [outtable_rbtn, outdiagram_rbtn, out1_rbtn]
76
77         hbox = gtk.HBox(False, 4)
78         hbox.pack_start(qty_label, False, False, 0)
79         hbox.pack_start(qty_spin, False, False, 0)
80         hbox.pack_start(start_btn, False, False, 0)
81         for btn in reversed(out_rbtns):
82             hbox.pack_end(btn, False, False, 0)
83
84         statusbar = gtk.Statusbar()
85         context_id = statusbar.get_context_id('Selected package')
86         statusbar.push(context_id, 'test')
87
88         self.vbox = gtk.VBox(False, 4)
89         self.vbox.set_border_width(4)
90         self.vbox.pack_start(hbox, False, False, 0)
91         self.vbox.pack_end(statusbar, False, False, 0)
92
93         self.show_out_toplevel(None, 'outtable') ###
94         self.frame = gtk.Frame('Deb packages search')
95         self.frame.add(self.vbox)
96         self.frame.show_all()
97
98     #=== Functions ============================================================
99     def start_search(self, widget, start_func):
100         self.stopit = False
101         self.butt_stop.set_sensitive(True)
102         self.butt_start.set_sensitive(False)
103         start_func(self.get_data, self.get_stopit, self.currfilelbl, self.kill_wind)
104
105     def stop_search(self, widget):
106         self.stopit = True
107         self.butt_stop.set_sensitive(False)
108         self.butt_start.set_sensitive(True)
109
110     def get_stopit(self):
111         return self.stopit
112
113     #=== Toplevel widget for embedding to main window =========================
114     def get_toplevel(self):
115         return self.frame ###
116
117     #=== Output type selecting ================================================
118     def show_out_toplevel(self, btn, outtype):
119         print 'Entering <' + outtype + '> output mode...'
120
121         out_present = __import__('files.' + outtype, None, None, outtype)   ###
122         toplevel = out_present.Gtk_Presentation().get_toplevel()
123         ###self.vbox.remove(self.vbox.get_children()[2])
124         #self.vbox.add(toplevel)
125         self.vbox.pack_start(toplevel)
126
127 #     def run(self):
128 #         self.show_all()
129 #         gtk.main()