Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-02-17 18:03:07 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-02-17 18:03:07 (GMT)
commita47771ef2efc314bee74a2f2c20bd381c35dcc9d (patch)
tree6ac32ca2b623e59188573bc5f7cec544eeaf38a4
parentd02068636f591f5749937d33f8d1cb5dd8f30480 (diff)
Implement in-place renaming
-rw-r--r--view.py62
1 files changed, 61 insertions, 1 deletions
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()
+