[Sugar-devel] [PATCH 1/2] Backport "Add DescriptionEntry to the activity sub-toolbar" from sugar-toolkit-gtk3

Anish Mangal anish at activitycentral.com
Thu Apr 19 23:55:46 EDT 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Fri 20 Apr 2012 12:51:56 AM IST, godiard at sugarlabs.org wrote:
> From: Gonzalo Odiard <godiard at gmail.com>
>
> This is the implementation of the 'Write to Journal anytime' feature [1].
>
> The patch itself adds a DescriptionItem to the activity
> sub-toolbar to make editing a Journal entry description
> from within the activity possible. The code has the same
> error handling as the TitleEntry.
>
> After talking with teachers and the learning team,
> I found they are very excited about this feature.
> Doing this change we will have a more consistent experience
> in the activities at the release of sugar 0.96 too.
>
> The original patch was done by Simon Schampijer <simon at laptop.org>
> and Walter Bender <walter.bender at gmail.com>
>
> Signed-off-by: Gonzalo Odiard <gonzalo at laptop.org>
>
> [1] http://wiki.sugarlabs.org/go/Features/Write_to_journal_anytime
> ---
>  src/sugar/activity/widgets.py |   71 +++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 71 insertions(+), 0 deletions(-)
>
> diff --git a/src/sugar/activity/widgets.py b/src/sugar/activity/widgets.py
> index e5c4063..ab75cd6 100644
> --- a/src/sugar/activity/widgets.py
> +++ b/src/sugar/activity/widgets.py
> @@ -28,6 +28,7 @@ from sugar.graphics.toolbox import Toolbox
>  from sugar.graphics.xocolor import XoColor
>  from sugar.graphics.icon import Icon
>  from sugar.bundle.activitybundle import ActivityBundle
> +from sugar.graphics import style
>  
>  
>  _ = lambda msg: gettext.dgettext('sugar-toolkit', msg)
> @@ -235,6 +236,71 @@ class TitleEntry(gtk.ToolItem):
>              shared_activity.props.name = title
>  
>  
> +class DescriptionItem(gtk.ToolItem):
> +
> +    def __init__(self, activity, **kwargs):
> +        gtk.ToolItem.__init__(self)
> +
> +        description_button = ToolButton('edit-description')
> +        description_button.show()
> +        description_button.set_tooltip(_('Description'))
> +        self._palette = description_button.get_palette()
> +
> +        description_box = gtk.HBox()
> +        sw = gtk.ScrolledWindow()
> +        sw.set_size_request(int(gtk.gdk.screen_width() / 2),
> +                            2 * style.GRID_CELL_SIZE)
> +        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
> +        self._text_view = gtk.TextView()
> +        self._text_view.set_left_margin(style.DEFAULT_PADDING)
> +        self._text_view.set_right_margin(style.DEFAULT_PADDING)
> +        text_buffer = gtk.TextBuffer()
> +        if 'description' in activity.metadata:
> +            text_buffer.set_text(activity.metadata['description'])
> +        self._text_view.set_buffer(text_buffer)
> +        self._text_view.connect('focus-out-event',
> +                               self.__description_changed_cb, activity)
> +        sw.add(self._text_view)
> +        description_box.pack_start(sw, False, True, 0)
> +        self._palette.set_content(description_box)
> +        description_box.show_all()
> +
> +        self.add(description_button)
> +        description_button.connect('clicked',
> +                                   self.__description_button_clicked_cb)
> +
> +        activity.metadata.connect('updated', self.__jobject_updated_cb)
> +
> +    def _get_text_from_buffer(self):
> +        buf = self._text_view.get_buffer()
> +        start_iter = buf.get_start_iter()
> +        end_iter = buf.get_end_iter()
> +        return buf.get_text(start_iter, end_iter, False)
> +
> +    def __jobject_updated_cb(self, jobject):
> +        if self._text_view.has_focus():
> +            return
> +        if 'description' not in jobject:
> +            return
> +        if self._get_text_from_buffer() == jobject['description']:
> +            return
> +        buf = self._text_view.get_buffer()
> +        buf.set_text(jobject['description'])
> +
> +    def __description_button_clicked_cb(self, button):
> +        self._palette.popup(immediate=True, state=1)
> +
> +    def __description_changed_cb(self, widget, event, activity):
> +        description = self._get_text_from_buffer()
> +        if 'description' in activity.metadata and \
> +                description == activity.metadata['description']:
> +            return
> +
> +        activity.metadata['description'] = description
> +        activity.save()
> +        return False
> +
> +
>  class ActivityToolbar(gtk.Toolbar):
>      """The Activity toolbar with the Journal entry title, sharing
>         and Stop buttons
> @@ -261,6 +327,11 @@ class ActivityToolbar(gtk.Toolbar):
>              self.insert(separator, -1)
>              separator.show()
>  
> +        if activity.metadata:
> +            description_item = DescriptionItem(activity)
> +            description_item.show()
> +            self.insert(description_item, -1)
> +
>          self.share = ShareButton(activity)
>          self.share.show()
>          self.insert(self.share, -1)

Dumb question. The patch title says 'Backport', so which version of 
sugar is this being backported to ;)

- -- 
Anish 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJPkN5CAAoJEBoxUdDHDZVpF2sH/iPeaYISBvwRudVm55Oa1gL/
7JZTdGHSVHq0P3tAbkOs+jFRXjTFMRn1E8vGoMX6NV9H7IBltXvZrNWqw8vVyKGH
MnAqCemxQUqIN6hivrR8uAWot+n7Nfl6L5jYO+Pc9qg+W+b6XCREC7gKekmOcU52
Y9t3Axm29dZUASoYLAL+e+a3Bdd2OtjskP2fMP/NInVg0jzHfj67g9Y/Uob9jz61
rszWcESZBvyp0MUVRZMa/FZHSDAvdg+kjsQ/oU2DMtFgH2J6Gqh1o/dzjjKLCgna
aMJz3dwNLwZYdsM/b35VJayjgEG0buqK4SN2yHWVLkune4kvR4Kp24cmCUvIvR8=
=4XrZ
-----END PGP SIGNATURE-----



More information about the Sugar-devel mailing list