// Classe de base d'objets application pour // les programmes graphiques interactives // // E.Aubourg , R. Ansari 96 - 98 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA //++ // Class PIApplication // Lib PI // include piapplgen.h // // Classe de base pour l'objet application. L'objet PIApplication // doit être créé avant la création des autres objets de PI. // La classe "PIApplication" a implémentation dépendante // du systeme utilisé (Mac, XWindow, ...). La classe "PIApplicationGen" // est la classe qui définit l'interface, et ne doit pas être instanciée // directement (Méthodes virtuelles pures). Les objets instanciés sont // de la classes "PIApplication" et le fichier entête correspondant est // "PIAPP_H" défini dans "pisysdep.h". //-- //++ // Links Parents // PIMsgHandler //-- //++ // Titre Constructeur //-- //++ // PIApplication(int sx=200, int sy=30, int narg=0, char *arg[]=NULL) // Constructeur. "sx,sy" est la taille de la fenêtre principale // (ou PIContainer) associée à l'application. Des arguments // optionnels, par exemple celle de la ligne de commande peuvent // être transmis à l'objet PIApplication. Dans le cas d'Unix/XWindow // par exemple, les options reconnues par la Xtoolkit peuvent // être passées à l'objet application. //-- //++ // Titre Méthodes //-- //++ // PIContainer* MainWin() // Renvoie le pointeur de l'objet "PIContainer" associé à l'application. // PIMenubar* Menubar() // Renvoie le pointeur de l'objet "PIMenubar" associé à l'application. // void AppendMenu(PIPDMenu *pdm) // Ajoute le "PIPDMenu *pdm" au Menubar de l'application. Le titre // du menu dans le menubar est le nom de l'objet menu. // void Run() Stop // Démarre, arrête la boucle d'événements. //-- #include "piapplgen.h" // Variable qui contient le pointeur de l'application courante // permet de recuperer la taille pref pour la fonction globale static PIApplicationGen * curapp = NULL; PIApplicationGen::PIApplicationGen() :topcont(NULL), menubar(NULL), mState(0) { curapp = this; } PIApplicationGen::~PIApplicationGen() {} void PIApplicationGen::AppendMenu(PIPDMenu *pdm) { if (menubar) menubar->AppendMenu(pdm); return; } //++ // void SetReady() // Modifie l'état global de l'application - Pssage à l'état normal, // prêt à traiter les actions utilisateur. // void SetBusy() // Passage en mode de calcul - La souris prend la forme de la montre // pour la fenêtre principale // void SetBlocked() // Passge en mode bloqué. La barre de menu devient insensible // int GetState() // Renvoie l'état global de l'application "(kReadyState, kBusyState, kBlockedState)". //-- void PIApplicationGen::SetReady() { mState = kReadyState; } void PIApplicationGen::SetBusy() { mState = kBusyState; } void PIApplicationGen::SetBlocked() { mState = kBlockedState; } int PIApplicationGen::GetState() { return mState; } //++ // Titre Redirection StdOut, StdErr // Il est possible de rediriger les flots de sortie // standard et d'erreur vers un objet PIConsol. //-- //++ // void RedirectOutStream(PIConsole* cons, unsigned char va= PIVA_Def) // Redirige le flot de sortie ("stdout" sous Unix) vers l'objet // PIConsole "cons". // // void RedirectErrStream(PIConsole* cons, unsigned char va= PIVA_Def) // Redirige le flot des messages d'erreur ("stderr" sous Unix) // vers l'objet PIConsole "cons". //-- //++ // Titre Informations globales // Les méthodes suivantes permettent d'acceder aux informations // concernant l'écran (tailles, ...). Des fonctions globales sont // prévues ( "PIApplicationPrefCompSize()" et "PIApplicationScreenSize()" ) // afin d'obtenir ces informations sans avoir besoin d'une instance de la // classes application. //-- //++ // void PIApplicationPrefCompSize(int& szx, int& szy) // Fonction globale // void PrefCompSz(int& szx, int& szy) // Renvoie la taille préférée pour les composantes standard. "szx,szy" // est la taille (en pixels) pour un champ texte, ou un bouton "(PIText, PIButton)" // avec l'étiquette ou un contenu de 6 caractères (Ex: Cancel). // // void PIApplicationScreenSize() // Fonction globale // void ScreenSz(int& szx, int& szy) // Renvoie la taille en pixels de l'écran // //-- void PIApplicationPrefCompSize(int& szx, int& szy) { szx = szy = 10; if (curapp) curapp->PrefCompSz(szx, szy); return; } void PIApplicationScreenSize(int& szx, int& szy) { szx = szy = 500; if (curapp) curapp->ScreenSz(szx, szy); return; }