0fc7332e015618cde693eeadd8091b414a91dfe5
[findit] / src / main.py
1 #!/usr/bin/env python
2 # -*-coding: utf-8 -*-
3 # vim: sw=4 ts=4 expandtab ai
4 # main.py --search files -o out_table -p ". 3"
5
6 import sys ###
7
8 from config import config
9 from misc import _
10
11 __progname__ = 'FindIT'
12 __version__ = '0.2.0'
13
14 #==============================================================================
15
16 class Control(object):
17     def __init__(self):
18         self.abstrac = Abstraction()
19
20         if(len(sys.argv) > 1):  ###
21             self.present = Cli_Presentation(self.abstrac)
22         else:
23             self.present = Gtk_Presentation(self.abstrac)
24
25     def run(self):
26         self.present.run()
27
28 #==============================================================================
29
30 class Abstraction(object):
31     def __init__(self):
32         self.progname = __progname__
33         self.version = __version__
34         self.authors = [    'Alex Taker\n   * Email: alteker@gmail.com\n',
35                         'Eugene Gagarin\n   * Email: mosfet07@ya.ru\n',
36                         'Alexandr Popov\n   * Email: popov2al@gmail.com' ]
37         self.comments = 'Tool for find some information on computer.'
38         self.license = \
39 'This program is free software; you can redistribute it and/or\nmodify it \
40 under the terms of the GNU General Public License\nas published by the Free \
41 Software Foundation; either version 3\nof the License, or (at your option) \
42 any later version.'
43
44 #==============================================================================
45
46 class Cli_Presentation(object):
47
48     def __init__(self, abstrac):
49         from optparse import OptionParser
50         import sys
51
52         self.abstrac = abstrac
53
54         parser = OptionParser(version=__progname__ + ' ' + __version__)
55         parser.add_option('--search', '-s', dest='search', type='string')
56         parser.add_option('--output', '-o', dest='output', type='string')
57         parser.add_option('--params', '-p', dest='params', type='string')
58         parser.add_option('--about',   action='callback', callback=self._about)
59         parser.add_option('--license', action='callback', callback=self._license)
60         (options, args) = parser.parse_args()
61
62         self.search = options.search
63
64         self.options = {}
65         self.options['outtype'] = options.output
66         self.options['ignore_dirs'] = config['files']['ignore_dirs']
67
68         self.params = options.params.split()
69         self.options['start_path'] = self.params[0]
70         self.options['count'] = self.params[1]
71         try:
72             self.options['file_filter'] = self.params[2]
73         except IndexError:
74             self.options['file_filter'] = '*.*'
75
76     def _about(self, *a):
77         print self.abstrac.comments
78         sys.exit()
79
80     def _license(self, *a):
81         print self.abstrac.license
82         sys.exit()
83
84     def show_search_toplevel(self):
85         search_module = __import__(self.search + '.search')
86         search_toplevel = search_module.search.Control('Cli', self.options).run()
87
88     def run(self):
89         self.show_search_toplevel()
90
91 #==============================================================================
92
93 class Gtk_Presentation(object):
94     """Main window class."""
95
96     def _create_menu(self):
97         """Create main menu."""
98         menubar = gtk.MenuBar()
99         fileitem = gtk.MenuItem(_('_File'))
100         viewitem = gtk.MenuItem(_('_View'))
101         helpitem = gtk.MenuItem(_('_Help'))
102         helpitem.connect('activate', self.about_dialog)
103         menubar.add(fileitem)
104         menubar.add(viewitem)
105         menubar.add(helpitem)
106         return menubar
107
108     def _create_toolbar(self):
109         """Create toolbar."""
110         toolbar = gtk.Toolbar()
111         filesearch_tbtn = gtk.RadioToolButton(None)
112         debsearch_tbtn = gtk.RadioToolButton(filesearch_tbtn)
113
114         filesearch_tbtn.set_name('files')
115         debsearch_tbtn.set_name('debs')
116
117         filesearch_tbtn.set_label(_('Files search'))
118         debsearch_tbtn.set_label(_('Debs search'))
119
120         filesearch_tbtn.connect('clicked', self.show_search_toplevel, 'files')
121         debsearch_tbtn.connect('clicked', self.show_search_toplevel, 'debs')
122
123         toolbar.insert(filesearch_tbtn, -1)
124         toolbar.insert(debsearch_tbtn, -1)
125
126         search_tbtns = [filesearch_tbtn, debsearch_tbtn]
127
128         # Activate radio tool button
129         for btn in search_tbtns:
130             if btn.get_name() == config['search']:
131                 btn.set_active(True)
132
133         return toolbar
134
135     def about_dialog(self, widget):
136         """About dialog window."""
137         dialog = gtk.AboutDialog()
138         dialog.set_name(self.abstrac.progname)
139         dialog.set_version(self.abstrac.version)
140         dialog.set_authors(self.abstrac.authors)
141         dialog.set_comments(self.abstrac.comments)
142         dialog.set_license(self.abstrac.license)
143         dialog.show_all()
144         dialog.run()
145         dialog.destroy()
146
147     def __init__(self, abstrac):
148         import gtk
149         global gtk  # for run()
150         import gobject
151         gobject.set_application_name(__progname__)
152
153         self.abstrac = abstrac
154
155         self.window = gtk.Window()
156         self.window.set_default_size(600, 400)
157         self.window.set_geometry_hints(None, 600, 400)
158         self.window.set_wmclass('MainWindow', 'FindIT')
159         self.window.connect('destroy', gtk.main_quit)
160
161         menu = self._create_menu()
162         toolbar = self._create_toolbar()
163
164         self.vbox = gtk.VBox(False, 0)
165         self.vbox.pack_start(menu, False, False, 0)
166         self.vbox.pack_start(toolbar, False, False, 0)
167         self.show_search_toplevel(None, config['search'])
168
169         self.window.add(self.vbox)
170
171     #=== Search selecting =====================================================
172     def show_search_toplevel(self, btn, searchtype):
173         search_module = __import__(searchtype + '.search')
174         search = search_module.search.Control('Gtk', None)
175         search_toplevel = search.toplevel
176         try:
177             self.vbox.remove(self.vbox.get_children()[2])
178         except:
179             pass
180         self.vbox.pack_start(search_toplevel, True, True, 0)
181         search_toplevel.show_all()
182
183     def run(self):
184         self.window.show_all()
185         gtk.main()
186
187 #==============================================================================
188
189 class Hildon_Presentation(object):
190     """Main window class."""
191
192     def __init__(self):
193         pass
194
195 #==============================================================================
196
197 if __name__ == '__main__':
198     Control().run()