From ff4913029c6eec0ba9cace2ac3c311bbe82e60e9 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sun, 08 Jul 2012 12:33:32 +0000 Subject: resync with TB 149 --- diff --git a/TurtleConfusionActivity.py b/TurtleConfusionActivity.py index 0bb3af7..44f946a 100644 --- a/TurtleConfusionActivity.py +++ b/TurtleConfusionActivity.py @@ -381,14 +381,52 @@ class TurtleConfusionActivity(activity.Activity): self.tw.load_file(True) self.tw.run_button(0) + def adjust_sw(self, dx, dy): + ''' Adjust the scrolled window position. ''' + hadj = self.sw.get_hadjustment() + hvalue = hadj.get_value() + dx + try: + if hvalue < hadj.get_lower(): + hvalue = hadj.get_lower() + elif hvalue > hadj.get_upper(): + hvalue = hadj.get_upper() + except AttributeError: + _logger.debug( + 'get_lower, get_upper only available in PyGTK 2.14 and above.') + hadj.set_value(hvalue) + self.sw.set_hadjustment(hadj) + vadj = self.sw.get_vadjustment() + vvalue = vadj.get_value() + dy + try: + if vvalue < vadj.get_lower(): + vvalue = vadj.get_lower() + elif vvalue > vadj.get_upper(): + vvalue = vadj.get_upper() + except AttributeError: + _logger.debug( + 'get_lower, get_upper only available in PyGTK 2.14 and above.') + vadj.set_value(vvalue) + self.sw.set_vadjustment(vadj) + self._defer_palette_move = True + + def adjust_palette(self): + ''' Align palette to scrolled window position. ''' + if not self.tw.hw in [XO1]: + self.tw.move_palettes(self.sw.get_hadjustment().get_value(), + self.sw.get_vadjustment().get_value()) + self._defer_palette_move = False + def recenter(self): ''' Recenter scrolled window around canvas. ''' + self.hadj_value = 0 hadj = self.sw.get_hadjustment() - hadj.set_value(0) + hadj.set_value(self.hadj_value) self.sw.set_hadjustment(hadj) + self.vadj_value = 0 vadj = self.sw.get_vadjustment() - vadj.set_value(0) + vadj.set_value(self.vadj_value) self.sw.set_vadjustment(vadj) + self.adjust_palette() def do_fullscreen_cb(self, button): ''' Hide the Sugar toolbars. ''' @@ -561,8 +599,12 @@ class TurtleConfusionActivity(activity.Activity): self._make_project_buttons(self._toolbox.toolbar) - self._add_separator(self._toolbox.toolbar, expand=True, - visible=False) + self._add_separator(self._toolbox.toolbar, expand=False, + visible=True) + + self.keep_button = self._add_button( + 'filesaveoff', _('Save snapshot'), self.do_keep_cb, + self._toolbox.toolbar) self.samples_button = self._add_button( 'ta-open', _('Load example'), self.do_samples_cb, @@ -572,6 +614,9 @@ class TurtleConfusionActivity(activity.Activity): 'help-toolbar', _('Help'), self._do_help_cb, self._toolbox.toolbar) + self._add_separator(self._toolbox.toolbar, expand=True, + visible=False) + stop_button = StopButton(self) stop_button.props.accelerator = 'Q' self._toolbox.toolbar.insert(stop_button, -1) @@ -665,14 +710,16 @@ class TurtleConfusionActivity(activity.Activity): self._palette_toolbar.show() def _make_load_save_buttons(self, toolbar): + self.share_button = self._add_button('shareoff', + _('Sharing blocks disabled'), + self._share_cb, toolbar) + self._add_separator(toolbar, expand=False, visible=True) self.save_as_image = self._add_button( 'image-saveoff', _('Save as image'), self.do_save_as_image_cb, toolbar) self.save_as_logo = self._add_button( 'logo-saveoff', _('Save as Logo'), self.do_save_as_logo_cb, toolbar) - self.keep_button = self._add_button( - 'filesaveoff', _('Save snapshot'), self.do_keep_cb, toolbar) if not self.has_toolbarbox: self._add_separator(toolbar) self.load_ta_project = self._add_button( @@ -796,6 +843,13 @@ class TurtleConfusionActivity(activity.Activity): else: # ...or else, load a Start Block onto the canvas. self.tw.load_start() + if hasattr(self.get_window(), 'get_cursor'): + self._old_cursor = self.get_window().get_cursor() + else: + self._old_cursor = None + self.copying = False + self.sharing_blocks = False + def _setup_sharing(self): ''' Setup the Collabora stack. ''' self._collaboration = Collaboration(self.tw, self) @@ -861,8 +915,28 @@ class TurtleConfusionActivity(activity.Activity): error_handler=self._internal_jobject_error_cb) self._jobject.destroy() + def restore_cursor(self): + ''' No longer copying or sharing, so restore standard cursor. ''' + self.copying = False + self.sharing_blocks = False + if hasattr(self.get_window(), 'get_cursor'): + self.get_window().set_cursor(self._old_cursor) + else: + self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.ARROW)) + def _copy_cb(self, button): ''' Copy to the clipboard. ''' + if self.copying: + self.restore_cursor() + else: + self.copying = True + if hasattr(self.get_window(), 'get_cursor'): + self._old_cursor = self.get_window().get_cursor() + self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1)) + + def send_to_clipboard(self): + ''' Send selected stack to clipboard. ''' + self.restore_cursor() clipboard = gtk.Clipboard() _logger.debug('Serialize the project and copy to clipboard.') data = self.tw.assemble_data_to_save(False, False) @@ -873,6 +947,8 @@ class TurtleConfusionActivity(activity.Activity): def _paste_cb(self, button): ''' Paste from the clipboard. ''' + if self.copying: + self.restore_cursor() clipboard = gtk.Clipboard() _logger.debug('Paste to the project.') text = clipboard.wait_for_text() @@ -887,6 +963,29 @@ class TurtleConfusionActivity(activity.Activity): self.tw.paste_offset) self.tw.paste_offset += 20 + def _share_cb(self, button): + ''' Share a stack of blocks. ''' + if self.sharing_blocks: + self.restore_cursor() + else: + self.sharing_blocks = True + if hasattr(self.get_window(), 'get_cursor'): + self._old_cursor = self.get_window().get_cursor() + self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1)) + + def share_blocks(self): + ''' Share selected stack. ''' + if not self.tw.sharing(): + return + _logger.debug('Serialize a stack and send as event.') + self.restore_cursor() + 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])) # Paste + self.tw.send_event(event) + self.tw.paste_offset = 20 + def _add_label(self, string, toolbar, width=None): ''' Add a label to a toolbar. ''' label = gtk.Label(string) -- cgit v0.9.1