[Squeak-fr] tutorial sur les TableLayout. : traduction libre

Alexandre Benoit alexandre.benoit13 at wanadoo.fr
Lun 29 Sep 23:03:34 CEST 2003


Carette.pierre-marie a écrit:

> J'ai essaye de traduire le tutoriel. Mais certains passages me sont 
> incomprehensibles ou restent imprecis par ignorance de Squeak de ma part.
> Je vous laisse la traduction au bon soin d'en corriger les erreurs et 
> si cela vous semble utile, de la mettre toute belle dans le 
> squeak.fr... Bon courage et Merci
>
J'ai commencé à tout relire et à tout reprendre en espérant apporter un 
mieux. J'ai surtout rajouté les accents par ce que le français sans 
accents c'est vraiment pas beau. J'ai aussi systématiquement enlevé 
l'espace que tu avais mis entre # et le nom des propriétés par ce que je 
suis pas sûr que squeak apprécie si il les trouve.
Mais c'est un long travail et j'arriverai pas au bout en une seule fois.

Le truc ultime ce serait bien sûr de faire une version en français du 
fichier .pr

En tous les cas merci à pierre-marie pour ce travail courageux.

Alexandre

>
> 1. Vue d'ensemble des agencements en tableau.
>
>
> Les agencements en tableau (table layouts) (cadrages d'AKA) 
> définissent une disposition générale mono ou  bidimensionnelle des 
> submorphs.
>
> 1.1 Paramètres communs des agencements.
>
> XXXXXXXX
>
> Exemple 1 : Paramètres communs des agencements en tableau.
>
> #layoutInset : écart entre les bords internes du contenant et ceux des 
> morphs contenus. Les écarts sont identiques entre les bords bas-droite 
> des morphs inclus et incluant et les bords haut-gauche.
>
> #cellInset : permet  le réglage de la distance entre deux léméents de 
> l'arangement. cellInset est une paire de coordonnées dont l'abcisse 
> indique la distnace qui sépare horizontalement les morphs. L'ordonnée 
> indique elle la distance qui sépare les morphs verticalement.

>
> #listDirection :   il s'agit de la direction principale de 
> l'agencement. Quatre directions sont possibles :  #leftToRight, 
> #rightToLeft, #topToBottom, ou #bottomToTop (gauche à droite, droite à 
> gauche, du haut vers le bas, du bas vers le haut).
> Si #wrapDirection  n'est pas définie, l'agencement est une liste 
> unidimensionnelle.
>
> # wrapDirection :  il s'agit de la direction secondaire de 
> l'agencement. Elle est utilisée s'il n'y a pas assez d'espace sur une 
> ligne de la direction principale.
> Cinqs directions sont possibles : #leftToRight, #rightToLeft, 
> #topToBottom, #bottomToTop) et #none  indiquant que l'agencement est 
> unidimensionnel.
>
> Note : layoutInset est une propriété générale qui s'applique à toute 
> sorte d'agencement.
> Les autres propriétés ne concernent que les agencements en tableau.
>
> 1.2 Contraintes communes au reformatage des morphs.
>
> Deux propriétés (#hResizing et #vResizing) contrôlent les contraintes 
> sur les dimensions du morph.
>  Si le reformatage est
> #spaceFill, le morph occupe tout l'espace qui lui est offert par le 
> morph qui le contient. La contrainte est donc donnée par le morph qui 
> contient notre morph avec TableLayout.
> #shrinkWrap,  le morph entoure étroitement tous ses enfants. La 
> contrainte n'est plus donnée par le père mais par les enfants.
> #rigid, aucune contrainte n'est spécifiée. Le reformatage automatique 
> n'a pas lieu.
>
>             XXXXXXXXXXXXXX
>                     Figure 2: Exemple de constraintes sur les dimensions
>
>
> Quelques sont remarques nécessaires :
> Le reformatage  #spaceFill ne s'applique que si le morph père possède 
> une police d'agencement acitve et réglée de type TableLayout. Sans ça 
> la contrainte #spaceFill est équivalente à #rigid.
>
> Exemple :
> 1) Poser la contrainte #shrinkWrap sur le rectangle jaune (en cliquant 
> sur le boutton prévu à effet).
> 2) Supprimer la police d'arrangement du rectangle rouge. Pour ce faire 
> dans le menu  du halo du rectangle  sélectionner 'layout' puis 'no 
> layout'. Le menu du rectangle s'obtient en cliquant plusieurs fois 
> avec le bouton halo de la souris jusqu'à ce que ce soit le halo du 
> rectangle rouge qui apparaisse.
> 3) Poser la contrainte #shrinkFill sur le rectangle jaune, le 
> rectangle jaune ne rempli pas le rectangle rouge comme on pourrait s'y 
> attendre.
> 4) Mettre une police d'arrange 'table layout' sur le rectangle rouge. 
> Cette fois le rectangle jaune remplit le rectangle rouge.
>
> La contrainte  #shrinkWrap ne s'applique que si le morph a des 
> enfants. Si le morph n'a pas d'enfants la contrainte #shrinkWrap se 
> comporte comme la contrainte #rigid  (le morph ne se reformatera pas 
> automatiquement).

La suite de ma relecture pour bientôt si elle intéresse du monde.

>
> Le cas  morph  #spaceFill  inclus dans un morph  #shrinkWrap  depend 
> d'une propriete supplementaire : # rubberBandCells :
> Si elle est "vraie"   le format minimal sera choisi
>
> Ainsi, si #rubberBandCells est vrai,  l'agencement ne peut jamais etre 
> automatique (rappelez-vous, n'importe quelle disposition calculee aura 
> comme consequence la taille minimale). Mais si #rubberBandCells est  
> faux, le reformatage sera incrementalement calcule.
>
> XXXXXXXXXXXX
>             * Exemple 3 : L'effet de # rubberBandCells
>
> A gauche, #rubberBandCells vrai  :  taille minimale possible .
> A droite  # rubberBandCells faux : le rectangle (rouge) externe est 
> reformate.
>
> La strategie appropriee n'est pas toujours la meme.  Le developpeur 
> pense en taille minimale, mais l'usager desire pouvoir la modifier.
>
> 2. Le processus d'agencement
>
> Le processus de disposition est declenche par le message #fullBounds 
> envoye au  morph.
> Si le recepteur a besoin d'un reformatage,  il declenche le processus 
> par Morph>>doLayoutIn : newBounds
>
>  Il s'appelle  de deux endroits differents (one of which is 
> #fullBounds and the other one is through the recursive layout process 
> which is covered later on).
> La methode calcule  d'abord les dimensions nouvelles des submorphs 
> puis applique  ensuite les contraintes du morph incluant aux 
> dimensions nouvelles des submorphs.
>
> 2.1 Calcul des dimensions nouvelles des submorphs 
> (LayoutPolicy>>layout:in:)
> Cette methode debute le processus  . Elle prend un certain morph comme 
> argument et calcule  le nouvel agencement de son submorph base sur les 
> ->LayoutProperties d'arguments et ses ->LayoutProperties de submorphs.
>
> Pour les formats en tableau le processus a quatre phases. Dans la 
> premiere etape, les tailles minimales sont calculees pour tous les 
> submorphs . Puis  tailles minimales et agencement actuel des morphs 
> permettent un nouveau calcul  La troisieme etape repartie les espaces 
> restant. Enfin les nouvelles limites de chaque morph sont definies.
>
> 2.2 Calcul des tailles minimales
>  la premiere etape  enumere les submorphs et calcule la taille 
> minimale possible de chacun. Trois facteurs sont pris en compte :
> # minExtent enregistre  par un submorph, # minCellSize enregistre par 
> le proprietaire,  et # maxCellSize enregistre par le proprietaire.
> Tous les deux, # minCellSize et # maxCellSize   limite # minExtent 
> enregistre par le morph. Cette etape delaisse un certain nombre 
> d'autres proprietes pour aller plus rapidement.
>
> Proprietes utilisees du morphs incluant :
> # minCellSize
> # maxCellSize
> # reverseTableCells
>
> Truc : Rendre egales # minCellSize  et  # maxCellSize du morph 
> incluant obligent les elements a adopter la meme taille
>
> Proprietes utilisees des morphs inclus :
> # disableTableLayout -voir plus loin
> # minWidth - voir plus loin
> # minHeight - voir plus loin
>
> 2.3 Calcul de l'agencement
> cette etape   prend en compte l'agencement anterieur, les limites 
> precedentes et nouvelles, et les tailles minimales ci-dessus 
> calculees, et calcule un agencement fonde sur
>
> Proprietes utilisees du morph incluant
> # listDirection
> # wrapDirection
> # listSpacing
> # cellSpacing
> # cellInset
>
> Proprietes utilisees du morpph inclus : <none>
>
> 2.4 Redistribuer l'espace disponible
>
> Proprietes utilisees du morph incluant :
> # rubberBandCells
> # hResizing
> # vResizing
> # listCentering
> # wrapCentering
>
> Proprietes utilisees des morphs inclus:
> # hResizing
> # vResizing
> # spaceFillWeight
>
> 2.5 Faire appliquer les nouvelles limites par chaque sous-morphs
>   (par Morph>>layoutInBounds : les newBounds)
> Les morphs  s'inscrivent dans les limites calculees.
>
> Proprietes utilisees du morph incluant :
> # cellPositioning
> Proprietes utilisees des sous-morphs :
> # hResizing
> # vResizing
>
> 2.6 Appliquer les contraintes de formatage
> Si une des proprietes  (# hResizing, et # vResizing) est  # shrinkWrap 
> le morph incluant  est ajuste a la somme des dimensions de ses 
> submorphs (dans Morph>>adjustLayoutBounds). Ceci est fait (dans 
> #adjustLayoutBounds) de sorte que la taille ajustee ne devienne pas 
> plus petite que la largeur ou la taille minimale definie par le 
> recepteur (voir egalement : 'tailles minimales de calcul pour 
> width/height minimal).
>
> 3. Description de toutes les proprietes liees aux agencements
>
> Quelques details supplementaires....
>
> 3.1 Proprietes d'enfant :
>
> # hResizing definit les contraintes de la côte horizontale.
> Valeurs possibles :  # rigide, # shrinkWrap, et # spaceFill.
>
> # vResizing
> Definit les contraintes de la côte verticale.
> Valeurs possibles :  # rigide, # shrinkWrap, et # spaceFill.
>
> # disableTableLayout
> Cette propriete exclut un submorph du processus general d'agencement
>  (voir le schema 1 dans lequel tous les elements decoratifs ont ete 
> exclus de la disposition de table).
>
> # spaceFillWeight
>  Cette propriete definit la  priorite de chaque submorphs lors des 
> conflits concernannt la contrainte #paceFill
>
> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
>            
>                 Exemple 4 : L'effet de # spaceFillWeight
>
>
> # minWidth          largeur minimale d'un morph.
>
> # minHeight        taille minimale d'un morph.
>
>
> 3.2 Proprietes du morph incluant :
>
>  # cellInset    distance entre deux elements dans un tableau (voir 
> l'exemple 1).
>
> # cellPositioning    definit comment un submorph s'aligne dans les 
> limites calculees.
> Dans beaucoup de cas, les limites calculees n'adapteront pas un 
> submorph exactement (comme une liste contenant des elements avec 
> differentes tailles). # la propriete cellPositioning definit ou les 
> limites du submorph et les limites calculees  devraient etre alignees.
> Valeurs possibles :  # topLeft, # topRight, #
> bottomLeft, # bottomRight, # leftCenter, # rightCenter, # topCenter, #
> bottomCenter, et # center.
>
> # cellSpacing     inutilise et a ne plus utiliser
>
> # layoutInset
> L'encart (symetrique) a utiliser pour la disposition d'enfant. Base 
> sur les limites interieures du proprietaire (par exemple, les limites 
> dans tout cadre) des encarts de cette propriete l'agencement calcule 
> entier bon du coin gauche et inferieur superieur.
>
> # listDirection         direction 'primaire 'de liste
> Valeurs possibles : # leftToRight, # rightToLeft, # topToBottom, et # 
> bottomToTop (voir l'exemple 1).
>
> # listCentering     decrit comment tous les submorphs doivent 
> s'aligner dans les limites du morphs incluant si'il reste de l'espace 
> disponible
> Valeurs possibles sont # topLeft, # bottomRight, # ccenter, et # 
> justified.
>
> XXXXXXXX
>                
>                     Exemple 5 : Different # valeurs listCentering (# 
> topLeft, # centre, #
> bottomRight, # justifie)
>
> # listSpacing         definit si les differentes lignes ont la meme 
> taille ou pas.
> Valeurs possibles: # none ( tailles inegales) et # egal (tailles 
> egales ).
>
> # reverseTableCells     Si vrais, tous les submorphs sont utilises 
> dans l'ordre des inverse des submorphs.
>
> # rubberBandCells     regle le cas  ou coexistent # spaceFill et # 
> shrinkWrap  Voir l'exemple 3
>
> # wrapDirection        direction a suivre dans un tableau ou l'espace 
> est insuffisant
> . # none indique qu'aucun retour (wrapping) n'aura lieu. Sinon les 
> submorphs suuivront la direction indiquee : # topToBottom, # 
> bottomToTop, # leftToRight, ou #rightToLeft.
>
> # wrapCentering    equivalent de # listCentering, s'applique aux 
> lignes entieres
>
> # minCellSize         taille minimale pour chaque element dans un tableau
>
> # maxCellSize        taille maximum pour chaque element dans un tableau
>
>
> 4. Differences connues avec AlignmentMorphs
>
> Il y a quelques differences entre la façon dont AlignmentMorphs 
> fonctionnait et la façon dont le nouvel agencement en tableau fonctionne.
>
> 4.1 Vieux #spaceFill
>
> # spaceFill  etait interpretee comme # shrinkWrap quand un morph 
> n'etait pas inclus dans un autre AlignmentMorph.  Ce n'est plus le cas 
> et # spaceFill doit etre change en # shrinkWrap
>
> 4.2 Correspondances entre les variables d'instance et les proprietes 
> d'agencement
>
> # orientation
> Surchargee  par # listDirection (orientation etait seulement 
> #horizontal ou # vertical ; #listDirection est plus precise).
>
> # centering
> Fondamentalement remplace par # wrapCentering. # centering  
> definissait le placement d'une ligne entiere (ou de la colonne) pour 
> le calcul. C'est l'equivalent de # wrapCentering. La conversion reelle 
> est un peu plus compliquee puisque le positionnement des elements dans 
> les limites calculees (par exemple, # cellPositioning) doit etre aussi 
> bien change.
>
> # hResizing/# vResizing les deux proprietes ont fondamentalement la 
> meme signification a l'exception notee dans la section 4.1.
>
> # encart            equivalent de # layoutInset.
>
> # minCellSize        equivalent de # minCellSize
>
> _______________________________________________
> Squeak-fr mailing list
> Squeak-fr at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/listinfo/squeak-fr
>
>





Plus d'informations sur la liste de diffusion Squeak-fr