From: Eugene Gagarin Date: Fri, 24 Apr 2009 07:23:03 +0000 (+0400) Subject: Objects updates X-Git-Url: http://git.maemo.org/git/?p=findit;a=commitdiff_plain;h=113228b87cfa29762ffba54a20dde4cd426ffd07 Objects updates --- diff --git a/src/debs/search.py b/src/debs/search.py index d56e570..e8267ee 100755 --- a/src/debs/search.py +++ b/src/debs/search.py @@ -5,62 +5,58 @@ import gtk #import apt_pkg from heapq import nlargest -from misc import size_hum_read +import gtk ### -class Search_Pkg_Control(object): +from misc import * - def __init__(self, config, show_funct): - count = config.get('default_pkg_count') - self.show_func = show_funct - self.abstr = Search_Pkg_Abstraction() - self.present = Search_Pkg_Presentation(count, self.start_search) - - def start_search(self, count, show_type): - pkglist = [] - for psize, packg in nlargest(count, self.abstr.pkggetter()): - pkglist.append([packg, size_hum_read(psize), psize]) - - if show_type is 'table_view': - from outtable import Out_Table_Control - out = Out_Table_Control() - #elif show_type is 'diag_view': - # from outdiag import Out_Diag_Control - # out = Out_Diag_Control(self.cfg) - out.show(pkglist, self.abstr.full()) - self.show_func(None, out.get_ui()) - - def get_ui(self): - return self.present.get_ui() +#============================================================================== -class Search_Pkg_Abstraction(object): +class Control(object): def __init__(self): - 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 + count = 7 + self.abstrac = Abstraction() + self.present = Gtk_Presentation(count, self.start_search) + + def start_search(self, count): + deblist = [] +# 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) + + def run(self): + return self.present.get_toplevel() + +class Abstraction(object): + pass +# def __init__(self): +# 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 #============================================================================== class Gtk_Presentation(object): - def __init__(self): + def __init__(self, count, start_func): import gtk # "Packages quantity" label - qty_label = gtk.Label('Files quantity') + qty_label = gtk.Label('Debian packages quantity') # "Packages quantity" spin qty_spin = gtk.SpinButton() @@ -119,10 +115,11 @@ class Gtk_Presentation(object): return self.frame ### #=== Output type selecting ================================================ - def show_out_toplevel(self, btn, output): - print 'Entering <' + output + '> output mode...' - from files.outtable import Gtk_Presentation ### - toplevel = Gtk_Presentation().get_toplevel() + def show_out_toplevel(self, btn, outtype): + 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) diff --git a/src/files/outtable.py b/src/files/outtable.py index da09ee0..7ff5d60 100755 --- a/src/files/outtable.py +++ b/src/files/outtable.py @@ -2,38 +2,52 @@ # -*-coding: utf-8 -*- # vim: sw=4 ts=4 expandtab ai -import gtk -import gobject +import gtk ### +import gobject ### -#============================================================================== -class OutTable_Control(object): - def __init__(self): - self.table_present = Gtk_Presentation() +#============================================================================== - def show(self, filelist, flsize): - self.table_present.show_result(filelist, flsize) +# class OutTable_Control(object): +# def __init__(self): +# self.table_present = Gtk_Presentation() +# +# def show(self, filelist, flsize): +# self.table_present.show_result(filelist, flsize) +# +# def get_ui(self): +# return self.table_present.get_toplevel() +# +# +# #============================================================================== +# +# class OutTable_Abstraction(object): +# pass - def get_ui(self): - return self.table_present.get_toplevel() #============================================================================== -class OutTable_Abstraction(object): +class Cli_Presentation(object): pass + #============================================================================== -class Gtk_Presentation(object): - def __init__(self): +class Gtk_Presentation(gtk.ScrolledWindow): + def __init__(self, filelist): ### + gtk.ScrolledWindow.__init__(self) # Определяем переменную в которой будет храниться выводимый список self.liststore = gtk.ListStore(str, str, gobject.TYPE_INT64) - self.treeview = gtk.TreeView(self.liststore) + + for path, size, bsize in filelist: + self.liststore.append([path, size, bsize]) + + treeview = gtk.TreeView(self.liststore) + # На таблетке не отображаються заголовки столбцов по умолчанию - # след строка заставляет их отображаться принудительно - self.treeview.set_headers_visible(1) - self.liststore.append(['', '', 0]) + treeview.set_headers_visible(1) # Создаем и настраиваем колонку с размером файла size_col = gtk.TreeViewColumn( 'Size') @@ -41,29 +55,26 @@ class Gtk_Presentation(object): cell1.set_property('width', 90) size_col.pack_start(cell1, True) size_col.add_attribute(cell1, 'text', 1) - self.treeview.append_column(size_col) + treeview.append_column(size_col) # Создаем и настраиваем колонку с именем файла path_col = gtk.TreeViewColumn( 'Path') cell2 = gtk.CellRendererText() path_col.pack_start(cell2, True) path_col.add_attribute(cell2, 'text', 0) - self.treeview.append_column(path_col) + treeview.append_column(path_col) # Добавляем сортировку для колонок - self.treeview.set_search_column(1) + treeview.set_search_column(1) path_col.set_sort_column_id(0) size_col.set_sort_column_id(2) - self.swin = gtk.ScrolledWindow() - self.swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.swin.add(self.treeview) - - #=== Functions ============================================================ - def show_result(self, filelist, fullsize): - self.liststore.clear() - for line in filelist: - self.liststore.append(line) + self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.add(treeview) + self.show_all() - #=== Toplevel widget for embedding to search area ========================= - def get_toplevel(self): - return self.swin +# #=== Functions ============================================================ +# def show_results(self, filelist): +# self.liststore.clear() +# for path, size, bsize in filelist: +# print path, size, bsize +# self.liststore.append([path, size, bsize]) diff --git a/src/files/search.py b/src/files/search.py index 2223540..4c7a54c 100755 --- a/src/files/search.py +++ b/src/files/search.py @@ -5,40 +5,44 @@ from os import walk from os.path import join, abspath, normcase, basename, isdir, getsize from heapq import nlargest -import gtk ### from misc import * #============================================================================== class Control(object): - - def __init__(self): + + def __init__(self, ui): ignore_dirs = ['/dev', '/proc', '/sys', '/mnt'] start_path = '.' count = 7 - self.search_abstrac = Abstraction(ignore_dirs) - self.search_present = Gtk_Presentation(start_path, count, self.start_search) + + if ui == 'cli': + self.present = Cli_Presentation(start_path, count, self.start_search) + elif ui == 'gtk': + self.present = Gtk_Presentation(start_path, count, self.start_search) + + self.abstrac = Abstraction(ignore_dirs, self.present) def start_search(self, get_data, get_stopit, label, kill_func): filelist = [] start_path, count = get_data() - search_func = self.search_abstrac.filegetter(start_path, get_stopit, label) + search_func = self.abstrac.filegetter(start_path, get_stopit, label) for fsize, fpath in nlargest(count, search_func): filelist.append([fpath, size_hum_read(fsize), int(fsize)]) - if not get_stopit(): - #kill_func() - self.search_present.show_out_toplevel(None, 'outtable', filelist) + self.present.show_out_toplevel(None, 'outtable', filelist) def run(self): - return self.search_present.get_toplevel() + return self.present.toplevel + #============================================================================== class Abstraction(object): - - def __init__(self, ignore_dirs): + + def __init__(self, ignore_dirs, presentation): self.ignore_dirs = ignore_dirs + self.presentation = presentation def filegetter(self, startdir, get_stopit, label): """Generator of file sizes and paths based on os.walk.""" @@ -55,15 +59,15 @@ class Abstraction(object): for fname in fnames: flpath = abspath(join(dirpath, fname)) - # Выводим текущий опрашиваемый файл в строку статуса - #label.set_text(flpath) - # обновляем окно - gtk.main_iteration() ### + #self.presentation.show_current_status(flpath) + self.presentation.update_window(flpath) + # Останавливаем цикл по нажатию кнопки стоп stopit = get_stopit() if stopit: stopit = False raise StopIteration + print 'Stopped' # Проверяем можем ли мы определить размер файла - иначе пропускаем его try: # Возвращаем размер и полный путь файла @@ -71,14 +75,20 @@ class Abstraction(object): except OSError: continue + #============================================================================== class Cli_Presentation(object): - def __init__(self): + def __init__(self, start_func): self.stopit = False + # get_data, get_stopit, label, kill_func) start_func(self.get_data, self.get_stopit, self.kill_wind) pass + def show_current_status(self, current_path): + print current_path + + #============================================================================== class Gtk_Presentation(object): @@ -124,20 +134,23 @@ class Gtk_Presentation(object): for btn in reversed(out_rbtns): hbox.pack_end(btn, False, False, 0) - statusbar = gtk.Statusbar() - context_id = statusbar.get_context_id('Current walked file') - statusbar.push(context_id, 'test') + self.statusbar = gtk.Statusbar() + self.context_id = self.statusbar.get_context_id('Current walked file') self.vbox = gtk.VBox(False, 4) - self.vbox.set_border_width(4) self.vbox.pack_start(self.path_entry, False, False, 0) self.vbox.pack_start(hbox, False, False, 0) - self.vbox.pack_end(statusbar, False, False, 0) + self.vbox.pack_end(self.statusbar, False, False, 0) + + self.toplevel = self.vbox -# self.show_out_toplevel(None, 'outtable') - self.frame = gtk.Frame('Files search') - self.frame.add(self.vbox) - self.frame.show_all() + # for importing gtk only once (lambda not work) + def show_current_status(current_path): + self.statusbar.push(self.context_id, current_path) + gtk.main_iteration() + self.update_window = show_current_status + +# self.show_out_toplevel(None, 'outtable', [(11, 22, 33)]) #=== Functions ============================================================ def start_btn_released(self, widget, start_func): @@ -145,6 +158,8 @@ class Gtk_Presentation(object): self.stop_btn.set_sensitive(True) self.start_btn.set_sensitive(False) start_func(self.get_data, self.get_stopit, None, None) + self.stop_btn.set_sensitive(False) + self.start_btn.set_sensitive(True) def stop_btn_clicked(self, widget): self.stopit = True @@ -157,16 +172,12 @@ class Gtk_Presentation(object): def get_stopit(self): return self.stopit - #=== Toplevel widget for embedding to main window ========================= - def get_toplevel(self): - return self.frame ### - #=== Output type selecting ================================================ 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) - print results + out_submodule = __import__('files.' + outtype, None, None, outtype) + out_toplevel = out_submodule.Gtk_Presentation(results) + +### self.vbox.remove(self.vbox.get_children()[2]) + self.vbox.add(out_toplevel) +# out_submodule.Gtk_Presentation().show_results(results) diff --git a/src/main.py b/src/main.py index c9a3485..ce3188c 100755 --- a/src/main.py +++ b/src/main.py @@ -39,8 +39,9 @@ class Cli_Presentation(object): self.show_search_toplevel(options.search, options.output, options.params) - def show_search_toplevel(self, search, output, params): - search_present = __import__(search + '.search', globals(), locals(), 'Cli_Presentation') + def show_search_toplevel(self, searchtype, output, params): + search_module = __import__(searchtype + '.search') + toplevel = search_module.search.Control('cli').run() #============================================================================== @@ -104,11 +105,9 @@ class Gtk_Presentation(object): #=== Search selecting ===================================================== def show_search_toplevel(self, btn, searchtype): print 'Entering <' + searchtype + '> search mode...' -# search_present = __import__(searchtype + '.search') -# toplevel = search_present.search.Gtk_Presentation().get_toplevel() - search_control = __import__(searchtype + '.search') - toplevel = search_control.search.Control().run() + search_module = __import__(searchtype + '.search') + toplevel = search_module.search.Control('gtk').run() try: self.vbox.remove(self.vbox.get_children()[2])