Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArtActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArtActivity.py')
-rw-r--r--TurtleArtActivity.py446
1 files changed, 196 insertions, 250 deletions
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index 9292f65..93a367a 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -28,38 +28,30 @@ import gobject
import logging
_logger = logging.getLogger('turtleart-activity')
-import sugar
from sugar.activity import activity
try: # 0.86 toolbar widgets
- from sugar.bundle.activitybundle import ActivityBundle
from sugar.activity.widgets import ActivityToolbarButton
from sugar.activity.widgets import StopButton
from sugar.graphics.toolbarbox import ToolbarBox
from sugar.graphics.toolbarbox import ToolbarButton
- _new_sugar_system = True
+ NEW_SUGAR_SYSTEM = True
except ImportError:
- _new_sugar_system = False
- pass
+ NEW_SUGAR_SYSTEM = False
from sugar.graphics.toolbutton import ToolButton
-from sugar.graphics.menuitem import MenuItem
-from sugar.graphics.icon import Icon
from sugar.datastore import datastore
import telepathy
-from dbus.service import method, signal
+from dbus.service import signal
from dbus.gobject_service import ExportedGObject
from sugar.presence import presenceservice
from sugar.presence.tubeconn import TubeConnection
from sugar import profile
from gettext import gettext as _
-import locale
import os.path
-import subprocess
import tarfile
-import sys
-from taconstants import *
+from taconstants import PALETTE_NAMES, OVERLAY_LAYER, HELP_STRINGS
from taexporthtml import save_html
from taexportlogo import save_logo
from tautils import data_to_file, data_to_string, data_from_string, get_path
@@ -72,30 +64,31 @@ PATH = '/org/laptop/TurtleArtActivity'
class TurtleArtActivity(activity.Activity):
def __init__(self, handle):
+ """ Activity subclass for Turtle Art """
super(TurtleArtActivity, self).__init__(handle)
datapath = get_path(activity, 'data')
self._setup_visibility_handler()
- self.new_sugar_system = _new_sugar_system
+ self.new_sugar_system = NEW_SUGAR_SYSTEM
self._setup_toolbar()
canvas = self._setup_scrolled_window()
- lang = self._check_ver_lang_change(datapath)
+ self._check_ver_change(datapath)
- self._setup_canvas(canvas, lang)
+ self._setup_canvas(canvas)
self._load_python_code()
self._setup_sharing()
- """ Activity toolbar callbacks """
+ # Activity toolbar callbacks
- def _do_save_as_html_cb(self, button):
- # write html out to datastore
+ def do_save_as_html_cb(self, button):
+ """ Write html out to datastore. """
self.save_as_html.set_icon("htmlon")
_logger.debug("saving html code")
# until we have URLs for datastore objects, always embed images
@@ -153,16 +146,16 @@ class TurtleArtActivity(activity.Activity):
dsobject.metadata['activity'] = 'org.laptop.WebActivity'
datastore.write(dsobject)
dsobject.destroy()
- gobject.timeout_add(250,self.save_as_html.set_icon, "htmloff")
+ gobject.timeout_add(250, self.save_as_html.set_icon, "htmloff")
self.tw.saved_pictures = []
return
- def _do_save_as_logo_cb(self, button):
- # write logo code out to datastore
+ def do_save_as_logo_cb(self, button):
+ """ Write logo code out to datastore. """
self.save_as_logo.set_icon("logo-saveon")
# grab code from stacks
- logocode = save_logo(self,self.tw)
+ logocode = save_logo(self.tw)
if len(logocode) == 0:
return
filename = "logosession.lg"
@@ -191,10 +184,11 @@ class TurtleArtActivity(activity.Activity):
dsobject.set_file_path(file_path)
datastore.write(dsobject)
- gobject.timeout_add(250,self.save_as_logo.set_icon, "logo-saveoff")
+ gobject.timeout_add(250, self.save_as_logo.set_icon, "logo-saveoff")
return
- def _do_load_ta_project_cb(self, button):
+ def do_load_ta_project_cb(self, button):
+ """ Load a project from the Journal """
from sugar.graphics.objectchooser import ObjectChooser
chooser = ObjectChooser(_("Project"), None, gtk.DIALOG_MODAL | \
gtk.DIALOG_DESTROY_WITH_PARENT)
@@ -213,14 +207,15 @@ class TurtleArtActivity(activity.Activity):
del chooser
return
- def _do_load_python_cb(self, button):
+ def do_load_python_cb(self, button):
+ """ Load Python code from the Journal. """
self.load_python.set_icon("pippy-openon")
self.import_py()
- gobject.timeout_add(250,self.load_python.set_icon, "pippy-openoff")
+ gobject.timeout_add(250, self.load_python.set_icon, "pippy-openoff")
return
- # Import Python code from the Journal to load into "myblock"
def import_py(self):
+ """ Import Python code from the Journal to load into 'myblock'. """
from sugar.graphics.objectchooser import ObjectChooser
chooser = ObjectChooser('Python code', None, gtk.DIALOG_MODAL | \
gtk.DIALOG_DESTROY_WITH_PARENT)
@@ -233,12 +228,13 @@ class TurtleArtActivity(activity.Activity):
chooser.destroy()
del chooser
- def _load_python(self,dsobject):
+ def _load_python(self, dsobject):
+ """ Read the Python code from the Journal object """
try:
_logger.debug("opening %s " % dsobject.file_path)
- FILE = open(dsobject.file_path, "r")
- self.tw.myblock = FILE.read()
- FILE.close()
+ 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
@@ -246,21 +242,19 @@ class TurtleArtActivity(activity.Activity):
_logger.debug("couldn't open %s" % dsobject.file_path)
dsobject.destroy()
- def _do_save_as_image_cb(self, button):
+ def do_save_as_image_cb(self, button):
+ """ Save the canvas to the Journal. """
self.save_as_image.set_icon("image-saveon")
_logger.debug("saving image to journal")
self.tw.save_as_image()
- gobject.timeout_add(250,self.save_as_image.set_icon, "image-saveoff")
+ gobject.timeout_add(250, self.save_as_image.set_icon, "image-saveoff")
return
- """ Save snapshot """
- def _do_keep_cb(self, button):
- # Create a datastore object
+ def do_keep_cb(self, button):
+ """ Save a snapshot of the project to the Journal. """
datapath = get_path(activity, 'instance')
-
tafile = os.path.join(datapath,"tmpfile.ta")
- print tafile
try:
data_to_file(self.tw.assemble_data_to_save(), tafile)
except:
@@ -283,9 +277,10 @@ class TurtleArtActivity(activity.Activity):
os.remove(tafile)
return
- """ Main toolbar button callbacks """
- """ Show/hide palette """
- def _do_palette_cb(self, button):
+ # Main toolbar button callbacks
+
+ def do_palette_cb(self, button):
+ """ Show/hide palette """
if self.tw.palette == True:
self.tw.hideshow_palette(False)
self.palette_button.set_icon("paletteon")
@@ -300,8 +295,8 @@ class TurtleArtActivity(activity.Activity):
if self.new_sugar_system:
self.palette_buttons[0].set_icon(PALETTE_NAMES[0]+'on')
- """ Palette selector buttons """
- def _do_palette_buttons_cb(self, button, i):
+ def do_palette_buttons_cb(self, button, i):
+ """ Palette selector buttons """
if self.tw.selected_palette is not None:
if self.tw.selected_palette != i:
self.palette_buttons[self.tw.selected_palette].set_icon(
@@ -311,16 +306,20 @@ class TurtleArtActivity(activity.Activity):
self.palette_button.set_icon("paletteoff")
self.palette_button.set_tooltip(_('Hide palette'))
- """ These methods are called both from buttons and palette """
+ # These methods are called both from buttons and palette.
+
def do_hidepalette(self):
+ """ Hide the palette. """
self.palette_button.set_icon("paletteon")
self.palette_button.set_tooltip(_('Show palette'))
def do_showpalette(self):
+ """ Show the palette. """
self.palette_button.set_icon("paletteoff")
self.palette_button.set_tooltip(_('Hide palette'))
- def _do_hideshow_cb(self, button):
+ def do_hideshow_cb(self, button):
+ """ Toggle visibility. """
self.tw.hideshow_button()
if self.tw.hide == True: # we just hid the blocks
self.blocks_button.set_icon("hideshowon")
@@ -337,59 +336,64 @@ class TurtleArtActivity(activity.Activity):
self.palette_button.set_tooltip(_('Hide palette'))
def do_hide(self):
+ """ Hide blocks. """
self.blocks_button.set_icon("hideshowon")
self.blocks_button.set_tooltip(_('Show blocks'))
self.palette_button.set_icon("paletteon")
self.palette_button.set_tooltip(_('Show palette'))
def do_show(self):
+ """ Show blocks. """
self.blocks_button.set_icon("hideshowoff")
self.blocks_button.set_tooltip(_('Hide blocks'))
self.palette_button.set_icon("paletteoff")
self.palette_button.set_tooltip(_('Hide palette'))
- def _do_eraser_cb(self, button):
+ def do_eraser_cb(self, button):
+ """ Clear the screen and recenter. """
self.eraser_button.set_icon("eraseroff")
self.recenter()
self.tw.eraser_button()
- gobject.timeout_add(250,self.eraser_button.set_icon,"eraseron")
+ gobject.timeout_add(250, self.eraser_button.set_icon, "eraseron")
- def _do_run_cb(self, button):
+ def do_run_cb(self, button):
+ """ Callback for run button (rabbit). """
self.run_button.set_icon("run-faston")
self.tw.lc.trace = 0
self.tw.run_button(0)
- gobject.timeout_add(1000,self.run_button.set_icon,"run-fastoff")
+ gobject.timeout_add(1000, self.run_button.set_icon, "run-fastoff")
- def _do_step_cb(self, button):
+ def do_step_cb(self, button):
+ """ Callback for step button (turtle). """
self.step_button.set_icon("run-slowon")
self.tw.lc.trace = 0
self.tw.run_button(3)
- gobject.timeout_add(1000,self.step_button.set_icon,"run-slowoff")
+ gobject.timeout_add(1000, self.step_button.set_icon, "run-slowoff")
- def _do_debug_cb(self, button):
+ def do_debug_cb(self, button):
+ """ Callback for debug button (bug). """
self.debug_button.set_icon("debugon")
self.tw.lc.trace = 1
self.tw.run_button(6)
- gobject.timeout_add(1000,self.debug_button.set_icon,"debugoff")
+ gobject.timeout_add(1000, self.debug_button.set_icon, "debugoff")
- def _do_stop_cb(self, button):
+ def do_stop_cb(self, button):
+ """ Callback for stop button. """
self.stop_button.set_icon("stopitoff")
self.tw.stop_button()
self.step_button.set_icon("run-slowoff")
self.run_button.set_icon("run-fastoff")
- """ Sample projects open dialog """
- def _do_samples_cb(self, button):
+ def do_samples_cb(self, button):
+ """ Sample projects open dialog """
# FIXME: encapsulation!
self.tw.load_file(True)
# run the activity
self.stop_button.set_icon("stopiton")
self.tw.run_button(0)
- """
- Recenter scrolled window around canvas
- """
def recenter(self):
+ """ Recenter scrolled window around canvas. """
hadj = self.sw.get_hadjustment()
hadj.set_value(0)
self.sw.set_hadjustment(hadj)
@@ -397,33 +401,32 @@ class TurtleArtActivity(activity.Activity):
vadj.set_value(0)
self.sw.set_vadjustment(vadj)
- def _do_fullscreen_cb(self, button):
+ def do_fullscreen_cb(self, button):
+ """ Hide the Sugar toolbars. """
self.fullscreen()
self.recenter()
- def _do_resize_blocks_cb(self, button, scale_factor):
+ def do_resize_blocks_cb(self, button, scale_factor):
+ """ Scale the blocks. """
self.tw.block_scale *= scale_factor
self.tw.resize_blocks()
- """
- Display coordinate grids
- """
- def _do_cartesian_cb(self, button):
+ def do_cartesian_cb(self, button):
+ """ Display Cartesian coordinate grid. """
if self.tw.cartesian:
self.tw.set_cartesian(False)
else:
self.tw.set_cartesian(True)
- def _do_polar_cb(self, button):
+ def do_polar_cb(self, button):
+ """ Display Polar coordinate grid. """
if self.tw.polar:
self.tw.set_polar(False)
else:
self.tw.set_polar(True)
- """
- Rescale coordinate system to 100 == height/2 or 100 == 100 pixels (default)
- """
- def _do_rescale_cb(self, button):
+ def do_rescale_cb(self, button):
+ """ Rescale coordinate system (100==height/2 or 100 pixels). """
if self.tw.coord_scale == 1:
self.tw.coord_scale = self.tw.height/200
self.rescale_button.set_icon("contract-coordinates")
@@ -442,29 +445,28 @@ class TurtleArtActivity(activity.Activity):
self.tw.overlay_shapes['Cartesian_labeled'].set_layer(
OVERLAY_LAYER)
- """
- View logo code as part of view source.
- """
def get_document_path(self, async_cb, async_err_cb):
+ """ View Logo code as part of view source. """
logo_code_path = self._dump_logo_code()
async_cb(logo_code_path)
def _dump_logo_code(self):
+ """ Save Logo code to Journal. """
datapath = get_path(activity, 'instance')
tafile = os.path.join(datapath,"tmpfile.ta")
try:
- code = save_logo(self, self.tw)
+ code = save_logo(self.tw)
f = file(tafile, "w")
f.write(code)
f.close()
except Exception, e:
- print("couldn't dump code to view source: " + str(e))
+ print("Couldn't dump code to view source: " + str(e))
return tafile
- """
- Either set up initial share...
- """
+ # Sharing-related callbacks
+
def _shared_cb(self, activity):
+ """ Either set up initial share... """
if self._shared_activity is None:
_logger.error("Failed to share or join activity ... \
_shared_activity is null in _shared_cb()")
@@ -486,10 +488,8 @@ class TurtleArtActivity(activity.Activity):
id = self.tubes_chan[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube(
SERVICE, {})
- """
- ...or join an exisiting share.
- """
def _joined_cb(self, activity):
+ """ ...or join an exisiting share. """
if self._shared_activity is None:
_logger.error("Failed to share or join activity ... \
_shared_activity is null in _shared_cb()")
@@ -521,10 +521,8 @@ class TurtleArtActivity(activity.Activity):
def _list_tubes_error_cb(self, e):
_logger.error('ListTubes() failed: %s', e)
- """
- Create a new tube
- """
def _new_tube_cb(self, id, initiator, type, service, params, state):
+ """ Create a new tube. """
_logger.debug('New tube: ID=%d initator=%d type=%d service=%s '
'params=%r state=%d', id, initiator, type, service,
params, state)
@@ -544,70 +542,67 @@ class TurtleArtActivity(activity.Activity):
# now that we have the tube, we can ask for an initialization
if self.waiting_for_blocks:
- self._send_event("i")
-
- """
- Handle the receiving of events in share
- Events are sent as a tuple
- cmd:data
- where cmd is a mouse or keyboard event and data are x,y coordinates
- or a keysroke
- """
+ self.send_event("i")
+
def event_received_cb(self, text):
+ """ Handle the receiving of events in share """
+
+ """ DEPRECIATED
+ Events are sent as a tuple
+ cmd:data
+ where cmd is a mouse or keyboard event and data are x,y coordinates
+ or a keysroke
+ """
# maybe we can use a stack to share events to new-comers?
# self._share += "text + "\n"
if text[0] == 'p': # button press
- e,x,y,mask = text.split(":")
+ e, x, y, mask = text.split(":")
# _logger.debug("receiving button press: "+x+" "+y+" "+mask)
if mask == 'T':
- self.tw.button_press(True,int(x),int(y),False)
+ self.tw.button_press(True, int(x), int(y), False)
else:
- self.tw.button_press(False,int(x),int(y),False)
+ self.tw.button_press(False, int(x), int(y), False)
elif text[0] == 'r': # block release
- e,x,y = text.split(":")
+ e, x, y = text.split(":")
# _logger.debug("receiving button release: " + x + " " + y)
- self.tw.button_release(int(x),int(y),False)
+ self.tw.button_release(int(x), int(y), False)
elif text[0] == 'm': # mouse move
- e,x,y = text.split(":")
+ e, x, y = text.split(":")
_logger.debug("receiving move: " + x + " " + y)
- self.tw.mouse_move(0,0,False,int(x),int(y))
+ self.tw.mouse_move(0, 0, False, int(x), int(y))
elif text[0] == 'k': # typing
- e,mask,keyname = text.split(":",3)
+ e, mask, keyname = text.split(":", 3)
# _logger.debug("recieving key press: " + mask + " " + keyname)
if mask == 'T':
- self.tw.key_press(True,keyname,False)
+ self.tw.key_press(True, keyname, False)
else:
- self.tw.key_press(False,keyname,False)
+ self.tw.key_press(False, keyname, False)
elif text[0] == 'i': # request for current state
# sharer should send current state to joiner
if self.initiating:
_logger.debug("serialize the project and send to joiner")
text = data_to_string(self.tw.assemble_data_to_save(True, True))
- self._send_event("I:" + text)
+ self.send_event("I:" + text)
self.tw.show_palette()
elif text[0] == 'I': # receiving current state
if self.waiting_for_blocks:
_logger.debug("receiving project from sharer")
- e,text = text.split(":",2)
+ e, text = text.split(":", 2)
if len(text) > 0:
self.tw.new_project()
self.tw.process_data(data_from_string(text))
# all caught up
self.waiting_for_blocks = False
- """
- Send event through the tube
- """
- def _send_event(self, entry):
+ def send_event(self, entry):
+ """ Send event through the tube. """
# nick = profile.get_nick_name()
# nick = nick.upper()
if hasattr(self, 'chattube') and self.chattube is not None:
self.chattube.SendText(entry)
- """
- Callback method for when the activity's visibility changes
- """
def __visibility_notify_cb(self, window, event):
+ """ Callback method for when the activity's visibility changes. """
if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED:
# _logger.debug("I am not visible so I should free the audio")
self.tw.lc.ag = None
@@ -616,18 +611,17 @@ class TurtleArtActivity(activity.Activity):
pass
def update_title_cb(self, widget, event, toolbox):
+ """ Update the title. """
toolbox._activity_toolbar._update_title_cb()
toolbox._activity_toolbar._update_title_sid = True
def _keep_clicked_cb(self, button):
+ """ Keep button clicked. """
self.jobject_new_patch()
- """
- Setup toolbar according to Sugar version
- """
def _setup_toolbar(self):
-
+ """ Setup toolbar according to Sugar version """
if self.new_sugar_system:
# Use 0.86 toolbar design
toolbar_box = ToolbarBox()
@@ -637,35 +631,35 @@ class TurtleArtActivity(activity.Activity):
# Save snapshot is like Keep, but it creates a new activity id
self.keep_button = ToolButton('filesave')
self.keep_button.set_tooltip(_("Save snapshot"))
- self.keep_button.connect('clicked', self._do_keep_cb)
+ self.keep_button.connect('clicked', self.do_keep_cb)
self.keep_button.show()
activity_button.props.page.insert(self.keep_button, -1)
# Save as HTML
self.save_as_html = ToolButton('htmloff')
self.save_as_html.set_tooltip(_("Save as HTML"))
- self.save_as_html.connect('clicked', self._do_save_as_html_cb)
+ self.save_as_html.connect('clicked', self.do_save_as_html_cb)
self.save_as_html.show()
activity_button.props.page.insert(self.save_as_html, -1)
# Save as Logo
self.save_as_logo = ToolButton('logo-saveoff')
self.save_as_logo.set_tooltip(_("Save as Logo"))
- self.save_as_logo.connect('clicked', self._do_save_as_logo_cb)
+ self.save_as_logo.connect('clicked', self.do_save_as_logo_cb)
self.save_as_logo.show()
activity_button.props.page.insert(self.save_as_logo, -1)
# Save as image
self.save_as_image = ToolButton('image-saveoff')
self.save_as_image.set_tooltip(_("Save as image"))
- self.save_as_image.connect('clicked', self._do_save_as_image_cb)
+ self.save_as_image.connect('clicked', self.do_save_as_image_cb)
self.save_as_image.show()
activity_button.props.page.insert(self.save_as_image, -1)
# Load Python code into programmable brick
self.load_python = ToolButton('pippy-openoff')
self.load_python.set_tooltip(_("Load my block"))
- self.load_python.connect('clicked', self._do_load_python_cb)
+ self.load_python.connect('clicked', self.do_load_python_cb)
self.load_python.show()
activity_button.props.page.insert(self.load_python, -1)
@@ -673,7 +667,7 @@ class TurtleArtActivity(activity.Activity):
self.load_ta_project = ToolButton('load-from-journal')
self.load_ta_project.set_tooltip(\
_("Import project from the Journal"))
- self.load_ta_project.connect('clicked', self._do_load_ta_project_cb)
+ self.load_ta_project.connect('clicked', self.do_load_ta_project_cb)
self.load_ta_project.show()
activity_button.props.page.insert(self.load_ta_project, -1)
@@ -695,20 +689,20 @@ class TurtleArtActivity(activity.Activity):
fullscreen_button = ToolButton('view-fullscreen')
fullscreen_button.set_tooltip(_("Fullscreen"))
fullscreen_button.props.accelerator = '<Alt>Enter'
- fullscreen_button.connect('clicked', self._do_fullscreen_cb)
- view_toolbar.insert(fullscreen_button,-1)
+ fullscreen_button.connect('clicked', self.do_fullscreen_cb)
+ view_toolbar.insert(fullscreen_button, -1)
fullscreen_button.show()
cartesian_button = ToolButton('view-Cartesian')
cartesian_button.set_tooltip(_("Cartesian coordinates"))
- cartesian_button.connect('clicked', self._do_cartesian_cb)
- view_toolbar.insert(cartesian_button,-1)
+ cartesian_button.connect('clicked', self.do_cartesian_cb)
+ view_toolbar.insert(cartesian_button, -1)
cartesian_button.show()
polar_button = ToolButton('view-polar')
polar_button.set_tooltip(_("Polar coordinates"))
- polar_button.connect('clicked', self._do_polar_cb)
- view_toolbar.insert(polar_button,-1)
+ polar_button.connect('clicked', self.do_polar_cb)
+ view_toolbar.insert(polar_button, -1)
polar_button.show()
separator = gtk.SeparatorToolItem()
@@ -723,7 +717,7 @@ class TurtleArtActivity(activity.Activity):
self.coordinates_label.show()
self.coordinates_toolitem = gtk.ToolItem()
self.coordinates_toolitem.add(self.coordinates_label)
- view_toolbar.insert(self.coordinates_toolitem,-1)
+ view_toolbar.insert(self.coordinates_toolitem, -1)
self.coordinates_toolitem.show()
separator = gtk.SeparatorToolItem()
@@ -734,22 +728,22 @@ class TurtleArtActivity(activity.Activity):
self.rescale_button = ToolButton('expand-coordinates')
self.rescale_button.set_tooltip(_("Rescale coordinates up"))
- self.rescale_button.connect('clicked', self._do_rescale_cb)
- view_toolbar.insert(self.rescale_button,-1)
+ self.rescale_button.connect('clicked', self.do_rescale_cb)
+ view_toolbar.insert(self.rescale_button, -1)
self.rescale_button.show()
self.resize_up_button = ToolButton('resize+')
self.resize_up_button.set_tooltip(_("Grow blocks"))
self.resize_up_button.connect('clicked',
- self._do_resize_blocks_cb, 1.5)
- view_toolbar.insert(self.resize_up_button,-1)
+ self.do_resize_blocks_cb, 1.5)
+ view_toolbar.insert(self.resize_up_button, -1)
self.resize_up_button.show()
self.resize_down_button = ToolButton('resize-')
self.resize_down_button.set_tooltip(_("Shrink blocks"))
self.resize_down_button.connect('clicked',
- self._do_resize_blocks_cb, 0.667)
- view_toolbar.insert(self.resize_down_button,-1)
+ self.do_resize_blocks_cb, 0.667)
+ view_toolbar.insert(self.resize_down_button, -1)
self.resize_down_button.show()
view_toolbar_button = ToolbarButton(
@@ -770,7 +764,7 @@ class TurtleArtActivity(activity.Activity):
self.palette_buttons[i].set_tooltip(HELP_STRINGS[name])
self.palette_buttons[i].props.sensitive = True
self.palette_buttons[i].connect('clicked',
- self._do_palette_buttons_cb, i)
+ self.do_palette_buttons_cb, i)
palette_toolbar.insert(self.palette_buttons[i], -1)
self.palette_buttons[i].show()
@@ -783,7 +777,7 @@ class TurtleArtActivity(activity.Activity):
self.palette_button = ToolButton( "paletteoff" )
self.palette_button.set_tooltip(_('Hide palette'))
self.palette_button.props.sensitive = True
- self.palette_button.connect('clicked', self._do_palette_cb)
+ self.palette_button.connect('clicked', self.do_palette_cb)
self.palette_button.props.accelerator = _('<Ctrl>p')
palette_toolbar.insert(self.palette_button, -1)
self.palette_button.show()
@@ -791,7 +785,7 @@ class TurtleArtActivity(activity.Activity):
self.blocks_button = ToolButton( "hideshowoff" )
self.blocks_button.set_tooltip(_('Hide blocks'))
self.blocks_button.props.sensitive = True
- self.blocks_button.connect('clicked', self._do_hideshow_cb)
+ self.blocks_button.connect('clicked', self.do_hideshow_cb)
self.blocks_button.props.accelerator = _('<Ctrl>b')
palette_toolbar.insert(self.blocks_button, -1)
self.blocks_button.show()
@@ -813,7 +807,7 @@ class TurtleArtActivity(activity.Activity):
self.eraser_button = ToolButton( "eraseron" )
self.eraser_button.set_tooltip(_('Clean'))
self.eraser_button.props.sensitive = True
- self.eraser_button.connect('clicked', self._do_eraser_cb)
+ self.eraser_button.connect('clicked', self.do_eraser_cb)
self.eraser_button.props.accelerator = _('<Ctrl>e')
toolbar_box.toolbar.insert(self.eraser_button, -1)
self.eraser_button.show()
@@ -822,7 +816,7 @@ class TurtleArtActivity(activity.Activity):
self.run_button = ToolButton( "run-fastoff" )
self.run_button.set_tooltip(_('Run'))
self.run_button.props.sensitive = True
- self.run_button.connect('clicked', self._do_run_cb)
+ self.run_button.connect('clicked', self.do_run_cb)
self.run_button.props.accelerator = _('<Ctrl>r')
toolbar_box.toolbar.insert(self.run_button, -1)
self.run_button.show()
@@ -831,7 +825,7 @@ class TurtleArtActivity(activity.Activity):
self.step_button = ToolButton( "run-slowoff" )
self.step_button.set_tooltip(_('Step'))
self.step_button.props.sensitive = True
- self.step_button.connect('clicked', self._do_step_cb)
+ self.step_button.connect('clicked', self.do_step_cb)
self.step_button.props.accelerator = _('<Ctrl>w')
toolbar_box.toolbar.insert(self.step_button, -1)
self.step_button.show()
@@ -840,7 +834,7 @@ class TurtleArtActivity(activity.Activity):
self.debug_button = ToolButton( "debugoff" )
self.debug_button.set_tooltip(_('Debug'))
self.debug_button.props.sensitive = True
- self.debug_button.connect('clicked', self._do_debug_cb)
+ self.debug_button.connect('clicked', self.do_debug_cb)
self.debug_button.props.accelerator = _('<Alt>d')
toolbar_box.toolbar.insert(self.debug_button, -1)
self.debug_button.show()
@@ -849,7 +843,7 @@ class TurtleArtActivity(activity.Activity):
self.stop_button = ToolButton( "stopitoff" )
self.stop_button.set_tooltip(_('Stop turtle'))
self.stop_button.props.sensitive = True
- self.stop_button.connect('clicked', self._do_stop_cb)
+ self.stop_button.connect('clicked', self.do_stop_cb)
self.stop_button.props.accelerator = _('<Ctrl>s')
toolbar_box.toolbar.insert(self.stop_button, -1)
self.stop_button.show()
@@ -863,7 +857,7 @@ class TurtleArtActivity(activity.Activity):
help_toolbar = gtk.Toolbar()
samples_button = ToolButton( "stock-open" )
samples_button.set_tooltip(_('Samples'))
- samples_button.connect('clicked', self._do_samples_cb)
+ samples_button.connect('clicked', self.do_samples_cb)
samples_button.show()
help_toolbar.insert(samples_button, -1)
@@ -878,7 +872,7 @@ class TurtleArtActivity(activity.Activity):
self.hover_help_label.show()
self.hover_toolitem = gtk.ToolItem()
self.hover_toolitem.add(self.hover_help_label)
- help_toolbar.insert(self.hover_toolitem,-1)
+ help_toolbar.insert(self.hover_toolitem, -1)
self.hover_toolitem.show()
help_toolbar_button = ToolbarButton(
@@ -919,16 +913,14 @@ class TurtleArtActivity(activity.Activity):
self.saveasToolbar = SaveAsToolbar(self)
self.toolbox.add_toolbar( _('Import/Export'), self.saveasToolbar )
self.helpToolbar = HelpToolbar(self)
- self.toolbox.add_toolbar(_('Help'),self.helpToolbar)
+ self.toolbox.add_toolbar(_('Help'), self.helpToolbar)
self.toolbox.show()
# Set the project toolbar as the initial one selected
self.toolbox.set_current_toolbar(1)
- """
- Create a scrolled window to contain the turtle canvas
- """
def _setup_scrolled_window(self):
+ """ Create a scrolled window to contain the turtle canvas. """
self.sw = gtk.ScrolledWindow()
self.set_canvas(self.sw)
self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
@@ -941,40 +933,24 @@ class TurtleArtActivity(activity.Activity):
canvas.show()
return canvas
- """
- To be replaced with date checking in tasetup.py;
- each language group should be stored in it's own sub-directory
- """
- def _check_ver_lang_change(self, datapath):
- # Check to see if the version or language has changed
+ def _check_ver_change(self, datapath):
+ """ To be replaced with date checking. """
+ # Check to see if the version has changed
try:
version = os.environ['SUGAR_BUNDLE_VERSION']
except:
version = " unknown"
- lang = locale.getdefaultlocale()[0]
- if not lang:
- lang = 'en'
- lang = lang[0:2]
- if not os.path.isdir(os.path.join(activity.get_bundle_path(), \
- 'images', lang)):
- lang = 'en'
-
- # If either has changed, remove the old png files
filename = "version.dat"
versiondata = []
newversion = True
try:
FILE = open(os.path.join(datapath, filename), "r")
- if FILE.readline() == lang + version:
+ if FILE.readline() == version:
newversion = False
- else:
- _logger.debug("out with the old, in with the new")
- cmd = "rm " + os.path.join(datapath, '*.png')
- subprocess.check_call(cmd, shell=True)
except:
- _logger.debug("writing new version data")
- _logger.debug("and creating a tamyblock.py Journal entry")
+ _logger.debug("Writing new version data...")
+ _logger.debug("...and creating a tamyblock.py Journal entry")
# Make sure there is a copy of tamyblock.py in the Journal
if newversion:
@@ -989,46 +965,38 @@ class TurtleArtActivity(activity.Activity):
datastore.write(dsobject)
dsobject.destroy()
- versiondata.append(lang + version)
- FILE = open(os.path.join(datapath, filename), "w")
- FILE.writelines(versiondata)
- FILE.close()
-
- return lang
+ versiondata.append(version)
+ file_handle = open(os.path.join(datapath, filename), "w")
+ file_handle.writelines(versiondata)
+ file_handle.close()
+ return
- """
- Initialize the turtle art canvas
- """
- def _setup_canvas(self, canvas, lang):
+ def _setup_canvas(self, canvas):
+ """ Initialize the turtle art canvas. """
bundle_path = activity.get_bundle_path()
- self.tw = TurtleArtWindow(canvas, bundle_path, lang, self,
+ self.tw = TurtleArtWindow(canvas, bundle_path, self,
profile.get_color().to_string())
# self.tw.activity = self
self.tw.window.grab_focus()
path = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data')
- self.tw.save_folder= path
+ self.tw.save_folder = path
if self._jobject and self._jobject.file_path:
self.read_file(self._jobject.file_path)
else: # if new, load a start brick onto the canvas
self.tw.load_start()
- """
- Check to see if there is Python code to be loaded
- """
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
-
- """
- A simplistic sharing model: the sharer is the master;
- TODO: hand off role of master is sharer leaves
- """
def _setup_sharing(self):
+ """ A simplistic sharing model: the sharer is the master """
+ # TODO: hand off role of master is sharer leaves
# Get the Presence Service
self.pservice = presenceservice.get_instance()
self.initiating = None # sharing (True) or joining (False)
@@ -1043,26 +1011,20 @@ class TurtleArtActivity(activity.Activity):
self.connect('joined', self._joined_cb)
- """
- Notify when the visibility state changes
- """
def _setup_visibility_handler(self):
+ """ Notify when the visibility state changes """
self.add_events(gtk.gdk.VISIBILITY_NOTIFY_MASK)
self.connect("visibility-notify-event", self.__visibility_notify_cb)
- """
- Write the project to the Journal
- """
def write_file(self, file_path):
+ """ Write the project to the Journal. """
_logger.debug("Write file: %s" % file_path)
self.metadata['mime_type'] = 'application/x-turtle-art'
data_to_file(self.tw.assemble_data_to_save(), file_path)
- """
- Read a project in and then run it
- """
def read_file(self, file_path, run_it = True):
- import tarfile,os,tempfile,shutil
+ """ Read a project in and then run it. """
+ import tarfile, os, tempfile, shutil
if hasattr(self, 'tw'):
_logger.debug("Read file: %s" % file_path)
@@ -1098,10 +1060,8 @@ class TurtleArtActivity(activity.Activity):
else:
_logger.debug("Deferring reading file %s" % file_path)
- """
- Save instance to Journal
- """
def jobject_new_patch(self):
+ """ Save instance to Journal. """
oldj = self._jobject
self._jobject = datastore.create()
self._jobject.metadata['title'] = oldj.metadata['title']
@@ -1120,12 +1080,10 @@ class TurtleArtActivity(activity.Activity):
error_handler=self._internal_jobject_error_cb)
self._jobject.destroy()
-"""
-Class for setting up tube for sharing
-"""
class ChatTube(ExportedGObject):
def __init__(self, tube, is_initiator, stack_received_cb):
+ """Class for setting up tube for sharing."""
super(ChatTube, self).__init__(tube, PATH)
self.tube = tube
self.is_initiator = is_initiator # Are we sharing or joining activity?
@@ -1145,11 +1103,9 @@ class ChatTube(ExportedGObject):
def SendText(self, text):
self.stack = text
-"""
-View toolbar: fullscreen, Cartesian, polar, coordinates
-"""
class ViewToolbar(gtk.Toolbar):
def __init__(self, pc):
+ """ View toolbar: fullscreen, Cartesian, polar, coordinates """
gtk.Toolbar.__init__(self)
self.activity = pc
@@ -1162,7 +1118,7 @@ class ViewToolbar(gtk.Toolbar):
except:
pass
self.activity.fullscreen_button.connect('clicked', \
- self.activity._do_fullscreen_cb)
+ self.activity.do_fullscreen_cb)
self.insert(self.activity.fullscreen_button, -1)
self.activity.fullscreen_button.show()
@@ -1171,7 +1127,7 @@ class ViewToolbar(gtk.Toolbar):
self.activity.cartesian_button.set_tooltip(_('Cartesian coordinates'))
self.activity.cartesian_button.props.sensitive = True
self.activity.cartesian_button.connect('clicked', \
- self.activity._do_cartesian_cb)
+ self.activity.do_cartesian_cb)
self.insert(self.activity.cartesian_button, -1)
self.activity.cartesian_button.show()
@@ -1180,7 +1136,7 @@ class ViewToolbar(gtk.Toolbar):
self.activity.polar_button.set_tooltip(_('Polar coordinates'))
self.activity.polar_button.props.sensitive = True
self.activity.polar_button.connect('clicked', \
- self.activity._do_polar_cb)
+ self.activity.do_polar_cb)
self.insert(self.activity.polar_button, -1)
self.activity.polar_button.show()
@@ -1196,7 +1152,7 @@ class ViewToolbar(gtk.Toolbar):
self.activity.coordinates_label.show()
self.activity.coordinates_toolitem = gtk.ToolItem()
self.activity.coordinates_toolitem.add(self.activity.coordinates_label)
- self.insert(self.activity.coordinates_toolitem,-1)
+ self.insert(self.activity.coordinates_toolitem, -1)
self.activity.coordinates_toolitem.show()
separator = gtk.SeparatorToolItem()
@@ -1208,29 +1164,27 @@ class ViewToolbar(gtk.Toolbar):
self.activity.resize_up_button = ToolButton('resize+')
self.activity.resize_up_button.set_tooltip(_("Grow blocks"))
self.activity.resize_up_button.connect('clicked',
- self.activity._do_resize_blocks_cb, 1.5)
- self.insert(self.activity.resize_up_button,-1)
+ self.activity.do_resize_blocks_cb, 1.5)
+ self.insert(self.activity.resize_up_button, -1)
self.activity.resize_up_button.show()
self.activity.resize_down_button = ToolButton('resize-')
self.activity.resize_down_button.set_tooltip(_("Shrink blocks"))
self.activity.resize_down_button.connect('clicked',
- self.activity._do_resize_blocks_cb, 0.667)
- self.insert(self.activity.resize_down_button,-1)
+ self.activity.do_resize_blocks_cb, 0.667)
+ self.insert(self.activity.resize_down_button, -1)
self.activity.resize_down_button.show()
self.activity.rescale_button = ToolButton('expand-coordinates')
self.activity.rescale_button.set_tooltip(_("Rescale coordinates up"))
self.activity.rescale_button.connect('clicked', \
- self.activity._do_rescale_cb)
- self.insert(self.activity.rescale_button,-1)
+ self.activity.do_rescale_cb)
+ self.insert(self.activity.rescale_button, -1)
self.activity.rescale_button.show()
-"""
-Edit toolbar: copy and paste text and stacks
-"""
class EditToolbar(gtk.Toolbar):
def __init__(self, pc):
+ """ Edit toolbar: copy and paste text and stacks """
gtk.Toolbar.__init__(self)
self.activity = pc
@@ -1279,11 +1233,9 @@ class EditToolbar(gtk.Toolbar):
else:
self.activity.tw.process_data(data_from_string(text))
-"""
-Help toolbar: Just an icon and a label for displaying hover help
-"""
class HelpToolbar(gtk.Toolbar):
def __init__(self, pc):
+ """ Help toolbar: Just an icon and a label for displaying hover help """
gtk.Toolbar.__init__(self)
self.activity = pc
@@ -1300,15 +1252,12 @@ class HelpToolbar(gtk.Toolbar):
self.activity.hover_help_label.show()
self.activity.hover_toolitem = gtk.ToolItem()
self.activity.hover_toolitem.add(self.activity.hover_help_label)
- self.insert(self.activity.hover_toolitem,-1)
+ self.insert(self.activity.hover_toolitem, -1)
self.activity.hover_toolitem.show()
-"""
-SaveAs toolbar: (1) load samples; (2) save as HTML; (3) save as LOGO;
-(4) save as PNG; and (5) import Python code.
-"""
class SaveAsToolbar(gtk.Toolbar):
def __init__(self, pc):
+ """ SaveAs toolbar """
gtk.Toolbar.__init__(self)
self.activity = pc
@@ -1317,7 +1266,7 @@ class SaveAsToolbar(gtk.Toolbar):
self.activity.save_as_html.set_tooltip(_('Save as HTML'))
self.activity.save_as_html.props.sensitive = True
self.activity.save_as_html.connect('clicked', \
- self.activity._do_save_as_html_cb)
+ self.activity.do_save_as_html_cb)
self.insert(self.activity.save_as_html, -1)
self.activity.save_as_html.show()
@@ -1326,7 +1275,7 @@ class SaveAsToolbar(gtk.Toolbar):
self.activity.save_as_logo.set_tooltip(_('Save Logo'))
self.activity.save_as_logo.props.sensitive = True
self.activity.save_as_logo.connect('clicked', \
- self.activity._do_save_as_logo_cb)
+ self.activity.do_save_as_logo_cb)
self.insert(self.activity.save_as_logo, -1)
self.activity.save_as_logo.show()
@@ -1335,7 +1284,7 @@ class SaveAsToolbar(gtk.Toolbar):
self.activity.save_as_image.set_tooltip(_('Save as image'))
self.activity.save_as_image.props.sensitive = True
self.activity.save_as_image.connect('clicked', \
- self.activity._do_save_as_image_cb)
+ self.activity.do_save_as_image_cb)
self.insert(self.activity.save_as_image, -1)
self.activity.save_as_image.show()
@@ -1349,7 +1298,7 @@ class SaveAsToolbar(gtk.Toolbar):
self.activity.load_python.set_tooltip(_('Load my block'))
self.activity.load_python.props.sensitive = True
self.activity.load_python.connect('clicked', \
- self.activity._do_load_python_cb)
+ self.activity.do_load_python_cb)
self.insert(self.activity.load_python, -1)
self.activity.load_python.show()
@@ -1359,18 +1308,15 @@ class SaveAsToolbar(gtk.Toolbar):
_("Import project from the Journal"))
self.activity.load_ta_project.props.sensitive = True
self.activity.load_ta_project.connect('clicked', \
- self.activity._do_load_ta_project_cb)
+ self.activity.do_load_ta_project_cb)
self.insert(self.activity.load_ta_project, -1)
self.activity.load_ta_project.show()
-"""
-Project toolbar: show/hide palettes; show/hide blocks; run; walk; stop; erase;
- save as snapshot
-"""
class ProjectToolbar(gtk.Toolbar):
def __init__(self, pc):
+ """ Project toolbar """
gtk.Toolbar.__init__(self)
self.activity = pc
@@ -1379,7 +1325,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.palette_button.set_tooltip(_('Hide palette'))
self.activity.palette_button.props.sensitive = True
self.activity.palette_button.connect('clicked', \
- self.activity._do_palette_cb)
+ self.activity.do_palette_cb)
try:
self.activity.palette_button.props.accelerator = _('<Ctrl>p')
except:
@@ -1392,7 +1338,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.blocks_button.set_tooltip(_('Hide blocks'))
self.activity.blocks_button.props.sensitive = True
self.activity.blocks_button.connect('clicked', \
- self.activity._do_hideshow_cb)
+ self.activity.do_hideshow_cb)
try:
self.activity.blocks_button.props.accelerator = _('<Ctrl>b')
except:
@@ -1409,7 +1355,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.run_button = ToolButton( "run-fastoff" )
self.activity.run_button.set_tooltip(_('Run'))
self.activity.run_button.props.sensitive = True
- self.activity.run_button.connect('clicked', self.activity._do_run_cb)
+ self.activity.run_button.connect('clicked', self.activity.do_run_cb)
try:
self.activity.run_button.props.accelerator = _('<Ctrl>r')
except:
@@ -1421,7 +1367,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.step_button = ToolButton( "run-slowoff" )
self.activity.step_button.set_tooltip(_('Step'))
self.activity.step_button.props.sensitive = True
- self.activity.step_button.connect('clicked', self.activity._do_step_cb)
+ self.activity.step_button.connect('clicked', self.activity.do_step_cb)
try:
self.activity.step_button.props.accelerator = _('<Ctrl>w')
except:
@@ -1434,7 +1380,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.debug_button.set_tooltip(_('Debug'))
self.activity.debug_button.props.sensitive = True
self.activity.debug_button.connect('clicked', \
- self.activity._do_debug_cb)
+ self.activity.do_debug_cb)
try:
self.activity.debug_button.props.accelerator = _('<Ctrl>d')
except:
@@ -1446,7 +1392,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.stop_button = ToolButton( "stopitoff" )
self.activity.stop_button.set_tooltip(_('Stop turtle'))
self.activity.stop_button.props.sensitive = True
- self.activity.stop_button.connect('clicked', self.activity._do_stop_cb)
+ self.activity.stop_button.connect('clicked', self.activity.do_stop_cb)
try:
self.activity.stop_button.props.accelerator = _('<Ctrl>s')
except:
@@ -1464,7 +1410,7 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.eraser_button.set_tooltip(_('Clean'))
self.activity.eraser_button.props.sensitive = True
self.activity.eraser_button.connect('clicked', \
- self.activity._do_eraser_cb)
+ self.activity.do_eraser_cb)
try:
self.activity.eraser_button.props.accelerator = _('<Ctrl>e')
except:
@@ -1486,7 +1432,7 @@ class ProjectToolbar(gtk.Toolbar):
except:
pass
self.activity.keep_button.connect('clicked', \
- self.activity._do_keep_cb)
+ self.activity.do_keep_cb)
self.insert(self.activity.keep_button, -1)
self.activity.keep_button.show()
@@ -1500,9 +1446,9 @@ class ProjectToolbar(gtk.Toolbar):
self.activity.samples_button.set_tooltip(_('Samples'))
self.activity.samples_button.props.sensitive = True
self.activity.samples_button.connect('clicked', \
- self.activity._do_samples_cb)
+ self.activity.do_samples_cb)
try:
- self.activity.samples_button.props.accelerator = _('<Ctrl>o')
+ self.activity.samples_button.props.accelerator = _('<Ctrl>o')
except:
pass
self.insert(self.activity.samples_button, -1)