Navigateur CD

Auteur: Joseph Colineau
Date: 30 janvier 2004

Table des matières
1. Introduction
2. Quelques images
3. Spécifications
        3.1. Organisation des données
        3.2. Règles d'interprétation
        3.3. Règles de priorité
        3.4. Fichiers index.r
        3.5. Diaporamas simples
        3.6. Diaporamas avec textes
        3.7. Diaporamas sonorisés
        3.8. Répertoires de documents
4. Codage
        4.1. exemples de fonctions
        4.2. Règles graphiques
        4.3. Résolutions d'écrans
5. Réalisation d'un CD-Rom
        5.1. Structure du CD-Rom
        5.2. Fichiers de lancement du CD-Rom
        5.3. Réalisation du CD-Rom
6. Divers
        6.1. Compatibilité
        6.2. Limitation du domaine d'exploration
        6.3. Autres remarques
7. Modifications, évolutions

1. Introduction

Le but de ce logiciel est d'offrir la possibilité de découvrir un ensemble de documents à la manière d'un navigateur. Une application typique est un album de souvenirs familiaux, où sont rassemblés photos, textes, animations, documents en tout genre. Je voulais réaliser une telle base de données, en gardant la possibilité de l'enrichir, mais en permettant de présenter à tout instant son contenu de manière esthétique et intuitive.

La conception d'un tel ensemble est complexe si l'on utilise les moyens classiques (par exemple structure de fichiers html avec leurs liens hypertexte, renvoyant à un ensemble de documents situés dans des répertoires de données) Le résultat est rigide, et l'ajout de nouvelles informations nécessite de reprendre une partie du travail.

Ici, l'arborescence des documents, et leurs liens, est définie par la structure des répertoires et des sous-répertoires dans lesquels on a rangé les documents. La navigation se fera donc en suivant l'arborescence. Les documents seront accessibles en fonction de l'endroit où ils ont été rangés. Cette organisation limite les chemins d'accès (qui doivent suivre l'arborescence des répertoires), mais est extensible facilement.

Le navigateur est une interface graphique simple qui aide à présenter les chemins d'accès aux documents, et le contenu des répertoires, avec un graphisme agréable et une ergonomie suffisante. De nouveaux documents, ajoutés dans les répertoires, de nouveaux sous-répertoires seront immédiatement pris en compte et visualisés. selon que le répertoire contiendra un ensemble de fichiers images, ou de documents images et sons, ou encore de textes, le navigateur présentera un diaporama sonorisé ou non, ou un liste des documents à ouvrir. S'il existe dans le sous-répertoire un script d'animation ou de présentation des données, celui-ci sera exécuté.

Pour cette application, Rebol a été choisi pour sa capacité d'utilisation multi-plateforme, pour ses puissantes fonctions d'analyse de contenu, pour ses capacités graphiques, pour son élégance et sa compacité.


2. Quelques images

Les images qui suivent présentent des copies d'écrans réalisées sur le logiciel

image écran de navigation

voici un écran typique de navigation. Comme tous les écrans, il est créé dynamiquement à partir du contenu du répertoire en cours.

image diaporama 

voici une présentation de type diaporama, avec affichage de commentaires. Ici, on a créé un fichier spécifique pour l'ordre des photos et les commentaires associés. En l'absence de ce fichier, les images sont présentées à la suite, selon l'ordre alphanumérique. Il est aussi possible de jouer des fichiers sons


3. Spécifications

3.1. Organisation des données

L'organisation des données est essentielle: elle indique la manière dont elles seront accessibles et présentées sur l'interface de navigation.

Dans l'exemple d'un album de souvenirs familiaux, on pourra par exemple définir l'arborescence de répertoires suivante:

répertoire racine
- circulaires annuelles
- lieux de vie
- Angers
- Paris
- évènements
- anniversaire de mariage
- noël 2003
- noël 2004
- voyages/vacances
- espagne
- bretagne
- racines
- généalogie
- chacun (souvenirs, photos ...)
- ...

3.2. Règles d'interprétation

Le navigateur affiche à chaque étape la liste des sous-répertoires, qui sont présentés comme des onglets (choisir des noms significatifs). En fonction du contenu des répertoires, le comportement du navigateur est défini par un petit nombre de règles:

répertoires intermédiaires: s'ils ont un index.r, celui-ci sera lancé sinon, s'ils comportent une image, elle sera prise comme image de fond ils peuvent aussi comporter un texte de commentaire

répertoires terminaux: s'ils ont un index.r, celui-ci sera lancé sinon, on évaluera le contenu à partir de la série de fichiers règles:

- série d'images seules: diaporama
- images et sons: diaporama sonorisé
- images, sons et textes: diaporama sonorisé avec commentaires
- une image et un texte: présentation directe
- des fichiers .doc, .pdf, .htm, .html: un écran de choix,
et lancement par le lecteur adéquat
de plus, ces répertoires peuvent comporter:

- un fichier titre.txt
- un fichier commentaires.txt
- un fichier splash.jpg ou .gif, ou .bmp
... qui seront exploités en fonction du contexte
les séries de fichiers seront lues par ordre alphanumérique

les fonctions de gestion correspondantes, ainsi que les paramètres, se trouvent dans le fichier principal.

3.3. Règles de priorité

règles de priorité dans l'analyse des répertoires: - index existe? oui executer

sinon sommaire ? afficher docs (yc html)
sinon séquence ? exécuter diaporama
sinon documents texte (hors .txt) ? afficher docs
sinon images ? une seule: afficher comme fond
plusieurs: exécuter diaporama
sinon sous-répertoires ? afficher
sinon, ne rien faire

3.4. Fichiers index.r

Insistons sur le fait qu'il n'est absolument pas nécessaire d'écrire le moindre fichier index ou autre pour que le navigateur fonctionne : si l'arborescence est constituée de répertoires et de sous-répertoires comportant des images, il affichera les noms des répertoires et présentera sous forme de diaporamas les séries d'images. Ainsi, si un ensemble d'images ou de documents sont correctement rangés dans des répertoires, la création d'un CD-Rom consiste simplement à reporter cette arborescence, et à recopier à sa racine le fichier navigateur.r et l'interpréteur Rebol, ainsi qu'il est présenté plus loin. Mettre un fichier index.r dans un répertoire permet de reprendre la main, et d'imposer un mode de fonctionnement du navigateur qui n'est pas le mode par défaut : ainsi, on pourra, dans un répertoire d'images, créer sa propre présentation, une animation particulière, etc...

règles à appliquer sur les fichiers index.r des répertoires

- ne les utiliser que si nécessaire
- Ils doivent pouvoir être exécutés de manière autonome
- éviter l'inclusion d'autres fichiers .r
- lancement d'une fenêtre view (et non view/new)
- retour par unview
- fermeture complète par quit
- présentation homogène dans le graphisme (voir règles graphiques)

3.5. Diaporamas simples

C'est simple, il n'y a rien à faire : simplement rassembler dans le répertoire les images à projeter, au format .jpg, .gif, .bmp, .png. En attendant la compatibilité de Rebol avec de nouveaux formats... Donner au répartoire un nom descriptif (ex : Voyage en Irlande 2003)

3.6. Diaporamas avec textes

Il suffit d'ajouter à la série d'image un fichier que l'on nommera sequence.txt, et qui sera constitué de lignes, successivement le fichier de la photo à présenter, le texte correspondant à afficher :

Image03.jpg
" carte d'Irlande "
Image01.jpg
" notre avion "
...

3.7. Diaporamas sonorisés

C'est comme ci-dessus. Le fichier sequence.txt comportera en plus, aux endroits souhaités, une ligne indiquant un fichier son à jouer :

Image03.jpg
" carte d'Irlande "
Image01.jpg
" notre avion "
reacteur.wav
...
Il n'est pas nécessaire, bien sûr, d'avoir autant de fichiers sons que d'images. Pour l'instant, seuls les fichier .wav sont acceptés par Rebol. Important : concernant la sonorisation, voir le paragraphe compatibilité.

3.8. Répertoires de documents

Il suffit de regrouper les documents textes aux formats .html, .htm, .doc, .pdf, .txt Prévoir une image à mettre dans le répertoire, elle servira d'image de fond pour la page d'accueil.

L'ouverture de ces documents de texte se fait en utilisant le browser (il faut, bien sûr, que les plug-in convenables aient été installés). A titre documentaire, une version alternative, utilisant call, et l'explorateur de fichiers windows, est aussi prévue (mais laissée en commentaires).


4. Codage

l'interface est volontairement simple, elle peut facilement être transformée, enrichie.

4.1. exemples de fonctions

La fonction principale du programme est la fonction rafraichir, qui est appelée au lancement, et à chaque fois que l'on change de répertoire:

rafraichir: func[][
"fonction principale de traitement et de visualisation"
backimagefile: ""
listedir tdir
listefichiers tfichiers
liste_fichiers_image liste_im
liste_fichiers_texte lftexte
if exists? %sequence.txt [sequence: make list! read/lines %sequence.txt]
traitement:  analyse_repertoire tdir tfichiers liste_im lftexte
switch traitement [
0 []
1 [navigation]
2 [projection]
3 [projection_texte_son]
4 [do %index.r]
5 [navigation_fichiers_texte]
]
]
On fait , dans ce répertoire, la liste des sous-répertoires, des fichiers, des fichiers images, des fichiers texte, en appelant des fonctions telles que:

liste_fichiers_image: func [tableau][
"fait la liste des fichiers image du répertoire courant"
tableau: head tableau
clear tableau
foreach file read %. [if (fichier_image? file)[append tableau file]]
;tableau: sort tableau
]
La fonction analyse_repertoire en déduit le type de présentation à appliquer:

analyse_repertoire: func[ldir lfichiers liste_im liste_textes][
" analyse la nature du répertoire selon son contenu"
foreach file lfichiers [if (fichier_image? file) [backimagefile: file]]
if/else (exists? %index.r) [return 4]
[if/else (exists? %sommaire.txt)[return 5]
[if/else (exists? %sequence.txt)[return 3]
[if/else (not empty? liste_textes) [return 5]
[if/else (not empty? liste_im)
[if/else ((length? liste_im) = 1) [backimagefile: first liste_im return 1][return 2]]
[return 1]
]
]
]
]
]
En fonction de la valeur de retour de la fonction analyse_repertoire, l'une des fonctions de présentation est lancée: navigation: fonction de navigation dans les répertoires projection: diaporama des images du répertoire projection_texte_son: projection avec commentaires et sonorisation index.r: lancement d'un script spécifique navigation_fichiers_texte: choix et visualisation d'un fichier au format texte

Les layouts doivent être créés dynamiquement, puisque leur contenu dépend du contenu du répertoire. Voici, par exemple la fonction qui crée le layout de lecture des fichiers texte:

navigation_fichiers_texte: func[][
"visualise sur l'écran les fichiers texte du répertoire"
screensize: system/view/screen-face/size
pos1: screensize / 80x60
pos2: screensize / 80x60
pos2/y: screensize/y * 0.95
mainwin: copy [
size screensize
backdrop backimagefile ;effect [aspect]
style monbouton vh2 white effect [gradmul 1x0 50.50.50 128.128.128 ]
at pos1
guide
monbouton "< retour" [lftexte: head lftexte go_up rafraichir]]
foreach ftexte lftexte [append mainwin reduce ['monbouton first parse/all (to-string ftexte) "." reduce ['browse ftexte]]]
append mainwin [
at pos2
monbouton "Quitter" [quit]
return]
; pour tester la formation du layout ...
;probe mainwin
mainwin: layout mainwin
view center-face mainwin]
Pour composer le layout en fonction du contenu du répertoire, on compose un bloc, mainwin, en copiant dans ce bloc les éléments à afficher les uns après les autres. On commence ainsi en insérant une image de fond (s'il y en a une dans le répertoire). Puis, un bouton destiné au retour vers le répertoire amont. La ligne:

foreach ftexte lftexte [append mainwin reduce ['monbouton first parse/all (to-string ftexte) "."  reduce ['browse ftexte]]]
permet d'ajouter à ce bloc (append mainwin) une série d'éléments de type "monbouton", dont le texte est le nom de chacun des fichiers texte de la liste lftexte. On notera l'utilisation de "reduce" pour évaluer le nom de ces fichiers. On remarquera également la notation 'monbouton, et 'browse , pour ne pas évaluer monbouton et browse. Enfin, l'opération de parsing:

first parse/all (to-string ftexte) "."
permet de supprimer la terminaison des fichiers texte pour l'affichage. Le résultat de cette ligne de code est une série de lignes ajoutées au bloc mainwin, chacune constituée de

monbouton "nom_du_fichier_1" [browse %nom_du_fichier_1.pdf]
Enfin, on termine la formation du layout, en ajoutant un bouton quitter. Ce bloc mainwin est alors interprété par la fonction layout, puis affiché.

4.2. Règles graphiques

On a choisi d'utiliser des styles " text " comme boutons pour l'ensemble des éléments actifs. Ce choix permet une présentation discrète, évite le problème de la taille des boutons (selon la longueur des textes), et permet une superposition sur les images de fond sans masquer trop d'éléments. On pourra facilement personnaliser les couleurs, et les tailles. L'affichage est plein écran.

4.3. Résolutions d'écrans

La gestion des résolutions d'écrans est prévue pour une bonne présentation des éléments, à l'exclusion de cette taille de caractères (mais ceci peut être facilement ajouté).


5. Réalisation d'un CD-Rom

L'interpréteur Rebol est contenu dans le CD-Rom, ce qui permet de le jouer sur des machines où Rebol n'est pas installé.

Ce qui suit est destiné à la création d'un CD-Rom auto-exécutable sous Windows. La contribution de Linuxiens (et autres OS'iens) est la bienvenue.

5.1. Structure du CD-Rom

Le répertoire racine comportera l'arborescence suivante:

/donnees/
/rebol/
ainsi que les fichiers de lancement (voir plus loin)
dans /rebol/

rebol.r
rebol.exe
user.r
dans /donnees/

navigateur.r
photo_de_couverture.jpg
les répertoires de données, avec leurs sous-répertoires
Choix de la version de l'interpréteur Rebol: voir ci-dessous, paragraphe compatibilité.

5.2. Fichiers de lancement du CD-Rom

Pour réaliser un CD-Rom à lancement automatique sous Windows, il suffit d'ajouter dans le répertoire racine un fichier nommé autorun.inf, dont le contenu est le suivant :

[autorun]
open=.\rebol\rebol.exe -qs donnees\navigateur.r
icon=.\rebol\rebol.exe
Pour assurer la compatibilité avec les machines non configurées pour assurer un lancement automatique à l'introduction du CD-Rom, il en prudent d'ajouter un autre fichier, que l'utilisateur pourra lancer si rien ne se passe. Ce fichier, que l'on mettra dans le répertoire racine, pourra être appelé lancement.bat, et contiendra les lignes suivantes

cd rebol
rebol -qs ..\donnees\navigateur.r

5.3. Réalisation du CD-Rom

Il suffit donc d'avoir créé l'arborescence avec des noms significatifs, et d'avoir rassemblé les données dans cette arborescence. L'ensemble est recopié dans le répertoire données, et il n'y a plus qu'à enregistrer le CD-ROM.


6. Divers

6.1. Compatibilité

Le script est compatible avec les versions de view en cours de développement. Il a été testé avec la version 1.2.34. Il restera à vérifier sa compatibilité avec la version 1.3.

La version officielle à ce jour, view 1.2.1 nécessite la licence " pro " si l'on veut exploiter les fichiers sons. Ceci ne sera plus nécessaire avec la version 1.3 (et les versions en développement le permettent déjà)

6.2. Limitation du domaine d'exploration

La variable dir-origine, initialisée au répertoire racine, permet d'empêcher de remonter dans les répertoires au delà de ce qui est prévu. Si l'on initialise cette variable à none, il est possible d'aller au-delà et d'explorer tous les répertoires.

6.3. Autres remarques

Les photos jpg doivent être en couleurs, même si elles ont été scannées en nb : les transformer avec le logiciel adéquat. Cette contrainte existera t'elle encore dans la version 1.3 de view?


7. Modifications, évolutions

Accepter des images de fond de ratio largeur/hauteur quelconque. Actuellement, elles doivent être au format 4X3. View 1.3 devrait le permettre facilement.

Ouvrir aux vidéos.

Fichier de paramètres pour le look, les cadences d'exécution du diaporama, etc

Un écran splash de lancement, un autre de fermeture.

L'exploitation de fichiers de titres, de commentaires, pour enrichir les écrans de navigation

Réalisation de CD-Rom multi-plateformes.

Chacun peut transformer ce logiciel, en fonction de ses besoins. Il est intéressant cependant de ne conserver qu'un petit nombre de règles de base, ce qui permet, en un temps record, de réaliser un CD-Rom jouable, à partir d'un ensemble de photos et de documents, sans nouveau développement.