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