e7d33cc10bf4c954ee9b726765d5b26d50347c43
[findit] / src / gtk_ui.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 """findIT: Gui prorgram to find various information.
7    At the moment it only finds largest files
8 """
9
10 import gtk
11 import gobject
12 import gettext
13
14 try:
15     LANGRU = gettext.translation('findit')
16     LANGRU.install()
17 except IOError:
18     def _(text):
19         return text
20
21 ### Main window ################################################################
22
23 class GtkWindow(gtk.Window):
24     """Main window class."""
25
26         ### Window initialization ##################################################
27
28     def __init__(self, win_width, win_height, st_path):
29         """Create MainWindow."""
30         # Создаем новое окно
31         gtk.Window.__init__(self)
32         self.set_default_size(win_width, win_height)
33         self.set_border_width(4)
34         self.fullscreen = False
35         self.connect('delete_event', gtk.main_quit)
36         self.set_wmclass('GtkWindow', 'FindIT')
37
38         #########  Добавляем элементы ################
39         # 1. Строка ввода каталога с которого начинать поиск
40         #    переменная в которой храниться стартовый каталог = self.start_path
41         self.srch_p_entr = gtk.Entry()
42         self.start_path = st_path
43         self.srch_p_entr.set_text(self.start_path)
44         # Нажатие Enter в поле ввода
45         self.srch_p_entr.connect("activate", self.start_print)
46
47         # 2. Кнопка "Обзор"
48
49         # 3. Надпись1 "Количество отображаемых файлов:"
50         label1 = gtk.Label( _('Files quantity') )
51
52         # 4. Окошко ввода количества файлов, мин значение=1 макс=65536 по умолчанию 10
53         #    данные храняться в переменной self.fl_cnt
54         self.fl_cnt = 10
55         adj = gtk.Adjustment(self.fl_cnt, 1, 65536, 1, 5, 0)
56         self.file_cnt = gtk.SpinButton(adj, 0, 0)
57
58         # 5.1 Кнопка "Показать"
59         self.butt_start = gtk.Button( _('Go') )
60         self.butt_start.connect('released', self.start_print)
61
62         # 5.2 Кнопка "Остановить"
63         self.butt_stop = gtk.Button( _('Stop') )
64         self.butt_stop.set_sensitive(False)
65         self.butt_stop.connect('clicked', self.stop_print)
66         self.stopit = False
67
68         # 5.3 Кнопка "Свойства файла"
69
70         # 6. Закладки
71
72         # 6.1 Список файлов
73         scrollwind = gtk.ScrolledWindow()
74         scrollwind.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
75
76         # Определяем переменную в которой будет храниться выводимый список
77         self.treestore = gtk.TreeStore(str, str, int)
78         self.treeview = gtk.TreeView(self.treestore)
79         # На таблетке не отображаються заголовки столбцов по умолчанию -
80         # след строка заставляет их отображаться принудительно
81         self.treeview.set_headers_visible(1)
82
83         self.treestore.append(None, ['', '', 0])
84
85         # Создаем и настраиваем колонку с размером файла
86         size_col = gtk.TreeViewColumn( _('Size') )
87         cell = gtk.CellRendererText()
88         cell.set_property('width', 90)
89         size_col.pack_start(cell, True)
90         size_col.add_attribute(cell, 'text', 1)
91         self.treeview.append_column(size_col)
92         # Создаем и настраиваем колонку с именем файла
93         path_col = gtk.TreeViewColumn( _('Path') )
94         cell2 = gtk.CellRendererText()
95         path_col.pack_start(cell2, True)
96         path_col.add_attribute(cell2, 'text', 0)
97         self.treeview.append_column(path_col)
98
99         # Добавляем сортировку для колонок
100         self.treeview.set_search_column(1)
101         path_col.set_sort_column_id(0)
102         size_col.set_sort_column_id(2)
103
104         # 6.2 Надпись "Найти"
105
106         # 6.3 Строка выводящая текущий осматриваемый файл
107
108         #########  Упаковываем элементы ################
109         # Создаем основной вертикальный контейнер
110         main_vbox = gtk.VBox(False, 4)
111
112         # Создаем вспомогательный горизонтальный контейнер для Надписи1,
113         # окошка ввода количества файлов и кнопки "Показать"
114         hbox1 = gtk.HBox(False, 5)
115         # Добавляем вышеперечисленные элементы во вспомогат. контейнер
116         hbox1.pack_start(label1, False, False, 5)
117         hbox1.pack_start(self.file_cnt, False, False, 0)
118         hbox1.pack_start(self.butt_start, True, True, 0)
119         hbox1.pack_start(self.butt_stop, True, True, 0)
120
121         # Добавляем элементы в основной контейнер
122         main_vbox.pack_start(self.srch_p_entr, False, False, 0)
123         main_vbox.pack_start(hbox1, False, False, 0)
124         scrollwind.add(self.treeview)
125         main_vbox.pack_start(scrollwind, True, True, 0)
126
127         self.add(main_vbox)
128
129     def run(self):
130         """Show all widgets and run gtk.main()."""
131         self.show_all()
132         gtk.main()
133     
134     # Окно сообщения заданного типа с заданным текстом
135     def mess_window(self, mestype, content):
136         """Show popup message window."""
137         dialog = gtk.MessageDialog(parent=self, flags=gtk.DIALOG_MODAL,
138                                    type=mestype, buttons=gtk.BUTTONS_OK,
139                                    message_format=content)
140         dialog.set_wmclass('ErrorDialog', 'FindIT')
141         dialog.set_title( _('Error!') )
142         dialog.run()
143         dialog.destroy()
144
145     # Функция выполняющаяся при нажатии на кнопку "Показать"
146     def start_print(self, widget):
147         """Start file search. Button "Go" activate callback."""         
148     
149     # Функция выполняющаяся при нажатии на кнопку "Стоп"
150     def stop_print(self, widget):
151         """Stop search. "Stop" button clicked callback."""
152         self.stopit = True
153
154 ### Main call ##################################################################
155 def main():
156     """Main function."""
157     gobject.set_application_name( _('FindIT') )
158
159     startpath = '/home/'
160
161     GtkWindow(575, 345, startpath).run()
162
163 if __name__ == '__main__':
164     main()