from
gi.repository
import
GObject, Gtk, Eog, Gio, GLib
import
os
class
RenameDlgAppActivatable(GObject.Object, Eog.ApplicationActivatable):
app
=
GObject.
property
(
type
=
Eog.Application)
def
__init__(
self
):
GObject.Object.__init__(
self
)
def
do_activate(
self
):
self
.app.add_accelerator(
"F2"
,
"win.rename"
,
None
)
def
do_deactivate(
self
):
self
.app.remove_accelerator(
"win.rename"
,
None
)
class
RenameDlgPlugin(GObject.Object, Eog.WindowActivatable):
__gtype_name__
=
"Rename"
window
=
GObject.
property
(
type
=
Eog.Window)
def
__init__(
self
):
GObject.Object.__init__(
self
)
def
do_activate(
self
):
self
.action
=
Gio.SimpleAction.new(
"rename"
,
None
)
self
.action.connect(
'activate'
,
self
.on_rename)
self
.window.add_action(
self
.action)
def
do_deactivate(
self
):
self
.window.remove_action(
"rename"
)
def
do_update_state(
self
):
self
.action.set_enabled(
True
)
pass
def
on_rename(
self
, action, data
=
None
):
img
=
self
.window.get_image()
if
img
=
=
None
:
return
fullname
=
img.get_uri_for_display()[
7
:]
path, name
=
os.path.split(fullname)
label
=
Gtk.Label(name)
entry
=
Gtk.Entry()
entry.set_text(name)
d
=
Gtk.Dialog(
"Rename"
,
self
.window,
Gtk.DialogFlags.MODAL,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT,
Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT) )
vbox
=
d.get_content_area()
try
:
vbox.pack_start(label,
False
,
False
,
0
)
vbox.pack_start(entry,
False
,
False
,
0
)
d.show_all()
def
dlg_ok(
self
):
d.response(Gtk.ResponseType.ACCEPT)
def
on_focus_in(
self
, widget):
try
:
s
=
entry.get_text()
displayname
=
GLib.filename_display_name(s)
i
=
displayname.rindex(
"."
)
entry.select_region(
0
, i)
except
ValueError:
pass
def
on_focus_out(
self
, widget):
entry.select_region(
0
,
0
)
entry.connect(
"activate"
, dlg_ok)
entry.connect(
"focus-in-event"
, on_focus_in)
entry.connect(
"focus-out-event"
, on_focus_out)
while
1
:
if
d.run()
=
=
Gtk.ResponseType.ACCEPT:
text
=
entry.get_text()
if
text
=
=
"":
self
.messagebox(
"File name is empty"
)
entry.set_text(name)
elif
text
=
=
name:
self
.messagebox(
"Have not changed"
)
elif
text
in
os.listdir(path):
self
.messagebox(
"Found the same file name"
)
else
:
store
=
self
.window.get_store()
newname
=
os.path.join(path, text)
os.rename(fullname, newname)
while
Gtk.events_pending():
Gtk.main_iteration()
f
=
Gio.file_new_for_path(newname)
newimg
=
Eog.Image.new_file(f)
store.append_image(newimg)
tv
=
self
.window.get_thumb_view()
tv.set_current_image(newimg,
True
)
while
Gtk.events_pending():
Gtk.main_iteration()
store.remove_image(img)
break
else
:
break
finally
:
d.destroy()
def
messagebox(
self
, text):
dlg
=
Gtk.MessageDialog(
self
.window,
Gtk.DialogFlags.MODAL,
Gtk.MessageType.WARNING,
Gtk.ButtonsType.OK,
text)
dlg.set_title(
"Eye of GNOME"
)
r
=
dlg.run()
dlg.destroy()
return
r