HELLO PACOTE!

O XO introduz uma nova maneira de se programar aplicações. Primeiro chamando-as de "atividades". Essas "atividades" ficam dentro de um "pacote" com vários diretórios e arquivos. Esses pacotes poderão ser tranferidos de XO para XO e se autoinstalarão facilmente.

Se você tem um XO B1, sua versão de sistema operacional não está preparada para trabalhar com pacotes como a versão mais atual: 240 - que faz parte do kit de emulador que você baixou para esse curso. Pode ser que, no futuro, ocorram algumas modificações na arquitetura de pacotes do XO. Mas cremos que o básico será semelhante.

Os pacotes XO usam a linguagem Python. Apresentaremos, nesse curso, os princípios básicos dessa linguagem. Os pacotes usam uma interface gráfica conhecida como pygtk. Existem outras interfaces gráficas para programação em Linux e Python, mas não são suportadas nativamente no XO. A maneira de programar para o XO difere um pouco da normal. Assim, acompanhe nossas lições e faça os exercícios no emulador. Se você tiver coragem de atualizar o sistema operacional de seu XO para a versão 240, pode fazer os exercícios nele, claro.

DICA: A versão 240 do emulador tem um pequeno bug. A parte inferior da moldura some. Para vê-la você tem que manter a ponta da seta do ponteiro sobre a parte inferior da janela com o emulador. A seta praticamente some.

Todos os pacotes XO ficam no diretório: /usr/share/activities

Não existe uma padronização oficial mas, uma atividade terá uma Classe básica que terá o nome da atividade acrescido de "Activity". Por exemplo, para uma atividade que chamemos de "HelloPac": HelloPacActivity. O diretório que criaremos se chamará: hellopac.activity. Dentro desse diretório teremos um subdiretório com o nome: activity.

No subdiretório activity teremos dois arquivos; um deles chamado: activity.info com as linhas:

[Activity]
name = HelloPac 
service_name = www.dmu.com/HelloPacActivity
exec = sugar-activity-factory HelloPacActivity.HelloPacActivity
icon = activity-hellopac
activity_version = 1
show_launcher = yes

Os dados desse arquivo são bem óbvios. Em service_name temos o endereço que poderia dar mais informações sobre a aplicação (normalmente não existe).

O parâmetro icon tem o nome do arquivo com formato .SVG que contém o ícone da aplicação, que vai aparecer na barra inferior da moldura do XO. Existe um editor desse tipo de arquivo que é gratuíto: o Inkscape. Vamos falar mais em detalhes sobre criação de ícones no futuro.

O outro arquivo no diretório activity, para nosso pacote, é justamente:activity-hellopac.svg. O ícone que vamos usar é bem simples: apenas um quadrado e vamos usá-lo por ser fácil de digitar, usando o editor vi:

<?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>

No diretório hellopac.activity temos três arquivos. Um será sempre igual em todo pacote: setup.exe com:

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

O outro, MANIFEST-OLPC tem só uma linha:

HelloPacActivity.py

que é justamente o nome do arquivo onde a ação acontece. Nossa aplicação apenas vai escrever: "HELLO PACOTE!" no meio da tela.

from sugar.activity.Activity import Activity
import sys, os
import gtk

class HelloPacActivity(Activity):
    def __init__(self):
        Activity.__init__(self)
        #Define o tamanho dos caracteres
        gtk.settings_get_default().props.gtk_xft_dpi *= 4
        # Cria um objeto Label
        self.label = gtk.Label("HELLO PACOTE!")
        # Coloca esse label na janela Sugar
        self.add(self.label)
        # Mostra
        self.label.show()

Se você nunca programou em Python, pode começar a aprender certas coisas. Algumas são especiais do XO:

O resto do programa é simples: criamos um objeto da Classe Label, o adicionamos à janela do Sugar (que é o "self" e que não admite sub-janelas) e o mostramos com show.

Então, recapitulando: um "pacote XO" tem, no mínimo, dois diretórios e cinco arquivos. Após criado o pacote, basta dar um reboot no sistema (no nosso caso re-startar o emulador).

DICA: Para ver se seu programa não tem nenhum erro de sintaxe você pode executar, no nosso caso:

python HelloPacActivity.py

Se ele não tiver erro de sintaxe, vai, assim mesmo, dar um erro porque não consegue dar um display - mas isso não é erro de sintaxe...

Veja como ficou nossa primeira aplicação (nossa primeira atividade, nosso primeiro pacote):

Vamos, a partir de agora, aprender um pouco de Python, para podermos fazer coisas mais complexas. Mas o básico é isso.


LIÇÂO ANTERIOR PRÓXIMA LIÇÂO
ÍNDICE HOMEPAGE