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-09 22:26:28 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-07-09 22:26:28 (GMT)
commit6813a8be65eb96f07928f5cc1bc814e450caca53 (patch)
tree61ce03f47ded34b862fd74b225b9d55fb45bca68
parent36bc6d737db3f6fcf7366f29010d566eb9664b48 (diff)
resync with TA149
-rw-r--r--AmazonasTortugaActivity.py111
1 files changed, 105 insertions, 6 deletions
diff --git a/AmazonasTortugaActivity.py b/AmazonasTortugaActivity.py
index cc1a379..fd90acb 100644
--- a/AmazonasTortugaActivity.py
+++ b/AmazonasTortugaActivity.py
@@ -403,14 +403,52 @@ class AmazonasTortugaActivity(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. '''
@@ -583,8 +621,12 @@ class AmazonasTortugaActivity(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,
@@ -594,6 +636,9 @@ class AmazonasTortugaActivity(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)
@@ -687,14 +732,16 @@ class AmazonasTortugaActivity(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(
@@ -818,6 +865,13 @@ class AmazonasTortugaActivity(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)
@@ -884,8 +938,28 @@ class AmazonasTortugaActivity(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)
@@ -896,6 +970,8 @@ class AmazonasTortugaActivity(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()
@@ -910,6 +986,29 @@ class AmazonasTortugaActivity(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)