ZT/sources/GuiElements/StatusBar.cpp

253 lines
6.9 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)
{
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;
// 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[Connecté]");
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[Déconnecté]");
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[Connecté]");
TextRect.adjust(20,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[Déconnecté]");
TextRect.adjust(20,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;
update(boundingRect());
return RET_OK;
}
unsigned int CStatusBar::SetSEIModbusState(unsigned int State)
{
mSEIModbusState = State;
update(boundingRect());
return RET_OK;
}