OutilZT/sources/OutilZT.cpp

736 lines
19 KiB
C++

/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Cette classe est considérée comme l'instance du programme qui
initialise et démarre tous les objets nécessaires.
Elle assure aussi la synchronisation de ces derniers à l'aide de sa
machine à états.
*/
/* ************************************************************************** */
/* Revision:
### 20121214 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "OutilZT.h"
#include <QApplication>
#include <QTextCodec>
#include "NetworkManager.h"
#include <QByteArray>
#include <QDebug>
#include <QMessageBox>
COutilZT::COutilZT()
{
panel.installEventFilter(this); //Install an event filter for CZoneTest to manage some events from GUI
}
COutilZT::~COutilZT()
{
}
unsigned int COutilZT::Start()
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
panel.mDatabaseModeLogListPage->mLogMgrHandle = &mDatabaseModeLogManager;
panel.mDatabaseModeLogListPage->mProgramHandle = this;
panel.mMainPage->mProgramHandle = this;
panel.mOptionsPage->mProgramHandle = this;
if(mIsEngMode == true)
{
panel.mOptionsPage->EnableEngineeringMode();
}
panel.mNetworkCtrlPage->mProgramHandle = this;
panel.mDatabaseMgrPage->mProgramHandle = this;
panel.mDatabaseMgrPage->mLogMgrHandle = &mDatabaseModeLogManager;
panel.mDatabaseMgrPage->mZTLogFilesManager = &mZTLogFilesManager;
if(mIsEngMode == true)
{
panel.mDatabaseMgrPage->EnableEngineeringMode();
}
if(mCanImport == true)
{
panel.mDatabaseMgrPage->EnableLogImport();
}
mDatabaseModeLogManager.mProgramHandle = this;
panel.mNetworkModeLogListPage->mProgramHandle = this;
panel.mNetworkModeLogListPage->mLogMgrHandle = &mNetworkModeLogManager;
panel.mNetworkModeLogViewPage->mProgramHandle = this;
mNetworkModeLogManager.mProgramHandle = this;
panel.mRemoteZTCtrlPage->mProgramHandle = this;
panel.mZTLogsListPage->mProgramHandle = this;
panel.mZTLogsListPage->mZTLogFilesManager = &mZTLogFilesManager;
if(mIsEngMode == true)
{
panel.mDatabaseModeLogListPage->EnableEngineeringMode();
panel.mNetworkModeLogListPage->EnableEngineeringMode();
}
mSettingsFileMgr.LoadSettings(&mSettingsData);
CNetworkManager::instance()->BindPointers(this);
CNetworkManager::instance()->SetConfig(&mSettingsData);
panel.mNetworkZTListPage->SetConfig(&mSettingsData);
panel.mOptionsPage->SetSettings(&mSettingsData);
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnectionStatus(int,int)),panel.mNetworkZTListPage,SLOT(ZTNetworkStatusChanged(int,int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnected(int)),panel.mNetworkCtrlPage,SLOT(NetworkZTConnected(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnectionError(int)),panel.mNetworkCtrlPage,SLOT(NetworkZTConnectionFailed(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTDisconnected(int)),panel.mNetworkCtrlPage,SLOT(NetworkZTConnectionFailed(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkTCPRx()),panel.mNetworkCtrlPage,SLOT(NetworkRx()));
connect(CNetworkManager::instance(),SIGNAL(NetworkTCPTx()),panel.mNetworkCtrlPage,SLOT(NetworkTx()));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTConnected(int)),panel.mRemoteZTPage,SLOT(NetworkZTConnected(int)));
connect(CNetworkManager::instance(),SIGNAL(NetworkZTDisconnected(int)),panel.mRemoteZTPage,SLOT(NetworkZTDisconnected(int)));
// panel.mDatabaseModeLogListPage->RefreshList();
// panel.mZTLogsListPage->RefreshList();
//Show Graphic User Interface.
panel.setWindowTitle("Outil Zone Test");
panel.show();
mDatabaseModeLogManager.mProgramHandle = this;
mDatabaseModeLogManager.SetLogDataDir(GetLogDataPath());
mDatabaseModeLogManager.ParseLogs();
mNetworkModeLogManager.mProgramHandle = this;
mNetworkModeLogManager.SetLogDataDir(GetTrainLogsTempPath());
// mNetworkModeLogManager.ParseLogs();
mZTLogFilesManager.mProgramHandle = this;
mZTLogFilesManager.SetLogDataDir(GetLogDataPath());
mZTLogFilesManager.ParseZTLogFiles(false);
mOutilZTMode = MODE_INVALID;
// EnterNetworkModeRequest();
EnterDatabaseModeRequest();
mRebuildingDB = false;
// CNetworkManager::instance()->CheckZTConnectionsStatus();
return RET_OK;
}
unsigned int COutilZT::InitZT()
{
return RET_OK;
}
void COutilZT::LogViewRequest(CLogElement *element, CLogsListPage *caller)
{
if(caller == panel.mDatabaseModeLogListPage)
{
panel.mDatabaseModeLogViewPage->SetLogData(element);
}
else if(caller == panel.mNetworkModeLogListPage)
{
panel.mNetworkModeLogViewPage->SetLogData(element);
ShowNetworkModeLogViewRequest();
}
}
unsigned int COutilZT::SetLogProtection(bool Protection, CLogElement* Element, CLogsListPage *Caller)
{
if(Caller == panel.mDatabaseModeLogListPage)
{
if(mDatabaseModeLogManager.ProtectLogElementFile(Protection,Element) == RET_OK)
{
return RET_OK;
}
}
return RET_ERROR;
}
void COutilZT::LogViewCloseRequest(CLogViewPage *caller)
{
if(caller == panel.mNetworkModeLogViewPage)
{
HideNetworkModeLogViewRequest();
}
}
void COutilZT::ShowOptionsRequest()
{
panel.mOptionsPage->show();
}
void COutilZT::HideOptionsRequest()
{
panel.mOptionsPage->hide();
}
void COutilZT::ShowDatabaseMgrRequest()
{
panel.mDatabaseMgrPage->show();
}
void COutilZT::HideDatabaseMgrRequest()
{
panel.mDatabaseMgrPage->hide();
}
void COutilZT::EnterDatabaseModeRequest()
{
if(mOutilZTMode == MODE_DATABASE)
return;
panel.mNetworkZTListPage->hide();
panel.mNetworkCtrlPage->hide();
panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
panel.mZTLogsListPage->hide();
panel.mZTLogFileViewerPage->hide();
panel.mDatabaseModeLogListPage->show();
panel.mDatabaseModeLogViewPage->show();
mOutilZTMode = MODE_DATABASE;
}
void COutilZT::EnterNetworkModeRequest()
{
if(mOutilZTMode == MODE_NETWORK)
return;
panel.mDatabaseModeLogListPage->hide();
panel.mDatabaseModeLogViewPage->hide();
panel.mNetworkZTListPage->show();
panel.mNetworkCtrlPage->show();
panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->show();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
panel.mZTLogsListPage->hide();
panel.mZTLogFileViewerPage->hide();
mOutilZTMode = MODE_NETWORK;
}
void COutilZT::EnterZTLogModeRequest()
{
if(mOutilZTMode == MODE_ZTLOG)
return;
panel.mDatabaseModeLogListPage->hide();
panel.mDatabaseModeLogViewPage->hide();
panel.mNetworkZTListPage->hide();
panel.mNetworkCtrlPage->hide();
panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
panel.mZTLogsListPage->show();
panel.mZTLogFileViewerPage->show();
mOutilZTMode = MODE_ZTLOG;
}
void COutilZT::ShowZTLogRequest(QString Log,QString FocusText,int line)
{
panel.mZTLogViewerPage->SetZTLogText(Log,FocusText);
if(line != -1)
panel.mZTLogViewerPage->ScrollToLine(line);
panel.mZTLogViewerPage->show();
}
void COutilZT::ShowNetworkModeLogViewRequest()
{
// panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->show();
}
void COutilZT::HideNetworkModeLogViewRequest()
{
// panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->show();
panel.mNetworkModeLogViewPage->hide();
}
void COutilZT::ShowRemoteControlPage()
{
panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->show();
}
void COutilZT::ShowRemoteTrainLogsViewPages()
{
panel.mRemoteZTPage->show();
panel.mNetworkModeLogListPage->show();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
}
void COutilZT::ShowRemoteLiveZTPage()
{
panel.mRemoteZTPage->hide();
panel.mNetworkModeLogListPage->hide();
panel.mNetworkModeLogViewPage->hide();
panel.mRemoteZTCtrlPage->hide();
}
QString COutilZT::GetLogDataPath()
{
return mSettingsData.mDataSourceDirectoryPath;
}
QString COutilZT::GetTrainLogsTempPath()
{
return QString("./Temp/");
}
void COutilZT::CleanTrainLogsTempPath()
{
QDir TrainLogsTempDir(GetTrainLogsTempPath());
TrainLogsTempDir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
QFileInfoList fileslist = TrainLogsTempDir.entryInfoList();
for(int i = 0; i < fileslist.size(); i++)
{
QDir().remove(fileslist.at(i).filePath());
}
}
unsigned int COutilZT::DataSourceDirChanged(QString NewPath)
{
mSettingsData.mDataSourceDirectoryPath = NewPath;
mSettingsFileMgr.SaveSettings(&mSettingsData);
mDatabaseModeLogManager.SetLogDataDir(NewPath);
mZTLogFilesManager.SetLogDataDir(NewPath);
LogsDatabaseChanged(0);
return RET_OK;
}
unsigned int COutilZT::NetworkDataChanged()
{
mSettingsFileMgr.SaveSettings(&mSettingsData);
//todo: Notify network manager...
return RET_OK;
}
unsigned int COutilZT::LogsDatabaseChanged(QStringList *NewLogs)
{
if(NewLogs == 0)
{
mDatabaseModeLogManager.ParseLogs(true,false);
}
else
{
mDatabaseModeLogManager.ParseImportedLogs(NewLogs);
}
// ZTLogFilesChanged();
mZTLogFilesManager.ParseZTLogFiles(true);
return RET_OK;
}
unsigned int COutilZT::RebuildDatabaseFile()
{
mDatabaseModeLogManager.ParseLogs(true,false);
// mRebuildingDB = true;
mZTLogFilesManager.ParseZTLogFiles(true);
return RET_OK;
}
unsigned int COutilZT::LogsDatabaseLoaded(CLogMgr *Caller, int Status)
{
if(Caller == &mDatabaseModeLogManager)
{
// QMessageBox::information(0,"Parsing Finished","Parsing finished");
if(Status == 1)
{
panel.mDatabaseModeLogListPage->RefreshList();
panel.mDatabaseMgrPage->UpdateDBStats();
// if(mRebuildingDB)
// {
// mZTLogFilesManager.ParseZTLogFiles(true);
// mRebuildingDB = false;
// }
}
else
{
QMessageBox::information(0,"Erreur","Impossible de charger la base de données");
}
panel.mProgressBarPage->hide();
}
if(Caller == &mNetworkModeLogManager)
{
panel.mNetworkModeLogListPage->RefreshList();
}
return RET_OK;
}
unsigned int COutilZT::UpdateLogsList(CLogMgr *Caller)
{
if(Caller == &mDatabaseModeLogManager)
{
panel.mDatabaseModeLogListPage->RefreshList();
}
if(Caller == &mNetworkModeLogManager)
{
panel.mNetworkModeLogListPage->RefreshList();
}
return RET_OK;
}
unsigned int COutilZT::DatabaseFetchingBegin(CLogMgr *Caller)
{
if(Caller == &mDatabaseModeLogManager)
{
panel.mProgressBarPage->SetProgressBarRange(0);
panel.mProgressBarPage->SetTitle("Chargement de la base de données");
panel.mProgressBarPage->SetMiscLabel("");
panel.mProgressBarPage->show();
}
return RET_OK;
}
unsigned int COutilZT::DatabaseFetchingTick(CLogMgr *Caller,int Index)
{
// qDebug() << "Rx new Train Log: " << FileName;
if(Caller == &mDatabaseModeLogManager)
{
panel.mProgressBarPage->Tick();
panel.mProgressBarPage->SetMiscLabel(QString("%1 passages chargés").arg(Index));
}
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesChanged()
{
mZTLogFilesManager.SaveDatabaseFile();
mZTLogFilesManager.ParseZTLogFiles(false);
return RET_OK;
}
unsigned int COutilZT::ShowZTLogFile(QString FilePath)
{
panel.mZTLogFileViewerPage->SetZTLogText(FilePath);
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesDatabaseLoaded(CZTLogFilesMgr *Caller, int Status)
{
if(Caller == &mZTLogFilesManager)
{
if(Status == 1)
{
panel.mZTLogsListPage->RefreshList();
panel.mDatabaseMgrPage->UpdateDBStats();
// panel.mProgressBarPage->hide();
}
else
{
// QMessageBox::information(0,"Parsing failed","Parsing failed");
}
}
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesFetchingBegin(CZTLogFilesMgr *Caller)
{
if(Caller == &mZTLogFilesManager)
{
// panel.mProgressBarPage->SetProgressBarRange(0);
// panel.mProgressBarPage->SetTitle("Chargement des fichiers LOG");
// panel.mProgressBarPage->SetMiscLabel("");
// panel.mProgressBarPage->show();
}
return RET_OK;
}
unsigned int COutilZT::ZTLogFilesFetchingTick(CZTLogFilesMgr *Caller, int Index, QString File)
{
if(Caller == &mZTLogFilesManager)
{
// panel.mProgressBarPage->Tick();
// panel.mProgressBarPage->SetMiscLabel(QString("%1 passages chargés : %2").arg(Index).arg(File));
}
return RET_OK;
}
unsigned int COutilZT::ConnectToZTRequest()
{
int ID = panel.mNetworkZTListPage->GetSelectedZT();
CNetworkManager::instance()->ConnectToZT(ID);
return RET_OK;
}
unsigned int COutilZT::RxStationName(QString StationName)
{
panel.mRemoteZTPage->SetRemoteZTName(StationName);
return RET_OK;
}
unsigned int COutilZT::DisconnectZTRequest()
{
return CNetworkManager::instance()->DisconnectZT();
}
unsigned int COutilZT::RefreshRemoteZTStatusRequest()
{
if(CNetworkManager::instance()->RefreshRemoteZTStatus() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::RxZTStatus(const CTCPZTStatus &status)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
panel.mRemoteZTPage->SetRemoteZTStatus(&status);
panel.mRemoteZTCtrlPage->UpdateDisplay(&status);
return RET_OK;
}
unsigned int COutilZT::DownloadZTLogRequest()
{
if(CNetworkManager::instance()->DownloadZTLog() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::RxZTLog(QString ZTLog)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
panel.mZTLogViewerPage->SetZTLogText(ZTLog);
panel.mZTLogViewerPage->show();
return RET_OK;
}
unsigned int COutilZT::DownloadTrainLogsRequest()
{
if(CNetworkManager::instance()->DownloadTrainLogs() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::DownloadTrainLogsBegin(int NbLogs)
{
CleanTrainLogsTempPath();
panel.mProgressBarPage->SetProgressBarRange(NbLogs);
panel.mProgressBarPage->SetTitle(QString("Réception de %1 fichiers").arg(NbLogs));
panel.mProgressBarPage->SetMiscLabel("");
panel.mProgressBarPage->show();
return RET_OK;
}
unsigned int COutilZT::RxTrainLogData(QString FileName)
{
qDebug() << "Rx new Train Log: " << FileName;
panel.mProgressBarPage->Tick();
panel.mProgressBarPage->SetMiscLabel(QString("Réception: %1").arg(FileName));
return RET_OK;
}
unsigned int COutilZT::RxTrainLogsDownloadFinished()
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
qDebug("TrainLogs download finished");
mNetworkModeLogManager.ParseLogs();
panel.mNetworkModeLogListPage->RefreshList();
panel.mProgressBarPage->hide();
return RET_OK;
}
unsigned int COutilZT::DeleteRemoteZTLogRequest()
{
if(CNetworkManager::instance()->DeleteRemoteZTLog() == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::RemoteZTLogDeleted(bool Success)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
return RET_OK;
}
unsigned int COutilZT::SetZTFunctionsStatus(CTCPZTFunctionsStatus status)
{
if(CNetworkManager::instance()->SetZTFunctions(status) == RET_OK)
{
panel.mNetworkCtrlPage->DisableNetworkButtons();
return RET_OK;
}
return RET_ERROR;
}
unsigned int COutilZT::SetZTFunctionsSatusDone(bool succes)
{
panel.mNetworkCtrlPage->EnableNetworkButtons();
return RET_OK;
}
//Catch and manage some events from the graphics user interface
//like the keyboard Exit sequence (Ctrl-F10)
bool COutilZT::eventFilter(QObject *obj, QEvent *event)
{
if(obj == &panel) //Check if event is coming from the GUI
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *KeyEvent = static_cast<QKeyEvent*>(event);
//Check if we received CTRL-F10
if(KeyEvent->key() == Qt::Key_F10 &&
KeyEvent->modifiers() == Qt::ControlModifier)
{
QApplication::exit(78); //Quit the application
return true; //keep the keystroke
}
}
}
return QObject::eventFilter(obj,event);
}
QString COutilZT::GetStationName(int StationID)
{
switch(StationID)
{
case ANGRIGNON_ZT_ID:
{
return QString("Angrignon");
break;
}
case HONORE_BEAUGRAND_ZT_ID:
{
return QString("Honoré-Beaugrand");
break;
}
case LONGUEUIL_ZT_ID:
{
return QString("Longueuil");
break;
}
case BERRI_UQAM_ZT_ID:
{
return QString("Berri-UQAM");
break;
}
case SNOWDON_ZT_ID:
{
return QString("Snowdon");
break;
}
case SAINT_MICHEL_ZT_ID:
{
return QString("Saint-Michel");
break;
}
case COTE_VERTU_ZT_ID:
{
return QString("Côte-Vertu");
break;
}
case HENRI_BOURASSA_ZT_ID:
{
return QString("Henri-Bourassa");
break;
}
case MONTMORENCY_ZT_ID:
{
return QString("Montmorency");
break;
}
case MONTMORENCY_10_12_ZT_ID:
{
return QString("Montmorency 10/12");
break;
}
case MONTMORENCY_10_22_ZT_ID:
{
return QString("Montmorency 10/22");
break;
}
}
return QString("Unknown !!!");
}