From 0a45669adbbd9d4c6c0b8948ed62588cedfe9ec7 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Tue, 07 May 2013 01:57:51 +0000 Subject: more work on save-macro --- diff --git a/NEWS b/NEWS index 0fc53e0..89434c5 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +176 + +ENHANCEMENT: +* Add facility for saving and restoring individual stacks + 175 ENHANCEMENT: diff --git a/TurtleArt/tabasics.py b/TurtleArt/tabasics.py index 0d88a9d..81eba2d 100644 --- a/TurtleArt/tabasics.py +++ b/TurtleArt/tabasics.py @@ -107,11 +107,6 @@ class Palettes(): self._blocks_palette() - palette = make_palette('macros', - colors=["#FFC000", "#A08000"], - help_string=\ - _('Palette of user-defined operators')) - self._trash_palette() # Palette definitions diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index 14c0190..06c0276 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -91,6 +91,7 @@ class TurtleArtWindow(): ''' TurtleArt Window class abstraction ''' timeout_tag = [0] _PLUGIN_SUBPATH = 'plugins' + _MACROS_SUBPATH = 'macros' def __init__(self, canvas_window, path, parent=None, mycolors=None, mynick=None, turtle_canvas=None, @@ -113,6 +114,10 @@ class TurtleArtWindow(): self.running_sugar = True from sugar import profile self.nick = profile.get_nick_name() + self.macros_path = os.path.join( + get_path(parent, 'data'), self._MACROS_SUBPATH) + else: + self.macros_path = os.path.join(self.path, self._MACROS_SUBPATH) self._setup_events() else: self.interactive_mode = False @@ -145,7 +150,6 @@ class TurtleArtWindow(): self.update_counter = 0 self.running_blocks = False self.saving_macro = False - self.macros_path = '' try: locale.setlocale(locale.LC_NUMERIC, '') @@ -170,9 +174,9 @@ class TurtleArtWindow(): self.orientation = VERTICAL_PALETTE else: self.scale = 1.0 - self.entry_scale = 1.0 + self.entry_scale = 1.0 self.color_mode = '888' # TODO: Read visual mode from gtk image - self._set_screen_dpi() + self._set_screen_dpi() self.block_scale = BLOCK_SCALE[3] self.trash_scale = 0.5 diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index 2583a0c..49e4a39 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -621,6 +621,8 @@ class TurtleArtActivity(activity.Activity): edit_toolbar, 'v') self._add_button('edit-undo', _('Restore blocks from trash'), self._undo_cb, edit_toolbar) + self._add_button('save-macro', _('Save stack'), self._save_macro_cb, + edit_toolbar) self._add_button('view-fullscreen', _('Fullscreen'), self.do_fullscreen_cb, self._view_toolbar, @@ -766,6 +768,7 @@ class TurtleArtActivity(activity.Activity): add_section(help_box, _('Edit'), icon='toolbar-edit') add_paragraph(help_box, _('Copy'), icon='edit-copy') add_paragraph(help_box, _('Paste'), icon='edit-paste') + add_paragraph(help_box, _('Save stack'), icon='save-macro') help_box = gtk.VBox() help_box.set_homogeneous(False) @@ -1089,6 +1092,7 @@ class TurtleArtActivity(activity.Activity): self._old_cursor = None self.copying = False self.sharing_blocks = False + self.tw.saving_macro = False def _setup_sharing(self): ''' Setup the Collabora stack. ''' @@ -1351,6 +1355,7 @@ in order to use the plugin.')) def _copy_cb(self, button): ''' Copy to the clipboard. ''' if self.copying: + self.copying = False self.restore_cursor() else: self.copying = True @@ -1359,6 +1364,18 @@ in order to use the plugin.')) self._old_cursor = self.get_window().get_cursor() self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND1)) + def _save_macro_cb(self, button): + ''' Save stack macros_path ''' + if self.tw.saving_macro: + self.tw.saving_macro = False + self.restore_cursor() + else: + self.tw.saving_macro = True + if hasattr(self, 'get_window'): + 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() diff --git a/activity/activity.info b/activity/activity.info index 3d1e9d5..df3b388 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -1,6 +1,6 @@ [Activity] name = TurtleBlocks -activity_version = 175 +activity_version = 176 license = MIT bundle_id = org.laptop.TurtleArtActivity exec = sugar-activity TurtleArtActivity.TurtleArtActivity diff --git a/icons/save-macro.svg b/icons/save-macro.svg new file mode 100644 index 0000000..c2cff38 --- /dev/null +++ b/icons/save-macro.svg @@ -0,0 +1,78 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/plugins/turtle_blocks_extras/turtle_blocks_extras.py b/plugins/turtle_blocks_extras/turtle_blocks_extras.py index d2e6cfb..1593f4b 100644 --- a/plugins/turtle_blocks_extras/turtle_blocks_extras.py +++ b/plugins/turtle_blocks_extras/turtle_blocks_extras.py @@ -19,21 +19,25 @@ import gtk import gobject from time import time import os +import glob from gettext import gettext as _ from plugins.plugin import Plugin -from TurtleArt.tapalette import make_palette, define_logo_function, \ - block_names, block_primitives, special_names, content_blocks, \ - palette_name_to_index, palette_names -from TurtleArt.talogo import primitive_dictionary, logoerror, \ - media_blocks_dictionary -from TurtleArt.taconstants import DEFAULT_SCALE, ICON_SIZE, CONSTANTS, \ - MEDIA_SHAPES, SKIN_PATHS, BLOCKS_WITH_SKIN, PYTHON_SKIN, \ - PREFIX_DICTIONARY, VOICES, MACROS, COLORDICT -from TurtleArt.tautils import convert, round_int, debug_output, get_path, \ - data_to_string, find_group, image_to_base64 -from TurtleArt.tajail import myfunc, myfunc_import +from TurtleArt.tapalette import (make_palette, define_logo_function, + block_names, block_primitives, special_names, + content_blocks, palette_name_to_index, + palette_names) +from TurtleArt.talogo import (primitive_dictionary, logoerror, + media_blocks_dictionary) +from TurtleArt.taconstants import (DEFAULT_SCALE, ICON_SIZE, CONSTANTS, + MEDIA_SHAPES, SKIN_PATHS, BLOCKS_WITH_SKIN, + PYTHON_SKIN, PREFIX_DICTIONARY, VOICES, + MACROS, COLORDICT) +from TurtleArt.tautils import (convert, round_int, debug_output, get_path, + data_to_string, find_group, image_to_base64, + hat_on_top, listify, data_from_file) +from TurtleArt.tajail import (myfunc, myfunc_import) def _num_type(x): @@ -90,6 +94,8 @@ class Turtle_blocks_extras(Plugin): self._portfolio_palette() + self._macros_palette() + # Palette definitions def _flow_palette(self): @@ -1042,6 +1048,29 @@ Journal objects")) bullets')) self.tw.lc.def_prim('bullet', 1, self._prim_list, True) + def _macros_palette(self): + ''' User-defined macros are saved as a json-encoded file; + these get loaded into a palette on startup ''' + + if os.path.exists(self.tw.macros_path): + files = glob.glob(os.path.join(self.tw.macros_path, '*.tb')) + print 'creating macros palette' + if len(files) > 0: + palette = make_palette('macros', + colors=["#FFC000", "#A08000"], + help_string=\ +_('Palette of user-defined operators')) + + for tafile in files: + data = data_from_file(tafile) + name = os.path.basename(tafile)[:-3] + print 'loading macro %s' % (name) + MACROS['user-defined-' + name] = hat_on_top(listify(data)) + palette.add_block('user-defined-' + name, + style='basic-style-extended-vertical', + label=name) + + # Block primitives def _prim_emptyheap(self): diff --git a/turtleblocks.py b/turtleblocks.py index d8b256c..7cf5afd 100755 --- a/turtleblocks.py +++ b/turtleblocks.py @@ -109,7 +109,6 @@ class TurtleMain(): self._init_gnome_plugins() self._setup_gtk() self._build_window() - self._load_user_macros() self._run_gnome_plugins() self._start_gtk() @@ -171,31 +170,8 @@ class TurtleMain(): if not exists(dpath): makedirs(dpath) - def _load_user_macros(self): - ''' User-defined macros are saved as a json-encoded file; - these get loaded into a palette on startup ''' - macros_path = os.path.join(self._execdirname, self._MACROS_SUBPATH) - self.tw.macros_path = macros_path - if os.path.exists(macros_path): - files = glob.glob(os.path.join(macros_path, '*.tb')) - print 'creating macros palette' - if len(files) > 0: - palette = make_palette('macros', - colors=["#FFC000", "#A08000"], - help_string=\ -_('Palette of user-defined operators')) - - for tafile in files: - data = data_from_file(tafile) - name = os.path.basename(tafile)[:-3] - print 'loading macro %s' % (name) - MACROS['user-defined-' + name] = hat_on_top(listify(data)) - palette.add_block('user-defined-' + name, - style='basic-style-extended-vertical', - label=name) - def _do_save_macro_cb(self, widget): - if self.saving_macro: + if self.tw.saving_macro: self.win.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)) self.tw.saving_macro = False else: @@ -252,7 +228,6 @@ _('Palette of user-defined operators')) self.current_palette = 0 self.scale = 2.0 self.tw = None - self.saving_macro = False self.init_complete = False def _parse_command_line(self): -- cgit v0.9.1