Lionel Laské
Développer en Mono sur le XO
Cet article se propose de vous faire découvrir le développement en Mono sur le XO, la machine du projet OLPC.
Par Lionel Laské publié le 25/01/2009 à 23:11, lu 2936 fois, 5 pages
 5 | Aller plus loin 
Le processus décrit ici permet de construire de zéro une application .NET pour le XO. Une autre possibilité est de porter une application existante. Torello Querci a ainsi porté sur Sugar (on dit "Sugariser") l'application Mono Gbrainy. Gbrainy est une application proposant différents jeux de mémoire. La capture d'écran ci-dessous montre l'application s'exécutant sur le XO. 
 
/content/ccbd955a-f895-41c4-8bc1-a58a2e46fc38/image19.png
 
Gbrainy est une application écrite en Gtk, elle est également intéressante car elle est développée en utilisant deux fonctionnalités spécifiques de Mono: Glade et Gettext.
 
Glade est un outil de design de fenêtre pour Gtk. Il propose une interface dédiée et repose sur un format de fichier spécifique à base de XML (comme XAML !).
 
Gettext est le système de localisation de Gnome. Il est accessible depuis Mono via le namespace Mono.Unix. Il s'ajoute au mécanisme de localisation standard du .NET Framework qui est également compatible avec Mono. L'avantage de ce mécanisme est d'être abondamment supporté par la communauté et de disposer d'outils d'assistance à la traduction comme le serveur de traduction Pootle ou l'outil client Poedit.
 
Le code ci-dessous est un extrait de l'application, on y distingue, mélangés aux ordre spécifiques Sugar, l'utilisation de Glade via des propriétés spécifiques ("[Glade.Widget]") et la localisation Gettext ("Catalog.GetString(...)") .

public class gbrainy

{

    [Glade.Widget("gbrainy")] Gtk.Window app_window;

    [Glade.Widget] Box drawing_vbox;

    [Glade.Widget] Gtk.Label question_label;

    [Glade.Widget] Gtk.Label solution_label;

    [Glade.Widget] Gtk.Entry answer_entry;

    [Glade.Widget] Gtk.Button answer_button;

    [Glade.Widget] Gtk.Button tip_button;

    [Glade.Widget] Gtk.Button next_button;

    [Glade.Widget] Gtk.Statusbar statusbar;

    [Glade.Widget] Gtk.Toolbar toolbar;

    GameDrawingArea drawing_area;

    GameSession session;

    const int ok_buttonid = -5;

    ToolButton pause_tbbutton;   

    string activityId="";

    string bundleId="";

 

    public gbrainy (string [] args, params object [] props)

    {

        Catalog.Init ("gbrainy", Defines.GNOME_LOCALE_DIR);

 

        IconFactory icon_factory = new IconFactory ();

        AddIcon (icon_factory, "math-games", "math-games-32.png");

        AddIcon (icon_factory, "memory-games", "memory-games-32.png");

        AddIcon (icon_factory, "pause", "pause-32.png");

        AddIcon (icon_factory, "resume", "resume-32.png");

        AddIcon (icon_factory, "endgame", "endgame-32.png");

        AddIcon (icon_factory, "allgames", "allgames-32.png");

        AddIcon (icon_factory, "endprogram", "endprogram-32.png");

        icon_factory.AddDefault ();

 

        if (args.Length>0) {

        }

 

        Glade.XML gXML = new Glade.XML (null, "gbrainy.glade", "gbrainy", null);

        gXML.Autoconnect (this);

        Sugar.Activity activity=new Sugar.Activity(app_window, activityId, bundleId);

        activity.SetActiveEvent += activeChanged;

 

        app_window.Show();

 

        toolbar.IconSize = Gtk.IconSize.Dnd;

 

        Tooltips tooltips = new Tooltips ();

 

        ToolButton button = new ToolButton ("allgames");

        button.SetTooltip (tooltips, Catalog.GetString ("Play all the games"), null);

        button.Label = Catalog.GetString ("All");

        button.Clicked += OnAllGames;

        toolbar.Insert (button, -1);

 

        // ...

    }

 

    // ...

}

 
L'article présenté ici reprend un exemple complet réalisé pour le CodeCamp OLPC France en novembre dernier. La documentation complète détaillant les différentes étapes évoquées ici ainsi que la machine virtuelle utilisée pour le développement peuvent être téléchargés avec le compte-rendu du CodeCamp.  
Cet article est une initiation au développement pour Sugar et le XO en utilisant l'environnement de développement Mono. Au cours des différents paragraphes vous avez pu découvrir les spécificités du développement Gtk et du packaging d'activité sur le XO. J'espère que cet article vous aura donné envie d'en découvrir plus sur Mono et sur le développement Sugar.
 
La communauté de développeurs sur cet environnement est naissante, elle donne à chacun l'opportunité de travailler à la réalisation de contenu éducatif à destination des enfants les plus pauvres de la planète. Si vous êtes intéressés par participer au développement de nouvelles activités ou à Sugar, contactez-moi.
 
» Démarrer une discussion