From a47771ef2efc314bee74a2f2c20bd381c35dcc9d Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Tue, 17 Feb 2009 18:03:07 +0000 Subject: Implement in-place renaming --- diff --git a/view.py b/view.py index cc77142..f3305a8 100644 --- a/view.py +++ b/view.py @@ -44,7 +44,7 @@ class MindMapView(GtkView): append(NewThoughtTool()). \ append(tool.HoverTool()). \ append(ItemTool()). \ - append(tool.TextEditTool()). \ + append(TextEditTool()). \ append(tool.RubberbandTool()) if model is not None: @@ -273,3 +273,63 @@ class Connection(Line): cr.set_source_rgb(0, 0, .8) super(Connection, self).draw(context) +class TextEditTool(tool.Tool): + + def __init__(self): + super(tool.Tool, self).__init__() + self._clicked_item = None + + def on_double_click(self, context, event): + view = context.view + self._clicked_item = view.get_item_at_point((event.x, event.y)) + if not isinstance(self._clicked_item, ThoughtView): + return False + + window = gtk.Window() + window.set_parent_window(context.view.window) + window.size_allocate(gtk.gdk.Rectangle(int(event.x), int(event.y), 50, 50)) + + x, y = self._clicked_item.get_position() + origin_x, origin_y = context.view.window.get_origin() + window.move(x + origin_x, y + origin_y) + + window.connect('focus-out-event', self.__focus_out_event_cb) + window.connect('realize', self.__realize_cb) + + text_view = gtk.TextView() + + buf = text_view.get_buffer() + buf.set_text(self._clicked_item.name) + buf.select_range(buf.get_start_iter(), buf.get_end_iter()) + + text_view.connect('key-press-event', self.__key_press_event_cb) + text_view.show() + + window.add(text_view) + + window.show() + + return True + + def __realize_cb(self, widget): + widget.set_decorated(False) + widget.set_resize_mode(gtk.RESIZE_IMMEDIATE) + widget.set_modal(True) + widget.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + + def __key_press_event_cb(self, widget, event): + if event.keyval == gtk.keysyms.Return: + buf = widget.get_buffer() + self._clicked_item.name = buf.get_text(buf.get_start_iter(), + buf.get_end_iter()) + widget.get_toplevel().destroy() + return True + elif event.keyval == gtk.keysyms.Escape: + widget.get_toplevel().destroy() + return True + else: + return False + + def __focus_out_event_cb(self, widget, event): + widget.destroy() + -- cgit v0.9.1