Re: [Sugar-devel] [PATCH 2/2] Pippy: Add edit toolbar

2010-08-23 Thread Tomeu Vizoso
On Sat, Aug 21, 2010 at 19:05, Anish Mangal anishmangal2...@gmail.com wrote:
 This patch adds the standard edit toolbar to the Pippy layout.
 If the activity is not shared, all four toolbar buttons, i.e.
 copy, paste, undo, redo will be visible. However, if an activity
 is shared, the undo and redo buttons are hidden. This is due
 an issue with undo/redoing that is yet to be debugged more
 extensively.

Should we show them as disabled instead?

Regards,

Tomeu

 Also, this patch adds comments to a portion of the code.

 TODO: Open a bug report and mention bug-id here.

 Signed-off-by: Anish Mangal an...@sugarlabs.org
 ---
  pippy_app.py |   48 ++--
  1 files changed, 46 insertions(+), 2 deletions(-)

 diff --git a/pippy_app.py b/pippy_app.py
 index 30312c2..d3f87d4 100644
 --- a/pippy_app.py
 +++ b/pippy_app.py
 @@ -33,8 +33,8 @@ from gettext import gettext as _
  from activity import ViewSourceActivity, TARGET_TYPE_TEXT
  from sugar.activity.activity import ActivityToolbox, \
      get_bundle_path, get_bundle_name
 +from sugar.activity import activity
  from sugar.graphics import style
 -
  from sugar.graphics.toolbutton import ToolButton

  _ORIGINAL_PIPPY_LAYOUT = False
 @@ -67,7 +67,8 @@ SIZE_Y = gtk.gdk.screen_height()

  groupthink_mimetype = 'pickle/groupthink-pippy'

 -# modded ActivityToolbarButton which has its toolbar object public
 +# Create a modded ActivityToolbarButton which has
 +# its toolbar object visible to the outside world.
  class ActivityToolbarButton(ToolbarButton):

     def __init__(self, activity, **kwargs):
 @@ -108,6 +109,14 @@ class PippyActivity(ViewSourceActivity, 
 groupthink.sugar_tools.GroupActivity):
             activity_button = ActivityToolbarButton(self)
             toolbar_box.toolbar.insert(activity_button, 0)

 +            self._edit_toolbar = activity.EditToolbar()
 +            edit_toolbar_button = ToolbarButton()
 +            edit_toolbar_button.props.page = self._edit_toolbar
 +            edit_toolbar_button.props.icon_name = 'toolbar-edit'
 +            edit_toolbar_button.props.label = _('Edit')
 +            toolbar_box.toolbar.insert(edit_toolbar_button, -1)
 +            self._edit_toolbar.show()
 +
             separator = gtk.SeparatorToolItem()
             toolbar_box.toolbar.insert(separator, -1)

 @@ -186,6 +195,11 @@ class PippyActivity(ViewSourceActivity, 
 groupthink.sugar_tools.GroupActivity):
             # = 0.84 toolbars
             # Top toolbar with share and close buttons:
             toolbox = ActivityToolbox(self)
 +
 +            self._edit_toolbar = activity.EditToolbar()
 +            toolbox.add_toolbar(_('Edit'), self._edit_toolbar)
 +            self._edit_toolbar.show()
 +
             # add 'make bundle' entry to 'keep' palette.
             palette = toolbox.get_activity_toolbar().keep.get_palette()
             # XXX: should clear out old palette entries?
 @@ -243,6 +257,11 @@ class PippyActivity(ViewSourceActivity, 
 groupthink.sugar_tools.GroupActivity):
             activity_toolbar = toolbox.get_activity_toolbar()
             activity_toolbar.share.props.visible = False

 +        self._edit_toolbar.undo.connect('clicked', self.undobutton_cb)
 +        self._edit_toolbar.redo.connect('clicked', self.redobutton_cb)
 +        self._edit_toolbar.copy.connect('clicked', self.copybutton_cb)
 +        self._edit_toolbar.paste.connect('clicked', self.pastebutton_cb)
 +
         # The sidebar.
         self.sidebar = gtk.VBox()
         self.model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
 @@ -350,6 +369,13 @@ class PippyActivity(ViewSourceActivity, 
 groupthink.sugar_tools.GroupActivity):
         return self.hpane

     def when_shared(self):
 +        # HACK : There are issues with undo/redoing while in shared
 +        # mode. So hide the 'undo' and 'redo' buttons when the activity
 +        # is shared.
 +        self._edit_toolbar.undo.props.visible = False
 +        self._edit_toolbar.redo.props.visible = False
 +        self._edit_toolbar.separator.props.visible = False
 +
         self.hpane.remove(self.hpane.get_child1())
         global text_buffer
         self.cloud.sharefield = 
 groupthink.gtk_tools.TextBufferSharePoint(text_buffer)
 @@ -412,6 +438,24 @@ class PippyActivity(ViewSourceActivity, 
 groupthink.sugar_tools.GroupActivity):
         self._vte.grab_focus()
         self._vte.feed(\x1B[H\x1B[J\x1B[0;39m)

 +    def undobutton_cb(self, button):
 +        global text_buffer
 +        if text_buffer.can_undo():
 +            text_buffer.undo()
 +
 +    def redobutton_cb(self, button):
 +        global text_buffer
 +        if text_buffer.can_redo():
 +            text_buffer.redo()
 +
 +    def copybutton_cb(self, button):
 +        global text_buffer
 +        text_buffer.copy_clipboard(gtk.Clipboard())
 +
 +    def pastebutton_cb(self, button):
 +        global text_buffer
 +        text_buffer.paste_clipboard(gtk.Clipboard(), None, True)
 

[Sugar-devel] [PATCH 2/2] Pippy: Add edit toolbar

2010-08-21 Thread Anish Mangal
This patch adds the standard edit toolbar to the Pippy layout.
If the activity is not shared, all four toolbar buttons, i.e.
copy, paste, undo, redo will be visible. However, if an activity
is shared, the undo and redo buttons are hidden. This is due
an issue with undo/redoing that is yet to be debugged more
extensively.

Also, this patch adds comments to a portion of the code.

TODO: Open a bug report and mention bug-id here.

Signed-off-by: Anish Mangal an...@sugarlabs.org
---
 pippy_app.py |   48 ++--
 1 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/pippy_app.py b/pippy_app.py
index 30312c2..d3f87d4 100644
--- a/pippy_app.py
+++ b/pippy_app.py
@@ -33,8 +33,8 @@ from gettext import gettext as _
 from activity import ViewSourceActivity, TARGET_TYPE_TEXT
 from sugar.activity.activity import ActivityToolbox, \
  get_bundle_path, get_bundle_name
+from sugar.activity import activity
 from sugar.graphics import style
-
 from sugar.graphics.toolbutton import ToolButton
 
 _ORIGINAL_PIPPY_LAYOUT = False
@@ -67,7 +67,8 @@ SIZE_Y = gtk.gdk.screen_height()
 
 groupthink_mimetype = 'pickle/groupthink-pippy'
 
-# modded ActivityToolbarButton which has its toolbar object public
+# Create a modded ActivityToolbarButton which has
+# its toolbar object visible to the outside world.
 class ActivityToolbarButton(ToolbarButton):
 
 def __init__(self, activity, **kwargs):
@@ -108,6 +109,14 @@ class PippyActivity(ViewSourceActivity, 
groupthink.sugar_tools.GroupActivity):
 activity_button = ActivityToolbarButton(self)
 toolbar_box.toolbar.insert(activity_button, 0)
 
+self._edit_toolbar = activity.EditToolbar()
+edit_toolbar_button = ToolbarButton()
+edit_toolbar_button.props.page = self._edit_toolbar
+edit_toolbar_button.props.icon_name = 'toolbar-edit'
+edit_toolbar_button.props.label = _('Edit')
+toolbar_box.toolbar.insert(edit_toolbar_button, -1)
+self._edit_toolbar.show()
+
 separator = gtk.SeparatorToolItem()
 toolbar_box.toolbar.insert(separator, -1)
 
@@ -186,6 +195,11 @@ class PippyActivity(ViewSourceActivity, 
groupthink.sugar_tools.GroupActivity):
 # = 0.84 toolbars
 # Top toolbar with share and close buttons:
 toolbox = ActivityToolbox(self)
+
+self._edit_toolbar = activity.EditToolbar()
+toolbox.add_toolbar(_('Edit'), self._edit_toolbar)
+self._edit_toolbar.show()
+
 # add 'make bundle' entry to 'keep' palette.
 palette = toolbox.get_activity_toolbar().keep.get_palette()
 # XXX: should clear out old palette entries?
@@ -243,6 +257,11 @@ class PippyActivity(ViewSourceActivity, 
groupthink.sugar_tools.GroupActivity):
 activity_toolbar = toolbox.get_activity_toolbar()
 activity_toolbar.share.props.visible = False
 
+self._edit_toolbar.undo.connect('clicked', self.undobutton_cb)
+self._edit_toolbar.redo.connect('clicked', self.redobutton_cb)
+self._edit_toolbar.copy.connect('clicked', self.copybutton_cb)
+self._edit_toolbar.paste.connect('clicked', self.pastebutton_cb)
+
 # The sidebar.
 self.sidebar = gtk.VBox()
 self.model = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
@@ -350,6 +369,13 @@ class PippyActivity(ViewSourceActivity, 
groupthink.sugar_tools.GroupActivity):
 return self.hpane
 
 def when_shared(self):
+# HACK : There are issues with undo/redoing while in shared
+# mode. So hide the 'undo' and 'redo' buttons when the activity
+# is shared.
+self._edit_toolbar.undo.props.visible = False
+self._edit_toolbar.redo.props.visible = False
+self._edit_toolbar.separator.props.visible = False
+
 self.hpane.remove(self.hpane.get_child1())
 global text_buffer
 self.cloud.sharefield = 
groupthink.gtk_tools.TextBufferSharePoint(text_buffer)
@@ -412,6 +438,24 @@ class PippyActivity(ViewSourceActivity, 
groupthink.sugar_tools.GroupActivity):
 self._vte.grab_focus()
 self._vte.feed(\x1B[H\x1B[J\x1B[0;39m)
 
+def undobutton_cb(self, button):
+global text_buffer
+if text_buffer.can_undo():
+text_buffer.undo()
+
+def redobutton_cb(self, button):
+global text_buffer
+if text_buffer.can_redo():
+text_buffer.redo()
+
+def copybutton_cb(self, button):
+global text_buffer
+text_buffer.copy_clipboard(gtk.Clipboard())
+
+def pastebutton_cb(self, button):
+global text_buffer
+text_buffer.paste_clipboard(gtk.Clipboard(), None, True)
+
 def gobutton_cb(self, button):
 from shutil import copy2
 self.stopbutton_cb(button) # try stopping old code first.
-- 
1.7.2.1

___