158 lines
4.4 KiB
C++
158 lines
4.4 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Société de Transports de Montréal. *
|
|
* 2012 *
|
|
* *
|
|
* Projet Zones Tests *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
Élément graphique qui affiche un CDV d'aiguillage. L'affichage change en fonction de l'état
|
|
du CDV (libre, occupé, itinéraire commandé) et de sa position (droite, renversée)
|
|
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
/* Revision:
|
|
### 20130524 JFM
|
|
Verision d'origine.
|
|
|
|
### YYYYMMDD Description du besoin ou du bug
|
|
Description du changement.
|
|
*/
|
|
|
|
/* ************************************************************************** */
|
|
|
|
#include "SwitchCDVItem.h"
|
|
#include <QPainter>
|
|
#include "ZTData.h"
|
|
#include <QGraphicsSceneMouseEvent>
|
|
#include "CDV.h"
|
|
#include "SwitchCDV.h"
|
|
|
|
CSwitchCDVItem::CSwitchCDVItem(CCDV *CDVPtr,QGraphicsItem *Parent)
|
|
:CCDVItem(CDVPtr,Parent)
|
|
{
|
|
mSwitchCDV = (CSwitchCDV*)CDVPtr;
|
|
mSwitchPosition = mSwitchCDV->GetSwitchState();
|
|
|
|
mNormalCDVRect = rect();
|
|
mNormalPainterPath.addRect(rect());
|
|
|
|
|
|
|
|
|
|
qreal nibble = rect().width()*0.25;
|
|
|
|
int shim = 3;
|
|
int WaysSpascing = rect().height() + 10;
|
|
mReversedPainterPath.moveTo(0,pos().y()+WaysSpascing);
|
|
mReversedPainterPath.lineTo(nibble-shim,pos().y()+WaysSpascing); // --
|
|
mReversedPainterPath.lineTo(rect().width()-nibble-shim,0); // /
|
|
mReversedPainterPath.lineTo(rect().width(),0); // --
|
|
mReversedPainterPath.lineTo(rect().width(),rect().height()); // |
|
|
mReversedPainterPath.lineTo(rect().width()-nibble+shim,rect().height()); // __
|
|
mReversedPainterPath.lineTo(nibble+shim,pos().y()+WaysSpascing+rect().height()); // /
|
|
mReversedPainterPath.lineTo(0,pos().y()+WaysSpascing+rect().height()); // __
|
|
mReversedPainterPath.lineTo(0,pos().y()+WaysSpascing); // |
|
|
|
|
|
|
this->setGeometry(0,0,90,70); //Change geometry so we can draw the reversed switch
|
|
|
|
|
|
|
|
}
|
|
|
|
void CSwitchCDVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
|
{
|
|
Q_UNUSED(option)
|
|
Q_UNUSED(widget)
|
|
|
|
|
|
painter->setBrush(*mCurBrush);
|
|
painter->setPen(Qt::black);
|
|
//painter->drawRect(CDVRect);
|
|
|
|
if(mSwitchPosition == SWITCH_CDV_NORMAL_POSITION)
|
|
{
|
|
painter->drawPath(mNormalPainterPath);
|
|
}
|
|
else
|
|
{
|
|
painter->drawPath(mReversedPainterPath);
|
|
}
|
|
|
|
// QRectF textRect(CDVRect.adjusted(-3,-3,-3,-3));
|
|
// painter->drawRect(textRect);
|
|
|
|
int flags = Qt::AlignHCenter | Qt::AlignVCenter/* | Qt::TextWordWrap*/;
|
|
|
|
QFont font;
|
|
// font.setPointSizeF(9.5);
|
|
font.setPixelSize(13);
|
|
painter->setPen(Qt::black);
|
|
painter->setFont(font);
|
|
painter->drawText(mNormalCDVRect, flags, mCDVLabel);
|
|
|
|
}
|
|
|
|
unsigned int CSwitchCDVItem::SetState(unsigned int State)
|
|
{
|
|
if(State >= CDV_STATE_UNKNOWN)
|
|
return RET_ERROR;
|
|
if(mCDVState == State)
|
|
return RET_OK;
|
|
|
|
mCDVState = State;
|
|
switch(State)
|
|
{
|
|
case CDV_STATE_OCCUPIED:
|
|
{
|
|
mCurBrush = mCDVOccupiedBrush;
|
|
break;
|
|
}
|
|
case CDV_STATE_FREE:
|
|
{
|
|
mCurBrush = mCDVFreeBrush;
|
|
break;
|
|
}
|
|
case CDV_STATE_ITI_CMD:
|
|
{
|
|
mCurBrush = mCDVITICommandedBrush;
|
|
break;
|
|
}
|
|
}
|
|
|
|
mSwitchPosition = mSwitchCDV->GetSwitchState();
|
|
|
|
|
|
update(rect());
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
//void CSwitchCDVItem::resizeEvent()
|
|
//{
|
|
//// mNormalPainterPath = QPainterPath();
|
|
//// mNormalPainterPath.addRect(rect());
|
|
//// mReversedPainterPath = QPainterPath();
|
|
//// mReversedPainterPath.addRect(rect());
|
|
//}
|
|
|
|
//void CSwitchCDVItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|
//{
|
|
// if(event->button() == Qt::LeftButton)
|
|
// {
|
|
// emit CDVRightClicked(this);
|
|
// }
|
|
//}
|
|
|
|
//void CSwitchCDVItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|
//{
|
|
// Q_UNUSED(event)
|
|
//}
|
|
|