ZT/sources/GuiElements/StatusBar.cpp
2017-07-14 07:14:20 -04:00

296 lines
7.8 KiB
C++

/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Affiche une barre d'informations.
Utilisé sur la page principale de la ZT.
*/
/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "StatusBar.h"
#include <QPainter>
#include <QStyleOptionGraphicsItem>
CStatusBar::CStatusBar(QGraphicsItem *Parent):
mCCModbusONOFF("",this),
mSEIModbusONOFF("",this)
{
setParentItem(Parent);
resize(SCREEN_RES_WIDTH,25);
mZT1StatusString = "INACTIVE";
mZT2StatusString = "INACTIVE";
mNbTrainsPass = 10;
mNbTriggers = 2;
mZT1Status = mZT2Status = SB_ZT_INACTIVE_STATUS;
mCCModbusState = SB_MODBUS_NOT_PRESENT;
mSEIModbusState = SB_MODBUS_NOT_PRESENT;
mCCModbusONOFF.setParentItem(this);
mCCModbusONOFF.setPos(760,0);
mCCModbusONOFF.LedOFF();
mCCModbusONOFF.hide();
mSEIModbusONOFF.setParentItem(this);
mSEIModbusONOFF.setPos(845,0);
mSEIModbusONOFF.LedOFF();
mSEIModbusONOFF.hide();
// QGraphicsRectItem *temprect = new QGraphicsRectItem(this);
// temprect->setRect(boundingRect());
// temprect->show();
}
void CStatusBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget)
painter->setClipRect(option->exposedRect);
QPen RectPen(Qt::SolidLine);
RectPen.setWidth(2);
painter->setPen(RectPen);
painter->drawLine(boundingRect().topLeft(),boundingRect().topRight());
QFont font;
QString Text;
QRectF TextRect = boundingRect();
QFontMetrics FontMetrics = painter->fontMetrics();
//font.setPixelSize(1);
font.setPointSize(15);
painter->setFont(font);
painter->setPen(Qt::black);
Text = "ZT1: ";
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
switch(mZT1Status)
{
case SB_ZT_ACTIVE_STATUS:
{
Text = "ACTIVE";
painter->setPen(Qt::red);
break;
}
case SB_ZT_INACTIVE_STATUS:
{
Text = "INACTIVE";
painter->setPen(Qt::darkGreen);
break;
}
case SB_ZT_NOT_PRESENT_STATUS:
{
Text = "ABSENTE";
painter->setPen(Qt::black);
break;
}
case SB_ZT_DISABLED_STATUS:
{
Text = "HORS SERVICE";
painter->setPen(Qt::darkYellow);
break;
}
}
font.setBold(true);
painter->drawText(TextRect,Qt::AlignLeft,Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
painter->setPen(Qt::black);
Text = "ZT2: ";
TextRect.adjust(20,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
switch(mZT2Status)
{
case SB_ZT_ACTIVE_STATUS:
{
Text = "ACTIVE";
painter->setPen(Qt::red);
break;
}
case SB_ZT_INACTIVE_STATUS:
{
Text = "INACTIVE";
painter->setPen(Qt::darkGreen);
break;
}
case SB_ZT_NOT_PRESENT_STATUS:
{
Text = "ABSENTE";
painter->setPen(Qt::black);
break;
}
case SB_ZT_DISABLED_STATUS:
{
Text = "HORS SERVICE";
painter->setPen(Qt::darkYellow);
break;
}
}
font.setBold(true);
painter->drawText(TextRect,Qt::AlignLeft,Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
painter->setPen(Qt::black);
Text.clear();
Text.sprintf("Passages:%d",mNbTrainsPass);
TextRect.adjust(20,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
Text.clear();
Text.sprintf("Déclenchements:%d",mNbTriggers);
TextRect.adjust(20,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
if(mCCModbusState != SB_MODBUS_NOT_PRESENT || mSEIModbusState != SB_MODBUS_NOT_PRESENT)
{
painter->setPen(Qt::black);
Text.clear();
Text.sprintf("Modbus:");
TextRect.adjust(20,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
if(mCCModbusState == SB_MODBUS_CONNECTED)
{
painter->setPen(Qt::darkGreen);
Text.clear();
Text.sprintf("CC:");
TextRect.adjust(5,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
}
else if(mCCModbusState == SB_MODBUS_DISCONNECTED)
{
painter->setPen(Qt::red);
Text.clear();
Text.sprintf("CC:");
TextRect.adjust(5,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
}
if(mSEIModbusState == SB_MODBUS_CONNECTED)
{
painter->setPen(Qt::darkGreen);
Text.clear();
Text.sprintf("SEI:");
TextRect.adjust(50,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
}
else if(mSEIModbusState == SB_MODBUS_DISCONNECTED)
{
painter->setPen(Qt::red);
Text.clear();
Text.sprintf("SEI:");
TextRect.adjust(50,0,0,0);
painter->drawText(TextRect, Qt::AlignLeft, Text);
TextRect.adjust(painter->fontMetrics().width(Text),0,0,0);
}
}
}
unsigned int CStatusBar::SetNbPass(unsigned int Value)
{
mNbTrainsPass = Value;
update(boundingRect());
return RET_OK;
}
unsigned int CStatusBar::SetNbTriggers(unsigned int Value)
{
mNbTriggers = Value;
update(boundingRect());
return RET_OK;
}
unsigned int CStatusBar::SetZT1Status(unsigned int Status)
{
mZT1Status = Status;
update(boundingRect());
return RET_OK;
}
unsigned int CStatusBar::SetZT2Status(unsigned int Status)
{
mZT2Status = Status;
update(boundingRect());
return RET_OK;
}
unsigned int CStatusBar::SetCCModbusState(unsigned int State)
{
mCCModbusState = State;
if(State == SB_MODBUS_CONNECTED)
{
mCCModbusONOFF.LedON();
mCCModbusONOFF.show();
}
else if(State == SB_MODBUS_DISCONNECTED)
{
mCCModbusONOFF.LedOFF();
mCCModbusONOFF.show();
}
else if(State == SB_MODBUS_NOT_PRESENT)
{
mCCModbusONOFF.hide();
}
update(boundingRect());
return RET_OK;
}
unsigned int CStatusBar::SetSEIModbusState(unsigned int State)
{
mSEIModbusState = State;
if(State == SB_MODBUS_CONNECTED)
{
mSEIModbusONOFF.LedON();
mSEIModbusONOFF.show();
}
else if(State == SB_MODBUS_DISCONNECTED)
{
mSEIModbusONOFF.LedOFF();
mSEIModbusONOFF.show();
}
else if(State == SB_MODBUS_NOT_PRESENT)
{
mSEIModbusONOFF.hide();
}
update(boundingRect());
return RET_OK;
}