====== Commit 2007-09-21 ====== ===== Modifs ===== ==== Nettoyages ==== * ''ContactInteraction'' est maintenant une classe abstraite (ca évite qu'on en définisse une par erreur dans un jeu de données - ça m'est arrivé souvent en convertissant d'anciens cas-tests). * le code de ''battery.py'' et ''clean.py'' ont été déplacés dans ''toolbox''. Ca permet de les appeler à partir de l'extérieur de metafor (votre projet ou une batterie de tests externe). Regardez le code de ''oo_meta/battery.py'' pour voir comment ça marche. Si vous voulez vous faire une batterie externe, voilà un exemple: mtfdir = '../../oo_meta' if __name__ == "__main__": import sys, os.path if os.path.isdir(mtfdir): sys.path.append(os.path.abspath(mtfdir)) else: print "metafor dir (\"%s\") not found!" sys.exit() import toolbox.battery as b b.dirs = [ 'tests' ] b.verifdir = 'tests/verif'.replace('/',os.sep) b.mtfdir = mtfdir b.cplx_exec = [ 'tests.complex' ] b.main() ==== Metafor sans console ==== J'ai réesayé de supprimer la console qui apparait lorsqu'on lance Metafor. Celle-ci vient du fait qu'on compile l'application en mode "console". Normalement cette console devrait être inutile puisque tous les flux (python d'une part et streams c++ de l'autre - à l'exception des i/o C non python) sont redirigés vers la fenêtre graphique. Malheureusement, quand on crée une application "non console", on constatait (avant ce commit) que l'interpréteur python merdouille. En débugant, on voit que la fonction ''readline'' customisée par mes soins pour la vizu n'est plus appelée car python vérifie que ''stdin'' et ''stdout'' sont bien des flux console... Ce qui n'est plus le cas vu qu'on n'a plus de console! C'est vraiment très bête parce qu'en supprimant ce test dans python (en dur dans le source), tout fonctionnerait nickel. En conséquence, j'ai réécrit, dans ce cas pathologique, une boucle python qui appelle explicitement le ''readline'' customisé et qui exécute des ''PyRun_SimpleString''. Cette façon de faire fonctionne mais a l'inconviénent de ne pas afficher les objets après chaque commande interactive (par exemple "''a=2; a''" n'affiche pas ''2''). A part ça, tout est OK (''cont2'' tourne, quoi). J'ai mis au point 2 solutions pour virer cette sale console: __Les 2 solutions:__ * Créer un nouveau projet "non console" (MetaforGUI.exe par exemple - voir plus bas): comme je l'ai dit plus haut: tout marche sauf le ''print'' automatique (plus techniquement le ''sys.displayhook'' n'est pas appelé). * Utiliser la nouvelle option ''-nocon'' dans un raccourci vers ''Metafor.exe'' version console: la console apparait puis disparait! pouf! ===== Projet ===== ==== Nouveau projet ==== Je conseille à tous (Luc en particulier) de faire un nouveau projet nommé ''MetaforGUI''. C'est un exec non console similaire à ''Metafor''. Quelques remarques: * MetaforGUI contient ''main.cpp'' * ajouter au link "''qtmain.lib''" (ceci permet de s'affranchir de la définition de la routine ''WinMain'' - le source reste donc inchangé). Aucune obligation de l'utiliser plutôt que ''Metafor'' vu ses inconvénient (le but ici est de vérifier que tout compile correctement). Pour rappel, les différences avec l'exec console sont: * impossibilité de lancer en mode ''-nogui'' (je changerai ça peut être plus tard) * les commandes interactives n'affichent pas les objets. Par exemple: import sys; dir(sys) doit s'écrire import sys; print dir(sys) ==== Raccourci bureau ==== Pour ceux qui, comme moi, ont un raccourci vers ''Metafor.exe'', vous pouvez ajouter l'option ''-nocon'' à votre raccourci pour supprimer la console {{ commit:2007:nocon-shcut.png |}} ===== Fichiers ajoutés/supprimés ====== toolbox/battery.py added toolbox/clean.py added --- //[[r_boman@yahoo.fr|Romain BOMAN]] 2007/09/21 08:39//