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

Carette.pierre-marie carette.pierre-marie at wanadoo.fr
Dim 28 Sep 16:20:09 CEST 2003


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


1. Vue d'ensemble des agencements en tableau


Les agencements en tableau (table layouts) (cadrages d'AKA) definissent 
une disposition generale mono ou  bidimensionnelle des submorphs.

1.1 Parametres communs des agencements

XXXXXXXX

Exemple 1 : Parametres communs des agencements en tableau

# layoutInset : ecart entre les bords haut-gauche des morphs inclus et 
incluant. Ecart identique entre les bords bas-droite des morphs inclus 
et incluant

# cellInset : ecart entre le bord bas-droit d'un morph  inclus et le 
bord haut-gauche d'un autre morph inclus. (distance horizontale, 
distance verticale)

# listDirection :   direction principale de l'agencement.
Quatre possibles :  # leftToRight, # rightToLeft, # topToBottom, ou # 
bottomToTop.
Si wrapDirection  n'est pas definie, l'agencement est une liste 
unidimensionnelle.

# wrapDirection :  direction secondaire de l'agencement. Utilisee s'il 
n'y a pas assez d'espace pour l'agencemment principal.
Cinq possibles : # leftToRight, # rightToLeft, # topToBottom, # 
bottomToTop) et # none  indiquant que l'agencement est unidimensionnel

Note : layoutInset est une propriete generale qui s'applique a tout 
agencement.
Les autres proprietes ne concernent que les agencements en tableau.

1.2 Contraintes communes au reformatage des morphs

Deux proprietes   (# hResizing et # vResizing)  contrôlent les 
dimensions du morph.
  Si le reformatage est
# spaceFill,      le morph inclus occupe l'espace assure par le morph 
incluant.
# shrinkWrap,  le morph incluant entoure  etroitement  tous les morphs 
inclus.
# rigid,             aucun reformatage n'est applique.

			XXXXXXXXXXXXXX
					Figure 2: Example resizing constraints


Quelques remarques necessaires
Le reformatage  # spaceFill ne s'applique que si l'agencement est 
active et le morph incluant a une disposition tableau active. Sinon le 
reformatage est   defini comme # rigide.

Exemple :
1) le rectangle jaune : # shrinkWrap
2) Rectangle rouge sans agencement (halo:layout)
3) Rectangle jaune  #spaceFill  ,  le rectangle jaune ne rempli pas le 
rectangle rouge
4) Rectangle rouge "tableau" le rectangle jaune remplira le rectangle 
rouge

La contrainte  #shrinkWrap ne s'applique que si le morph incluant a des 
morphs inclus .Sinon il est  defini comme # rigid  ( le morph ne se 
reformatera pas  automatiquement).

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



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