Difference between revisions of "Activity Team/Compatibility Tips"

From Sugar Labs
Jump to navigation Jump to search
Line 51: Line 51:
  
 
[[Category:Activity Team]]
 
[[Category:Activity Team]]
 +
 +
=== Sugar toolbar version ===
 +
 +
Sugar toolbars changed in Sucrose v0.86. You can detect which version you are running by checking for an ImportError:
 +
 +
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
 +
except ImportError:
 +
    _new_sugar_system = False
 +
 +
Use the flag to determine whether to create old-style or new toolbars:
 +
 +
if _new_sugar_system:
 +
    # Use 0.86+ toolbar design
 +
    toolbar_box = ToolbarBox()
 +
    ...
 +
else:
 +
    # Use pre-0.86 toolbar design
 +
    self.toolbox = activity.ActivityToolbox(self)
 +
    ...
 +
 +
You can share callbacks between versions, but take care to make sure you are using the proper context:
 +
# 0.86+
 +
fullscreen_button.connect('clicked', self._do_fullscreen_cb)
 +
or
 +
# pre-0.86
 +
self.viewToolbar = ViewToolbar(self)
 +
 +
class ViewToolbar(gtk.Toolbar):
 +
    def __init__(self, pc):
 +
        self.activity = pc
 +
 +
        self.activity.fullscreen_button.connect('clicked', self.activity._do_fullscreen_cb)

Revision as of 14:10, 23 February 2010

Compatibility Tips

SUGAR_BUNDLE_VERSION

Some earlier OLPC builds (e.g., 703) do not have a bundle version environment variable, so you need to catch an exception if you want to access the version.

try:
    version = os.environ['SUGAR_BUNDLE_VERSION']
except:
    version = "unknown"

get_activity_root()

Some earlier OLPC builds (e.g., 656) do not have activity.get_activity_root(), so you need to catch an exception if you want to access the version.

try:
    path = activity.get_activity_root()
except:
    # early versions of Sugar (656) didn't support get_activity_root()
    path = "/home/olpc/.sugar/default/org.sugarlabs.[your activity name]"

svg:

Some earlier OLPC builds (e.g., 656) use an older version of the gtk svg libraries that don't process svg files that use the <svg:tag> syntax. It seems that removing svg: resolves the rendering problem.

<svg:path> won't work
<path> will work

Another issue is with SVG paths. Some SVG editors, e.g., inkscape, sometimes omit the l in a path that uses relative line-tos. These paths will not render properly on old OLPC builds.

<path d="m 100,100 10,10> won't work
<path d="m 100,100 l 10,10> will work

Screen size

The screen size varies on different hardware platforms. If you develop in an emulator, it is worthwhile trying different sizes to make sure your activity scales properly.

Some useful utilities:

width = gtk.gdk.screen_width()
height = gtk.gdk.screen_height()
toolbox = activity.ActivityToolbox(self)
toolboxheight = toolbox._activity_toolbar.size_request()[1]

import tarfile

At some point, the behavior of the Python tarfile library seems to have changed (I've not yet hunted down the documentation.) In any case, on Build 767, it was generating .tar suffixes and on later builds (newer Python libraries?) it was generating .gtar suffixes. I got burnt by this in Turtle Art so now I check for both.

if file_path[-5:] == ".gtar" or file_path[-4:] == ".tar":

or

if file_path.endswith(('.gtar', '.tar')):

Sugar toolbar version

Sugar toolbars changed in Sucrose v0.86. You can detect which version you are running by checking for an ImportError:

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
except ImportError:
    _new_sugar_system = False

Use the flag to determine whether to create old-style or new toolbars:

if _new_sugar_system:
    # Use 0.86+ toolbar design
    toolbar_box = ToolbarBox()
    ...
else:
    # Use pre-0.86 toolbar design
    self.toolbox = activity.ActivityToolbox(self)
    ...

You can share callbacks between versions, but take care to make sure you are using the proper context:

# 0.86+
fullscreen_button.connect('clicked', self._do_fullscreen_cb)

or

# pre-0.86
self.viewToolbar = ViewToolbar(self)
class ViewToolbar(gtk.Toolbar):
    def __init__(self, pc):
        self.activity = pc
        self.activity.fullscreen_button.connect('clicked', self.activity._do_fullscreen_cb)