moved size_convert function and about dialog outside MVC scope
[findit] / src / mvc / controllers / debsearch.py
1 #!/usr/bin/env python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4 # pylint: disable-msg=C0301
5
6 from gtkmvc import Controller
7 import gtk
8
9 import apt_pkg
10 from heapq import nlargest
11
12 from views.debsearch import DebsearchView
13 from misc.functions import *
14
15
16 class DebsearchCtrl(Controller):
17     """Controller of the Debian packages search plugin"""
18
19     def __init__(self, model):
20         Controller.__init__(self, model)
21
22     def register_view(self, view):
23         Controller.register_view(self, view)
24
25         # connects the signals:
26         self.view['start_btn'].connect('released', self.start_btn_released_cb)
27         self.view['stop_btn'].connect('clicked', self.on_stop_btn_clicked)
28         self.view['qty_spin'].connect("value_changed", self.on_qty_spin_value_changed)
29
30         # sets initial values for the view
31         self.view.set_quantity_value(self.model.quantity)
32
33     # -----------------------------------------------------
34     #                  user callbacks
35     # -----------------------------------------------------
36
37     def debgetter(self):
38         apt_pkg.InitConfig()
39         apt_pkg.InitSystem()
40         cache = apt_pkg.GetCache()
41         for pkg in cache.Packages:
42             # pkg is from a list of packages, sorted by name.
43             self.view['statusbar'].push(self.view['context_id'], pkg.Name)  ### FIXME
44             if pkg.CurrentState == apt_pkg.CurStateInstalled:
45                 pkgsize = [version.InstalledSize for version in pkg.VersionList][0]
46                 yield pkgsize, pkg.Name
47
48     # -----------------------------------------------------
49     #                    gtk signals
50     # -----------------------------------------------------
51
52     def on_qty_spin_value_changed(self, sb):
53         """Get packages qty from SpinButton."""
54         self.model.quantity = sb.get_value_as_int()
55
56     def start_btn_released_cb(self, btn):
57         """Start package search. Button "Go" activate callback."""         
58
59         self.view['start_btn'].set_sensitive(False)
60         self.view['stop_btn'].set_sensitive(True)
61
62         # Clear list
63         self.view['liststore'].clear()
64
65         # Align columns
66         self.view['treeview'].columns_autosize()
67
68         # Get biggest packages
69         for psize, packg in nlargest(self.model.quantity, self.debgetter()):
70             # Fill treemodel: package name, size as string, byte size
71             self.view['liststore'].append([packg, size_convert(psize), psize])
72
73         self.view['start_btn'].set_sensitive(True)
74         self.view['stop_btn'].set_sensitive(False)
75
76     def on_stop_btn_clicked(self, btn):
77         """Stop search. "Stop" button clicked callback."""
78         print 'Stop clicked'
79         self.model.stopit = True
80
81     # -----------------------------------------------------
82     #                observable properties
83     # -----------------------------------------------------
84
85     def property_quantity_value_change(self, model, old, new):
86         pass
87         #self.view.set_quantity_value(new)
88
89     def property_stopit_value_change(self, model, old, new):
90         self.view.set_stopit_value(new)