On Mon, Apr 21, 2008 at 10:01 AM, Tomeu Vizoso <[EMAIL PROTECTED]> wrote:
> On Sat, Apr 19, 2008 at 8:11 PM, Eben Eliason <[EMAIL PROTECTED]> wrote:
> > On Sat, Apr 19, 2008 at 6:41 AM, Tomeu Vizoso <[EMAIL PROTECTED]> wrote:
> > > On Wed, Apr 16, 2008 at 6:30 PM, Eben Eliason <[EMAIL PROTECTED]> wrote:
> > > > The former patch cut some comments that should have been cut (and now
> > > > have been) in the initial visual patch. This eliminates those parts
> > > > of the patch.
> > >
> > > + self._title_entry.props.widget.connect('focus-out-event',
> > > +
> > > self._title_entry_focus_out_event_cb)
> > >
> > > I'd indent the second line just two additional tabs to the right.
> >
> > I started there. The problem is that it's currently tabbed over as
> > far as it can go before breaking the 80 char boundary. Which style
> > convention should we break?
>
> Sorry, I explained badly. I meant this:
>
>
> self._title_entry.props.widget.connect('focus-out-event',
> self._title_entry_focus_out_event_cb)
>
> If you cannot make the indentation beautiful, then fall back to the
> simplest rule: two extra tabs (one may be confusing because of code
> blocks).
Done.
> > > + 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)
> > >
> > > I wonder if hardcoding the return and escape keys are really needed,
> > > or if gtk has a better way of doing this.
> >
> > Hmm, I'm not sure. I'll happily change this if someone has a better way.
>
> I think we want to apply the changes when the 'activate' and
> 'focus-out' signals are called. About when to undo the changes, seems
> like we need to listen for the escape key as you are doing.
I connected to the activate signal on the widget, as suggested.
>
> > > + self._title_entry.set_visible(False)
> > > + self._title.set_visible(True)
> > >
> > > These two lines are repeated after every time we end editing the
> > > title, can this duplication be removed?
> >
> > Sure. Any thoughts on an appropriate function name?
> > _restore_title_label, _title_edit_completed ?
>
> Can it be merged somehow inside _set_title()? And perhaps this method
> should be called instead _apply_title_change()?
Done.
>
> > > + def _set_title(self, title):
> > > + if title == '':
> > > + self._title_entry.props.text = self._title.props.text
> > >
> > > I guess that you don't want to let the user remove completely the
> > > title of an entry, can we make it more explicit?
> >
> > Indeed, that's the idea. Do you mean I should add a comment to this
> > effect above the conditional, or is there a way the code could read
> > more clearly itself?
>
> Hopefully the later. You are not doing anything specially complicated,
> so I would prefer if we could avoid the extra comment by making the
> intentions of the code more explicit.
There is now an _apply_title_change and a _cancel_title_change. The
condition in question simply calls cancel_title_change to clearly
indicate what's happening.
>
> > > self._title.props.text = self._format_title() + _('
> Activity')
> > > + self._title_entry.props.text = self._format_title() + _('
> > > Activity')
> > >
> > > We have a big problem here: https://dev.laptop.org/ticket/6875 .
> > > "Activity" should be a formatting thing, shouldn't get into the
> > > datastore.
> >
> > Yes, I noticed this problem while making this patch. I'm happy to see
> > there is already a ticket, as it was on my list to enter one for it
> > anyway. I think I'd actually recommend cutting the title formatting
> > completely, and simply depending upon the unique visual treatment to
> > identify the bundle for now. I'll think about it, and perhaps provide
> > a separate patch for it. Do you think it should go in along with this
> > patch?
>
> I think it could got in this patch if it's better for you, but
> attaching a more focused patch to the ticket may be better process.
I ignored this problem for this patch. I'll create a new patch to
clean this up.
Thanks!
- Eben
From 8773d5b4149e804a3a7808062c0a85d9a8513975 Mon Sep 17 00:00:00 2001
From: Eben Eliason <[EMAIL PROTECTED]>
Date: Sat, 19 Apr 2008 05:14:31 -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 | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/collapsedentry.py b/collapsedentry.py
index 5fe36d5..4b5efdf 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
@@ -84,6 +85,10 @@ class CollapsedEntry(hippo.CanvasBox):
self._icon = self._create_icon()
self.append(self._icon)
+ self._title_entry = self._create_title_entry()
+ self.append(self._title_entry, hippo.PACK_EXPAND)
+ self._title_entry.set_visible(False)
+
self._title = self._create_title()
self.append(self._title, hippo.PACK_EXPAND)
@@ -135,8 +140,21 @@ class CollapsedEntry(hippo.CanvasBox):
xalign=hippo.ALIGNMENT_START,
font_desc=style.FONT_BOLD.get_pango_desc(),
size_mode=hippo.CANVAS_SIZE_ELLIPSIZE_END)
+ title.connect('button_release_event',
+ self.__title_button_release_event_cb)
return title
+ def _create_title_entry(self):
+ title_entry = CanvasEntry()
+ title_entry.set_background(style.COLOR_WHITE.get_html())
+ title_entry.props.widget.connect('focus-out-event',
+ self.__title_entry_focus_out_event_cb)
+ title_entry.props.widget.connect('activate',
+ self.__title_entry_activate_cb)
+ title_entry.connect('key-press-event',
+ self.__title_entry_key_press_event_cb)
+ return title_entry
+
def _create_buddies_list(self):
return BuddyList([], self._BUDDIES_COL_WIDTH)
@@ -225,6 +243,46 @@ 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._apply_title_change(entry.props.text)
+
+ def __title_entry_activate_cb(self, entry):
+ self._apply_title_change(entry.props.text)
+
+ def __title_entry_key_press_event_cb(self, entry, event):
+ if event.key == hippo.KEY_ESCAPE:
+ self._cancel_title_change()
+
+ def _apply_title_change(self, title):
+ self._title_entry.set_visible(False)
+ self._title.set_visible(True)
+
+ if title == '':
+ self._cancel_title_change()
+ 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 _cancel_title_change(self):
+ self._title_entry.props.text = self._title.props.text
+ self._title_entry.set_visible(False)
+ self._title.set_visible(True)
+
+ 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():
@@ -264,6 +322,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']:
@@ -272,6 +331,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
[email protected]
http://lists.laptop.org/listinfo/sugar