/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you wish to add, delete or rename functions or slots use
** Qt Designer which will update this file, preserving your code. Create an
** init() function in place of a constructor, and a destroy() function in
** place of a destructor.
*****************************************************************************/
#include "CApp.h"
#include "MyEditText.h"
#include "drtux.h"
#include "CMDI_Observation.h"
#include "CMDI_Prescription.h"
#include "CMDI_Documents.h"
#include "../../MedinTuxTools/CHtmlTools.h"

#include <qfile.h>
#include <qfileinfo.h>
#include <qfiledialog.h> 

/*! \class FormGlossaire
  * Gestion du glossaire dans le dock.
  */

//------------------------------- init -----------------------------------------------
/*! \brief constructeur de la classe */
void FormGlossaire::init()
{m_pCMoteurGlo = new CMoteurGlo();

 pushButtonHome->setPixmap(Theme::getIcon("22x22/home.png"));
 pushButtonEdit->setPixmap(Theme::getIcon("22x22/edit.png"));
 pushButtonLocalise->setPixmap(Theme::getIcon("whereIsGlossaire.png" ));
 pushButtonBack->setPixmap(Theme::getIcon("22x22/previous.png" ));
 //setProperty( "icon", QPixmap( G_pCApp->m_PathImages + "icones/VidalDataSemp_Icon.png" ) );
 if (m_pCMoteurGlo ==0) return;
     textEditView->setTextFormat(Qt::RichText);

     //textEditView->setPaletteBackgroundColor (QColor(255,249,140 ));
     //setPaletteBackgroundColor (QColor(4,4,4 ));
    // textEditView->setWordWrap(QTextEdit::NoWrap);
    // textEditView->setReadOnly (TRUE );
     QString pathAppli = QFileInfo (qApp->argv()[0]).dirPath (true) + QDir::separator();
     textEditView->mimeSourceFactory()->addFilePath(pathAppli + "Ressources/RubriquesTextes");
     textEditView->show();


 m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, G_pCApp->m_PathGlossaire + CMDI_Observation::S_GetRubName() );
 m_pThemePopup    = 0;
 m_PopupItem      = "";
 m_PopupFilePath  = "";
}

//------------------------------- setInterfaceOnPermisions -------------------------------------------------------------
void FormGlossaire::setInterfaceOnPermisions(const QString &droits)
{if (G_pCApp->IsThisDroitExist(droits, "gld"))      pushButtonLocalise->setEnabled (  TRUE );
 else                                               pushButtonLocalise->setEnabled (  FALSE );
 if (G_pCApp->IsThisDroitExist(droits, "glc"))      pushButtonEdit->setEnabled (  TRUE );
 else                                               pushButtonEdit->setEnabled (  FALSE );
}

//------------------------------- destroy -------------------------------------------------------
/*! \brief destructeur de la classe */
void FormGlossaire::destroy()
{if (m_pCMoteurGlo) delete m_pCMoteurGlo;
}

//------------------------------- OnGlossaireRubriqueActived ----------------------------------------------
/*! \brief Reponse au signal:  SIGNAL( windowActivated ( QWidget *  )) provenant du QWorkspace  gestionnaire des fenetres MDI. Ce signal est emis par QWorkspace lorsqu'une fenetre est activée. en reponse nous activons et positionnons le bon chemin et path racine dans la liste.
 *  \param QWidget * pQwdgRub;  fenetre CMDI qui vient d'être activée.
*/
void FormGlossaire::OnGlossaireRubriqueActived(QWidget *pQwdgRub)
{if (pQwdgRub==0)          return;
 if (pQwdgRub->name()==0)  return;
 CMDI_Generic *pCMDI_Generic = (CMDI_Generic*)pQwdgRub;
 QString nom                 =  pCMDI_Generic->name();  // pWdgRub->name() = "CMDI_Observation" "CMDI_Ident"
 m_pCMoteurGlo->SetListTyp(pCMDI_Generic->GetType() , pCMDI_Generic->GetDefaultMaskDirectory(), ListView_Glossaire ); 
}

//------------------------------- GetCurrentFileName ------------------------------------------------------
/*! \brief retourne le nom de fichier actuellement sélectionné . */
QString FormGlossaire::GetCurrentFileName()
{
 QListViewItem  *pQListViewItem = ListView_Glossaire->currentItem();
 if ( pQListViewItem == 0 || pQListViewItem->text(0)[0] == '.') 
    {pQListViewItem = ListView_Glossaire->firstChild();
     while( pQListViewItem && pQListViewItem->text(0)[0] == '.')
          {pQListViewItem = pQListViewItem->nextSibling();
          }
     }
 else
     {return m_pCMoteurGlo->m_curPath + "/" + pQListViewItem->text(0);
     }
 if ( pQListViewItem == 0 )  return QString::null;
 QString fileName = pQListViewItem->text(0);
 if (fileName[0] == '.')     return QString::null;
 ListView_Glossaire->setSelected ( pQListViewItem, TRUE );
 return m_pCMoteurGlo->m_curPath + "/" + fileName;
}

//------------------------------- ListView_Glossaire_clicked -------------------------------------------
//extern  void RtfToQtextEdit_HTML (const char *txt, long len_rtf, QString &stringDST);

void FormGlossaire::ListView_Glossaire_clicked( QListViewItem * qlistViewItem)
{if (qlistViewItem<=0) return;
 //.......................... faire part au Dr Tux du changement d'identité ............................................
 if (qlistViewItem->text(1)=="D"||qlistViewItem->text(1)=="B")
    {m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, m_pCMoteurGlo->m_curPath+"/"+qlistViewItem->text(0));
    }
 else if (qlistViewItem->text(1)=="F")
    {ListView_Glossaire->disconnect( SIGNAL(selectionChanged(QListViewItem *)) );
     ListView_Glossaire->disconnect( SIGNAL(clicked(QListViewItem *)) );
     //ListView_Glossaire->disconnect( SIGNAL(doubleClicked(QListViewItem *)) );
     m_pCMoteurGlo->SetTextEditWithData( qlistViewItem->text(0) , textEditView);
     emit Sign_FileChanged(m_pCMoteurGlo->m_curPath + QDir::separator() + qlistViewItem->text(0), m_pCMoteurGlo->PathGlossaireToTyp());
     QTimer::singleShot( 200, this, SLOT(Slot_RestaureConnection()) );
    }
}
//------------------------------- Slot_RestaureConnection ----------------------------------------------
/*! \brief recrée les connections du listView */
void FormGlossaire::Slot_RestaureConnection()
{connect( ListView_Glossaire,         SIGNAL( selectionChanged(QListViewItem *) ),
          this,                       SLOT(ListView_Glossaire_selectionChanged (QListViewItem *))
        );
 connect( ListView_Glossaire,         SIGNAL( doubleClicked(QListViewItem *) ),
          this,                       SLOT(ListView_Glossaire_doubleClicked (QListViewItem *))
        );
  connect( ListView_Glossaire,        SIGNAL( clicked(QListViewItem *) ),
          this,                       SLOT(ListView_Glossaire_clicked (QListViewItem *))
        );
}
//------------------------------- Slot_GlossaireRefresh ------------------------------------------------
void FormGlossaire::Slot_GlossaireRefresh()
{ m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, m_pCMoteurGlo->m_curPath);
}
//------------------------------- Slot_SetCurrentPath ------------------------------------------------
void FormGlossaire::Slot_SetCurrentPath(QString path)
{   m_pCMoteurGlo->m_curPath = path;
    m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, m_pCMoteurGlo->m_curPath);
}
//------------------------------- pushButtonBack_clicked ----------------------------------------
void FormGlossaire::pushButtonBack_clicked()
{m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, "..");
}


//------------------------------- pushButtonHome_clicked --------------------------------------
void FormGlossaire::pushButtonHome_clicked()
{CMDI_Generic *pCMDI_Generic =  G_pCApp->GetCurrentRubrique();
 if (pCMDI_Generic)
    {m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, G_pCApp->m_PathGlossaire + pCMDI_Generic->m_RubName);  // ne pas utiliser pCMDI_Generic->GetRubName()
    }
}


//------------------------------- ListView_Glossaire_doubleClicked ----------------------------------------
void FormGlossaire::ListView_Glossaire_doubleClicked( QListViewItem *qlistViewItem )
{if (qlistViewItem->text(0)=="..") return;
 ListView_Glossaire->disconnect( SIGNAL(doubleClicked(QListViewItem *)) );
 emit Sign_FileSelected(m_pCMoteurGlo->m_curPath+QDir::separator()+qlistViewItem->text(0), m_pCMoteurGlo->PathGlossaireToTyp());
 //emit Sign_FileToEdit(m_pCMoteurGlo->m_curPath+QDir::separator()+qlistViewItem->text(0),  "Créer", m_pCMoteurGlo->PathGlossaireToTyp());
 connect( ListView_Glossaire,         SIGNAL( doubleClicked(QListViewItem *) ),
          this,                       SLOT(ListView_Glossaire_doubleClicked (QListViewItem *))
        );
}


//------------------------------- ListView_Glossaire_returnPressed  ------------------------------------------
void FormGlossaire::ListView_Glossaire_returnPressed( QListViewItem *qlistViewItem )
{if (qlistViewItem<=0) return;
 if (qlistViewItem->text(1)=="D"||qlistViewItem->text(1)=="B")  // folder ou back
    {m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, qlistViewItem->text(0));
    }
 else if (qlistViewItem->text(1)=="F")                          // fichier
    {
     emit Sign_FileSelected(m_pCMoteurGlo->m_curPath+QDir::separator()+qlistViewItem->text(0), m_pCMoteurGlo->PathGlossaireToTyp());
    }
}

//------------------------------- ListView_Glossaire_selectionChanged  --------------------------------------------------------
void FormGlossaire::ListView_Glossaire_selectionChanged( QListViewItem *qlistViewItem )
{if (qlistViewItem<=0) return;
 if (qlistViewItem->text(1)=="F")
    {ListView_Glossaire->disconnect( SIGNAL(selectionChanged(QListViewItem *)) );
     ListView_Glossaire->disconnect( SIGNAL(clicked(QListViewItem *)) );
     //ListView_Glossaire->disconnect( SIGNAL(doubleClicked(QListViewItem *)) );
     m_pCMoteurGlo->SetTextEditWithData( qlistViewItem->text(0) , textEditView);
     emit Sign_FileChanged(m_pCMoteurGlo->m_curPath + QDir::separator() + qlistViewItem->text(0), m_pCMoteurGlo->PathGlossaireToTyp());
     QTimer::singleShot( 200, this, SLOT(Slot_RestaureConnection()) );

    }
}

//------------------------------- pushButtonEdit_clicked  --------------------------------------------------------
void FormGlossaire::pushButtonEdit_clicked()
{QListViewItem * qlistViewItem = ListView_Glossaire->currentItem ();
 if (qlistViewItem<=0) return;
 emit Sign_FileToEdit(m_pCMoteurGlo->m_curPath + QDir::separator() + qlistViewItem->text(0) ,"Modifier", m_pCMoteurGlo->PathGlossaireToTyp());
}


//------------------------------- ListView_Glossaire_contextMenuRequested  --------------------------------------------------------
void FormGlossaire::ListView_Glossaire_contextMenuRequested( QListViewItem *pQListViewItem, const QPoint &, int )
{if (pQListViewItem !=0 && pQListViewItem->text(1)=="F")    DoGlossairePopupMenu (m_pCMoteurGlo->m_curPath + QDir::separator() + pQListViewItem->text(0));
 else
     {ThemePopup *pThemePopup = new ThemePopup(0, "MyCustomPopupMenu" );
      if (pThemePopup==0)       return ;
      //....................... que certains repertoires autorises à creer un nouveau document (ceux des rubriques) ........................
      int typ = G_pCApp->PathDocumentToType( m_pCMoteurGlo->m_curPath  );
      if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits,"glc") && 
          (typ == CMDI_Documents::S_GetType() || typ == CMDI_Prescription::S_GetType() || typ == CMDI_Observation::S_GetType())
          )
         {
          pThemePopup->insertItem( tr("Créer et éditer un n&ouveau modèle") +"  \t Ctrl+O",          this, SLOT( Slot_PopupActionNewModele()),   CTRL+Key_O );
          //................. connecter le menu .................................................................
          connect( pThemePopup, SIGNAL( activated( int)),     this,        SLOT(OnMenuActivated( int))    );
          connect( pThemePopup, SIGNAL( highlighted ( int)),  this,        SLOT(OnMenuHighlighted( int))  );
          connect( pThemePopup, SIGNAL( aboutToHide ()),      this,        SLOT(OnMenuAboutToHide ())     );
          m_pThemePopup     = pThemePopup;
          m_PopupFilePath   = m_pCMoteurGlo->m_curPath;
          pThemePopup->exec(QCursor::pos());
         }
       delete  pThemePopup;
      //........... parano mais ça se soigne ................
      m_pThemePopup   = 0;
      m_PopupFilePath = "";
      m_PopupItem     = "";
     }
}

//----------------------------------------- DoGlossairePopupMenu -----------------------------------------------------------------
// ACTION: recherche lors de l'appuis du bouton droit si il y a une zone de liste (bleue #0000ff)
//         et auquel cas rajoute les items de cette liste au popup menu classique.

ThemePopup * FormGlossaire::DoGlossairePopupMenu ( QString filepath)
{ThemePopup *pThemePopup = new ThemePopup(0, "MyCustomPopupMenu" );
 if (pThemePopup==0)    return 0;

 MyEditText *pMyEditText = G_pCApp->m_pDrTux->currentEditor();
 if (pMyEditText)
    {if (pMyEditText->isReadOnly())  // l'éditeur en lecture seulement
        {
          if ( (pMyEditText->GetTypeRubrique()==TYP_OBSERVATION  &&  G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "obc")) ||
               (pMyEditText->GetTypeRubrique()==TYP_PRESCRIPTION &&  G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "orc")) ||
               (pMyEditText->GetTypeRubrique()==TYP_PRESCRIPTION &&  G_pCApp->IsThisDroitExist(G_pCApp->m_Droits, "doc"))
             )
             { pThemePopup->insertItem( tr("Créer un &nouveau document avec ce modèle    ")+"       \t Ctrl+N",    this, SLOT( Slot_PopupActionNewDoc()),       CTRL+Key_N );
             }
          else
             {pThemePopup->insertItem( tr(" Droits insuffisants pour créer un document avec ce modèle "),          this, SLOT( Slot_PopupActionDumy()),       CTRL+Key_I );
             }
        }
     else
        { pThemePopup->insertItem( tr("Créer un &nouveau document avec ce modèle    ")+"       \t Ctrl+N",          this, SLOT( Slot_PopupActionNewDoc()),       CTRL+Key_N );
          pThemePopup->insertItem( tr("&Ajouter le contenu de ce modèle au curseur")+"       \t Ctrl+I",            this, SLOT( Slot_PopupActionAddDoc()),       CTRL+Key_I );
          pThemePopup->insertItem( tr("&Tout remplacer par ce modèle")+"       \t Ctrl+T",          this, SLOT( Slot_PopupActionReplaceDoc()),   CTRL+Key_R );
        }
    }
 if (G_pCApp->IsThisDroitExist(G_pCApp->m_Droits,"glc"))
    { pThemePopup->insertSeparator ( ) ;
      //....................... que certains repertoires autorises à creer un nouveau document (ceux des rubriques) ........................
      int typ = G_pCApp->PathDocumentToType( m_pCMoteurGlo->m_curPath  );
      if (typ == CMDI_Documents::S_GetType() || typ == CMDI_Prescription::S_GetType() || typ == CMDI_Observation::S_GetType())
         {pThemePopup->insertItem( tr("Créer et éditer un n&ouveau modèle")+"  \t Ctrl+O",          this, SLOT( Slot_PopupActionNewModele()),   CTRL+Key_O );
         }
      pThemePopup->insertItem( tr("&Modifier et éditer ce modèle")+"       \t Ctrl+M",          this, SLOT( Slot_PopupActionEditDoc()),     CTRL+Key_M );
      pThemePopup->insertItem( tr("&Renommer ce modèle          ")+"       \t Ctrl+R",          this, SLOT( Slot_PopupActionRenameDoc()),   CTRL+Key_M );
      pThemePopup->insertItem( tr("&Détruire ce modèle          ")+"       \t Ctrl+D",          this, SLOT( Slot_PopupActionDeleteDoc()),   CTRL+Key_D );
    }
 //................. connecter le menu .................................................................
 connect( pThemePopup, SIGNAL( activated( int)),
          this,        SLOT(OnMenuActivated( int))
        );
 connect( pThemePopup, SIGNAL( highlighted ( int)),
          this,        SLOT(OnMenuHighlighted( int))
        );
 connect( pThemePopup, SIGNAL( aboutToHide ()),
          this,        SLOT(OnMenuAboutToHide ())
        );
 m_pThemePopup     = pThemePopup;
 m_PopupFilePath   = filepath;
 pThemePopup->exec(QCursor::pos());
 delete  pThemePopup;
 //........... parano mais ça se soigne ................
 m_pThemePopup   = 0;
 m_PopupFilePath = "";
 m_PopupItem     = "";
 return  pThemePopup;
}
//------------------------------- Slot_PopupActionDumy  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionDumy()
{int i = 0;
 i++;
 i+=2;
}
//------------------------------- Slot_PopupActionNewModele  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionNewModele()
{QString   path    =  m_pCMoteurGlo->m_curPath ;
 QString    ext    = ".html";
 QString  filtre   = tr( " Fichiers HTML (*.htm *.html);;  Tous les fichiers (*)");
 //.................. selectionner le fichier .......................................
 QFileDialog fd (path,  filtre,  this, "SaveDlg" ) ;
 fd.setCaption(tr("Saisissez le nom du document à créer"));
 fd.setMode(QFileDialog::AnyFile );    // selection multiple
 if ( fd.exec() != QDialog::Accepted )           return;
 QString fn = fd.selectedFile();
 if ( fn.isEmpty() )                             return;
 fn         = QFileInfo(fn).dirPath() + "/" + QFileInfo(fn).baseName() + ext;
 QFile file( fn);
 if (QDir().exists ( fn ) )
    {if ( QMessageBox::warning( this,       (" Document existant"),
                                             tr ( "ATTENTION :  Ce fichier : ")   +
                                             QFileInfo(fn).fileName() +
                                             tr(  "\r\n Existe déjà.\r\n"
                                                  " Faut il créer le nouveau document avec ce non,\r\n et écraser celui existant ?") ,
                                             tr("&Créer et écraser"), tr("Annu&ler"), 0,
                                             1, 1 ) == 1)
          {return;
          }
    }
 else
    {
    }
 if ( !file.open( IO_WriteOnly ) )               return;
 QString txt = "<html><head><meta name=\"qrichtext\" content=\"1\" /></head><body style=\"font-size:10pt;font-family:Sans\"></body></html>";
 QTextStream ts( &file );
 CHtmlTools::QRichTextToHtml(txt);
 ts << txt;
 m_PopupFilePath = fn;
 emit Sign_FileToEdit(fn,  tr("Modifier"), m_pCMoteurGlo->PathGlossaireToTyp());
 m_pCMoteurGlo->GetMasquesList(ListView_Glossaire, m_pCMoteurGlo->m_curPath);
}

//------------------------------- Slot_PopupActionNewDoc  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionNewDoc()
{emit Sign_FileToEdit(m_PopupFilePath,  tr("Créer"), m_pCMoteurGlo->PathGlossaireToTyp());
}
//------------------------------- Slot_PopupActionAddDoc  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionAddDoc()
{emit Sign_FileToEdit(m_PopupFilePath,  tr("Ajouter"), m_pCMoteurGlo->PathGlossaireToTyp());
}
//------------------------------- Slot_PopupActionReplaceDoc  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionReplaceDoc()
{emit Sign_FileToEdit(m_PopupFilePath,  tr("Tout"), m_pCMoteurGlo->PathGlossaireToTyp());
}
//------------------------------- Slot_PopupActionEditDoc  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionEditDoc()
{emit Sign_FileToEdit(m_PopupFilePath,  tr("Modifier"), m_pCMoteurGlo->PathGlossaireToTyp());
}
//------------------------------- Slot_PopupActionRenameDoc  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionRenameDoc()
{emit Sign_FileToEdit(m_PopupFilePath,  tr("Renommer"), m_pCMoteurGlo->PathGlossaireToTyp());
}
//------------------------------- Slot_PopupActionDeleteDoc  --------------------------------------------------------
void FormGlossaire::Slot_PopupActionDeleteDoc()
{emit Sign_FileToEdit(m_PopupFilePath,  tr("Détruire"), m_pCMoteurGlo->PathGlossaireToTyp());
}

//------------------------------- OnMenuActivated  --------------------------------------------------------
void FormGlossaire::OnMenuActivated( int id)
{if (id != -1 && m_pThemePopup)
    {m_PopupItem   = m_pThemePopup->text(id);
    }
}

//------------------------------- OnMenuHighlighted  --------------------------------------------------------
void FormGlossaire::OnMenuHighlighted( int id)
{if (id != -1 && m_pThemePopup)
    {m_PopupItem     = m_pThemePopup->text(id);
    }
}

//------------------------------- OnMenuAboutToHide  --------------------------------------------------------
void FormGlossaire::OnMenuAboutToHide( )
{
}
