now all errors are given with a messagedialog, instead of a terminal print
[gtkrename.git] / gui.py
blob7a42dc19639a5387238747f910fc18c154b169d7
1 # gtkrename - a simple file renamer
2 # Copyright (C) 2008, Kristian Rumberg (kristianrumberg@gmail.com)
4 # Permission to use, copy, modify, and/or distribute this software for any
5 # purpose with or without fee is hereby granted, provided that the above
6 # copyright notice and this permission notice appear in all copies.
8 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 import sys
17 import gtk
18 import gobject
19 import gtk.glade
21 def fatal_error(msg):
22 dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,gtk.MESSAGE_ERROR, gtk.BUTTONS_OK)
23 dialog.set_markup(msg)
24 dialog.run()
25 dialog.destroy()
26 sys.exit(-1)
28 class MainWindow:
29 def _init_textview(self, view):
30 view.set_model(gtk.TreeStore(gobject.TYPE_STRING))
31 r = gtk.CellRendererText()
32 p_column = gtk.TreeViewColumn("", r)
33 p_column.add_attribute(r,"text",0)
34 view.insert_column(p_column,0)
35 view.set_rules_hint(True)
37 def _update_textview_filelist(self, view, filelist):
38 model = view.get_model()
39 model.clear()
40 for f in filelist:
41 model.append(None, [f.get_filename()])
42 view.expand_all()
44 def _update_replaced_files_view_and_apply_button(self):
45 self.out_filelist = self.in_filelist.sed( self.match_entry.get_text(), self.replace_entry.get_text() )
46 self._update_textview_filelist(self.replaced_files_view, self.out_filelist)
48 self.apply_button.set_sensitive( self.in_filelist.mv(self.out_filelist, True) )
50 def _update_all(self):
51 self.in_filelist = self.orig_filelist.grep( self.match_entry.get_text() )
53 self._update_textview_filelist(self.matched_files_view, self.in_filelist)
54 self._update_replaced_files_view_and_apply_button()
56 def match_entry_changed(self, data):
57 self._update_all()
59 def replace_entry_changed(self, data):
60 self._update_replaced_files_view_and_apply_button()
62 def apply_button_clicked(self, data):
63 self.in_filelist.mv(self.out_filelist, False)
64 dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,gtk.MESSAGE_INFO, gtk.BUTTONS_OK)
65 dialog.set_markup("Renaming finished :)")
66 dialog.run()
67 dialog.destroy()
68 gtk.main_quit()
70 def __init__(self, orig_filelist):
71 self.orig_filelist = orig_filelist
72 self.in_filelist = None
73 self.out_filelist = None
75 self.widgets = gtk.glade.XML("mainwindow.glade")
76 self.window = self.widgets.get_widget("mainwindow")
78 self.window.connect("delete-event", gtk.main_quit)
79 self.window.show_all()
81 self.match_entry = self.widgets.get_widget("match_entry")
82 self.replace_entry = self.widgets.get_widget("replace_entry")
83 self.matched_files_view = self.widgets.get_widget("matched_files_view")
84 self.replaced_files_view = self.widgets.get_widget("replaced_files_view")
85 self.cancel_button = self.widgets.get_widget("cancel_button")
86 self.apply_button = self.widgets.get_widget("apply_button")
88 self._init_textview(self.matched_files_view)
89 self._init_textview(self.replaced_files_view)
91 self._update_all()
93 self.match_entry.connect("changed", self.match_entry_changed)
94 self.replace_entry.connect("changed", self.replace_entry_changed)
95 self.cancel_button.connect("clicked", gtk.main_quit)
96 self.apply_button.connect("clicked", self.apply_button_clicked)
98 gtk.main()