Previous: Les DialogView Up: Smalltalk 4.1, un tutorial Next: Concepts avancés

Les Controller

Les contrôleurs servent à gérer les interactions avec l'utilisateur via la souris et le clavier. Ces interactions redirigent des modifications vers le modèle associé au contrôleur. Le modèle signale ensuite à ses dépendants qu'il a changé grâce au message changed. Les vues se remettent alors à jour.

Pour la plupart des vues précédemment présentées Smalltalk associe un DefaultControllerClass qui permet d'interagir avec ces vues d'une manière prédéfinie.

___________________________________________

Exercice 41 Inspectez la hiérarchie des contrôleurs

___________________________________________

Pour spécialiser un contrôleur, les méthodes importantes qui sont liées au contrôle sont:

  1. controlLoop, la boucle de contrôle initiale
  2. controlInitialize, appelée par controlLoop, elle sert à montrer que le contrôleur a pris la main.
  3. controlActivity, appelée par controlLoop, elle distribue le contrôle, en fonction des interactions souris ou clavier.
  4. controlTerminate, appelée par controlLoop, elle sert à montrer que le contrôleur rend la main.
  5. redButtonActivity, appelée par controlActivity, elle indique la façon de gérer le bouton de gauche de la souris.

Pour accéder à la souris et à son état, le contrôleur dispose des messages sensor qui retourne un objet de la classe InputSensor. Cet objet peut lui même répondre aux messages suivant :

  1. redButtonPressed, pour savoir si le bouton de gauche est appuyé ou non,
  2. yellowButtonPressed, pour savoir si le bouton du millieu est appuyé ou non,
  3. blueButtonPressed, pour savoir si le bouton de droite est appuyé ou non,
  4. cursorPoint, pour savoir le point repéré par la souris.

___________________________________________

Exercice 42 Construisez une application permettant de dessiner à l'aide de la souris des dessins constitués de points reliés par des segments de droites. Le modèle est un ensemble ordonné de points (LineDrawer). La vue est à définir (LineDrawerView) ainsi que le contrôleur (LineDrawerController). Pour indiquer que l'on peut ajouter un point au dessin, le curseur aura la forme d'une croix.

Indications...

___________________________________________

Exercice 43 Construisez une application permettant de tracer la courbe correspondant à une fonction. L'interface possèdera une liste de fonctions. Chaque fonction sera représentée par un Block à un argument ([:x | x cos], par exemple). Chaque fois qu'une fonction sera sélectionnée, une vue devra tracer la courbe de cette fonction.

Indications...

___________________________________________

Exercice 44 Dans l'application précédente, la courbe n'est pas toujours visible dans de bonnes conditions. Pour pouvoir zoomer, placez sur les bords de la vue de la courbe deux potentiomètres permettant de spécififier un coefficient de dilatation horizontal et vertical. Ces coefficients devront être associés à chaque fonction pour permettre un tracer correct à chaque sélection.

Indications...

___________________________________________

beugnard@enst-bretagne.fr