From 8940fcb3a83103bb777a76b041ae53d5df778da9 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sun, 10 Jun 2012 05:39:48 +0000 Subject: adding share of blocks and speak --- diff --git a/TurtleArt/tacollaboration.py b/TurtleArt/tacollaboration.py index 8316c7a..6663f04 100644 --- a/TurtleArt/tacollaboration.py +++ b/TurtleArt/tacollaboration.py @@ -1,4 +1,4 @@ -#Copyright (c) 2011, Walter Bender +#Copyright (c) 2011-12 Walter Bender #Copyright (c) 2011 Collabora Ltd. #Permission is hereby granted, free of charge, to any person obtaining a copy @@ -22,7 +22,7 @@ from dbus.service import signal from dbus.gobject_service import ExportedGObject import telepathy - +import os import gtk import base64 @@ -54,7 +54,7 @@ class Collaboration(): self._setup_dispatch_table() def setup(self): - # TODO: hand off role of master is sharer leaves + # TODO: hand off role of master if sharer leaves self.pservice = presenceservice.get_instance() self.initiating = None # sharing (True) or joining (False) @@ -81,7 +81,9 @@ class Collaboration(): 'w': self._set_pen_width, 'p': self._set_pen_state, 'F': self._fill_polygon, - 'P': self._draw_pixbuf + 'P': self._draw_pixbuf, + 'P': self._paste, + 'S': self._speak } def _shared_cb(self, activity): @@ -112,6 +114,7 @@ class Collaboration(): id = self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube( SERVICE, {}) + self._enable_share_button() def _joined_cb(self, activity): self._shared_activity = self._activity._shared_activity @@ -140,6 +143,11 @@ class Collaboration(): # Joiner should request current state from sharer. self.waiting_for_turtles = True + self._enable_share_button() + + def _enable_share_button(self): + self._activity.share_button.set_icon('shareon') + self._activity.share_button.set_tooltip(_('Share blocks')) def _list_tubes_reply_cb(self, tubes): for tube_info in tubes: @@ -376,6 +384,23 @@ class Collaboration(): poly_points[i][0], poly_points[i][1]))) self._tw.canvas.fill_polygon(shared_poly_points) + def _speak(self, payload): + if len(payload) > 0: + [nick, language_option, text] = data_from_string(payload) + if language_option == 'None': + language_option = '' + if text is not None: + os.system('espeak %s "%s" --stdout | aplay' % ( + language_option, str(text))) + + def _paste(self, payload): + if len(payload) > 0: + [nick, text] = data_from_string(payload) + if text is not None: + self._tw.process_data(data_from_string(text), + self._tw.paste_offset) + self._tw.paste_offset += 20 + def _get_dictionary(self): return {self._get_nick(): self._get_colors()} diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index 63a46ab..d3b9d80 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -776,6 +776,9 @@ class TurtleArtActivity(activity.Activity): def _make_load_save_buttons(self, toolbar): ''' Additional toolbar buttons for file IO ''' home = os.environ['HOME'] + self.share_button = self._add_button('shareoff', + _('Sharing blocks disabled'), + self._share_cb, toolbar) if self.has_toolbarbox and gtk.gdk.screen_width() < 1200: save_load_button = self._add_button( 'save-load', _('Save/Load'), self._save_load_palette_cb, @@ -1187,6 +1190,17 @@ in order to use the plugin.')) clipboard.set_text(text) self.tw.paste_offset = 20 + def _share_cb(self, button): + ''' Share a stack of blocks. ''' + if not self.tw.sharing(): + return + _logger.debug('Serialize a stack and send as event.') + data = self.tw.assemble_data_to_save(False, False) + if data is not []: + text = data_to_string(data) + event = 'B|%s' % (data_to_string([self.tw.nick, text])) + self.tw.paste_offset = 20 + def _paste_cb(self, button): ''' Paste from the clipboard. ''' clipboard = gtk.Clipboard() diff --git a/icons/shareoff.svg b/icons/shareoff.svg new file mode 100644 index 0000000..9753828 --- /dev/null +++ b/icons/shareoff.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/icons/shareon.svg b/icons/shareon.svg new file mode 100644 index 0000000..704193c --- /dev/null +++ b/icons/shareon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/plugins/turtle_blocks_extras/turtle_blocks_extras.py b/plugins/turtle_blocks_extras/turtle_blocks_extras.py index 55e6a8a..48ecd6e 100644 --- a/plugins/turtle_blocks_extras/turtle_blocks_extras.py +++ b/plugins/turtle_blocks_extras/turtle_blocks_extras.py @@ -28,7 +28,8 @@ from TurtleArt.talogo import primitive_dictionary, logoerror, \ from TurtleArt.taconstants import DEFAULT_SCALE, ICON_SIZE, CONSTANTS, \ MEDIA_SHAPES, SKIN_PATHS, BLOCKS_WITH_SKIN, PYTHON_SKIN, \ PREFIX_DICTIONARY, VOICES -from TurtleArt.tautils import convert, round_int, debug_output, get_path +from TurtleArt.tautils import convert, round_int, debug_output, get_path, \ + data_to_string from TurtleArt.tajail import myfunc, myfunc_import @@ -1188,6 +1189,13 @@ bullets')) language_option = '' os.system('espeak %s "%s" --stdout | aplay' % ( language_option, str(text))) + if self.tw.sharing(): + if language_option == '': + event = 'S|%s' % (data_to_string([self.tw.nick, 'None', text])) + else: + event = 'S|%s' % (data_to_string([self.tw.nick, + language_option, text])) + self.tw.send_event(event) def _prim_sinewave(self, pitch, amplitude, duration): """ Create a Csound score to play a sine wave. """ -- cgit v0.9.1