Activity tutorial: Difference between revisions

From OLPC
Jump to navigation Jump to search
No edit summary
No edit summary
Line 86: Line 86:
[[Category:Sugar]]
[[Category:Sugar]]
[[Category:HowTo]]
[[Category:HowTo]]
[[Category:Activities]]

Revision as of 06:00, 14 February 2007

The tutorial explains step by step how to create the Hello World activity bundle.

Create the bundle directory structure.

hello.activity
hello.activity/activity

Write the activity.info file, to describe your bundle. The Activity Bundles specification explain in detail the meaning of each field.

[Activity]
name = HelloWorld
service_name = com.ywwg.HelloWorldActivity
exec = sugar-activity-factory HelloWorldActivity.HelloWorldActivity
icon = activity-helloworld
activity_version = 1
show_launcher = yes

Design an icon for your activity, according to the icon format. The file name should match the one specified in the info. In this case "activity-helloworld.svg".

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
  <!ENTITY fill_color "#FFFFFF">
  <!ENTITY stroke_color "#000000">
]>
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
  <rect x="1" y="1" width="48" height="48" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/>
</svg>

Write the setup.py script, which in most cases will look like this:

#!/usr/bin/python
from sugar.activity import bundlebuilder
bundlebuilder.start()

Code your activity. Module and class names should match those specified in the exec field of the info.

import logging
from sugar.activity.Activity import Activity

import sys, os
import gtk

class HelloWorldActivity(Activity):
    # This is a callback function. The data arguments are ignored
    # in this example. More on callbacks below.
    def hello(self, widget, data=None):
        logging.info('Hello World')

    def __init__(self):
        Activity.__init__(self)

        # Creates a new button with the label "Hello World".
        self.button = gtk.Button("Hello World")

        # When the button receives the "clicked" signal, it will call the
        # function hello() passing it None as its argument.  The hello()
        # function is defined above.
        self.button.connect("clicked", self.hello, None)

        # This packs the button into ourselves (a Sugar window).
        self.add(self.button)

        # The final step is to display this newly created widget.
        self.button.show()

        self.set_title('Hello World')

Create a MANIFEST, containing the list of the files to include in the package.

HelloWorldActivity.py

Setup your bundle for development

./setup.py dev

If you now run sugar the activity icon should be visible on the frame. You can edit the code in your bundle directory, it will be picked up when sugar is restarted.

Create a xo package to distribute your bundle.

 ./setup.py dist

To install the xo on a laptop you can use the installer script.

 sugar-install-bundle HelloWorld-1.xo