Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TurtleArt/tawindow.py70
-rw-r--r--TurtleArtActivity.py61
2 files changed, 70 insertions, 61 deletions
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index 2402087..b77ba2c 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -117,6 +117,7 @@ class TurtleArtWindow():
self.path = path
self.load_save_folder = os.path.join(path, 'samples')
+ self.py_load_save_folder = os.path.join(path, 'pysamples')
self.save_folder = None
self.save_file_name = None
self.width = gtk.gdk.screen_width()
@@ -1592,7 +1593,7 @@ class TurtleArtWindow():
if blk.name in NUMBER_STYLE_VAR_ARG:
self._cascade_expandable(blk)
grow_stack_arm(find_sandwich_top(blk))
- elif blk.name in PYTHON_SKIN and self.myblock is None:
+ elif blk.name in PYTHON_SKIN: # and self.myblock is None:
self._import_py()
else:
self._start_audiograb()
@@ -2142,23 +2143,70 @@ class TurtleArtWindow():
self.selected_blk.spr.set_label(s)
self.selected_blk.values[0] = s.replace(RETURN, "\12")
- def load_python_code(self):
+ def load_python_code_from_file(self):
""" Load Python code from a file """
- fname, self.load_save_folder = get_load_name('.py',
- self.load_save_folder)
+ id = None
+ fname, self.py_load_save_folder = get_load_name('.py',
+ self.py_load_save_folder)
if fname is None:
+ return id
+ try:
+ f = open(fname, 'r')
+ self.myblock = f.read()
+ f.close()
+ id = fname
+ except:
+ _logger.error("Unable to read Python code from %s" % (fname))
+ return id
+
+ # add a new block for this code at turtle position
+ (tx, ty) = self.active_turtle.get_xy()
+ self._new_block('userdefined', tx, ty)
+ self.drag_group = None
+
+ # if we are running Sugar, copy the file into the Journal
+ if self.running_sugar:
+ dsobject = datastore.create()
+ dsobject.metadata['title'] = os.path.basename(fname)
+ dsobject.metadata['icon-color'] = \
+ profile.get_color().to_string()
+ dsobject.metadata['mime_type'] = 'text/x-python'
+ dsobject.metadata['activity'] = 'org.laptop.Pippy'
+ dsobject.set_file_path(fname)
+ try:
+ datastore.write(dsobject)
+ id = dsobject.object_id
+ except IOError:
+ _logger.error("Error copying %s to the datastore" % (fname))
+ id = None
+ dsobject.destroy()
+
+ return id
+
+ def load_python_code_from_journal(self, dsobject):
+ """ Read the Python code from the Journal object """
+ _logger.debug("chooser returned %s " % (str(dsobject)))
+ _logger.debug("file_path is %s " % (dsobject.file_path))
+ try:
+ _logger.debug("opening %s " % dsobject.file_path)
+ file_handle = open(dsobject.file_path, "r")
+ self.myblock = file_handle.read()
+ file_handle.close()
+ except:
+ _logger.debug("couldn't open %s" % dsobject.file_path)
return
- f = open(fname, 'r')
- self.myblock = f.read()
- f.close()
+
+ self.set_userdefined()
+ self.activity.metadata['python code'] = dsobject.object_id
def _import_py(self):
""" Import Python code into a block """
if self.running_sugar:
- self.activity.import_py()
+ chooser(self.parent, 'org.laptop.Pippy',
+ self.load_python_code_from_journal)
else:
- self.load_python_code()
- self.set_userdefined()
+ if self.load_python_code_from_file() is not None:
+ self.set_userdefined()
def new_project(self):
""" Start a new project """
@@ -2195,7 +2243,7 @@ class TurtleArtWindow():
if create_new_project:
self.new_project()
self._check_collapsibles(self.process_data(data_from_file(ta_file)))
- self._loaded_prokect = ta_file
+ self._loaded_project = ta_file
def load_file(self, create_new_project=True):
_file_name, self.load_save_folder = get_load_name('.ta',
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index 288697f..3253c2d 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -124,7 +124,9 @@ class TurtleArtActivity(activity.Activity):
self._setup_canvas(canvas)
- self._load_python_code()
+ if 'python code' in self.metadata:
+ self.tw.load_python_code_from_journal(
+ datastore.get(self.metadata['python code']))
self._setup_sharing()
@@ -232,26 +234,11 @@ class TurtleArtActivity(activity.Activity):
def do_load_python_cb(self, button):
""" Load Python code from the Journal. """
self.load_python.set_icon("pippy-openon")
- self.import_py()
+ object_id = self.tw.load_python_code_from_file()
+ if object_id is not None:
+ self.metadata['python code'] = object_id
gobject.timeout_add(250, self.load_python.set_icon, "pippy-openoff")
- def import_py(self):
- """ Import Python code from the Journal to load into 'myblock'. """
- chooser(self, 'org.laptop.Pippy', self._load_python)
-
- def _load_python(self, dsobject):
- """ Read the Python code from the Journal object """
- try:
- _logger.debug("opening %s " % dsobject.file_path)
- file_handle = open(dsobject.file_path, "r")
- self.tw.myblock = file_handle.read()
- file_handle.close()
- self.tw.set_userdefined()
- # save reference to Pythin code in the project metadata
- self.metadata['python code'] = dsobject.object_id
- except:
- _logger.debug("couldn't open %s" % dsobject.file_path)
-
def do_save_as_image_cb(self, button):
""" Save the canvas to the Journal. """
self.save_as_image.set_icon("image-saveon")
@@ -792,14 +779,14 @@ class TurtleArtActivity(activity.Activity):
self.save_as_image = _add_button('image-saveoff', _("Save as image"),
self.do_save_as_image_cb,
journal_toolbar_button)
- self.load_python = _add_button('pippy-openoff', _("Load my block"),
- self.do_load_python_cb,
- journal_toolbar_button)
self.load_ta_project = _add_button('load-from-journal',
_("Import project from the Journal"), self.do_load_ta_project_cb,
journal_toolbar_button)
_add_separator(journal_toolbar)
- self.samples_button = _add_button("stock-open", _('Samples'),
+ self.load_python = _add_button('pippy-openoff', _("Load Python block"),
+ self.do_load_python_cb,
+ journal_toolbar_button)
+ self.samples_button = _add_button("ta-open", _('Load example'),
self.do_samples_cb, journal_toolbar_button)
copy = _add_button('edit-copy', _('Copy'), self._copy_cb,
edit_toolbar_button, '<Ctrl>c')
@@ -912,25 +899,7 @@ class TurtleArtActivity(activity.Activity):
if FILE.readline() == version:
newversion = False
except IOError:
- _logger.debug("Creating a tamyblock.py Journal entry")
-
- # Make sure there is a copy of tamyblock.py in the Journal
- if newversion:
- dsobject = datastore.create()
- dsobject.metadata['title'] = 'tamyblock.py'
- dsobject.metadata['icon-color'] = \
- profile.get_color().to_string()
- dsobject.metadata['mime_type'] = 'text/x-python'
- dsobject.metadata['activity'] = 'org.laptop.Pippy'
- dsobject.set_file_path(os.path.join(activity.get_bundle_path(),
- 'TurtleArt/tamyblock.py'))
- try:
- datastore.write(dsobject)
- except IOError:
- _logger.error("Error copying %s to the datastore" % \
- (os.path.join(activity.get_bundle_path(),
- 'TurtleArt/tamyblock.py')))
- dsobject.destroy()
+ _logger.debug("Couldn't read version number")
versiondata.append(version)
file_handle = open(os.path.join(datapath, filename), "w")
@@ -954,14 +923,6 @@ class TurtleArtActivity(activity.Activity):
else: # if new, load a start brick onto the canvas
self.tw.load_start()
- def _load_python_code(self):
- """ Check to see if there is Python code to be loaded. """
- try:
- dsobject = datastore.get(self.metadata['python code'])
- self._load_python(dsobject)
- except:
- pass
-
def _setup_sharing(self):
""" A simplistic sharing model: the sharer is the master """
# TODO: hand off role of master is sharer leaves