458 lines
14 KiB
C++
458 lines
14 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Société de Transports de Montréal. *
|
|
* 2012 *
|
|
* *
|
|
* Projet Zones Tests *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
Page offrant différentes option pour l'entretien de la ZT
|
|
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
/* Revision:
|
|
### 20131021 JFM
|
|
Verision d'origine.
|
|
|
|
### YYYMMDD Description du besoin ou du bug
|
|
Description du changement.
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
|
|
|
|
#include "MaintenancePage.h"
|
|
#include <QPainter>
|
|
#include "GlobalDefine.h"
|
|
#include <QDialog>
|
|
#include <QMainWindow>
|
|
#include "Zonetest.h"
|
|
#include <QDateTime>
|
|
#include <QFont>
|
|
#include <QGraphicsProxyWidget>
|
|
#include "ZTData.h"
|
|
#include <QMessageBox>
|
|
#include "ZTLog.h"
|
|
#include "ZTData.h"
|
|
|
|
|
|
CMaintenancePage::CMaintenancePage(QGraphicsWidget *Parent)
|
|
{
|
|
Q_UNUSED(Parent)
|
|
|
|
|
|
mProgramHandle = 0;
|
|
|
|
mBackgroundRect = new QGraphicsRectItem(boundingRect(), this);
|
|
QBrush BackgroundBrush(QColor(245, 245, 255));
|
|
mBackgroundRect->setBrush(BackgroundBrush);
|
|
|
|
QGraphicsTextItem *Title = new QGraphicsTextItem("Entretien de la Zone Tests",this);
|
|
QFont font;
|
|
font.setPointSize(18);
|
|
Title->setFont(font);
|
|
Title->setPos(40,10);
|
|
|
|
|
|
mMaintenanceActivationBtn = new CToggleButtonWidget("./Images/Slider_Green.png","./Images/Slider_Red.png",this);
|
|
mMaintenanceActivationBtn->setPos(45,65);
|
|
mMaintenanceActivationBtn->resize(50,30);
|
|
connect(mMaintenanceActivationBtn,SIGNAL(ButtonToggled(CToggleButtonWidget*)),this,SLOT(ActivationBtnToggled(CToggleButtonWidget*)));
|
|
|
|
mWatchdogEnableBtn = new CToggleButtonWidget("./Images/Slider_Green.png","./Images/Slider_Red.png",this);
|
|
mWatchdogEnableBtn->setPos(700,350);
|
|
mWatchdogEnableBtn->resize(50,30);
|
|
connect(mWatchdogEnableBtn,SIGNAL(ButtonToggled(CToggleButtonWidget*)),this,SLOT(WatchdogEnableBtnToggled(CToggleButtonWidget*)));
|
|
|
|
|
|
Title = new QGraphicsTextItem("Activer mode entretien",this);
|
|
font.setPointSize(16);
|
|
Title->setFont(font);
|
|
Title->setPos(100,60);
|
|
|
|
mCancelButton = new CTextButtonWidget("Fermer");
|
|
mCancelButton->setParentItem(this);
|
|
mCancelButton->setPos(700,550);
|
|
connect(mCancelButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
|
|
|
|
mGenerateAlarmBtn = new CTextButtonWidget("Envoyer Alarme",0,30);
|
|
mGenerateAlarmBtn->setParentItem(this);
|
|
mGenerateAlarmBtn->setPos(540,170);
|
|
connect(mGenerateAlarmBtn,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
|
|
|
|
mClearAlarmButton = new CTextButtonWidget("Acquitter Alarme",0,30);
|
|
mClearAlarmButton->setParentItem(this);
|
|
mClearAlarmButton->setPos(540,210);
|
|
mClearAlarmButton->hide();
|
|
connect(mClearAlarmButton,SIGNAL(TxtButtonClicked(CTextButtonWidget*)),this,SLOT(ButtonClicked(CTextButtonWidget*)));
|
|
|
|
QGraphicsProxyWidget *Proxy = new QGraphicsProxyWidget(this);
|
|
mAlarmTypeList = new QComboBox();
|
|
Proxy->setWidget(mAlarmTypeList);
|
|
Proxy->setPos(100,200);
|
|
QStringList AlarmTypes;
|
|
AlarmTypes << "Erreur de comptage ZT1"
|
|
<< "Détection Frotteur Négatif"
|
|
<< "Détection Pneu de Guidage"
|
|
<< "Détection Pneu Porteur Intérieur ZT1"
|
|
<< "Détection Pneu Porteur Extérieur ZT1"
|
|
<< "Erreur de comptage ZT2"
|
|
<< "Détection Pneu Porteur Intérieur ZT2"
|
|
<< "Détection Pneu Porteur Extérieur ZT2"
|
|
<< "Panne Équipement ZT1"
|
|
<< "Panne Équipement ZT2";
|
|
|
|
mAlarmTypeList->addItems(AlarmTypes);
|
|
mAlarmTypeList->resize(300,30);
|
|
connect(mAlarmTypeList,SIGNAL(currentIndexChanged(int)),this,SLOT(AlarmTypeSelectionChanged(int)));
|
|
Proxy->setZValue(2);
|
|
mAlarmDescription = new QGraphicsTextItem(this);
|
|
mAlarmDescription->setPos(100,170);
|
|
mAlarmDescription->setPlainText("Type d'alarme");
|
|
|
|
|
|
Proxy = new QGraphicsProxyWidget(this);
|
|
mAlarmRankSpinBox = new QSpinBox();
|
|
Proxy->setWidget(mAlarmRankSpinBox);
|
|
Proxy->setPos(420,200);
|
|
mAlarmRankSpinBox->resize(100,30);
|
|
mRankDescription = new QGraphicsTextItem(this);
|
|
mRankDescription->setPos(420,170);
|
|
mRankDescription->setPlainText("Rang");
|
|
|
|
QPen FramePen;
|
|
FramePen.setWidth(3);
|
|
|
|
|
|
mAlarmsFrame = new QGraphicsRectItem(80,120,650,130,this);
|
|
mAlarmsFrame->setPen(FramePen);
|
|
|
|
mFctDescription = new QGraphicsTextItem(this);
|
|
mFctDescription->setPos(200,120);
|
|
mFctDescription->setPlainText("Génération d'alarmes au PCC");
|
|
font.setPointSize(18);
|
|
mFctDescription->setFont(font);
|
|
|
|
mWatchdogDisableDescription = new QGraphicsTextItem(this);
|
|
mWatchdogDisableDescription->setPos(694,310);
|
|
mWatchdogDisableDescription->setFont(font);
|
|
mWatchdogDisableDescription->setPlainText("Vigie");
|
|
|
|
int yoffset = 30;
|
|
|
|
mPPFrame = new QGraphicsRectItem(80,250+yoffset,550,280,this);
|
|
mPPFrame->setPen(FramePen);
|
|
|
|
mPPTitle = new QGraphicsTextItem("Activation des pédales pneu porteur",this);
|
|
mPPTitle->setFont(font);
|
|
mPPTitle->setPos(150,250+yoffset);
|
|
|
|
|
|
|
|
|
|
font.setPointSize(14);
|
|
mPPIZT1Description = new QGraphicsTextItem("Pédale intérieure ZT1",this);
|
|
mPPIZT1Description->setFont(font);
|
|
mPPIZT1Description->setPos(100,300+15+yoffset);
|
|
mZT1PPIStatus = new CONOFFStatusWidget("");
|
|
mZT1PPIStatus->setParentItem(this);
|
|
mZT1PPIStatus->setPos(320,300+yoffset);
|
|
|
|
mPPEZT1Description = new QGraphicsTextItem("Pédale extérieure ZT1",this);
|
|
mPPEZT1Description->setFont(font);
|
|
mPPEZT1Description->setPos(100,350+15+yoffset);
|
|
mZT1PPEStatus = new CONOFFStatusWidget("");
|
|
mZT1PPEStatus->setParentItem(this);
|
|
mZT1PPEStatus->setPos(320,350+yoffset);
|
|
|
|
mPPIZT2Description = new QGraphicsTextItem("Pédale intérieure ZT2",this);
|
|
mPPIZT2Description->setFont(font);
|
|
mPPIZT2Description->setPos(100,400+15+yoffset);
|
|
mZT2PPIStatus = new CONOFFStatusWidget("");
|
|
mZT2PPIStatus->setParentItem(this);
|
|
mZT2PPIStatus->setPos(320,400+yoffset);
|
|
|
|
mPPEZT2Description = new QGraphicsTextItem("Pédale extérieure ZT2",this);
|
|
mPPEZT2Description->setFont(font);
|
|
mPPEZT2Description->setPos(100,450+15+yoffset);
|
|
mZT2PPEStatus = new CONOFFStatusWidget("");
|
|
mZT2PPEStatus->setParentItem(this);
|
|
mZT2PPEStatus->setPos(320,450+yoffset);
|
|
|
|
mMaintenanceModeAutoExitTimer = new QTimer();
|
|
mMaintenanceModeAutoExitTimer->setSingleShot(true);
|
|
connect(mMaintenanceModeAutoExitTimer,SIGNAL(timeout()),this,SLOT(AutoExit()));
|
|
|
|
mAlarmRankSpinBox->setValue(1);
|
|
mAlarmRankSpinBox->setMinimum(1);
|
|
mAlarmRankSpinBox->setMaximum(1);
|
|
mRankDescription->setPlainText("N/A");
|
|
|
|
HideMaintenanceItems();
|
|
}
|
|
|
|
void CMaintenancePage::resizeEvent(QGraphicsSceneResizeEvent *event)
|
|
{
|
|
Q_UNUSED(event)
|
|
|
|
|
|
mBackgroundRect->setRect(boundingRect());
|
|
}
|
|
|
|
void CMaintenancePage::ButtonClicked(CTextButtonWidget *BtnPtr)
|
|
{
|
|
if(BtnPtr == mCancelButton)
|
|
{
|
|
hide();
|
|
}
|
|
else if(BtnPtr == mGenerateAlarmBtn)
|
|
{
|
|
GenerateTK();
|
|
}
|
|
else if(BtnPtr == mClearAlarmButton)
|
|
{
|
|
if(mProgramHandle->ClearMaintenanceCurTKRequest() == RET_OK)
|
|
{
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Acquitement MANUEL d'une TK au PCC.",true);
|
|
}
|
|
else
|
|
{
|
|
mClearAlarmButton->hide();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void CMaintenancePage::AlarmTypeSelectionChanged(int index)
|
|
{
|
|
switch(index)
|
|
{
|
|
|
|
case DETECTION_PG_DETECTION:
|
|
case DETECTION_PPI_DETECTION:
|
|
case DETECTION_PPE_DETECTION:
|
|
case DETECTION_ZT2_PPI_DETECTION:
|
|
case DETECTION_ZT2_PPE_DETECTION:
|
|
{
|
|
mAlarmRankSpinBox->setValue(1);
|
|
mAlarmRankSpinBox->setMinimum(1);
|
|
mAlarmRankSpinBox->setMaximum(36);
|
|
mRankDescription->setPlainText("Rang");
|
|
break;
|
|
}
|
|
case DETECTION_FN_DETECTION:
|
|
{
|
|
mAlarmRankSpinBox->setValue(1);
|
|
mAlarmRankSpinBox->setMinimum(1);
|
|
mAlarmRankSpinBox->setMaximum(18);
|
|
mRankDescription->setPlainText("Bogie");
|
|
break;
|
|
}
|
|
case DETECTION_MAGNETIC_SENSOR_COUNT:
|
|
case DETECTION_ZT2_MAGNETIC_SENSOR_COUNT:
|
|
case DETECTION_PEQ1_DETECTION:
|
|
case DETECTION_PEQ2_DETECTION:
|
|
{
|
|
mAlarmRankSpinBox->setValue(1);
|
|
mAlarmRankSpinBox->setMinimum(1);
|
|
mAlarmRankSpinBox->setMaximum(1);
|
|
mRankDescription->setPlainText("N/A");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CMaintenancePage::ActivationBtnToggled(CToggleButtonWidget *Btn)
|
|
{
|
|
|
|
if(Btn->GetButtonState() == TOGGLE_BUTTON_ON)
|
|
{
|
|
if(mProgramHandle->EnterMaintenanceModeRequest() == true)
|
|
{
|
|
ShowMaintenanceItems();
|
|
mMaintenanceModeAutoExitTimer->start(MAINTENANCE_AUTO_EXIT_TIMEOUT);
|
|
CZTLog::instance()->AddLogString("-----------------------------------------------",true);
|
|
CZTLog::instance()->AddLogString("Mode entretien activé: Zone Tests hors service",true);
|
|
}
|
|
else
|
|
{
|
|
QString str = "Le mode entretien ne peut être activé si:\n- ZT1 ou ZT2 sont activées\n- Un train est sur le CDV d'approche (ZT1 ou ZT2)\n- Des TK sont en cours d'émission\n- La calibration PG est activée";
|
|
QMessageBox::information(0,"Mode Entretien non disponible",str);
|
|
Btn->SetButtonState(TOGGLE_BUTTON_OFF);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mProgramHandle->ExitMaintenanceModeRequest();
|
|
HideMaintenanceItems();
|
|
mZT1PPEStatus->SetOFF();
|
|
mZT1PPIStatus->SetOFF();
|
|
mZT2PPEStatus->SetOFF();
|
|
mZT2PPIStatus->SetOFF();
|
|
mMaintenanceModeAutoExitTimer->stop();
|
|
CZTLog::instance()->AddLogString("Mode entretien désactivé: Zone Tests en service.",true);
|
|
CZTLog::instance()->AddLogString("-------------------------------------------------",true);
|
|
}
|
|
}
|
|
|
|
void CMaintenancePage::WatchdogEnableBtnToggled(CToggleButtonWidget *Btn)
|
|
{
|
|
if(Btn->GetButtonState() == TOGGLE_BUTTON_ON)
|
|
{
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Vigie réactivée.",true);
|
|
mProgramHandle->SetWatchdogEnabled(true);
|
|
}
|
|
else
|
|
{
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Vigie désactivée.",true);
|
|
mProgramHandle->SetWatchdogEnabled(false);
|
|
}
|
|
}
|
|
|
|
void CMaintenancePage::ShowMaintenanceItems()
|
|
{
|
|
mGenerateAlarmBtn->show();
|
|
mAlarmTypeList->show();
|
|
mAlarmRankSpinBox->show();
|
|
mAlarmDescription->show();
|
|
mRankDescription->show();
|
|
mFctDescription->show();
|
|
|
|
mPPIZT1Description->show();
|
|
mPPEZT1Description->show();
|
|
mZT1PPEStatus->show();
|
|
mZT1PPIStatus->show();
|
|
if(mProgramHandle->IsZT2PresentInStation())
|
|
{
|
|
mPPIZT2Description->show();
|
|
mPPEZT2Description->show();
|
|
mZT2PPEStatus->show();
|
|
mZT2PPIStatus->show();
|
|
}
|
|
mPPTitle->show();
|
|
mWatchdogDisableDescription->show();
|
|
|
|
mAlarmsFrame->show();
|
|
mPPFrame->show();
|
|
|
|
mWatchdogEnableBtn->SetButtonState(TOGGLE_BUTTON_ON);
|
|
mWatchdogEnableBtn->show();
|
|
|
|
mCancelButton->hide();
|
|
}
|
|
|
|
void CMaintenancePage::HideMaintenanceItems()
|
|
{
|
|
|
|
mGenerateAlarmBtn->hide();
|
|
mClearAlarmButton->hide();
|
|
mAlarmTypeList->hide();
|
|
mAlarmRankSpinBox->hide();
|
|
mAlarmDescription->hide();
|
|
mRankDescription->hide();
|
|
mFctDescription->hide();
|
|
|
|
mPPIZT1Description->hide();
|
|
mPPEZT1Description->hide();
|
|
mPPIZT2Description->hide();
|
|
mPPEZT2Description->hide();
|
|
mZT1PPEStatus->hide();
|
|
mZT1PPIStatus->hide();
|
|
mZT2PPEStatus->hide();
|
|
mZT2PPIStatus->hide();
|
|
mPPTitle->hide();
|
|
mWatchdogDisableDescription->hide();
|
|
|
|
mAlarmsFrame->hide();
|
|
mPPFrame->hide();
|
|
|
|
mWatchdogEnableBtn->hide();
|
|
|
|
mCancelButton->show();
|
|
|
|
}
|
|
|
|
void CMaintenancePage::GenerateTK()
|
|
{
|
|
int AlarmID = mAlarmTypeList->currentIndex();
|
|
if(AlarmID < 0 || AlarmID >= DETECTION_MAX_DETECTION_ID)
|
|
return;
|
|
int Rank = mAlarmRankSpinBox->value();
|
|
|
|
mProgramHandle->SendTKToPCC(AlarmID,Rank);
|
|
|
|
CZTLog::instance()->AddLogString(QString().sprintf("[Mode entretien] Émission manuelle d'une alarme au PCC: %s au rang %d",CZTData::GetErrorString(AlarmID),Rank),true);
|
|
}
|
|
|
|
void CMaintenancePage::TKOutputChanged(bool ZT1Active, bool ZT2Active)
|
|
{
|
|
if(ZT1Active || ZT2Active)
|
|
{
|
|
mClearAlarmButton->show();
|
|
}
|
|
else
|
|
{
|
|
mClearAlarmButton->hide();
|
|
}
|
|
}
|
|
|
|
void CMaintenancePage::PPActivated(unsigned int PedalID)
|
|
{
|
|
switch(PedalID)
|
|
{
|
|
case MAINTENANCE_PPI_ZT1_ID:
|
|
{
|
|
mZT1PPIStatus->SetON();
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Pneu porteur intérieur ZT1 détecté. TK envoyée au PCC",true);
|
|
break;
|
|
}
|
|
case MAINTENANCE_PPE_ZT1_ID:
|
|
{
|
|
mZT1PPEStatus->SetON();
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Pneu porteur extérieur ZT1 détecté. TK envoyée au PCC",true);
|
|
break;
|
|
}
|
|
case MAINTENANCE_PPI_ZT2_ID:
|
|
{
|
|
mZT2PPIStatus->SetON();
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Pneu porteur intérieur ZT2 détecté. TK envoyée au PCC",true);
|
|
break;
|
|
}
|
|
case MAINTENANCE_PPE_ZT2_ID:
|
|
{
|
|
mZT2PPEStatus->SetON();
|
|
CZTLog::instance()->AddLogString("[Mode entretien] Pneu porteur extérieur ZT2 détecté. TK envoyée au PCC",true);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CMaintenancePage::AutoExit()
|
|
{
|
|
mMaintenanceActivationBtn->SetButtonState(TOGGLE_BUTTON_OFF);
|
|
mProgramHandle->ExitMaintenanceModeRequest();
|
|
HideMaintenanceItems();
|
|
mZT1PPEStatus->SetOFF();
|
|
mZT1PPIStatus->SetOFF();
|
|
mZT2PPEStatus->SetOFF();
|
|
mZT2PPIStatus->SetOFF();
|
|
CZTLog::instance()->AddLogString("Désactivation automatique du mode entretien: Zone Tests en service.",true);
|
|
}
|
|
|
|
//Grab the mouse if the user clicks outside buttons
|
|
void CMaintenancePage::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|
{
|
|
Q_UNUSED(event)
|
|
}
|
|
void CMaintenancePage::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|
{
|
|
Q_UNUSED(event)
|
|
}
|