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.
22 dialog
= gtk
.MessageDialog(None, gtk
.DIALOG_MODAL | gtk
.DIALOG_DESTROY_WITH_PARENT
,gtk
.MESSAGE_ERROR
, gtk
.BUTTONS_OK
)
23 dialog
.set_markup(msg
)
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()
41 model
.append(None, [f
.get_filename()])
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
):
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 :)")
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
)
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
)