Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

362 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   27 Visites
   Note INTERNET : 18.5
    (4 Votants)
   0 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2006 - Pérennisation
Création d'une application avec XULRunner
[30 mn de lecture - paru le 5/30/2006 10:33:33 AM - Public : Confirmé]

Auteur

MonsieurNNicolas MÉROUZE
Elève-Ingénieur Supinfo Nord-Pas De Calais
Promotion SUPINFO 2008

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

3. Création de l'application

Passons maintenant à l'application. Elle va consister en une simple fenêtre dans laquelle on pourra prendre des notes. Une textbox est donc nécessaire. Ensuite il faudra rendre la fenêtre un peu plus belle. On finira par la création des actions.

    3.1 Le fichier XUL

<?xml version="1.0" encoding="UTF-8" ?>

<?xml-stylesheet href="chrome://global/skin/" type="text/css" ?>


<window

    id="pensees"

    title="Pensées"

    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"

    screenX="10" screenY="10"

    persist="300 300 screenX screenY">

        <textbox id="note" multiline="true" flex="1" />

</window>

La première chose à faire est de définir la feuille de styles globale. Elle définie tous les styles par défaut des éléments. Ensuite nous avons l'élément racine window avec quelques attributs :
- id est l'id de la fenêtre
- title est le titre de la fenêtre
- xmlns est le namespace par défaut avec comme URI http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul qui est le namespace pour le XUL
- screenX et screenY sont les positions de la fenêtre au niveau de l'écran
- persist permet de garder en mémoire la taille et la position de la fenêtre. Ici la taille de la fenêtre sera toujours de 300px*300px mais screenX et screenY pourront changer.

Ensuite il y a l'élément textbox avec un id, l'attribut multiline pour pouvoir faire des retours à la ligne et l'attribut flex permettant d'indiquer que l'élément doit s'étendre sur toute la fenêre. Voici le rendu que l'on aura :



Mais pour que se soit plus joli, il serait mieux de lui donner l'apparence d'un post-it. Pour cela il faudra enlever la bordure de la fenêtre et remplacer la barre de titre par une que l'on va personnaliser.
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css" ?>
<?xml-stylesheet href="chrome://pensees/skin/styles.css" type="text/css" ?>

<window
    id="pensees"
    title="Pensées"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    hidechrome="true"
    screenX="10" screenY="10"
    persist="300 300 screenX screenY">
        <vbox flex="1">
            <hbox id="titlebar">
                <titlebar flex="1">
                    <caption flex="1" label="Pensées"/>
                </titlebar>
                <label value="Fermer" id="close" />
            </hbox>
            <textbox id="note" multiline="true" flex="1" />
        </vbox>
</window>
Une feuille de styles a été ajoutée pour créer le design de l'application que nous verrons dans le prochain paragraphe. L'ajout de l'attribut hidechrome permet de cacher la bordure. Enfin pour palier l'absence de la barre de titre, il a fallu ajouter l'élément titlebar et le label qui sera un bouton pour fermer l'application. Tout est embarqué dans des boîtes car avec XUL, le positionnement n'est pas absolu. Les éléments à l'intérieur d'une vbox vont s'afficher les uns en dessous des autres alors que les éléments dans les hbox vont s'afficher les uns à côté des autres. Voici le rendu que cela va produire :

    3.2 Le design avec CSS

Voici maintenant le design. Rien de plus simple que CSS pour créer le style d'une application :
window {
    -moz-appearance: none;
    background-image: url(images/bg.png);
    font: normal 12px/1.5em "Lucida Grande", "Lucida Sans Unicode", "Lucida", "Verdana", sans-serif;
}

#note {
    margin: 0;
    padding: 2px;
    -moz-appearance: none;
    border: none;
    background-color: transparent;
}

#close {
    -moz-appearance: none;
    border: none;
    background-color: transparent;
    background-image: url(images/close.png);
    background-repeat: no-repeat;
    width: 18px;
    height: 16px;
    margin: 0;
    padding: 0;
    cursor: pointer;
}

#titlebar {
    padding: 2px;
}

titlebar {
    padding: 0;
    margin: 0;
}

caption {
    -moz-appearance: none;
    background-color: transparent;
    padding: 0;
    margin: 0;
    color: orange;
}
La propriété -moz-appearance sert à enlever ou mettre le style par défaut de l'élément. Pour tout le reste, ce sont des propriétés CSS comme celles que l'on utilise pour faire le design d'une page web. Voici le résultat :

    3.3 Les actions

Au niveau des actions, il en faut une au chargement de la page pour charger le fichier texte dans la textbox et une sur le label de fermeture de la fenêtre pour la sauvegarde des modifications de l'application dans le fichier texte et pour la fermeture de la fenêtre.
// Chargement de la classe File
var loader =  Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
    .getService(Components.interfaces.mozIJSSubScriptLoader);

loader.loadSubScript("chrome://pensees/content/File.js");
// Action effectuée quand la fenêtre est totalement chargée
window.onload = function()
{
    // Récupération du contenu du fichier
    var file = new File();
    file.read();
    // Focus sur la textbox
    document.getElementById("note").focus();
    // Bouton de fermeture de l'application
    document.getElementById("close").onclick = function()
    {
        // Sauvegarde du fichier
        file.save();
        // Fermeture de l'application
        window.close();
    }
}
Pour la récupération du fichier et sa sauvegarde, tout a été mis dans une classe nommée File qui se trouve dans le fichier File.js. Au chargement de l'application, le focus est directement donné à la textbox, ce qui permet de ne pas à avoir à cliquer dedans pour commencer à écrire.

    3.4 La classe File

La classe File est composée d'un constructeur qui va aller chercher le fichier texte que l'on a mis à la racine du répertoire de profil. Cette classe est aussi composée de la propriété path qui va stocker le chemin du fichier texte, de la méthode read() qui va lire le contenu du fichier texte et l'insérer dans la textbox et enfin de la méthode save() qui va sauvegarder le fichier texte en y insérant le contenu de la textbox.
function File()
{
    // Récupération du chemin du répertoire du profil
    var dir_service = Components.classes["@mozilla.org/file/directory_service;1"]
        .getService( Components.interfaces.nsIProperties);

    this.path = dir_service.get("ProfD", Components.interfaces.nsIFile).path;
    // Ajout d'un slash ou d'un anti slash selon le système d'exploitation
    if (this.path.search(/\\/) != -1) {
        this.path = this.path + "\\";
    } else {
        this.path = this.path + "/";
    }
    // Chemin du fichier de note
    this.path = this.path + "notes.txt";
}

File.prototype =
{
  read: function()
  {
    // Activer les privilèges nécessaires pour la manipulation des fichiers
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    // Ouverture du fichier en lecture
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);

    file.initWithPath(this.path);
    // Le reste du chargement du fichier est effectué seulement si ce dernier existe
    if (file.exists()) {
        var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
            .createInstance(Components.interfaces.nsIFileInputStream);

        is.init(file, 0x01, 00004, null);
           
        var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
            .createInstance(Components.interfaces.nsIScriptableInputStream);

        sis.init(is);
        // Lecture du contenu du fichier et affichage dans la textbox
        var output = sis.read(sis.available());
        document.getElementById('note').value = output;
    }
  },
   
  save: function()
  {
    // Activer les privilèges nécessaires pour la manipulation des fichiers
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    // Ouverture du fichier en écriture
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);

    file.initWithPath(this.path);
    // Le fichier est créé s'il n'existe pas
    if (!file.exists()) {
        file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420);
    }
    var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]
        .createInstance(Components.interfaces.nsIFileOutputStream);

    stream.init(file, 0x04 | 0x08 | 0x20, 420, 0);
    //Sauvegarde du contenu de la textbox dans le fichier
    var output = document.getElementById('note').value;
    stream.write(output, output.length);
    stream.close();
  }
};
L'application est maintenant terminée et on va pouvoir la tester puis la packager pour la distribuer.


Articles de la même catégorie

 Pages : Top


18 Visites
0 Commentaires
Initiation à Kommander
[10 mn de lecture - paru le 5/30/2006 9:49:37 AM - Public : Débutant]

En savoir plus


13 Visites
0 Commentaires
Les fenêtres et le chargement d'image avec SDL
[20 mn de lecture - paru le 5/30/2006 7:45:29 AM - Public : Débutant]

En savoir plus


24 Visites
0 Commentaires
Créer votre Première application en "AppleScript"
[25 mn de lecture - paru le 5/30/2006 7:19:44 AM - Public : Confirmé]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :