First working PAC version
[findit] / src / debs / search.py
index 8a39835..8b6d746 100755 (executable)
@@ -2,8 +2,7 @@
 # -*-coding: utf-8 -*-
 # vim: sw=4 ts=4 expandtab ai
 
-import gtk
-#import apt_pkg
+import apt_pkg
 from heapq import nlargest
 
 from misc import *
@@ -13,7 +12,7 @@ from misc import *
 class Control(object):
 
     def __init__(self, ui):
-        count = 7
+        count = 12
 
         print ui
         if ui == 'cli':
@@ -24,11 +23,12 @@ class Control(object):
         self.abstrac = Abstraction(self.present)
 
     def start_search(self, get_data):
-        deblist = [0, 0]
-#         for size, name in nlargest(count, self.abstrac.pkggetter()):
-#             deblist.append([name, size_hum_read(psize), size])
-        
-        self.search_present.show_out_toplevel(None, 'outtable', deblist)
+        deblist = []
+        count, outtype = get_data()
+        search_func = self.abstrac.pkggetter()
+        for size, name in nlargest(count, search_func):
+            deblist.append([int(size), name, size_hum_read(size)])
+        self.present.show_out_toplevel(None, outtype, deblist)
 
     def run(self):
         return self.present.toplevel
@@ -38,21 +38,21 @@ class Control(object):
 class Abstraction(object):
     def __init__(self, presentation):
         self.presentation = presentation
-#         apt_pkg.InitConfig()
-#         apt_pkg.InitSystem()
-#         self.cache = apt_pkg.GetCache()
-# 
-#     def pkggetter(self):
-#         self.fullsize = 0
-#         for pkg in self.cache.Packages:
-#             # pkg is from a list of packages, sorted by name.
-#             if pkg.CurrentState == apt_pkg.CurStateInstalled:
-#                 pkgsize = [version.InstalledSize for version in pkg.VersionList][0]
-#                 self.fullsize = self.fullsize + pkgsize
-#                 yield pkgsize, pkg.Name
-# 
-#     def full(self):
-#         return self.fullsize
+        apt_pkg.InitConfig()
+        apt_pkg.InitSystem()
+        self.cache = apt_pkg.GetCache()
+
+    def pkggetter(self):
+        self.fullsize = 0
+        for pkg in self.cache.Packages:
+            # pkg is from a list of packages, sorted by name.
+            if pkg.CurrentState == apt_pkg.CurStateInstalled:
+                pkgsize = [version.InstalledSize for version in pkg.VersionList][0]
+                self.fullsize = self.fullsize + pkgsize
+                yield pkgsize, pkg.Name
+
+    def full(self):
+        return self.fullsize
 
 
 #==============================================================================
@@ -78,24 +78,28 @@ class Gtk_Presentation(object):
         qty_label = gtk.Label('Debian packages quantity')
 
         # "Packages quantity" spin
-        qty_spin = gtk.SpinButton()
-        qty_spin.set_numeric(True)
-        qty_spin.set_range(0, 65536)
-        qty_spin.set_increments(1, 10)
+        self.qty_spin = gtk.SpinButton()
+        self.qty_spin.set_numeric(True)
+        self.qty_spin.set_range(0, 65536)
+        self.qty_spin.set_increments(1, 10)
+        self.qty_spin.set_value(count)
 
         # "Start" button
         start_btn = gtk.Button('Start')
-        start_btn.connect('released', self.start_btn_released)
+        start_btn.connect('released', self.start_btn_released, start_func)
 
         # Output selection
-        outtable_rbtn = gtk.RadioButton(None, 'Table')
-        outdiagram_rbtn = gtk.RadioButton(outtable_rbtn, 'Diagram')
-        out1_rbtn = gtk.RadioButton(outtable_rbtn, 'Another 1')
-        out_rbtns = [outtable_rbtn, outdiagram_rbtn, out1_rbtn]
+        self.outtable_rbtn = gtk.RadioButton(None, 'Table')
+        self.outtable_rbtn.set_name('outtable')
+        outdiagram_rbtn = gtk.RadioButton(self.outtable_rbtn, 'Diagram')
+        outdiagram_rbtn.set_name('outdiagram')
+        out1_rbtn = gtk.RadioButton(self.outtable_rbtn, 'Another 1')
+        out1_rbtn.set_name('outanother1')
+        out_rbtns = [self.outtable_rbtn, outdiagram_rbtn, out1_rbtn]
 
         hbox = gtk.HBox(False, 4)
         hbox.pack_start(qty_label, False, False, 0)
-        hbox.pack_start(qty_spin, False, False, 0)
+        hbox.pack_start(self.qty_spin, False, False, 0)
         hbox.pack_start(start_btn, False, False, 0)
         for btn in reversed(out_rbtns):
             hbox.pack_end(btn, False, False, 0)
@@ -117,23 +121,26 @@ class Gtk_Presentation(object):
     #=== Functions ============================================================
     def start_btn_released(self, btn, start_func):
         self.stopit = False
-        self.butt_stop.set_sensitive(True)
-        self.butt_start.set_sensitive(False)
-        start_func(self.get_data, self.get_stopit, self.currfilelbl, self.kill_wind)
+        start_func(self.get_data)
 
     def get_data(self):
-        return int(self.qty_spin.get_value())
+        for btn in self.outtable_rbtn.get_group():
+            if btn.get_active():
+                out = btn.get_name()
+        return int(self.qty_spin.get_value()), out
 
     #=== Output type selecting ================================================
-    def show_out_toplevel(self, btn, outtype):
+    def show_out_toplevel(self, btn, outtype, results):
         print 'Entering <' + outtype + '> output mode...'
-
-        out_present = __import__('files.' + outtype, None, None, outtype)   ###
-        toplevel = out_present.Gtk_Presentation().get_toplevel()
-        ###self.vbox.remove(self.vbox.get_children()[2])
-        #self.vbox.add(toplevel)
-        self.vbox.pack_start(toplevel)
-
-#     def run(self):
-#         self.show_all()
-#         gtk.main()
+        out_submodule = __import__('debs.' + outtype, None, None, outtype)
+
+        try:
+            self.current_outtoplevel.destroy()
+        except:
+            pass
+
+        out_toplevel = out_submodule.Gtk_Presentation(results).toplevel
+        self.current_outtoplevel = out_toplevel
+        self.vbox.add(out_toplevel)
+        out_toplevel.show_all()
+#        out_submodule.Gtk_Presentation().show_results(results)