/************************************** manager.cpp *******************************
 *                                                                                *
 *   #include"manager.h"                                                          *
 *   Project: MedinTux                                                            *
 *   Copyright (C) 2003 2004 2005 by Sevin Roland  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.                     *
 *                                                                                *
 **********************************************************************************/


#include <qimage.h>
#include <qpixmap.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
#include <qtextedit.h>
#include <qfile.h>
#include <qfiledialog.h>
#include <qstatusbar.h>
#include <qmessagebox.h>
#include <qprinter.h>
#include <qapplication.h>
#include <qaccel.h>
#include <qtextstream.h>
#include <qpainter.h>
#include <qpaintdevicemetrics.h>
#include <qwhatsthis.h>
#include <qvbox.h>
#include <qcheckbox.h>
#include <qlineedit.h>
#include <qeventloop.h>
#include <qlistview.h>
#include <qgroupbox.h>

#include "CApp.h"
#include "manager.h"

#include "../../MedinTuxTools/cdlg_passwordget.h"
#include "../../MedinTuxTools/CMaskedLineEdit.h"
#include "../../MedinTuxTools/Theme.h"
#include "Wdg_RendezVous.h"
#include "Dlg_NewUser.h"
#include "Wdg_Agenda.h"
#include "Wdg_Monitor.h"
#include "Wdg_User.h"
#include "Wdg_Central.h"

//---------------------------------------------- ~manager ----------------------------------------------------------------------
manager::~manager()
{
}
//----------------------------------------------- manager -------------------------------------------------------------
manager::manager()
    : QMainWindow( 0, "manager", WDestructiveClose )
{
    m_pActionDeverrouilleBase = 0;
    m_pMenu                   = 0;
    m_LogTimeMax              = 0;
    m_pQtimerLogin            = 0;
    m_pWdg_C                  = 0;
    //.............................. OK la base est initialisée on peut continuer ...............................
    setCaption("");   // si appelé avec chaine vide, cela affiche les infos complêtes de connexion
    setIcon( Theme::getIcon("Manager.png" ));

    //.................................................................................................

    //......................... Docker dialogue de l'Agenda ......................................

    m_pDockAgenda = new QDockWindow (this, "DockFormAgenda");
    m_pDockAgenda->setResizeEnabled(TRUE);
    m_pDockAgenda->setCloseMode (QDockWindow::Always);
    m_pDockAgenda->setCaption(tr("Agenda"));
    addToolBar( m_pDockAgenda, Qt::DockLeft );
    m_pWdg_Agenda          = new Wdg_Agenda(m_pDockAgenda, "Wdg_Agenda");
    m_pDockAgenda->setWidget( m_pWdg_Agenda );
    m_pDockAgenda->setFixedExtentWidth (200);

    //......................... Docker dialogue User......................................
    m_pDockUserList = new QDockWindow (this, "DockFormUser");
    m_pDockUserList->setResizeEnabled(TRUE);
    m_pDockUserList->setCloseMode (QDockWindow::Always);
    m_pDockUserList->setCaption(tr("Utilisateur"));
    addToolBar( m_pDockUserList, Qt::DockLeft );
    m_pWdg_User          = new Wdg_User(m_pDockUserList, "Wdg_User");
    m_pDockUserList->setWidget( m_pWdg_User );

    m_pDockUserList->setFixedExtentWidth (200);
    connect( m_pWdg_User, SIGNAL( Sign_UserSelected ( QListViewItem *, QListViewItem * )),  this,   SLOT(   OnUserSelected(QListViewItem *, QListViewItem * ))  );
    connect( m_pWdg_User, SIGNAL( Sign_UserMustBeEdited (  )),                              this,   SLOT(   Slot_EditUser())   );
    connect( m_pWdg_User, SIGNAL( Sign_ComboUserTypClicked (const QString&  )),             this,   SLOT(   Slot_ComboUserTypClicked(const QString &))   );

    /*
    //......................... Docker dialogue du monitor ......................................
    pDock = new QDockWindow (this, "DockFormMonitor");
    pDock->setResizeEnabled(TRUE);
    pDock->setFixedExtentHeight ( 80 );
    pDock->setCloseMode (QDockWindow::Always);
    pDock->setCaption(tr("Monitor"));
    addToolBar( pDock, Qt::DockBottom );
    m_pWdg_Monitor          = new Wdg_Monitor(pDock, "Wdg_Monitor");
    pDock->setWidget( m_pWdg_Monitor );
    */
   QString val1, val2, val3, val4;

   if (CGestIni::Param_ReadParam( G_pCApp->m_LocalParam, "Derniere Session", "Login TimeMax", &val1) == 0 ) // zero = pas d'erreur
       {m_LogTimeMax = val1.toInt();
       }

    m_pQtimerLogin = new QTimer;
    connect( m_pQtimerLogin, SIGNAL(timeout()), this, SLOT(OnLogTimer()) );
    if (m_LogTimeMax>0) StartLogTimer();
    //................... creation du QVbox central ...............................................
    QVBox *pQVCentral = new QVBox( this );
    pQVCentral->setMargin( 0 );
    pQVCentral->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );

    //................... y placer une barre d'onglets .............................................
    //................... y placer un QWorkspace ..................................................
    //                    qui contiendra et gerera les fenetres MDI
    m_pQWorkSpace     = new QWorkspace(pQVCentral);
    m_pQWorkSpace->setScrollBarsEnabled( TRUE );
    setCentralWidget(  pQVCentral );

    m_CMDI_Identification = new CMDI_Identification (m_pQWorkSpace, "CMDI_Identification", WDestructiveClose, G_pCApp->m_pCMoteurBase);
    m_pWdg_C              = m_CMDI_Identification->m_pWdg_Central;
    //.................. connecter agenda au widget central .............................................................
    connect( m_pWdg_Agenda,                                    SIGNAL( Sign_RendezVousAccederClicked(Wdg_RendezVous*)  ),
             m_pWdg_C ,           SLOT(   OnRendezVousAccederClicked(Wdg_RendezVous*)  )
           );
    //.................. connecter carte CPS au widget central .............................................................
#ifdef COMMERCIAL_VERSION
    connect(m_pWdg_User ,                   SIGNAL( Sign_CPS_IsClicked ()),
                  this,                     SLOT(   Slot_CPS_IsClicked ())
           );
    connect(m_pWdg_C->pushButtonVitale ,  SIGNAL(   clicked ()),
                  this,                     SLOT(   Slot_Vitale_IsClicked ())
           );
    connect(m_pWdg_C  ,                   SIGNAL(   Sign_SaveIdentDoing ()),
                  this,                     SLOT(   Slot_SaveIdentDoing ())
           );

    //connect(pWdg_C->ListView_Vitale ,  SIGNAL( clicked(QListViewItem*,const QPoint&, int)),
    //              this,                                               SLOT(   Slot_ListView_Vitale_IsClicked (QListViewItem*,const QPoint&, int))
    //       );
    connect(m_pWdg_C->ListView_Vitale ,  SIGNAL( doubleClicked(QListViewItem*,const QPoint&, int)),
                  this,                                               SLOT(   Slot_ListView_Vitale_IsDoubleClicked (QListViewItem*,const QPoint&, int))
           );
    connect(m_pWdg_C->ListView_Vitale ,  SIGNAL( selectionChanged(QListViewItem*)),
                  this,                                               SLOT(   Slot_ListView_Vitale_selectionChanged (QListViewItem*))
           );

    connect(m_pWdg_C->ListView_Vitale ,  SIGNAL( mouseButtonClicked ( int , QListViewItem * , const QPoint&, int  )),
                  this,                                               SLOT(   Slot_ListView_Vitale_mouseButtonPressed (int , QListViewItem * , const QPoint&, int))
           );
#endif
    setupFileActions();
    statusBar()->message( tr("Prêt"), 2000 );
    G_pCApp->m_pManager = this;    // si on en arrive là c'est que tout est OK
    if (CGestIni::Param_ReadParam(G_pCApp->m_LocalParam,"ManagerPos", "Positions", &val1, &val2, &val3, &val4)==0)  // zero = pas d'erreur
       {//setGeometry (QRect (val1.toInt(),val2.toInt(),val3.toInt(),val4.toInt()));
        move(val1.toInt(), val2.toInt());
        resize(val3.toInt(), val4.toInt());
        show();
       }
    else
       {QRect rect =  QApplication::desktop()->geometry();   // juste pour faire bouger les choses ajustement du bas)
        setGeometry ( rect );
        showMaximized () ;
       }
    if (G_pCApp->IsAppStartWithUser()) // la boite des utilisateurs s'est deja positionnee sur le bon lors de sa creation
       {if (m_pWdg_Agenda) m_pWdg_Agenda->SetUser(G_pCApp->m_User);
       }
    else
       {//..................... tant que pas identificaion tout inactiver ................................................................
        SetNoUserState();
       }
    Get_RecordDispos();
    statusBar()->hide();
    //statusBar ()->message(tr("Mode OpenClose sur : ")+QString::number(G_pCApp->m_pCMoteurBase->m_CloseAfterQuery),10000);
}
//---------------------------------------------- StartWithUser -----------------------------------------------------------------------
void manager::StartWithUser(const QString &user, const QString &sign_user)
{if (m_pWdg_User==0) return;
 QListViewItem *pQListViewItem = m_pWdg_User->getUserItem(user, sign_user);
 if (pQListViewItem)
    {m_pWdg_User->ListView_UserList_LineChanged( pQListViewItem );
     m_pWdg_User->ListView_UserList->setCurrentItem (pQListViewItem );
     m_pWdg_User->ListView_UserList->setSelected (pQListViewItem, TRUE );
     m_pWdg_User->ListView_UserList->ensureItemVisible(pQListViewItem);
     m_pWdg_User->SetLogged();
     if (m_pWdg_Agenda)  m_pWdg_Agenda->SetUser(user);
     if (m_LogTimeMax>0) StartLogTimer();
    }
}
 //---------------------------------------------- StartWithUser -----------------------------------------------------------------------
void manager::OnLogTimer()
{ SetNoUserState();
}
 //---------------------------------------------- StartWithUser -----------------------------------------------------------------------
void manager::StartLogTimer()
{ m_pQtimerLogin->start(m_LogTimeMax*1000, TRUE);
}
//---------------------------------------------- SetNoUserState -----------------------------------------------------------------------
void manager::SetNoUserState()
{  m_CMDI_Identification->setEnabled(FALSE);
   m_pWdg_Agenda->setEnabled(FALSE);
   m_pWdg_User->SetUnLogged();
}
//---------------------------------------------- DemarrerAccessoires -----------------------------------------------------------------------
void manager::DemarrerAccessoires()
{
  //.................. recuperer la liste des programmes Accessoires a demarrer en meme temps ................................................
  //                                              et les lancer
  // [Accessoires]
  // QLaboFTP = ../../QLaboFTP/bin/QLaboFTP
 QStringList accessoiresList;
 CGestIni::Param_GetList(G_pCApp->m_LocalParam, tr("Accessoires"), "", accessoiresList );
 if (accessoiresList.count())
    {for ( QStringList::Iterator it = accessoiresList.begin(); it != accessoiresList.end(); ++it )
         { DemarrerUnAccessoire(*it);
         }
    }
}
//---------------------------------------------- DemarrerUnAccessoire -----------------------------------------------------------------------
void manager::DemarrerUnAccessoire(QString accessoire_path)
{

 QString  pathExe = QDir::cleanDirPath (QFileInfo (qApp->argv()[0]).dirPath (true) + "/" + accessoire_path);
 #ifdef Q_WS_WIN
    pathExe +=".exe";
 #else
 #endif
 QProcess  proc ( this );
 proc.addArgument( pathExe );
 if ( proc.start() )
    {
    }
}
//---------------------------------------------- Slot_ComboUserTypClicked -----------------------------------------------------------------------
void manager::Slot_ComboUserTypClicked(const QString &)
{    QListViewItem *pQListViewItem = m_pWdg_User->getUserItem(G_pCApp->m_User, G_pCApp->m_SignUser);
     //................ si user en cours n'est plus dans la liste ....................
     //                 se mettre en unlogued
     if (! pQListViewItem )
        {SetNoUserState();
        }
     else
        {m_pWdg_User->SetUserItem(pQListViewItem);
         m_pWdg_User->SetLogged();
         m_CMDI_Identification->setEnabled(TRUE);
         m_pWdg_Agenda->setEnabled(TRUE);
        }
}

//---------------------------------------------- Slot_EditUser -----------------------------------------------------------------------
void manager::Slot_EditUser()
{On_EditUser("");
}

//---------------------------------------------- On_EditUser -----------------------------------------------------------------------
void manager::On_EditUser(QString cps)
{QProcess*  proc = new QProcess( this );
 if (proc==0) return;
 QString dumy;
 QString pathExe                  = CGestIni::Construct_Name_Exe("gest_user",QFileInfo (qApp->argv()[0]).dirPath (true));
 //QListViewItem *oldpQListViewItem = m_pWdg_User->getSignUser();
 proc->addArgument( pathExe );
 proc->addArgument( G_pCApp->m_User);                                        // Nom de l'utilisateur
 proc->addArgument( QString("#")+G_pCApp->m_CriptedPassWord );               // passWord
 if (cps.length()) proc->addArgument( cps.replace(",","__*$*__" ));
 if ( proc->start() )
    {
     qApp->processEvents ();
     while (proc->isRunning () )
           { QApplication::eventLoop()->processEvents ( QEventLoop::WaitForMore );
           }
     //.............. rebatir liste des utillisateurs au cas où .....................
     //               la gestion utilisateur  l'aurait modifiée
     QString   userQualite = m_pWdg_User->InitComboBoxUserTyp();
     if (userQualite==tr("Tout utilisateur"))userQualite="";     // si vide alors c'est tousles utilisateurs
     G_pCApp->m_pCMoteurBase->GetUserList( m_pWdg_User->ListView_UserList, dumy, dumy,TRUE, &userQualite);
     QListViewItem *pQListViewItem = m_pWdg_User->getUserItem(G_pCApp->m_User, G_pCApp->m_SignUser);
     //................ si user en cours n'est plus dans la liste (car detruit)....................
     //                 se mettre en unlogued
     if (! pQListViewItem )
        {SetNoUserState();
        }
     else
        {m_pWdg_User->SetUserItem(pQListViewItem);
         if (m_LogTimeMax>0) StartLogTimer();
        }
     G_pCApp->PositionneBonDroits();
     m_pWdg_C->SetInterfaceOnDroits(G_pCApp->m_Droits, 0);
     setMenuOnDroits ();
    }
}
//---------------------------------------------- setMenuOnDroits -----------------------------------------------------------------------
void manager::setMenuOnDroits ()
{  if  (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "nbv"))
       {if (m_pActionDeverrouilleBase)
           {m_pActionDeverrouilleBase->removeFrom (m_pMenu );
            delete m_pActionDeverrouilleBase;
            m_pActionDeverrouilleBase = 0;
           }
       }
     else
       {if (m_pActionDeverrouilleBase==0)
           {//m_pActionDeverrouilleBase->removeFrom (m_pMenu );
            //delete m_pActionDeverrouilleBase;
            //m_pActionDeverrouilleBase = 0;
            m_pActionDeverrouilleBase = new QAction( tr( "Deverrouiller les bases" ), QPixmap(), tr( "&Débloquer les bases" ), 0, this, "Deverrouiller les bases" );
            connect( m_pActionDeverrouilleBase, SIGNAL( activated() ), this, SLOT( Slot_Deverrouiller() ) );
            m_pActionDeverrouilleBase->addTo( m_pMenu );
           }
       }
}
//---------------------------------------------- Slot_CPS_IsClicked -----------------------------------------------------------------------
void manager::Slot_CPS_IsClicked ()
{
#ifdef COMMERCIAL_VERSION
 QString          userPk = "";
 QString            user = "";
 QString            pass = "";
 int ret;
    {
     QString pathPlugin, pathLog;
     CGestIni::Param_ReadParam(G_pCApp->m_LocalParam, "Sesam-Vitale", "pathPlugin",       &pathPlugin);
     CGestIni::Param_ReadParam(G_pCApp->m_LocalParam, "Sesam-Vitale", "pathLog",          &pathLog);
     //..................................... ne pas rajouter "/" car c'est un nom de fichier ..........................
     if ( QDir::isRelativePath ( pathPlugin ) )  pathPlugin = QDir::cleanDirPath (pathPlugin.prepend(G_pCApp->m_PathAppli));
     //..................................... rajouter "/" car le chemin doit être donné avec ..........................
     if ( QDir::isRelativePath ( pathLog ) )     pathLog    = QDir::cleanDirPath (pathLog.prepend(G_pCApp->m_PathAppli) )+"/";

     QString pluginScript  = "[Execute]\r\n";
             pluginScript += "pathPlugin="      + pathPlugin                                           + "\r\n" +
                             "pathIni=****\r\n" +                //**** car indique d'utiliser le pathIni du plugin
                             "maskExch=Bonjour tout le monde\r\n"
                             "[Parametres]\r\n"
                             "m_Command       = READ_CPS\r\n"
                             "m_PathLog       =" + pathLog                                             + "\r\n" +
                             "m_DateConsult   =" + QDate::currentDate().toString("yyyyMMdd");
     //.............. liste des champs a extraire .......................................
     //               lors recherche de l'utilisateur indique par la Carte CPS
     QString     cps_data = "";
     QStringList fieldList;
     fieldList.append(G_pCApp->m_pCMoteurBase->m_USER_IDENT_LOGIN);           // 0
     fieldList.append(G_pCApp->m_pCMoteurBase->m_USER_IDENT_PASSWORD);        // 1
     if (pathPlugin.length())
        {cps_data = PluginExe(this, pluginScript, CMoteurBase::endWait);
         G_pCApp->m_pCps->UnSerialize(cps_data);
         //CGestIni::Param_UpdateToDisk(G_pCApp->m_PathAppli + "test_ps.txt", ps_file);
         userPk = G_pCApp->m_pCMoteurBase->GetUserPrimKeyFromNumOrdre(G_pCApp->m_pCps->m_NIR, "-sgn", &fieldList);
        }
     //.......................... si existe déjà le selectionner ..................................
     if (userPk.length())
        {if (G_pCApp->m_pCps->m_NIR.length())
            {user = fieldList[0];                           // m_USER_IDENT_LOGIN
             m_CMDI_Identification->SetUser(user,"");
             G_pCApp->m_User            = user;
             G_pCApp->m_SignUser        = user;
             G_pCApp->m_CriptedPassWord = fieldList[1];     // m_USER_IDENT_PASSWORD
             G_pCApp->PositionneBonDroits();
             StartWithUser(G_pCApp->m_User, G_pCApp->m_SignUser);
            }
        }
     //.......................... sinon le créer .........................................
     else if ( G_pCApp->m_pCps->m_NIR.length() && G_pCApp->m_pCps->m_Nom.length() && G_pCApp->m_pCps->m_Prenom.length())
        { ret = QMessageBox::information( this, tr("Utilisateur inconnu"),
                                                tr( "L'utilisateur : <b>«" + G_pCApp->m_pCps->m_Nom + "  " + G_pCApp->m_pCps->m_Prenom +
                                                    "»</b>de cette carte de praticien de santé<br/> n'est pas connu de MedinTux, <br/>" +
                                                    "faut-il créer un nouvel utilisateur avec ?"
                                                   ) ,
                                                tr("&Créer"), tr("&Annuler"), 0,
                                                1, 1 );
          if (ret==0)
             { On_EditUser(cps_data);                   // todo evaluer si au retour l'utilisateur est effacé
               StartWithUser(G_pCApp->m_User, G_pCApp->m_SignUser);
               m_CMDI_Identification->SetUser(G_pCApp->m_User, G_pCApp->m_SignUser);
               if (m_pWdg_Agenda) m_pWdg_Agenda->SetUser(G_pCApp->m_User);
               G_pCApp->m_pCMoteurBase->GetUserPrimKey( G_pCApp->m_User, &G_pCApp->m_CriptedPassWord );
               setMenuOnDroits ();
             }
        }
   }
#endif
}

//---------------------------------------------- Slot_Vitale_IsClicked -----------------------------------------------------------------------
void manager::Slot_Vitale_IsClicked ()
{
#ifdef COMMERCIAL_VERSION
 QListView *pQlistView = m_pWdg_C->ListView_Vitale;
 int last_occurence    = 0;
 pQlistView->show();

 QString pathPlugin, pathLog;
 CGestIni::Param_ReadParam(G_pCApp->m_LocalParam, "Sesam-Vitale", "pathPlugin",       &pathPlugin);
 CGestIni::Param_ReadParam(G_pCApp->m_LocalParam, "Sesam-Vitale", "pathLog",          &pathLog);
 //..................................... ne pas rajouter "/" car c'est un nom de fichier ..........................
 if ( QDir::isRelativePath ( pathPlugin ) )  pathPlugin = QDir::cleanDirPath (pathPlugin.prepend(G_pCApp->m_PathAppli));
 //..................................... rajouter "/" car le chemin doit être donné avec ..........................
 if ( QDir::isRelativePath ( pathLog ) )     pathLog    = QDir::cleanDirPath (pathLog.prepend(G_pCApp->m_PathAppli) )+"/";

 QString pluginScript  = "[Execute]\r\n";
         pluginScript += "pathPlugin="      + pathPlugin                                           + "\r\n" +
                         "pathIni=****\r\n" +                   //**** car indique d'utiliser le pathIni local du plugin
                         "maskExch=Bonjour tout le monde\r\n"
                         "[Parametres]\r\n"
                         "m_Command       = READ_VITALE\r\n"
                         "m_PathLog       =" + pathLog                                             + "\r\n" +
                         "m_DateConsult   =" + QDate::currentDate().toString("yyyyMMdd");

 if (pathPlugin.length())
    {G_pCApp->m_pVitale->UnSerialize(PluginExe(this, pluginScript, CMoteurBase::endWait));
     //................. determine si le nom prenom entrent dans la comparaison ..........................
     QString localParam = "";   CGestIni::Param_UpdateFromDisk(G_pCApp->m_PathIni, localParam);
     bool matchOnNom    = (CGestIni::Param_ReadUniqueParam(localParam, "Sesam-Vitale", "Compare_Nom")    == "ok");
     bool matchOnPrenom = (CGestIni::Param_ReadUniqueParam(localParam, "Sesam-Vitale", "Compare_Prenom") == "ok");

     QString    nss = G_pCApp->m_pVitale->GetMember(8,  101, 1);
     last_occurence = G_pCApp->m_pVitale->GetNbOccurences(104) + 1;
     int i;
     pQlistView->clear();
     for (i=1; i<last_occurence; ++i)
         {QListViewItem *pQListViewItem = new QListViewItem( pQlistView);
          if (pQListViewItem)
             {pQListViewItem->setText(0, G_pCApp->m_pVitale->GetMember(1,  104, i));    // 0 nom
              pQListViewItem->setText(1, G_pCApp->m_pVitale->GetMember(3,  104, i));    // 1 prenom
              pQListViewItem->setText(2, G_pCApp->m_pVitale->GetMember(12, 104, i));    // 2 date Nss
              pQListViewItem->setText(3, nss);                                          // 3 num secu
              pQListViewItem->setText(4, G_pCApp->m_pVitale->GetMember(13,  104, i));   // 4 rang geme
              pQListViewItem->setText(5, G_pCApp->m_pVitale->GetMember(14,  104, i));   // 5 qualite ayant-droit
              pQListViewItem->setText(6, "");                                           // 6 pk doss
              pQListViewItem->setText(7, "");                                           // 7 GUID
              pQListViewItem->setText(8, QString::number(i));                           // 8 occurence
              //............ formater qq trucs pour les rendre compatble avec le match SQL ....................
              QString dnss     = pQListViewItem->text(2).left(8);             //  199306010000   -->  19930601
                      dnss     = dnss.insert(4,'-');                          //  19930601       -->  1993-0601
                      dnss     = dnss.insert(7,'-');                          //  1993-0601      -->  1993-06-01
                      dnss    += " 00:00:00";                                 //  1993-0601      -->  1993-06-01 00:00:00
              QString numSecu  = pQListViewItem->text(3);
                      numSecu += CMoteurBase::ComputeClef_Secu(numSecu);
              QString rangGem  = pQListViewItem->text(4);
              if (rangGem.length()==1) rangGem = rangGem.prepend("0");
              //............ determine si le nom prenom entrent dans la comparaison .....................
              QString        nom = pQListViewItem->text(0);
              QString     prenom = pQListViewItem->text(1);
              if (QDate::isValid ( dnss.mid(0,4).toInt(), dnss.mid(5,2).toInt(), dnss.mid(8,2).toInt() ) ) // si date de naiss invalide on est oblig� de se servir du nom prenom
              {
                  if (!matchOnNom)     nom    = "";
                  if (!matchOnPrenom)  prenom = "";
              }
              if (G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme( 0,                           // pas de listview car on veut juste savoir si trouve
                                                                                     nom,        // nom
                                                                                     prenom,     // prenom
                                                                                     dnss,                        // date Nss // doit etre 1993-06-01 00:00:00
                                                                                     numSecu,                     // num secu // 160196296519557
                                                                                     rangGem,                     // rang gemellaire
                                                                                     pQListViewItem->text(5),     // qualite d'ayant droit
                                                                                     "",      //  adresse,
                                                                                     "",      //  codePost,
                                                                                     "",      //  ville,
                                                                                     "",      //  sexe,
                                                                                     "",      //  profession,
                                                                                     "",      //  nomJfille
                                                                                     "",      //  nomAss,
                                                                                     "",      //  prenomAss,
                                                                                     "",      //  tel1,
                                                                                     "",      //  tel2,
                                                                                     "",      //  tel3,
                                                                                     "",      //  email,
                                                                                     " = ",   //  egal_like  " = ",
                                                                                     m_pWdg_C->textLabel_StateList
                                                                                   )
                 )
                 {pQListViewItem->setPixmap ( 0, Theme::getIcon( "16x16/VitaleOk.png") );
                  pQListViewItem->setText(6, "-");                                           // 6 pk doss
                 }
              else
                 {pQListViewItem->setPixmap ( 0, Theme::getIcon( "16x16/VitaleNotOk.png") );
                  pQListViewItem->setText(6, "");
                 }
             }
         }
    }
 if (last_occurence<2) pQlistView->hide();
#endif
}

//------------------------------------------------------- Slot_SaveIdentDoing --------------------------------------------------
//    met à jour la listview vitale sur patient trouvé dans la base des patient ou pas
void  manager::Slot_SaveIdentDoing ()
{
#ifdef COMMERCIAL_VERSION
        //................. determine si le nom prenom entrent dans la comparaison ..........................
        QString localParam = "";   CGestIni::Param_UpdateFromDisk(G_pCApp->m_PathIni, localParam);
        bool matchOnNom    = (CGestIni::Param_ReadUniqueParam(localParam, "Sesam-Vitale", "Compare_Nom")    == "ok");
        bool matchOnPrenom = (CGestIni::Param_ReadUniqueParam(localParam, "Sesam-Vitale", "Compare_Prenom") == "ok");

        QListViewItemIterator it( m_pWdg_C->ListView_Vitale );
        while ( it.current() )
           {
              QListViewItem *pQListViewItem = it.current();
              //............ formater qq trucs pour les rendre compatble avec le match SQL ....................
              QString dnss     = pQListViewItem->text(2).left(8);             //  199306010000   -->  19930601
                      dnss     = dnss.insert(4,'-');                          //  19930601       -->  1993-0601
                      dnss     = dnss.insert(7,'-');                          //  1993-0601      -->  1993-06-01
                      dnss    += " 00:00:00";                                 //  1993-0601      -->  1993-06-01 00:00:00
              QString numSecu  = pQListViewItem->text(3);
                      numSecu += CMoteurBase::ComputeClef_Secu(numSecu);
              QString rangGem  = pQListViewItem->text(4);
              if (rangGem.length()==1) rangGem = rangGem.prepend("0");
              //............ determine si le nom prenom entrent dans la comparaison .....................
              QString nom    = pQListViewItem->text(0);
              QString prenom = pQListViewItem->text(1);
              if (QDate::isValid ( dnss.mid(0,4).toInt(), dnss.mid(5,2).toInt(), dnss.mid(8,2).toInt() ) )  // si date de naiss invalide on est oblig� de se servir du nom prenom
              {
                  if (!matchOnNom)     nom    = "";
                  if (!matchOnPrenom)  prenom = "";
              }
              if (G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme( 0,                           // pas de listview car on veut juste savoir si trouve
                                                                                     nom,        // nom
                                                                                     prenom,     // prenom
                                                                                     dnss,                        // date Nss // doit etre 1993-06-01 00:00:00
                                                                                     numSecu,                     // num secu // 160196296519557
                                                                                     rangGem,                     // rang gemellaire
                                                                                     pQListViewItem->text(5),     // qualite d'ayant droit
                                                                                     "",      //  adresse,
                                                                                     "",      //  codePost,
                                                                                     "",      //  ville,
                                                                                     "",      //  sexe,
                                                                                     "",      //  profession,
                                                                                     "",      //  nomJfille
                                                                                     "",      //  nomAss,
                                                                                     "",      //  prenomAss,
                                                                                     "",      //  tel1,
                                                                                     "",      //  tel2,
                                                                                     "",      //  tel3,
                                                                                     "",      //  email,
                                                                                     " = ",   //  egal_like  " = ",
                                                                                     m_pWdg_C->textLabel_StateList
                                                                                   )
                 )
                 {pQListViewItem->setPixmap ( 0, Theme::getIcon( "16x16/VitaleOk.png") );
                  pQListViewItem->setText(6, "-");                                           // 6 pk doss
                 }
              else
                 {pQListViewItem->setPixmap ( 0, Theme::getIcon( "16x16/VitaleNotOk.png") );
                  pQListViewItem->setText(6, "");
                 }
            ++it;
           }

#endif
}


//------------------------------------------------------- Slot_ListView_Vitale_mouseButtonPressed --------------------------------------------------
void  manager::Slot_ListView_Vitale_mouseButtonPressed (int button , QListViewItem* pQListViewItem, const QPoint &p , int c)
{
#ifdef COMMERCIAL_VERSION
 if (pQListViewItem==0) return;
 switch(button)
   {case 1:
         Slot_ListView_Vitale_IsClicked (pQListViewItem, p, c);
         break;
    case 2:
          Slot_ListView_Vitale_contextMenuRequested (pQListViewItem, p, c );
         break;
   }
#endif
}

//------------------------------------------------------- Slot_ListView_Vitale_contextMenuRequested --------------------------------------------------
void  manager::Slot_ListView_Vitale_contextMenuRequested ( QListViewItem * pQListViewItem, const QPoint & , int   )
{
 #ifdef COMMERCIAL_VERSION
 if (pQListViewItem==0)     return;
 if (G_pCApp->m_pVitale==0) return;

 C_Vitale       *pcVitale =  G_pCApp->m_pVitale;
 int               action = -1;
 QString       val_actual = "";
 QString              tmp = "";
 int            occurence = pQListViewItem->text(8).toInt();
 int  qualiteAyantDroit_V = pcVitale->GetMember(14,  104, occurence).toInt();
 int  qualiteAyantDroit_P = m_pWdg_C->comboBoxQualiteAyantDroit->currentItem ();


 QString p_nom, p_prenom;  pcVitale->GetNomPrenomAyanDroit(occurence, ";", &p_nom, &p_prenom);
 QStringList list;

 //....................... si l'identite de la CV selectionnee correspondant à un dossier déja en base .................
 //                        on propose de completer le dossier avec les données qui diffèrent
 //                        que si le patient selectionne dans liste des patients est le même que celui de la CV
 if (pQListViewItem->text(6).length()                                      &&
     pcVitale->Compare(occurence, m_pWdg_C->lineEdit_NumSecu->text(),
                                  m_pWdg_C->lineEdit_DtNss->text(),
                                  m_pWdg_C->lineEdit_RangGeme->text())==0  &&
     m_pWdg_C->groupBoxPatient->isEnabled()
    )
    {tmp = pcVitale->GetMember(1,  104, occurence) + " " + pcVitale->GetMember(3,  104, occurence);
     if (m_pWdg_C->lineEdit_NomDossier->text()+" "+m_pWdg_C->lineEdit_PremomDossier->text() != tmp)
         list.append(tr("1- Mettre à jour l'identité avec le nom et prénom de l'ayant droit : ") + tmp);

     tmp = pcVitale->GetMember(2,  104, occurence).stripWhiteSpace();
     if (tmp.length() && m_pWdg_C->lineEdit_NomDeNss->text() != tmp)
         list.append(tr("2- Mettre à jour l'identité avec le nom de naissance : ") + tmp);
     /*
     tmp =  pcVitale->GetMember(8,  101, 1);                      // ce menu ne devrait pas etre possible car match obligatoire pour cette donnée
     if (tmp.length()>1 && tmp != m_pWdg_C->lineEdit_NumSecu->text())
         list.append(tr("3- Mettre à jour l'identité avec le numéro de SS : ") + tmp + " "+CMoteurBase::ComputeClef_Secu(tmp));
     */
     tmp =  pcVitale->GetAdresseAyanDroit(occurence);
     if (tmp.length()==0) tmp =  pcVitale->GetAdresseAssure();
     val_actual = m_pWdg_C->textEdit_Adresse->text();
     if (tmp.length() &&  val_actual != tmp)
         list.append(tr("4- Mettre à jour l'identité avec l'adresse : ") + tmp);

     pcVitale->GetCodePostalVilleAyanDroit(occurence, &tmp,0);  // code postal ville
     if (tmp.length()==0) pcVitale->GetCodePostalVilleAssure(&tmp, 0);
     if (tmp.length() && m_pWdg_C->lineEdit_CdPostal->text() != tmp)
         list.append(tr("5- Mettre à jour l'identité avec le code postal : ") + tmp);

     pcVitale->GetCodePostalVilleAyanDroit(occurence,0, &tmp);  // code postal ville
     if (tmp.length()==0) pcVitale->GetCodePostalVilleAssure(0 ,&tmp);
     if (tmp.length() && m_pWdg_C->lineEditVille->text() != tmp)
         list.append(tr("6- Mettre à jour l'identité avec la ville : ") + tmp);

     tmp = pcVitale->GetNomPrenomAssure();
     if (tmp.length() && m_pWdg_C->lineEdit_NomAssure->text()+" "+m_pWdg_C->lineEdit_PrenomAssure->text() != tmp)
         list.append(tr("7- Mettre à jour l'identité avec le nom et prénom de l'assuré : ") + tmp);
     /*
     tmp = pcVitale->GetRangGemellaire(occurence);                  // ce menu ne devrait pas etre possible car match obligatoire pour cette donnée
     if (tmp.length() && m_pWdg_C->lineEdit_RangGeme->text() != tmp)
         list.append(tr("8- Mettre à jour l'identité avec le rang gémellaire : ") + tmp);

     tmp = pcVitale->GetDateNaissanceAyantDroit(occurence,0,"/");  // ce menu ne devrait pas etre possible car match obligatoire pour cette donnée
     if (tmp.length() && m_pWdg_C->lineEdit_DtNss->getMixText() != tmp)
         list.append(tr("9- Mettre à jour l'identité avec la date de naissance : ") + tmp);
     */
     if (qualiteAyantDroit_V !=  qualiteAyantDroit_P)
         list.append(tr("10- Mettre à jour l'identité avec le type d'ayant droit : ") + pcVitale->CodeQualiteToName( QString::number(qualiteAyantDroit_V )));

     if (list.count()) list.append(tr("11- Mettre à jour l'identité avec toutes les données de la carte vitale ") );
    }

 //............... Menu recherche pour toutes les identites de la CV ..........................
 list.append("----------");
 tmp =  pcVitale->GetMember(8,  101, 1); tmp += " "+CMoteurBase::ComputeClef_Secu(tmp);
 if (tmp.length()>1) list.append(tr("23- Rechercher avec le numéro de SS : ") + tmp);

 tmp = pcVitale->GetNomPrenomAyanDroit(occurence);
 if (tmp.length()) list.append(tr("27- Rechercher avec le nom et prénom de l'ayant droit : ") + tmp);

 pcVitale->GetNomPrenomAyanDroit(occurence, ";", &p_nom, &p_prenom);
 if (p_nom.length())    list.append(tr("28- Rechercher avec le nom de l'ayant droit    : ")    + p_nom);
 if (p_prenom.length()) list.append(tr("29- Rechercher avec le prénom de l'ayant droit : ")    + p_prenom);

 tmp = pcVitale->GetDateNaissanceAyantDroit(occurence);
 if (tmp.length()) list.append(tr("30- Rechercher avec la date de naissance : ") + tmp);

 //............... que si identite de la CV ne correspond pas à un dossier en base ........................
 //                on propose de l'attribuer au dossier selectionne
 if (pQListViewItem->text(6).length()==0)
    {list.append(tr("-------------") );
     list.append(tr("31- Créer un nouveau dossier avec l'identité sélectionnée de la carte vitale : ") + p_nom + " " + p_prenom);

     QListView *pQlistViewPatient = m_pWdg_C->ListView_Patient;
     if (pQlistViewPatient->childCount())
        { QListViewItem *pQListViewItemPatient =  pQlistViewPatient->selectedItem();
          if (pQListViewItemPatient)
             {list.append(tr("32- Attribuer les éléments de cette carte vitale au patient sélectionné : ")+ pQListViewItemPatient->text(0) + " " + pQListViewItemPatient->text(1));
             }
        }
    }

 //.................. actionner le menu et les actions .................................................
 QString ret = G_pCApp->DoPopupList(list); action = ret.find('-'); if (action != -1) action = ret.left(action).toInt();
 switch(action)
        {case 1:
              {m_pWdg_C->lineEdit_NomDossier->setText(      pcVitale->GetMember(1,  104, occurence));
               m_pWdg_C->lineEdit_PremomDossier->setText(   pcVitale->GetMember(3,  104, occurence));
              } break;
         case 2:
              {m_pWdg_C->lineEdit_NomDeNss->setText(   pcVitale->GetMember(2,  104, occurence));
              } break;
         case 3:
              {tmp =  pcVitale->GetMember(8,  101, 1);
               m_pWdg_C->lineEdit_NumSecu->setText(tmp);
               m_pWdg_C->lineEdit_NssClef->setText(CMoteurBase::ComputeClef_Secu(tmp));
              } break;
         case 4:
              {tmp =  pcVitale->GetAdresseAyanDroit(occurence);
               if (tmp.length()==0) tmp =  pcVitale->GetAdresseAssure();
               m_pWdg_C->textEdit_Adresse->setText(tmp);
              } break;
         case 5:
              {pcVitale->GetCodePostalVilleAyanDroit(occurence, &tmp,0);  // code postal
               if (tmp.length()==0) pcVitale->GetCodePostalVilleAssure(&tmp, 0);
               m_pWdg_C->lineEdit_CdPostal->setText(tmp);
               m_pWdg_C->OnOutFocusCodePostal();
              } break;
         case 6:
              {pcVitale->GetCodePostalVilleAyanDroit(occurence,0, &tmp);  // ville
               if (tmp.length()==0) pcVitale->GetCodePostalVilleAssure( 0, &tmp);
               m_pWdg_C->lineEditVille->setText(tmp);
               m_pWdg_C->OnOutFocusVille();
              } break;
         case 7:
              {pcVitale->GetNomPrenomAssure(" ", &p_nom, &p_prenom);
               m_pWdg_C->lineEdit_NomAssure->setText(p_nom);
               m_pWdg_C->lineEdit_PrenomAssure->setText(p_prenom);
              } break;
         case 8:
              {tmp = pcVitale->GetRangGemellaire(occurence);
               m_pWdg_C->lineEdit_RangGeme->setText(tmp);
              } break;
         case 9:
              {tmp = pcVitale->GetDateNaissanceAyantDroit(occurence,0,"");
               m_pWdg_C->lineEdit_DtNss->setText(tmp);
              } break;
         case 10:
              {m_pWdg_C->comboBoxQualiteAyantDroit->setCurrentItem ( qualiteAyantDroit_V );
               m_pWdg_C->OnActivated_comboBoxQualiteAyantDroit( qualiteAyantDroit_V );
               if (m_pWdg_C->comboBoxSexe->currentItem()==2) m_pWdg_C->SetSexFromQualiteAyantDroit(qualiteAyantDroit_V);
              } break;
         case 11:
              {m_pWdg_C->setInterfaceOnVitaleData(G_pCApp->m_pVitale,occurence );
              } break;
         case 23:
              {tmp =  pcVitale->GetMember(8,  101, 1); tmp +=CMoteurBase::ComputeClef_Secu(tmp);
               m_pWdg_C->pushButtonCancel_clicked();
               if (G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme(m_pWdg_C->ListView_Patient,         // pas de listview car on veut juste savoir si trouve
                                                                                     "",         // nom
                                                                                     "",         // prenom
                                                                                     "",         // date Nss // doit etre 1993-06-01 00:00:00
                                                                                     tmp,        // num secu // 160196296519557
                                                                                     "",         // rang gemellaire
                                                                                     "",         // qualite d'ayant droit
                                                                                     "",         // adresse,
                                                                                     "",         // codePost,
                                                                                     "",         // ville,
                                                                                     "",         // sexe,
                                                                                     "",         // profession,
                                                                                     "",      //  nomJfille
                                                                                     "",      //  nomAss,
                                                                                     "",      //  prenomAss,
                                                                                     "",      //  tel1,
                                                                                     "",      //  tel2,
                                                                                     "",      //  tel3,
                                                                                     "",      //  email,
                                                                                     " LIKE ",   // egal_like  " = ",
                                                                                     m_pWdg_C->textLabel_StateList
                                                                                   )
                  )
                  {
                  }
              } break;
         case 27:
              {tmp = pcVitale->GetNomPrenomAyanDroit(occurence,";");
               m_pWdg_C->lineEditAutoLocator->setText(tmp);
               m_pWdg_C->lineEditAutoLocator_textChanged( tmp );
              } break;
         case 28:
              {pcVitale->GetNomPrenomAyanDroit(occurence, ";", &p_nom, &p_prenom);
               m_pWdg_C->lineEditAutoLocator->setText(p_nom);
               m_pWdg_C->lineEditAutoLocator_textChanged( p_nom );
              } break;
         case 29:
              {pcVitale->GetNomPrenomAyanDroit(occurence, ";", &p_nom, &p_prenom);
               m_pWdg_C->lineEditAutoLocator->setText(p_prenom.prepend(";%"));
               m_pWdg_C->lineEditAutoLocator_textChanged( p_prenom );
              } break;
         case 30:
              {tmp     = pcVitale->GetMember(12, 104, occurence).left(8);             //  199306010000   -->  19930601
               tmp     = tmp.insert(4,'-');                           //  19930601       -->  1993-0601
               tmp     = tmp.insert(7,'-');                           //  1993-0601      -->  1993-06-01
               tmp    += " 00:00:00";                                 //  1993-0601      -->  1993-06-01 00:00:00
               m_pWdg_C->pushButtonCancel_clicked();
               if (G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme(m_pWdg_C->ListView_Patient,         // pas de listview car on veut juste savoir si trouve
                                                                                     "",         // nom
                                                                                     "",         // prenom
                                                                                     tmp,        // date Nss // doit etre 1993-06-01 00:00:00
                                                                                     "",         // num secu // 160196296519557
                                                                                     "",         // rang gemellaire
                                                                                     "",         // qualite d'ayant droit
                                                                                     "",         // adresse,
                                                                                     "",         // codePost,
                                                                                     "",         // ville,
                                                                                     "",         // sexe,
                                                                                     "",         // profession,
                                                                                     "",         //  nomJfille
                                                                                     "",         //  nomAss,
                                                                                     "",         //  prenomAss,
                                                                                     "",         //  tel1,
                                                                                     "",         //  tel2,
                                                                                     "",         //  tel3,
                                                                                     "",         //  email,
                                                                                     " LIKE ",   // egal_like  " = ",
                                                                                     m_pWdg_C->textLabel_StateList
                                                                                   )
                  )
                  {
                  }
              } break;
         case 31:
              {m_pWdg_C->VitaleNew_clicked();
               m_pWdg_C->setInterfaceOnVitaleData(G_pCApp->m_pVitale,                // données carte vitale
                                                  occurence                          // occurence
                                                 );
              } break;

         case 32:
              {tmp              = pcVitale->GetNomPrenomAyanDroit(occurence, " ");
               tmp              = tmp.simplifyWhiteSpace();   tmp   = tmp.stripWhiteSpace();   tmp   = tmp.upper();
               p_nom            = m_pWdg_C->lineEdit_NomDossier->text() + " "+m_pWdg_C->lineEdit_PremomDossier->text();
               p_nom            = p_nom.simplifyWhiteSpace(); p_nom = p_nom.stripWhiteSpace(); p_nom = p_nom.upper();
               QString dnss_1   = pcVitale->GetDateNaissanceAyantDroit(occurence,0,"/");
               QString dnss_2   = m_pWdg_C->lineEdit_DtNss->getMixText();
               QString cd_p_1   = ""; pcVitale->GetCodePostalVilleAssure(&cd_p_1, 0);
               QString cd_p_2   = m_pWdg_C->lineEdit_CdPostal->text();
               QString secu_1   = pcVitale->GetMember(8,  101, 1);
               QString secu_2   = m_pWdg_C->lineEdit_NumSecu->text();
               int nb_criteres  = 0;
               QString mess_Cri = "";
               if (tmp    != p_nom)                                    {mess_Cri += tr( "<br>&nbsp;&nbsp;&nbsp;&nbsp;- le nom prénom doit changer pour  : <b><font color=\"#e80d0d\">")          + tmp          + tr("</font></b>,"); ++nb_criteres;}
               if (dnss_1 != dnss_2)                                   {mess_Cri += tr( "<br>&nbsp;&nbsp;&nbsp;&nbsp;- la date de naissance doit changer pour  : <b><font color=\"#e80d0d\">")   + dnss_1       + tr("</font></b>,"); ++nb_criteres;}
               if (cd_p_1.toInt() && cd_p_1.toInt() != cd_p_2.toInt()) {mess_Cri += tr( "<br>&nbsp;&nbsp;&nbsp;&nbsp;- le code postal doit changer pour  : <b><font color=\"#e80d0d\">")         + cd_p_1       + tr("</font></b>,"); ++nb_criteres;}
               if (secu_1 != secu_2)                                   {mess_Cri += tr( "<br>&nbsp;&nbsp;&nbsp;&nbsp;- le numéro de SS doit changer pour  : <b><font color=\"#e80d0d\">")        + secu_1       + tr("</font></b>."); ++nb_criteres;}
               QString message  = tr ( "<b><font color=\"#e80d0d\">ATTENTION OPÉRATION À HAUT RISQUE </font></b>")                           +
                                  tr(  "<hr><br> La personne : <b><font color=\"#1200ff\">") + p_nom                        + "</font></b>" +
                                  tr(  "<br> née le : <b><font color=\"#1200ff\">" )         + dnss_2                       + "</font></b>";
               if (cd_p_2.toInt())
                       message += tr(  "<br> ayant pour code postal  : <b>")                 + cd_p_2                       + "</b>";
                       message += tr(  "<br> ayant pour numéro de SS : <b>")                 + secu_2                       + "</b><br>" +
                                  tr(  "<hr><br> diffère d'au moins des <b><font color=\"#e80d0d\">")   + QString::number(nb_criteres) + tr("</font></b> critères suivants à modifier :");
                       message += mess_Cri;
                       message += tr("<br><hr>confirmez vous tout de même cette opération ? ");
               if (m_pWdg_C->lineEdit_RangGeme->text().length())
                       message += tr("<br>&nbsp;&nbsp;&nbsp;&nbsp;=> en sachant que <b>ce patient a déjà probablement été créé par une carte vitale</b>. ");
               if (tmp    != p_nom)
                      {message += tr("<br>&nbsp;&nbsp;&nbsp;&nbsp;=> en sachant qu'un changement de nom et prénom est suspect,");
                       message += tr(" car tous <b>les documents du dossier en cours vont être attribués au nouveau nom</b>. ");
                      }
               if (dnss_1 != dnss_2)
                       message += tr("<br>&nbsp;&nbsp;&nbsp;&nbsp;=> en sachant qu'un changement de date de naissance est suspect. ");

              int sel = QMessageBox::information( this, tr("Vitaliser un patient"), message
 ,
                                                  //"&nbsp;&nbsp;&nbsp;&nbsp; ° <b>Quitter pour <u>Annuler</u></b> l'opération en cours" ) ,
                                             tr("&Annuler"), tr("Confirmer"), 0 /*tr("Annuler")*/,
                                             0, 1 );
               if (sel != 1) return;
               message  = tr(  "<b><font color=\"#e80d0d\">ÊTES VOUS CERTAIN DE CETTE OPÉRATION </font></b>") +
                          tr(  "<hr><br> il est encore temps d'annuler cette opération.") +
                          tr(  "<br> qui sera non réverssible après confirmation." ) +
                          tr(  "<br><hr>confirmez vous de nouveau cette opération ? ");
               sel = QMessageBox::information( this, tr("Attribution d'une carte Vitale à une identité patient"), message,
                                              tr("&Attribuer la carte Vitale"),tr("&Annuler") , 0 /*tr("Annuler")*/,
                                              1, 1 );
               if (sel == 1)                         return;
               m_pWdg_C->setInterfaceOnVitaleData(G_pCApp->m_pVitale,occurence );
              } break;
        }
 #endif
}

//------------------------------------------------------- Slot_ListView_Vitale_IsClicked --------------------------------------------------
void  manager::Slot_ListView_Vitale_IsClicked (QListViewItem* pQListViewItem, const QPoint&, int)
{
 #ifdef COMMERCIAL_VERSION
 if (pQListViewItem==0) return;
 QListView *pQlistView = m_pWdg_C->ListView_Patient;

 //................. determine si le nom prenom entrent dans la comparaison ..........................
 QString localParam = "";   CGestIni::Param_UpdateFromDisk(G_pCApp->m_PathIni, localParam);
 bool matchOnNom    = (CGestIni::Param_ReadUniqueParam(localParam, "Sesam-Vitale", "Compare_Nom")    == "ok");
 bool matchOnPrenom = (CGestIni::Param_ReadUniqueParam(localParam, "Sesam-Vitale", "Compare_Prenom") == "ok");

 //............ formater qq trucs pour les rendre compatble avec le match SQL ....................
 QString dnss     = pQListViewItem->text(2).left(8);             //  199306010000   -->  19930601
         dnss     = dnss.insert(4,'-');                          //  19930601       -->  1993-0601
         dnss     = dnss.insert(7,'-');                          //  1993-0601      -->  1993-06-01
         dnss    += " 00:00:00";                                 //  1993-0601      -->  1993-06-01 00:00:00
 QString numSecu  = pQListViewItem->text(3);
         numSecu += CMoteurBase::ComputeClef_Secu(numSecu);
 QString rangGem  = pQListViewItem->text(4);

 //............ determine si le nom prenom entrent dans la comparaison .....................
 QString     nom    = pQListViewItem->text(0);
 QString     prenom = pQListViewItem->text(1);
 if (QDate::isValid ( dnss.mid(0,4).toInt(), dnss.mid(5,2).toInt(), dnss.mid(8,2).toInt() ) )  // si date de naiss invalide on est oblig� de se servir du nom prenom
    { if (!matchOnNom)     nom    = "";
      if (!matchOnPrenom)  prenom = "";
    }
 if (rangGem.length()==1) rangGem = rangGem.prepend("0");
 int nb = G_pCApp->m_pCMoteurBase->GetPatientListFromNomPrenomSecuDtNssGeme( pQlistView,
                                                                             nom,                         // nom
                                                                             prenom,                      // prenom
                                                                             dnss,                        // date Nss // doit etre 1993-06-01 00:00:00
                                                                             numSecu,                     // num secu // 160196296519557
                                                                             rangGem,                     // rang gemellaire
                                                                             pQListViewItem->text(5),     // qualite d'ayant droit
                                                                             "",      //  adresse,
                                                                             "",      //  codePost,
                                                                             "",      //  ville,
                                                                             "",      //  sexe,
                                                                             "",      //  profession,
                                                                             "",      //  nomJfille
                                                                             "",      //  nomAss,
                                                                             "",      //  prenomAss,
                                                                             "",      //  tel1,
                                                                             "",      //  tel2,
                                                                             "",      //  tel3,
                                                                             "",      //  email,
                                                                             " = ",   //  egal_like  " = ",
                                                                             m_pWdg_C->textLabel_StateList
                                                                           );
 if (nb==0)                // pas de patient trouvé pour cette carte vitale
    {m_pWdg_C->pushButtonCancel_clicked();
     if (m_pWdg_C->pushButtonCreate->isShown())
        {m_pWdg_C->setInterfaceOnVitaleData(G_pCApp->m_pVitale,                // données carte vitale
                                                                         pQListViewItem->text(8).toInt()    // occurence
                                                                        );
        }
    }
 else if (nb==1)          // un seul patient trouvé pour cette carte vitale alors on efface l'éventuel patient en cours de création
    {m_pWdg_C->pushButtonCancel_clicked();
     //m_pWdg_C->ListView_Patient_selectionChanged( pQlistView->firstChild ());
     m_pWdg_C->ListView_Patient_mouseButtonClicked( 1, pQlistView->firstChild (), QPoint(0,0), 1 );
    }
#endif

}

//------------------------------------------------------- Slot_ListView_Vitale_IsDoubleClicked --------------------------------------------------
void  manager::Slot_ListView_Vitale_IsDoubleClicked (QListViewItem* pQListViewItem, const QPoint&, int)
{
 #ifdef COMMERCIAL_VERSION
 if (pQListViewItem==0) return;
 QListView *pQlistView = m_pWdg_C->ListView_Patient;
 int nb = pQlistView->childCount ();
 if (nb==0)           // pas de patient trouvé pour cette carte vitale alors on le propose en création
    {m_pWdg_C->VitaleNew_clicked();
     m_pWdg_C->setInterfaceOnVitaleData(G_pCApp->m_pVitale,                // données carte vitale
                                        pQListViewItem->text(8).toInt()    // occurence
                                       );
    }
 else if (nb==1)      // un seul patient trouvé pour cette carte vitale alors on le lance
    {m_pWdg_C->pushButtonAcceder_clicked();
    }
 #endif

}

//------------------------------------------------------- Slot_ListView_Vitale_selectionChanged --------------------------------------------------
void  manager::Slot_ListView_Vitale_selectionChanged (QListViewItem* pQListViewItem)
{
 #ifdef COMMERCIAL_VERSION
 if (pQListViewItem==0) return;
 if (pQListViewItem->text(6).length())   // si déjà identifié et vitalisé
    {Slot_ListView_Vitale_IsClicked (pQListViewItem, QPoint(0,0),0);
    }
 else
    {if (m_pWdg_C->pushButtonCreate->isShown())
        {m_pWdg_C->setInterfaceOnVitaleData(G_pCApp->m_pVitale,                // données carte vitale
                                                                         pQListViewItem->text(8).toInt()    // occurence
                                                                        );
        }
    }
 #endif
}

//------------------------------------------------------- PluginExe --------------------------------------------------
QString manager::PluginExe(     QObject         * pQObject,
                                const char      * pluginScript,
                                int              /* waitFlag  = CMoteurBase::endWait */)
{
      QString     pathPlugin;  // Chemin de l'executable plugin à actionner sans l'extension .exe
      QString     pathIni;  // Chemin de l'executable plugin à actionner sans l'extension .exe
      QString     maskExch;    // texte du fichier d'exchange
      //QString     obsPk;
      //QString     terPk;
      //QString     ordPk;
      QStringList param;
      char             *pt   = (char*)(const char*) pluginScript;
      CGestIni::Param_ReadParam(pt,"Execute","pathPlugin",&pathPlugin);
      CGestIni::Param_ReadParam(pt,"Execute","pathIni",   &pathIni);
      CGestIni::Param_ReadParam(pt,"Execute","maskExch",  &maskExch);
      //.................................. PARAMETRES ...........................................
      QString     val1;
      QString     var_name   = "";
      QString      section   = "";
      while((pt=CGestIni::Param_GotoNextSection(pt, 0, &section)) && *pt)
           {if (section=="Parametres")
               {while (*pt && *pt != '[')
                      {pt = CGestIni::Param_ExtraireNextValeurs(pt, var_name, &val1);
                       if (val1.length()) param.append(val1);
                      }
               }
            section="";
           }

      return                      PluginExe(  pQObject,
                                              pathPlugin,                       // Chemin de l'executable plugin à actionner sans l'extension .exe
                                              G_pCApp->m_PathAppli,                  // Chemin de l'executable appelant (DrTux)
                                              pathIni,                          // Chemin d'un eventuel fichier de configuration pour XXXX.ini pour l'executable plugin ou %
                                              maskExch,                         // texte du fichier d'exchange
                                              G_pCApp->m_pCMoteurBase->GUID_Create()+"-New",
                                              " ",
                                              " ",
                                              " " ,
                                              param,
                                              CMoteurBase::endWait );
}

//------------------------------------------------------- PluginExe --------------------------------------------------
// un plungin est un executable communicant avec DrTux par l'intermediare du protocole suivant:
// DrTux appelle le plugin avec dans la ligne de commande:
// en :
//   0  Chemin de l'executable plugin à actionner
//   1  Chemin d'un eventuel fichier de configuration pour XXXX.ini l'executable ou %
//   2  Chemin de l'executable appelant
//   3  Chemin du fichier d'echange texte masque d'entrée dont l'executable devra modifier les valeurs de retour
//                        ce fichier est retourné modifié par le plugin, ce fichier peut etre un masque html ou
//                        tout autre délire en accord avec la syntaxe du plugin dès fois que ...
//                        si ce fichier est vide, où n'existe pas le plugin retournera son résultat dans ce fichier
//                        d'échange que l'appelant récupera
//                        Le nom de ce fichier d'echange comporte : NomDuPlugin-GUID_Patient-
//   4  GUID du patient
//   5  PrimKey de l'observation en cours
//   6  PrimKey du terrain en cours
//   7  PrimKey de l'ordonnance en cours
//   8  Reservé
//   9  Reservé
//   10 Reservé
//   11 Reservé
//   12 Nb autres parametres d'appels specifiques au plugin
//   13 --> 13+Nb paramètres

QString manager::PluginExe(       QObject    *pQObject,
                                const QString    &pathPlugin,  // Chemin de l'executable plugin à actionner sans l'extension .exe
                                const QString    &pathAppli,   // Chemin de l'executable appelant (DrTux)
                                const QString    &pathIni,     // Chemin d'un eventuel fichier de configuration pour XXXX.ini pour l'executable plugin ou %
                                const QString    &maskExch,    // texte du fichier d'exchange
                                const QString    &guid,
                                const QString    &dosPk,
                                const QString    &terPk,
                                const QString    &ordPk ,
                                QStringList      &param,
                                int               waitFlag /* = CMoteurBase::endWait */)
{
 QString ret = "";
 //..................... creer le process ...........................................................
 QProcess*  proc =  new QProcess( pQObject );
 if (proc==0)       return QString(QObject::tr("Erreur:  PluginExe() the process can't be created"));

 //..................... copier le masque de retour dans le dossier temporaire ......................

 QString pathExe  = pathPlugin;
 if ( QDir::isRelativePath ( pathExe ) ) pathExe = QDir::cleanDirPath (pathExe.prepend(pathAppli) );
 QString nameExch = QFileInfo(pathExe).fileName()+"-"+ guid +".exc";

 QString      dst = "";
 if (CGestIni::Param_ReadParam(G_pCApp->m_LocalParam, "Repertoire Temporaire", "Repertoire", &dst)!=0)
     return QObject::tr("Error:  PluginExe()  \"Repertoire Temporaire\", \"Repertoire\" can't find in ini File");         // path editeur de texte non défini
 if ( QDir::isRelativePath ( dst ) ) dst = QDir::cleanDirPath (dst.prepend(G_pCApp->m_PathAppli) );
 dst +=  QDir::separator() + nameExch;
 QFile::remove (dst);

 //qDebug (QString("nameExch : ")  + dst);
 //qDebug (QString("pathAppli : ") + pathAppli);
 //qDebug (QString("pathExe : ") + pathExe);

 /*
 QFile qfsrc(pathExch);
 if (qfsrc.open(IO_ReadOnly)==FALSE)
    {QMessageBox::critical (0, QObject::tr("PluginExe(): read pathExch"),
                               QObject::tr("The file\r\n«")+ pathExch + QObject::tr("»\r\ncan't be opened"),
                               QMessageBox::Abort, QMessageBox::NoButton, QMessageBox::NoButton );
     delete proc;
     return QObject::tr("Error:  PluginExe() cant't read 'pathExch' file");
    }
 */
 QFile qfdst(dst);
 if (qfdst.open(IO_ReadWrite)==FALSE)
    {QMessageBox::critical (0, QObject::tr("PluginExe(): write pathExch"),
                               QObject::tr("The file\r\n«")+ dst + QObject::tr("»\r\ncan't be opened"),
                               QMessageBox::Abort, QMessageBox::NoButton, QMessageBox::NoButton );
     delete proc;
     return QObject::tr("Error:  PluginExe() destination file can't be opened");
    }
 qfdst.writeBlock (maskExch, maskExch.length());
 qfdst.close();
 /*
 #define BUFF_LEN 2048
 char *buf = new char[BUFF_LEN];
 long len;
 if (buf==0)
    {delete proc;
     return QObject::tr("Error:  PluginExe() bufer can't be created");
    }
 do{len = qfsrc.readBlock (buf, BUFF_LEN);
          qfdst.writeBlock (buf, len);
   }while (len==BUFF_LEN);
 delete [] buf;
 */
 //......................... completer les autres arguments .........................................
 proc->addArgument( pathExe + F_EXE );                   // 0  Chemin de l'executable plugin à actionner
 proc->addArgument( pathIni );                         // 1  Chemin d'un eventuel fichier de configuration pour XXXX.ini l'executable ou %
 proc->addArgument( pathAppli + PROG_NAME );           // 2  Chemin de l'executable appelant
 proc->addArgument( dst );                             // 3  Chemin du fichier d'echange texte masque d'entrée dont l'executable devra modifier les valeurs de retour
 proc->addArgument(guid );                             // 4  GUID du patient
 proc->addArgument(dosPk);                             // 5  PrimKey de l'observation en cours
 proc->addArgument(terPk);                             // 6  PrimKey du terrain en cours
 proc->addArgument(ordPk);                             // 7  PrimKey de l'ordonnance en cours
 proc->addArgument(" ");                               // 8  reservé
 proc->addArgument(" ");                               // 9  reservé
 proc->addArgument(" ");                               // 10 reservé
 proc->addArgument(" ");                               // 11 reservé
 proc->addArgument(QString::number(param.count()));    // 12 Nb autres parametres d'appels specifiques au plugin
 for ( QStringList::Iterator it = param.begin(); it != param.end(); ++it )  // 13 --> 13+Nb paramètres
     {proc->addArgument(*it);
     }
 //................................. executer le process .............................................
 if ( m_PluginRun == "" && proc->start() )
    { m_PluginRun = pathExe;
     qApp->processEvents ();
     while (waitFlag==CMoteurBase::endWait && proc->isRunning () )
           { QApplication::eventLoop()->processEvents ( QEventLoop::WaitForMore );
           }
     m_PluginRun = "";
     //............lire le fichier d'echange ..........................
     if ( !QFile::exists( dst ) )     return  ret;
     QFile file( dst );
     if ( !file.open( IO_ReadOnly ) ) return  ret;
     QTextStream ts( &file );
     ret = ts.read();
    }
  delete proc;
  QFile::remove (dst);
  return ret;
}

//---------------------------------------------- SlotMakeVisible -----------------------------------------------------------------------
void manager::SlotMakeVisible(const QString&)
{showMaximized () ;
 //show () ;
}

//---------------------------------------------- setCaption -----------------------------------------------------------------------
void manager::setCaption(const QString &caption)
{if (caption.length())
    {QMainWindow::setCaption(caption);
     return;
    }
 QMainWindow::setCaption( tr("Manager utilisé par : ") + G_pCApp->m_pCMoteurBase->m_UserName   + "@" + G_pCApp->m_pCMoteurBase->m_HostName + tr(" connecté à : ")  +
                                                         G_pCApp->m_pCMoteurBase->m_DriverName + "." + G_pCApp->m_pCMoteurBase->m_BaseName + tr(" Utilisateur : ") +
                                                         G_pCApp->m_User + "::"+G_pCApp->m_SignUser);
}

//---------------------------------------------- OnUserSelected -----------------------------------------------------------------------
 //pQListViewItem->text(4);    // GUID
 //pQListViewItem->text(1);    // Nom
 //pQListViewItem->text(2);    // Prenom
 //pQListViewItem->text(3);    // PrimKey
void manager::OnUserSelected( QListViewItem *pQListViewItem , QListViewItem * /*pQListViewItemParent*/)
{if (pQListViewItem==0) return;
 m_CMDI_Identification->setEnabled(TRUE);
 if (m_pWdg_Agenda->isVisible())
    { m_pWdg_Agenda->setEnabled(TRUE);
     //if (CMoteurBase::IsThisDroitExist(G_pCApp->m_Droits, "agv")) m_pWdg_Agenda->setEnabled(TRUE);
     //else                                                         m_pWdg_Agenda->setEnabled(FALSE);
      m_pWdg_Agenda->ReinitAgendaOnDate( m_pWdg_Agenda->m_FirstDate);
    }
 setCaption("");
 m_pWdg_C->SetInterfaceOnDroits(G_pCApp->m_Droits, 0);
 setMenuOnDroits ();
 if (m_LogTimeMax>0) StartLogTimer();
}




//---------------------------------------------- OnOngletRubriquesChanged ------------------------------------------------------------
// ACTION: reponse au signal: SIGNAL( currentChanged ( QWidget * ) de la barre d'onglets des rubriques afin d'activer
//         la fenêtre CMDI correspondante.
// ENTREE: QWidget * pQwidget;  fenetre CMDI qui vient d'être activée.

void manager::OnOngletRubriquesChanged(QWidget * pCMDI_Qwidget)
{
 OnActiverRubrique(pCMDI_Qwidget->name());
}

//---------------------------------------------- OnActiverRubrique ------------------------------------------------------------
// ACTION: reponse au signal:  SIGNAL(Sign_ActiverRubrique(const char*))) provenant des Onglets des rubriques afin
//         d'activer la bonne fenetre CMDI lorsqu'un onglet a ete cliqué.
//         Cette fonction emet elle meme un signal à chaque fenetre CMDI qui doivent s'activer, si c'est leur onglet
//         qui est responsable du signal (reperable par le parametre: const char* rubName qui le texte de l'onglet.
// ENTREE: const char* rubName: texte (celui visible) de l'onglet cliqué.

void manager::OnActiverRubrique(const char* rubName)
{emit Sign_ActiverRubrique(rubName);   // emettre signal aux rubriques filles
}

//---------------------------------------------- OnDeleteRubrique ------------------------------------------------------------
// ACTION: reponse au signal: Sign_RubIsDeleted envoyé par le destructeur d'une rubrique.

void  manager::OnDeleteRubrique(const char* /*rubName*/)
{//m_pFormOngletRubrique->removePage(rubName);
}

//----------------------------------------------- closeEvent -------------------------------------------------------------
void manager::closeEvent( QCloseEvent* ce )
{
   int ret = QMessageBox::information( this, tr("Quitter MedinTux Manager"),
                                        tr ( "Voulez-vous vraiment quitter MedinTux Manager ?\n"
                                             "Ou simplement le réduire ?"
                                           ) ,
                                             tr("&Quitter"), tr("&Réduire"), tr("Annu&ler"),
                                             1, 1 );
       if      (ret== 1) {showMinimized();  ce->ignore(); return;}
       else if (ret==2)  {                  ce->ignore(); return;}
    ce->accept();
}

//---------------------------------------------- setupFileActions ------------------------------------------------------------
//#include "../../drtux/src/Pixmap/filesave.xpm"
//#include "../../drtux/src/Pixmap/fileopen.xpm"
//#include "../../drtux/src/Pixmap/fileprint.xpm"
//#include "../../drtux/src/Pixmap/fileprint2.xpm"

void manager::setupFileActions()
{
    QToolBar *tb  = new QToolBar( this );
    m_pMenu       = new QPopupMenu( this );
    menuBar()->insertItem( tr( "&Fichier" ), m_pMenu );
    tb->setLabel( tr("Outils Fichiers") );

    QAction *a;
    //a = new QAction( tr( "New" ), QPixmap( "textdrawing/filenew.png" ), tr( "&New..." ), CTRL + Key_N, this, "fileNew" );
    //connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
    //a->addTo( tb );
    //a->addTo( menu );
    //a = new QAction( tr( "Open" ), QPixmap( "textdrawing/fileopen.png" ), tr( "&Open..." ), CTRL + Key_O, this, "fileOpen" );
    //connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) );
    //a->addTo( tb );
    //a->addTo( menu );
    //menu->insertSeparator();

    //    a = new QAction( tr( "Save" ), QPixmap( filesave ), tr( "&Save..." ), CTRL + Key_S, this, "fileSave" );
    //   connect( a, SIGNAL( activated() ), this, SLOT( fileSave() ) );
    //    a->addTo( tb );
    //    a->addTo( menu );

    //a = new QAction( tr( "Save As" ), QPixmap(), tr( "Save &As..." ), 0, this, "fileSaveAs" );
    //connect( a, SIGNAL( activated() ), this, SLOT( fileSaveAs() ) );
    //a->addTo( menu );
    //    menu->insertSeparator();
    //    a = new QAction( tr( "Print" ), QPixmap( fileprint2 ), tr( "&Print..." ), CTRL + Key_P, this, "filePrint" );
    //    connect( a, SIGNAL( activated() ), this, SLOT( filePrint() ) );
    //    a->addTo( tb );
    //    a->addTo( menu );
    a = new QAction( tr( "Enregistrer les positions" ), QPixmap(), tr( "&Enregistrer positions" ), 0, this, "Enregistrerpositions" );
    connect( a, SIGNAL( activated() ), this, SLOT( Slot_RecordPos() ) );
    a->addTo( m_pMenu );
    // a = new QAction( tr( "Enregistrer disposition" ), QPixmap(), tr( "Enregistrer les dispositions des &fenêtres" ), 0, this, "Enregistrerdispositions" );
    // connect( a, SIGNAL( activated() ), this, SLOT( Slot_RecordDispos() ) );
    // a->addTo( m_pMenu );
    if (!G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "nbv"))
       { m_pActionDeverrouilleBase = new QAction( tr( "Deverrouiller les bases" ), QPixmap(), tr( "&Débloquer les bases" ), 0, this, "Deverrouiller les bases" );
         connect( m_pActionDeverrouilleBase, SIGNAL( activated() ), this, SLOT( Slot_Deverrouiller() ) );
         m_pActionDeverrouilleBase->addTo( m_pMenu );
       }
    a = new QAction( tr( "Quitter Manager" ), QPixmap(), tr( "&Quitter Manager" ), 0, this, "fileClose" );
    connect( a, SIGNAL( activated() ), qApp, SLOT( quit() ) );
    a->addTo( m_pMenu );

    moveDockWindow ( tb, Qt::DockRight );
}

//---------------------------------------------- Get_RecordDispos ------------------------------------------------------------
void manager::Slot_Deverrouiller()
{   G_pCApp->m_pCMoteurBase->DeVerrouilleTout(  );
}

//---------------------------------------------- Get_RecordDispos ------------------------------------------------------------
void manager::Get_RecordDispos()
{   QString path = G_pCApp->m_PathAppli + "Manager.dps";
    if ( !QFile::exists(path) )             return;
    QFile file( path );
    if ( !file.open( IO_ReadOnly ) )        return;
    QTextStream ts( &file );
    ts >> *this;
    file.close();
}

//---------------------------------------------- Slot_RecordDispos ------------------------------------------------------------
void manager::Slot_RecordDispos()
{
    QFile file( G_pCApp->m_PathAppli + "Manager.dps" );
    if ( !file.open( IO_WriteOnly ) )        return;
    QTextStream ts( &file );
    ts << *this;
    file.close();
}


//---------------------------------------------- Slot_RecordPos ------------------------------------------------------------
void manager::Slot_RecordPos()
{


    int x  =  this->x();
    int y  =  this->y();
    int w  =  this->width();
    int h  =  this->height();


    CGestIni::Param_WriteParam(&G_pCApp->m_LocalParam, "ManagerPos", "Positions",
                                  QString::number(x),      QString::number(y),
                                  QString::number(w),      QString::number(h));
    CGestIni::Param_UpdateToDisk(G_pCApp->m_PathAppli + "Manager.ini", G_pCApp->m_LocalParam);
    Slot_RecordDispos();
}

//==================================================================== CMDI_Identification ===================================================================================
//---------------------------------------------- SetUser -----------------------------------------------------------------------
void CMDI_Identification::SetUser(const QString &user, const QString &signUser)
    {m_pWdg_Central->setUser( user, signUser);
     //if (m_LogTimeMax>0) StartLogTimer();
    }

//---------------------------------------------- CMDI_Identification -----------------------------------------------------------------------
 CMDI_Identification::CMDI_Identification( QWidget* parent, const char* name, int wflags , CMoteurBase *pCMoteurBase)
                        :CMDI_Generic(parent, name,  wflags, pCMoteurBase)
    {QVBox *pQVCentral = new QVBox( this );
     pQVCentral->setMargin( 0 );
     pQVCentral->setSpacing(0);
     pQVCentral->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
     m_pWdg_Central = new Wdg_Central(pQVCentral, "Wdg_Central");
     setCentralWidget( pQVCentral );
     setIcon( G_pCApp->m_PathAppli+"Images/malehead.png" );
    }

