commit:2006:11_14
Table of Contents
Commit 2006-11-14
- Redirection des flux standards:
- J'ai programmé un système qui permet de rediriger les flux standards
std::cout
etstd::cerr
vers +/- n'importe quoi. Ca permet, par exemple de rediriger les sorties dans un fichier sans rien toucher au reste du code! Actuellement, lorsqu'on lance Metafor, la sortie est redirigée dans un fichierlogfile.txt
(c'est temporaire - il faudra rendre ça plus général). En mode graphique, la sortie est également redirigée vers la nouvelle console (voir ci-dessous).
- Nouvelle Console:
- Dans le but de créer une vraie interface graphique à Metafor, j'ai réorganisé les différents threads pour obtenir, au final, une application graphique intégrant une console python.
- L'ancienne console python utilisable à travers
VizWin
(j'étais certainement le seul à l'avoir déjà utilisée) est maintenant devenue la fenêtre principale de Metafor. Cela m'a permis d'inverser les threads (le thread principal est maintenant le thread graphique Qt/VTK et le thread secondaire est python). Bien sur, si on spécifie-nogui
, on retrouve la ligne de commande classique. - D'après la doc Qt, l'application Qt doit toujours être dans le thread principal. J'ai jamais vu de problème lorsqu'elle était dans un thread secondaire mais au moins, maintenant, c'est réglé.
- Avantages:
- C'est plus beau.
- On va pouvoir intégrer toutes sortes de choses dans cette fenêtre python (liens vers les
VizWin
, un object browser, un lien vers l'aide de Metafor, etc). - On bénéficie de l'historique de commandes quel que soit l'endroit d'où on lance Metafor (même en double cliquant sur l'icône).
- le thread de lecture de
std::cin
(StdinReader
) est devenu inutile. Conséquence, il n'est plus nécessaire de taper 50x surENTER
aprèsquit
pour quitter Metafor. On peut fermer Metafor simplement en détruisant la fenêtre python.
- Inconvénient:
- J'ai pas réussi à supprimer la console complètement. Autrement dit, Metafor est toujours une “Win32 Console App”. Il y a donc une moche fenêtre noire qui s'ouvre lorsqu'on lance Metafor. Le problème vient du fait que python fait des tests sur
stdin
etstdout
(commandeisatty
) pour voir si on est en mode interactif. Dans le cas d'une application purement graphique, python pense qu'on n'est pas en interactif et ça foire parce qu'il n'appelle pas ma fonction de lecture définie par le pointeurPyOS_ReadlineFunctionPointer
(ça pourrait se corriger en commentarisant 3 lignes le source de python -parser/myreadline.c
, c'est débile). J'ai aussi essayé d'utiliser une autre fonction quePyRun_InteractiveLoop
pour lancer python mais, dans ce cas, même si ça marche mieux, on perd tout de même certains affichages (si on écrit 'a=2' et puis 'a', python n'affiche pas la valeur de 'a') et écrire des commandes sur plusieurs lignes devient impossible en interactif. Ce qui est dommage c'est que si on fait la modif du source python et qu'on gardePyRun_InteractiveLoop
, tout fonctionne parfaitement sans console!…
- BWin:
- Nettoyage du code (application des règles de prog pour le noms des données membres.
Projet
- Pour le projet Qt (
.pro
), virezTabBase.*
et ajoutezTabItem.*
etTextEditStream.*
desSOURCES
etHEADERS
. - Ensuite ajoutez
TabBaseWidget.ui
auxFORMS
.
Screenshot
Fichiers ajoutés/supprimés
R mtQt/TabBase.cpp R mtQt/TabBase.h A mtQt/TabBaseWidget.ui A mtQt/TabBaseWidget.ui.h A mtQt/TabItem.cpp A mtQt/TabItem.h A mtQt/TextEditStream.cpp A mtQt/TextEditStream.h A mtGlobal/Teebuf.cpp A mtGlobal/Teebuf.h
— Romain BOMAN 2006/11/14 09:06
commit/2006/11_14.txt · Last modified: 2016/03/30 15:23 by 127.0.0.1