#include "chartarea.h" #include #include #include #include #include ChartArea::Widget::Widget(FacilityInterface * facilityEngine,QWidget *parent) : QWidget(parent) { this->facilityEngine=facilityEngine; setSizePolicy(QSizePolicy::Preferred,QSizePolicy::MinimumExpanding); setMinimumHeight(20); setMinimumWidth(100); } ChartArea::Widget::~Widget() { } void ChartArea::Widget::invalidate() { } void ChartArea::Widget::resizeEvent(QResizeEvent*) { } void ChartArea::Widget::addValue(uint64_t value) { m_values.push_back(value); while(m_values.size()>64) m_values.erase(m_values.begin()); update(); } void ChartArea::Widget::paintEvent(QPaintEvent*) { QPainter painter; painter.begin(this); painter.setBrush(QColor(160,160,160,30)); painter.drawRect(0,0,width()-1,height()-1); painter.setRenderHint(QPainter::Antialiasing,true); painter.setRenderHint(QPainter::SmoothPixmapTransform,true); painter.setRenderHint(QPainter::HighQualityAntialiasing,true); while(m_values.size()<64) m_values.insert(m_values.begin(),0); std::vector values=m_values; QVector points; { uint64_t max=0; unsigned int index=0; while(index250000) painter.setPen(QPen(QColor(160,240,160), 3)); else painter.setPen(QPen(QColor(160,240,160), 2)); painter.drawPolyline(QPolygonF(points)); // todo: bounding rect + center flag if(height()>30) { QFont font = painter.font(); int heightTemp=height()/5; if(heightTemp<14) heightTemp=14; font.setPixelSize(heightTemp); painter.setFont(font); painter.setPen(QPen(QColor(140,140,140), 3)); painter.drawText(0,0,width(),height(),Qt::AlignHCenter | Qt::AlignBottom, QString::fromStdString( facilityEngine->speedToString( m_values.back() ) ) ); } painter.end(); }