128 lines
3.6 KiB
C++
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();
|
|
}
|