J'aimerais faire une brève explication du moyen que nous avons retenu
pour la création des interfaces de Nsetup avec Ruby. Les interfaces
retenues sont ncurses et gtk. Gtk est supportée à 100% et ncurses
semble fonctionnel puisqu'utilisé par d'autres projets.

Concernant la création des interfaces, nous avons décider de faire
appel à un module tierce, Ngui. Celui-ci s'occupera d'afficher les
widgets, peut importe laquelle des interfaces est sélectionnée. Le but
premier est de facilité la vie au créateur de module, qui n'a qu'une
interface à créer. Par exemple, si je désire obtenir un label, je n'ai
qu'à tapper ceci ;

label1 = Ngui.label("Ngui Rox")

Si c'est Gtk qui s'occupe de l'affichage, Ngui se charge de lancer un
Gtk::Label.new . Sinon dans le cas de Ncurses, c'est le widget label
qui sera appellé. Ngui ne sert donc que de couche d'abstraction. Vous
pouvez très clairement voir que le créateur de module n'a pas à se
soucier du fait que Nsetup utilise telle ou telle interface. L'autre
solution qui consistait à implémenter l'interface directement dans le
module et de faire une version pour chacune ( lilo-gtk , lilo-ncurses
) est plus simple pour la création des interfaces, mais jugée trop
compliquée pour le créateur de module qui doit se tapper 2 fois le
même travail. Vous pouvez aussi constater que l'ajout du support d'une
autre interface en est de beaucoup facilité, il suffit de créer un
module ngui-qt ou ngui-tk pour y avoir accès. Ce n'est pas dans nos
intentions pour l'instant mais ce serait possible à faire.

Maintenant, l'utilisation de Ngui demande un certain nombre de choses :

1- Que l'ensemble des widgets nécessaires soient implémentés dans
Ngui. Ngui sera donc 2 choses : Premièrement, un document qui spécifie
tous les widgets qui doivent être supportés avec leurs paramètres, et
ensuite une implémentation dans le fichier de chacun des toolkits ,
par exemple ngui-gtk.rb

2- Je n'ai pas encore exploré le support des évenements (clique sur un
bouton etc.. ). Je vais voir comment cela fonctionnera et quel degré
d'implémentation sera nécessaire.

3- La disposition des éléments est aussi un problème qui repose
essentiellement sur la chose suivante : Ncurses place ses trucs à
l'aide de coordonnés x,y , alors que Gtk place ses widgets à l'aide de
tableaux et de boites, et organise lui même son espace. Pour arriver à
concilier ces 2 choses, il faudra soit implémenter un support de
tableau pour ncurses ou trouver une solution tierce. Je suis en train
de faire une ébauche d'une de ses méthodes qui pourrait peut-être
convenir, je vous la transmet dès qu'elle sera terminé et surtout bien
réfléchie. Mais globalement, elle repose sur l'ordre à laquelle les
éléments sont énumérés dans le module.

Maintenant, je tient à rappeller que cette façon de faire n'est
NULLEMENT DÉFINITIVE. Elle est à l'état de test, de proof of concept
et on évaluera plus tard si cette façon de faire tiend toujours la
route. La raison pour laquelle je prend le soin de bien mettre
l'emphase sur ce fait, c'est que toute l'équipe de Nsetup tiend à ce
que la solution adoptée soit fonctionnelle et non pas "une usine à
gaz". Pour cette raison, si vous avez le moindre doute sur la
pertinence de cette façon de faire une si vous avez une autre méthode
à nous suggérer, n'hésité pas ! Il vaut cerner les problèmes
maintenant que plus tard.

Plus d'informations dans les jours qui suiveront.

 Leif- J2EE Lead Architect ^^

Répondre à