Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activity.py
diff options
context:
space:
mode:
authorC. Scott Ananian <cscott@laptop.org>2007-12-27 06:06:31 (GMT)
committer C. Scott Ananian <cscott@laptop.org>2008-05-20 19:05:58 (GMT)
commit3daf1636c1b24826f88cda324949c958a71750fa (patch)
tree76bd8f84ca4d6855b804a48baf587ae21b26f67e /activity.py
parent1f2346b0df62ba73099197a903588cf8adec821f (diff)
Support copy, paste, & drop in generated activities. Support drop on VTE in Pippy.
Diffstat (limited to 'activity.py')
-rw-r--r--activity.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/activity.py b/activity.py
index 6061630..6989cec 100644
--- a/activity.py
+++ b/activity.py
@@ -45,14 +45,32 @@ class ViewSourceActivity(activity.Activity):
except ImportError:
pass # no love from sugar.
+TARGET_TYPE_TEXT = 80
class VteActivity(ViewSourceActivity):
def __init__(self, handle):
import gtk, pango, vte
+ from sugar.graphics.toolbutton import ToolButton
+ from gettext import gettext as _
super(VteActivity, self).__init__(handle)
toolbox = activity.ActivityToolbox(self)
+ # we don't support share/keep (yet?)
+ toolbar = toolbox.get_activity_toolbar()
+ toolbar.share.hide() # this should share bundle.
+ toolbar.keep.hide()
self.set_toolbox(toolbox)
toolbox.show()
+ # add 'copy' icon from standard toolbar.
+ edittoolbar = activity.EditToolbar()
+ edittoolbar.copy.set_tooltip(_('Copy selected text to clipboard'))
+ edittoolbar.copy.connect('clicked', self._on_copy_clicked_cb)
+ edittoolbar.paste.connect('clicked', self._on_paste_clicked_cb)
+ # as long as nothing is selected, copy needs to be insensitive.
+ edittoolbar.copy.set_sensitive(False)
+ toolbox.add_toolbar(_('Edit'), edittoolbar)
+ edittoolbar.show()
+ self._copy_button = edittoolbar.copy
+
# creates vte widget
self._vte = vte.Terminal()
self._vte.set_size(30,5)
@@ -62,6 +80,11 @@ class VteActivity(ViewSourceActivity):
self._vte.set_colors(gtk.gdk.color_parse ('#000000'),
gtk.gdk.color_parse ('#E7E7E7'),
[])
+ self._vte.connect('selection-changed', self._on_selection_changed_cb)
+ self._vte.drag_dest_set(gtk.DEST_DEFAULT_ALL,
+ [ ( "text/plain", 0, TARGET_TYPE_TEXT ) ],
+ gtk.gdk.ACTION_COPY)
+ self._vte.connect('drag_data_received', self._on_drop_cb)
# ...and its scrollbar
vtebox = gtk.HBox()
vtebox.pack_start(self._vte)
@@ -70,8 +93,13 @@ class VteActivity(ViewSourceActivity):
vtebox.pack_start(vtesb, False, False, 0)
self.set_canvas(vtebox)
self.show_all()
+ # hide the buttons we don't use.
+ edittoolbar.undo.hide()
+ edittoolbar.redo.hide()
+ edittoolbar.separator.hide()
# now start subprocess.
+ self._vte.connect('child-exited', self.on_child_exit)
self._vte.grab_focus()
bundle_path = activity.get_bundle_path()
# the 'sleep 1' works around a bug with the command dying before
@@ -82,3 +110,16 @@ class VteActivity(ViewSourceActivity):
'python %s/pippy_app.py; sleep 1' % bundle_path],
envv=["PYTHONPATH=%s/library" % bundle_path],
directory=bundle_path)
+ def _on_copy_clicked_cb(self, widget):
+ if self._vte.get_has_selection():
+ self._vte.copy_clipboard()
+ def _on_paste_clicked_cb(self, widget):
+ self._vte.paste_clipboard()
+ def _on_selection_changed_cb(self, widget):
+ self._copy_button.set_sensitive(self._vte.get_has_selection())
+ def _on_drop_cb(self, widget, context, x, y, selection, targetType, time):
+ if targetType == TARGET_TYPE_TEXT:
+ self._vte.feed_child(selection.data)
+ def on_child_exit(self, widget):
+ """This method is invoked when the user's script exits."""
+ pass # override in subclass