OutilZT/sources/GuiElements/EventsRulerWidget.cpp
2017-07-20 11:11:06 -04:00

128 lines
3.6 KiB
C++

/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Dessine une règle temporelle sur laquelle sont affichés les déclenchements.
Une ligne rouge est dessinée au temps correspondant au déclenchement et du
texte identifiant le type de déclenchement est aussi affiché.
Utilisée dans la page de visualisation des passages de train.
CETTE CLASSE DEVRAIT ÊTRE OPTIMISÉE.
*/
/* ************************************************************************** */
/* Revision:
### YYYMMDD JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "EventsRulerWidget.h"
#include <QPainter>
#include <QTextStream>
CEventRulerWidget::CEventRulerWidget(qreal RulerPixelWidth, QGraphicsItem *Parent)
{
setParentItem(Parent);
mPixelWidth = RulerPixelWidth;
mLabel = new QGraphicsTextItem(this);
}
void CEventRulerWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
if(mEventItems.isEmpty())
return;
QFont font;
font.setPixelSize(12);
painter->setFont(font);
qreal pitch = mPixelWidth/(mEndTime - mStartTime); //pixel/ns
QPen LinePen,TextPen;
LinePen.setColor(Qt::red);
LinePen.setWidth(2);
TextPen.setColor(Qt::black);
TextPen.setWidth(1);
qreal Height = boundingRect().height();
for(int i = 0; i < mEventItems.size(); i++)
{
if(mEventItems.at(i).mEventTime >= mStartTime)
{
if(mEventItems.at(i).mEventTime <= mEndTime)
{
qreal PixelPos = (mEventItems.at(i).mEventTime - mStartTime)*pitch;
painter->setPen(LinePen);
painter->drawLine(PixelPos,0,PixelPos,Height);
painter->setPen(TextPen);
painter->drawText(QRectF(PixelPos+3,0,50,Height),mEventItems.at(i).mLabel,Qt::AlignLeft | Qt::AlignVCenter);
}
else
{
return;
}
}
}
}
unsigned int CEventRulerWidget::SetRange(quint64 StartTime, quint64 EndTime)
{
if(StartTime > EndTime)
return false;
if(mEventItems.isEmpty())
return false;
mStartTime = StartTime;
mEndTime = EndTime;
update();
return RET_OK;
}
unsigned int CEventRulerWidget::AddEventItem(QString Rank, quint64 EventTime)
{
CEventRulerWidgetItem NewItem;
NewItem.mLabel = Rank;
NewItem.mEventTime = EventTime;
mEventItems.append(NewItem);
return RET_OK;
}
void CEventRulerWidget::SetLabel(QString Label, int Offset)
{
QFont font;
font.setBold(true);
mLabel->setFont(font);
mLabel->setPlainText(Label);
mLabel->setPos(-Offset,boundingRect().height()/2 - mLabel->boundingRect().height()/2);
}
void CEventRulerWidget::ClearRuler()
{
mEventItems.clear();
update();
}