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

229 lines
5.5 KiB
C++

/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2013 *
* *
* Projet Zones Tests *
* *
* *
* *
*******************************************************************************/
/*
Description:
Élément graphique qui affiche une règle de graduation temporelle dans le bas
de la zone d'affichage.
Utilisée dans la page de visualisation des passages de train.
*/
/* ************************************************************************** */
/* Revision:
### 20131024 JFM
Verision d'origine.
### YYYYMMDD Description du besoin ou du bug
Description du changement.
*/
/* ************************************************************************** */
#include "GraphRulerWidget.h"
#include <QPainter>
#include <QTextStream>
#include <QStyleOptionGraphicsItem>
CGraphRulerWidget::CGraphRulerWidget(qreal RulerPixelWidth, QGraphicsItem *Parent)
{
setParentItem(Parent);
mPixelWidth = RulerPixelWidth;
mPixelPitch = RulerPixelWidth/RULER_NB_TICKS;
mRulerPixmap = new QPixmap(RulerPixelWidth,boundingRect().height()+1);
mValidRange = false;
}
CGraphRulerWidget::~CGraphRulerWidget()
{
delete mRulerPixmap;
}
void CGraphRulerWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
if(mValidRange == false)
return;
painter->setClipRect(option->exposedRect);
painter->drawPixmap(0,0,*mRulerPixmap);
// static int toto = 0;
// qDebug("CGraphRulerWidget::paint %d",toto++);
// qreal x = 0;
// QRectF TextRect(0,0,100,10);
// QString TimeText;
// qreal tick = (mEndTime - mStartTime)/mPixelWidth;
// QFont font;
// font.setPixelSize(12);
// painter->setFont(font);
// for(int i = 0; i <= RULER_NB_TICKS; i++)
// {
// QLine line;
// if(i%20 == 0)
// {
// TimeText.clear();
// line.setLine(x,0,x,10); //long line
// TextRect.moveCenter(QPoint(x,15));
// qreal time = (x*tick) + mStartTime;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " ns";
// }
// else
// {
// time /= 1000;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " us";
// }
// else
// {
// time /= 1000;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " ms";
// }
// else
// {
// time /= 1000;
// if(time < 1000)
// {
// QTextStream(&TimeText) << time << " s";
// }
// }
// }
// }
// painter->drawText(TextRect,Qt::AlignCenter,TimeText);
// }
// else
// {
// line.setLine(x,0,x,5);
// }
// painter->drawLine(line);
// x += mPixelPitch;
// }
}
unsigned int CGraphRulerWidget::SetRange(quint64 StartTime, quint64 EndTime)
{
if(StartTime > EndTime)
return false;
mStartTime = StartTime;
mEndTime = EndTime;
mValidRange = true;
Render();
update();
return RET_OK;
}
void CGraphRulerWidget::Render()
{
qreal x = 0;
QRectF TextRect(0,0,100,10);
QString TimeText;
qreal tick = (mEndTime - mStartTime)/mPixelWidth;
QFont font;
mRulerPixmap->fill(Qt::white);
QPainter *painter = new QPainter(mRulerPixmap);
font.setPixelSize(12);
painter->setFont(font);
for(int i = 0; i <= RULER_NB_TICKS; i++)
{
QLine line;
if(i%20 == 0)
{
TimeText.clear();
line.setLine(x,0,x,10); //long line
TextRect.moveCenter(QPoint(x,15));
if(i == 0)
TextRect.moveLeft(x);
else if(i == RULER_NB_TICKS)
TextRect.moveRight(x);
qreal time = (x*tick) + mStartTime;
if(time < 1000)
{
QTextStream(&TimeText) << time << " ns";
}
else
{
time /= 1000;
if(time < 1000)
{
QTextStream(&TimeText) << time << " us";
}
else
{
time /= 1000;
if(time < 1000)
{
QTextStream(&TimeText) << time << " ms";
}
else
{
time /= 1000;
if(time < 1000)
{
QTextStream(&TimeText) << time << " s";
}
}
}
}
if(i == 0)
painter->drawText(TextRect,Qt::AlignLeft | Qt::AlignVCenter,TimeText);
else if(i == RULER_NB_TICKS)
painter->drawText(TextRect,Qt::AlignRight | Qt::AlignVCenter,TimeText);
else
painter->drawText(TextRect,Qt::AlignCenter,TimeText);
}
else
{
line.setLine(x,0,x,5);
}
painter->drawLine(line);
x += mPixelPitch;
}
delete painter;
}
void CGraphRulerWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
{
Q_UNUSED(event)
delete mRulerPixmap;
mRulerPixmap = new QPixmap(mPixelWidth,boundingRect().height()+1);
}