b9af3638a1e62e6f5b3c7aa355c5d4ba531c52e2
[findit] / src / files / out_table.py
1 #!/usr/bin/env python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4
5 from os.path import abspath
6
7 from misc import _
8
9 #==============================================================================
10
11 class Cli_Presentation(object):
12     def __init__(self, filelist):   ###
13         self.toplevel = self.print_results(filelist)
14
15     def print_results(self, filelist):
16         for bsize, path, size in filelist:
17             print '%10d' % bsize, path
18
19 #==============================================================================
20
21 class Gtk_Presentation(object):
22     def __init__(self, results):   ###
23         import gtk
24         import gobject
25
26         self.filelist, self.start_path = results
27
28         #====================
29         # Treeview
30         #====================
31
32         # Store results
33         self.liststore = gtk.ListStore(str, str, gobject.TYPE_INT64)
34         self._show_relpaths(None)
35
36         treeview = gtk.TreeView(self.liststore)
37
38         # 'Size' column
39         size_col = gtk.TreeViewColumn(_('Size'))
40         cell1 = gtk.CellRendererText()
41         cell1.set_property('width', 90)
42         size_col.pack_start(cell1, True)
43         size_col.add_attribute(cell1, 'text', 1)
44         treeview.append_column(size_col)
45
46         # 'Path' column
47         path_col = gtk.TreeViewColumn(_('Path'))
48         cell2 = gtk.CellRendererText()
49         path_col.pack_start(cell2, True)
50         #path_col.add_attribute(cell2, 'text', 0)
51         path_col.add_attribute(cell2, 'markup', 0)
52         treeview.append_column(path_col)
53
54         # Column sorting
55         treeview.set_search_column(1)
56         path_col.set_sort_column_id(0)
57         size_col.set_sort_column_id(2)
58
59         # Add treeview to scrolled window
60         swin = gtk.ScrolledWindow()
61         swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
62         swin.add(treeview)
63
64         #====================
65         # Toolbar
66         #====================
67
68         toolbar = gtk.Toolbar()
69
70         relpaths_tbtn = gtk.RadioToolButton(None)
71         abspaths_tbtn = gtk.RadioToolButton(relpaths_tbtn)
72
73         relpaths_tbtn.set_label(_('Relative paths'))
74         abspaths_tbtn.set_label(_('Absolute paths'))
75
76         relpaths_tbtn.connect('clicked', self._show_relpaths)
77         abspaths_tbtn.connect('clicked', self._show_abspaths)
78
79         saveresults_tbtn = gtk.ToolButton()
80         saveresults_tbtn.set_label(_('Save results'))
81         saveresults_tbtn.connect('clicked', self.save_results)
82
83         toolbar.insert(relpaths_tbtn, -1)
84         toolbar.insert(abspaths_tbtn, -1)
85         toolbar.insert(saveresults_tbtn, -1)
86
87         #====================
88         # Others
89         #====================
90
91         vbox = gtk.VBox(False, 4)
92         vbox.pack_start(swin, True, True, 0)
93         vbox.pack_start(toolbar, False, False, 0)
94
95         self.toplevel = vbox
96
97     #=== Functions ============================================================
98
99     def _show_relpaths(self, btn):
100         self.liststore.clear()
101         for bsize, path, size in self.filelist:
102             self.liststore.append([path.replace(self.start_path,'', 1),
103                                    size, bsize])
104
105     def _show_abspaths(self, btn):
106         self.liststore.clear()
107         for bsize, path, size in self.filelist:
108             #self.liststore.append([abspath(path), size, bsize])
109             # Mark absolute part of path with color 
110             self.liststore.append([
111                 '<span background="lawngreen">' + abspath(self.start_path) + '</span>' +
112                 path.replace(self.start_path,'', 1),
113                 size, bsize])
114
115     def save_results(self, btn):
116         outfile = open('results', 'w')
117         for bsize, path, size in self.filelist:
118             outfile.write(`bsize` + '\t' + abspath(path) + '\n')
119         outfile.close()
120
121 #==============================================================================
122
123 class Hildon_Presentation(object):
124     def __init__(self, filelist):   ###
125         import gtk
126         import gobject
127         import hildon
128
129         # На таблетке не отображаються заголовки столбцов по умолчанию -
130         # след строка заставляет их отображаться принудительно
131         treeview.set_headers_visible(1)