From ddb4baffde81111ac725cd6e0430326826b73496 Mon Sep 17 00:00:00 2001
From: Eben Eliason <[EMAIL PROTECTED]>
Date: Tue, 15 Apr 2008 21:43:42 -0400
Subject: [PATCH] Add support for inline renaming of journal entries.

This provides support for renaming Journal entries
directly within the list view, by clicking on the
title field.
---
 collapsedentry.py |   69 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 56 insertions(+), 13 deletions(-)

diff --git a/collapsedentry.py b/collapsedentry.py
index 6ea5b0d..22db243 100644
--- a/collapsedentry.py
+++ b/collapsedentry.py
@@ -28,6 +28,7 @@ from sugar.graphics.xocolor import XoColor
 from sugar.graphics import style
 from sugar.datastore import datastore
 from sugar.graphics.roundbox import CanvasRoundBox
+from sugar.graphics.entry import CanvasEntry
 
 from keepicon import KeepIcon
 import misc
@@ -78,21 +79,23 @@ class CollapsedEntry(hippo.CanvasBox):
         self._allow_resume = allow_resume
         self._is_selected = False
 
-        #self._frame = CanvasRoundBox()
-        #self._frame = hippo.CanvasBox(background_color=style.COLOR_WHITE.get_int(),
-        #                              orientation=hippo.ORIENTATION_HORIZONTAL)
-        #self._frame.connect_after('button-release-event', self._frame_button_release_event_cb)
-        #self.append(self._frame, hippo.PACK_EXPAND)
-
-        #self.connect_after('button-release-event', self._frame_button_release_event_cb)
-
         self._keep_icon = self._create_keep_icon()
         self.append(self._keep_icon)
 
         self._icon = self._create_icon()
         self.append(self._icon)
 
+        self._title_entry = self._create_title_entry()
+        self._title_entry.props.widget.connect('focus-out-event',
+                                           self._title_entry_focus_out_event_cb)
+        self._title_entry.connect('key-press-event',
+                                   self._title_entry_key_press_event_cb)
+        self.append(self._title_entry, hippo.PACK_EXPAND)
+        self._title_entry.set_visible(False)
+
         self._title = self._create_title()
+        self._title.connect('button_release_event',
+                            self._title_button_release_event_cb)
         self.append(self._title, hippo.PACK_EXPAND)
 
         self._buddies_list = self._create_buddies_list()
@@ -101,11 +104,6 @@ class CollapsedEntry(hippo.CanvasBox):
         self._date = self._create_date()
         self.append(self._date)
 
-        #self._resume_button = self._create_resume_button()
-        #self.append(self._resume_button)
-        #if not self._allow_resume:
-        #    self.set_child_visible(self._resume_button, False)
-
         self._detail_button = self._create_detail_button()
         self.append(self._detail_button)
         if not self._allow_resume:
@@ -148,6 +146,11 @@ class CollapsedEntry(hippo.CanvasBox):
                                  size_mode=hippo.CANVAS_SIZE_ELLIPSIZE_END)
         return title
 
+    def _create_title_entry(self):
+        title = CanvasEntry()
+        title.set_background(style.COLOR_WHITE.get_html())
+        return title
+
     def _create_buddies_list(self):
         return BuddyList([], self._BUDDIES_COL_WIDTH)
 
@@ -239,6 +242,44 @@ class CollapsedEntry(hippo.CanvasBox):
         self._jobject.resume()
         return True
 
+    def _title_button_release_event_cb(self, button, event):
+        self._title.set_visible(False)
+        self._title_entry.set_visible(True)
+        self._title_entry.props.widget.grab_focus()
+
+    def _title_entry_focus_out_event_cb(self, entry, event):
+        self._set_title(entry.props.text)
+        self._title_entry.set_visible(False)
+        self._title.set_visible(True)
+
+    def _title_entry_key_press_event_cb(self, entry, event):
+        if event.key == hippo.KEY_RETURN:
+            self._set_title(entry.props.text)
+            self._title_entry.set_visible(False)
+            self._title.set_visible(True)
+        elif event.key == hippo.KEY_ESCAPE:
+            entry.props.text = self._title.props.text
+            self._title_entry.set_visible(False)
+            self._title.set_visible(True)
+
+    def _set_title(self, title):
+        if title == '':
+            self._title_entry.props.text = self._title.props.text
+        elif self._title.props.text != title:
+            self._title.props.text = title
+            self._jobject.metadata['title'] = title
+            self._jobject.metadata['title_set_by_user'] = '1'
+            datastore.write(self._jobject, update_mtime=False,
+                            reply_handler=self._datastore_write_cb,
+                            error_handler=self._datastore_write_error_cb)
+
+    def _datastore_write_cb(self):
+        pass
+
+    def _datastore_write_error_cb(self):
+        logging.error('CollapsedEntry._datastore_write_error_cb: %r' % error)
+
+
     def _detail_button_release_event_cb(self, button, event):
         logging.debug('_detail_button_release_event_cb')
         if not self._is_in_progress():
@@ -272,6 +313,7 @@ class CollapsedEntry(hippo.CanvasBox):
             self._icon.props.fill_color=style.COLOR_TRANSPARENT.get_svg()
             self._icon.props.stroke_color=style.COLOR_BLACK.get_svg()
             self._title.props.text = self._format_title() + _(' Activity')
+            self._title_entry.props.text = self._format_title() + _(' Activity')
         else:    
             if jobject.metadata.has_key('icon-color') and \
                    jobject.metadata['icon-color']:
@@ -280,6 +322,7 @@ class CollapsedEntry(hippo.CanvasBox):
             else:
                 self._icon.props.xo_color = None        
             self._title.props.text = self._format_title()
+            self._title_entry.props.text = self._format_title()
 
         self._buddies_list.set_model(self._decode_buddies())
 
-- 
1.5.3.3

_______________________________________________
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar

Reply via email to