abuledu:developpeur:logiciels_du_terrier_en_tcl-tk

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
abuledu:developpeur:logiciels_du_terrier_en_tcl-tk [2008/11/26 18:36]
http://abuledu.org/openid/ania.lesca
abuledu:developpeur:logiciels_du_terrier_en_tcl-tk [2016/01/21 12:00] (Version actuelle)
erics
Ligne 1: Ligne 1:
 +{{tag>version-8-08}}
 ====== Spécification de développement, contraintes liées aux projets du groupe le_terrier ====== ====== Spécification de développement, contraintes liées aux projets du groupe le_terrier ======
  
Ligne 8: Ligne 9:
   * Révision v0.3 14 juillet 2002   * Révision v0.3 14 juillet 2002
   * v8.11 22 novembre 2008   * v8.11 22 novembre 2008
 +  * v8.12 14 décembre 2008 - ajout de la section "son" et de la section "pavé numérique sous linux"
  
 //Ce document essaye de préciser les contraintes que nous souhaitons respecter lors de l'écriture (et/ou modification) de fichiers Tcl/Tk afin d'assurer une meilleure maintenance et lisibilité du code produit. Dans une seconde partie, nous précisons les contraintes liées au courriel échangé sur la liste béta relative au groupe "le_terrier". Enfin la dernière partie décrit le "à faire" tel qu'évoqué lors des RMLL (Rencontres Mondiales du Logiciel Libre) 2002 à Bordeaux.// //Ce document essaye de préciser les contraintes que nous souhaitons respecter lors de l'écriture (et/ou modification) de fichiers Tcl/Tk afin d'assurer une meilleure maintenance et lisibilité du code produit. Dans une seconde partie, nous précisons les contraintes liées au courriel échangé sur la liste béta relative au groupe "le_terrier". Enfin la dernière partie décrit le "à faire" tel qu'évoqué lors des RMLL (Rencontres Mondiales du Logiciel Libre) 2002 à Bordeaux.//
Ligne 17: Ligne 19:
 Il s'agit de respecter quelques règles simples qui, dans le passé, ont permis une relecture aisée du code produit. Il s'agit de respecter quelques règles simples qui, dans le passé, ont permis une relecture aisée du code produit.
  
-Car une application naît, vit par la volonté de différents développeurs.+Car une application nait, vit par la volonté de différents développeurs.
  
 Mais elle meurt si elle est illisible. Mais elle meurt si elle est illisible.
Ligne 33: Ligne 35:
 Commentons sans excès, mais commentons, les parties difficiles à comprendre. Commentons sans excès, mais commentons, les parties difficiles à comprendre.
  
-Evitons les commentaires+Évitons les commentaires
  
   * faux   * faux
Ligne 108: Ligne 110:
 ou des identifieurs définis par l'utilisateur. ou des identifieurs définis par l'utilisateur.
  
-Le choix des identifieurs définis par l'utilisateur est fondamental : un bon choix rend le programme plus facile à lire, à comprendre, à modifier, à corriger. Un identifieur long n'est pas nécessairement le meilleur. Si un identifieur n'est utilisé que peu de fois, dans une partie réduite du programme, une lettre peut être un bon identifieur, mais une lettre ne sera pas un bon choix pour un identifieur utlisé fréquemment dans différentes parties du programme.+Le choix des identifieurs définis par l'utilisateur est fondamental : un bon choix rend le programme plus facile à lire, à comprendre, à modifier, à corriger. Un identifieur long n'est pas nécessairement le meilleur. Si un identifieur n'est utilisé que peu de fois, dans une partie réduite du programme, une lettre peut être un bon identifieur, mais une lettre ne sera pas un bon choix pour un identifieur utilisé fréquemment dans différentes parties du programme.
  
 <code> <code>
Ligne 120: Ligne 122:
 </code> </code>
  
-est sûrement mieux que A pour désigner le nombre 3,141592...+est surement mieux que A pour désigner le nombre 3,141592...
 ===== 4. Littéral et constante ===== ===== 4. Littéral et constante =====
  
Ligne 155: Ligne 157:
 Les indications concernant les constantes s'appliquent aux variables d'autant plus que TclTk ne fait pas de différence entre les deux ! Il n'existe pas de constante en TclTk mais l'utilisateur doit faire comme si afin d'améliorer le code écrit. Les indications concernant les constantes s'appliquent aux variables d'autant plus que TclTk ne fait pas de différence entre les deux ! Il n'existe pas de constante en TclTk mais l'utilisateur doit faire comme si afin d'améliorer le code écrit.
  
-Evitons+Évitons
  
 <code> <code>
Ligne 230: Ligne 232:
   * un (des) fichier(s) de messages traduits préfixés (fr_ uk_ etc.)   * un (des) fichier(s) de messages traduits préfixés (fr_ uk_ etc.)
  
-===== 8.1 Le fichier de configuration =====+==== 8.1 Le fichier de configuration ====
  
 Ce fichier précise la langue utilisée par l'utilisateur, par l'élève, plus éventuellement d'autres paramètres tels que dimension de l'écran, etc. Ce fichier précise la langue utilisée par l'utilisateur, par l'élève, plus éventuellement d'autres paramètres tels que dimension de l'écran, etc.
Ligne 250: Ligne 252:
 </code> </code>
  
-===== 8.2 Le fichier des messages =====+==== 8.2 Le fichier des messages ====
  
  
Ligne 266: Ligne 268:
     .menu add cascade -label [mc "À propos"] -menu .menu.fichier     .menu add cascade -label [mc "À propos"] -menu .menu.fichier
 </code> </code>
 +
  
 Exception : si le message doit contenir une variable, par exemple $var, le message doit être composé d'un seul mot suivi ou précédé de la variable. Exception : si le message doit contenir une variable, par exemple $var, le message doit être composé d'un seul mot suivi ou précédé de la variable.
Ligne 275: Ligne 278:
 </code> </code>
  
-===== 8.3 Pour traduire, comment ça marche ? =====+Autre exception : le message contient plusieurs variables séparées par des mots à traduire. Dans ce cas, l'exemple suivant parait suffisamment clair et se passe de tout commentaire. 
 +<code> 
 +append titre "ALLER - " [mc "Groupe"] " : " $groupe " / " [mc "Dossier"] " : " $rep " / " [mc "Texte"] " : " $demarre 
 +wm title . $titre 
 +</code> 
 + 
 +et précédemment nous aurions pu écrire : 
 +<code> 
 +append message [mc "Aide]" $var 
 +.menu add cascade -label $message -menu .menu.fichier 
 +</code> 
 + 
 +==== 8.3 Pour traduire, comment ça marche ? ==== 
  
 Voir la doc sur le site abuledu : Voir la doc sur le site abuledu :
Ligne 284: Ligne 300:
 L'objet de cette partie est de permettre de trier les messages au moyen de filtres. L'objet de cette partie est de permettre de trier les messages au moyen de filtres.
  
-Divers projets ont été développé, sont en cours de développement, en phase de test ; certains écrits en Tcl/Tk, d'autres en python, java... Pour mémoire :+Divers projets ont été développés, sont en cours de développement, ou en phase de test ; certains écrits en Tcl/Tk, d'autres en python, java... Pour mémoire :
  
   * mulot   * mulot
Ligne 292: Ligne 308:
   * bonjour poussins   * bonjour poussins
  
-Dans ce contexte, pour chacun des projets, précisons ce projet dans le champ 'objet' du message en écrivant en abrégé (lt- mis pour "le_terrier") entre chevrons  [] :+Dans ce contexte, pour chacun des projets, **précisons ce projet dans le champ 'objet' du message en écrivant en abrégé (lt- mis pour "le_terrier") entre chevrons  []** :
  
   * lt-mulot   * lt-mulot
Ligne 300: Ligne 316:
   * lt-poussins   * lt-poussins
  
-Et précisons l'objet. Enfin, nous pouvons commencer le corps du message par un bonjour et le terminer par un au revoir.+**Et précisons l'objet**. Enfin, nous pouvons commencer le corps du message par un **bonjour** et le terminer par un **au revoir**.
  
 Exemple : Exemple :
Ligne 308: Ligne 324:
 </code> </code>
  
-===== 10. faire =====+===== 10. Le son ===== 
 + 
 +Cette section a été ajoutée le 14 décembre 2008 et se propose d'être un début de solution globale pour la gestion du son pour les logiciels du terrier en tcl/tk. 
 + 
 +==== 10.1 Le cas général ==== 
 + 
 +Nous utilisons la bibliothèque snack pour gérer les accès à la carte son, snack est bien intégré dans les logiciels du terrier, association par exemple. 
 + 
 +  * Charger snack: 
 + 
 +<code> 
 +if {[catch {package require snack}]} { 
 +    set sound 0 
 +} else { 
 +    set sound 1 
 +    snack::sound snd 
 +
 +</code> 
 + 
 +  * Utiliser snack: 
 + 
 +<code> 
 +snd configure -file [file join $Home sons $son$ext] 
 +snd play 
 +</code> 
 + 
 +Pour plus de détails, référez-vous au fichier sonlinux.tcl ou sonwindows.tcl 
 + 
 +==== 10.2 Spécificités AbulÉdu ==== 
 + 
 +Sur les terminaux légers nous ne pouvons pas gérer le son de la même manière que sur un poste autonome. À l'heure actuelle nous utilisons encore esd (esound) pour gérer le son "distant"
 + 
 +En TCL/Tk il suffit donc d'utiliser l'appel suivant pour jouer un fichier son sur un TX: 
 + 
 +<code> 
 +exec esdplay $file 
 +</code> 
 + 
 + 
 +==== 10.3 Proposition d'implémentation générale ==== 
 + 
 +Proposition pour satisfaire tout le monde et toutes les plates formes: 
 + 
 +<code> 
 +#en fonction de la plate-forme 
 +switch $tcl_platform(platform) { 
 +    unix { 
 +      #si on est sur un serveur abuledu on en profite pour l'indiquer 
 +      if {[file isdirectory [file join /etc abuledu]]} { 
 +        set abuledu 1 
 +      } else { 
 +        set abuledu 0 
 +      } 
 +      source sonlinux.tcl 
 +    } 
 +    windows { 
 +      source sonwindows.tcl 
 +    } 
 +
 +</code> 
 + 
 +Et dans le fichier sonlinux.tcl on devra systématiquement tester la variable abuledu pour savoir s'il faut faire appel à snack ou esdplay 
 + 
 +<code> 
 +proc enterstart {file} { 
 +  if {$abuledu == 0} { 
 +    snd stop 
 +    update 
 +    catch { 
 +      snd configure -file $file 
 +      snd play 
 +    } 
 +  } else { 
 +    set cur [pwd] 
 +    set file [string map {./ /} $file] 
 +    set file "$cur$file" 
 +    catch { 
 +      exec esdplay $file 
 +    } 
 +  } 
 +
 + 
 +#on ne charge pas snack si on est sur abuledu c'est snack qui provoque 
 +#les erreurs de open /dev/mixer 
 +if {$abuledu == 0} { 
 +  #on est sous linux, on essaye de charger la lib snack 
 +  if {[catch {package require snack}]} { 
 +     #ca n'a pas marche, on est donc sans son 
 +     set sound 0 
 +  } else { 
 +      set sound 1 
 +      snack::sound snd 
 +  } 
 +} else { 
 +  #on est sur abuledu par defaut on a du son via esdplay 
 +  #esdplay a la bonne idee de ne pas provoquer d'erreur meme 
 +  #si le TX n'a pas de carte son ! 
 +  set sound 1 
 +
 +</code> 
 + 
 + 
 +===== 11. Utiliser le pavé numérique sous Linux ===== 
 + 
 +Cette section a été ajoutée le 14 décembre 2008 et se propose de fournir une solution pour la gestion du pavé numérique lorsqu'on est sous Linux. 
 + 
 +<code> 
 +proc changenum {c key} { 
 +    global curcol currow 
 +    focus -force .frame.c 
 +     
 +    $c itemconf textcol[expr \$curcol]row[expr \$currow] -text $key 
 +    switch $key { 
 + BackSpace - Delete {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text .} 
 + 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9  {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text $key} 
 +        #le pavé numérique sous linux retourne les codes suivants au lieu 
 +        #de retourner directement les chiffres ... 
 + KP_Insert {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "0"
 + KP_End {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "1"
 + KP_Down {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "2"
 + KP_Next {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "3"
 + KP_Left {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "4"
 + KP_Begin {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "5"
 + KP_Right {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "6"
 + KP_Home {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "7"
 + KP_Up {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "8"
 + KP_Prior {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text "9"
 + KP_Delete {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text ,} 
 + comma {$c itemconf textcol[expr \$curcol]row[expr \$currow] -text ,} 
 +    } 
 +
 +</code>
  
 +===== 12. À faire =====
  
     * répertoire de sauvegarde des traces-élèves (utilisation d'une variable d'environnement)     * répertoire de sauvegarde des traces-élèves (utilisation d'une variable d'environnement)
     * format de la trace-élève (a priori en XML) ; les champs sont à définir     * format de la trace-élève (a priori en XML) ; les champs sont à définir
-    * language de développement futur : python+Qt ou java ?+    * langage de développement futur : python+Qt ou java ?
  
 Si nous choisissons python+Qt, un bon outil de développement serait Qt-designer Si nous choisissons python+Qt, un bon outil de développement serait Qt-designer
  
-Utiliser la forge : gforge.ryxeo.com +Utiliser la forge du Terrier https://redmine.ryxeo.com/projects/leterrier
  • abuledu/developpeur/logiciels_du_terrier_en_tcl-tk.1227720971.txt.gz
  • Dernière modification: 2008/11/26 18:36
  • de http://abuledu.org/openid/ania.lesca