Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2012-07-08 12:33:32 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-07-08 12:33:32 (GMT)
commitff4913029c6eec0ba9cace2ac3c311bbe82e60e9 (patch)
tree53f1c483ecfd700312db2980d7282629b98dcb84
parent298aa030cc8aa99012fe5d7bc80f323b94bf0cda (diff)
resync with TB 149HEADv149master
-rw-r--r--TurtleConfusionActivity.py111
1 files changed, 105 insertions, 6 deletions
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 = '<Ctrl>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)