/********************************* CApp.h *****************************************
                                                                                
    Project: MedinTux                                                            
    Copyright (C) 2005 by Roland Sevin  and Data Medical Design            
    E-Mail: data.medical.design@club-internet.fr                                 
                                                                                 
    This program is free software; you can redistribute it and/or modify         
    it under the terms of the CeCILL Version 1 du 21/06/2004                     
    License (GPL compatible)                                                     
                               http://www.cecill.info/                           
    as published by :                                                            
                                                                                 
    Commissariat � l'Energie Atomique                                            
    - CEA,                                                                       
                             31-33 rue de la F�d�ration, 75752 PARIS cedex 15.   
                             FRANCE                                              
    Centre National de la Recherche Scientifique                                 
    - CNRS,                                                                      
                             3 rue Michel-Ange, 75794 Paris cedex 16.            
                             FRANCE                                              
    Institut National de Recherche en Informatique et en Automatique             
    - INRIA,                                                                     
                             Domaine de Voluceau, Rocquencourt, BP 105, 78153    
                             FRANCE                                              
                                                                                 
          This program is distributed in the hope that it will be useful,        
          but WITHOUT ANY WARRANTY; without even the implied warranty of         
          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                   
          CeCILL  License (GPL compatible) for more details.                     
                                                                                 
*/

#ifndef C_APP_H
#define C_APP_H

#ifdef Q_WS_WIN
   #define F_EXE ".exe"
#else
   #define F_EXE ""
#endif


#include "../../drtux/src/CMoteur_Base.h"  // inclu aussi      #include "CRubList.h"
#include "../../MedinTuxTools/C_ImageList.h"
#include "../../MedinTuxTools/Theme.h"  // Gestion du thème de l'appli
#include "C_Atcd.h"

#ifdef COMMERCIAL_VERSION
    #include "../../Commercial/C_MUI_App.h"
    #include "../../Commercial/C_Cps.h"
    #include "../../Commercial/C_Vitale.h"
#else
    #include "../../MedinTuxTools/C_MUI_App.h"
#endif

#include <qobject.h>
#include <qmap.h>
#include <qiconset.h>

#define TR  QObject::tr
//............................... exportation des variables globales Uniques de l'application ....................................
//
class DrTux;			// classe principale et parente de l'application
class CMoteurBase;		// classe d'outils de gestion des données en base de donnée
class CMedicaBase;		// classe d'outils de gestion des données en base de donnée therapeutique
class CMDI_ChoixPatient;	// classe de la fenetre de choix des patients
class CMDI_Ident;		// classe de la fenetre indentité du patient
class CMDI_Prescription;	// classe de la fenetre de gestion des prescriptions du patient
class CMDI_Observation;		// classe de la fenetre de gestion des observations du patient
class CMDI_Terrain;		// classe de la fenetre de gestion du terrain du patient
class CMDI_Documents;		// classe de la fenetre de gestion du terrain du patient
class CMDI_GroupedView;		// classe de la fenetre de gestion Multi-Vue
class CMDI_Generic;		// classe de la fenetre de gestion generique d'une rubrique


//================================================= CApp ==============================================================
class CApp : public C_MUI_App
{
 public:


     // Quelques enum pour les méthodes de trie
     /*! \brief Enumération pour les fonctions de tri des variables et des antécédents. 
      *  Peut prendre les valeurs SortByDate, SortByValue, SortByRubrique, SortBySection, SortByLibelle
     */
     enum SortBy { SortByDate=0, SortByValue=1, SortByRubrique=2, SortBySection=3, SortByLibelle=4 };


     CApp(QString mui_name, int & argc, char ** argv);
    ~CApp();


     void           saveLastUserOn_Ini(const QString &user, const QString &signUser, const QString &password, bool passwordMustBeRecorded  = 1 );
     int            AuthentifyAndSelectUser(QWidget * parent, const QString &newUser, const QString &newSignUser, bool passwordMustBeRecorded  = 1 );
     bool           IsAppStartWithUser();
     bool           IsThisDroitExist(const char *listDroits, const char *droitToFind);
     void           Map_Prefix_Droits();
     QString        GetMap_Prefix_Droits(const QString &doc_Type);
     int            SetIconTherapeutique();
     CMDI_Generic  *GetCurrentRubrique(QString *pRubName  = 0 , int* rub_type_ret  = 0 , CRubRecord **ppCRubRecord = 0 );
     int            PathDocumentToType( const QString &path , QString *pRubNameToFind = 0 );
     int            ApproximativeRubNameToType( const QString &texte , QString *pRubNameToFind=0);
     static int       RubNameToType( const QString &rubName );
     static QString   TypeToRubName( int typRub );
     static QString   GetImageFileName(QString *last_path  = 0 , QString stringPreselect ="", int prewiew =1);
public:


    DrTux               *m_pDrTux;		/*!< Pointeur vers DrTux Objet principal */
    CMoteurBase         *m_pCMoteurBase;	/*!< Moteur de la base de données DrTux */
    CMedicaBase         *m_pCMedicaBase;	/*!< Moteur de la base de données médicamenteuse */
    QStringList          m_ListRubName;		/*!< Liste des rubriques disponibles */

   //......................... contexte ......................................................
    QString              m_PathGlossaire;	/*!< Chemin vers le Glossaire */
    QString              m_PathAppli;		/*!< Chemin vers l'appli en cours */
    QString              m_PathTerrain;		/*!< Chemin vers le répertoire Terrain */
    QString              m_PathImages;		/*!< Chemin vers le répertoire de sauvegarde des images */
    QString              m_PathCfg_Base;	/*!< Chemin vers le fichier de configuration de la base */
    QString              m_PathTheme;		/*!< Chemin vers le Thème à utiliser */

    //.................... fichiers de configuration .........................................
    QString              m_PathDrTuxIni;	/*!< Chemin vers le Glossaire */
    QString              m_DrTuxParam;		/*!< variable de configuration locale du .ini */
    QString              m_User;		/*!< Login de l'utilisateur en cours */
    QString              m_SignUser;		/*!< Login de l'utilisateur signataire */
    QString              m_CriptedPassWord;	/*!< Mot de passe crypté */
    QString              m_Droits;		/*!< Droits de l'utilisateur */
    QString              m_MessVisuDocNotPossible;	/*!< non documenté */
    QString              m_LastError;		/*!< variable de configuration locale du .ini */
    bool                 m_IsAppStartWithUser;	/*!< Appli démarrée avec un utilisateur oui/non */
    int                  m_TimerVerrouDelay;	/*!< Temps de verrouillage */

    //.................... Configuration Pour le Terrain ...........................
    // Trie
    int			 m_Atcd_SortBy;	/*!< Utilisé par la classe Atcd_Code pour méthode de trie. \sa enum SortBy */
    int			 m_Var_SortBy;	/*!< Utilisé par la classe Var_Code pour méthode de trie. \sa enum SortBy */
    int			 m_VarValue_SortBy;	/*!< Utilisé par la classe Var_Code pour méthode de trie. \sa enum SortBy */
    // Objets du terrain
    Atcd_Code*		m_pAtcd_Code;	/*!< Objet de gestion du terrain pour les antécédents */


    //................. Theme .................................
    Theme		m_Theme;		/*!< Pointeur vers le thème (icones, choix des couleurs et fontes) */
    QIconSet		m_IconTherapeutique;	/*!< Icone pour la thérapeutique selon la base médicaments */

    //.................. prefixage des types de documents prescriptifs avec le type de droit .......................
    //                                key               value
    //  #define TYP_ORDO_CALC      20020100              or
    //  #define TYP_ORDONNANCE     20020200              ot
    //  #define TYP_CERTIFICAT     20020300              ce
    //  #define TYP_COURRIER       20020500              co

    QMap<QString, QString> m_mapDroitPrefix;	/*!< Non documentée */
    C_ImageList            m_C_ImageList;	/*!< Pour la gestion des documents (CMDI_Documents) */
//......................... carte PS .............................
#ifdef COMMERCIAL_VERSION
  C_Cps  *m_pCps;
#endif
};

extern CApp* G_pCApp;				/*!< Instance globale de l'application */

#endif

