Le Samedi 11 Juin 2005 04:15, Leif Thande a écrit :
> 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.

Je suis désolé de ne pas adhérer à cette proposition :-), mais je pense 
sincèrement que ce n'est pas la bonne solution. La différence entre les 
toolkits fait que à un moment ou à un autre, on risque d'aboutir dans un cul 
de sac. Il vaut mieux laisser un libre accès direct aux différents toolkits.

Prenons qqs différences tout bêtes entre Gtk et Qt : les widgets de Gtk n'ont 
pas la notion de « parent » dans leur constructeur alors que ceux de Qt 
l'ont, le positionnement de widgets avec Qt peut utiliser la notion de 
« spacer » (élément vide de séparation) qui ne me semblent pas exister avec 
Gtk+ ... comment gérer toutes ces différences ? Chaque ajout de toolkit à 
Nsetup risque d'obliger à revoir à chaque fois la manière de créer les 
widgets et celle de positionner les éléments. Je pense honnêtement qu'il est 
plus simple d'utiliser directement chaque toolkit.

++
Gontran

Répondre à