diff options
Diffstat (limited to 'graphbarwidget.cpp')
-rw-r--r-- | graphbarwidget.cpp | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/graphbarwidget.cpp b/graphbarwidget.cpp deleted file mode 100644 index c6f9b0e..0000000 --- a/graphbarwidget.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version - 2 of the License, or (at your option) any later version. -*/ - -#include <QFontMetrics> -#include <QPainter> - -#include "graphbarwidget.h" - -GraphBarWidget::GraphBarWidget(const QList<QList<QVariant> > data, QWidget *parent) : QWidget(parent), mMargin(10), mData(data) { - mBarHeight = fontMetrics().height(); -} - -int GraphBarWidget::maxValue() const { - int retval = -1; - foreach(QList<QVariant> l, mData){ - if(l.at(1).toInt() > retval){ - retval = l.at(1).toInt(); - } - } - return retval; -} - -QSize GraphBarWidget::maxDescr() const { - QFont f = font(); - f.setBold(true); - QFontMetrics fm(f); - QSize retval(0,0); - foreach(QList<QVariant> l, mData){ - QString descr = l.at(0).toString(); - QSize curSize = fm.size(Qt::TextSingleLine, descr); - if(curSize.width() > retval.width()){ - retval = curSize; - } - } - return retval; -} - -QSize GraphBarWidget::maxCount() const { - QFontMetrics fm = fontMetrics(); - QSize retval(0,0); - foreach(QList<QVariant> l, mData){ - QString curCount = QString("(%1)").arg(l.at(2).toString()); - QSize curSize = fm.size(Qt::TextSingleLine, curCount); - if(curSize.width() > retval.width()){ - retval = curSize; - } - } - return retval; -} - -QSize GraphBarWidget::sizeHint() const { - int height = mData.count() * mBarHeight; - height += mData.count() * mMargin; - height += mBarHeight + mMargin; - return QSize(400, height); -} - -void GraphBarWidget::paintEvent(QPaintEvent *){ - QPainter p(this); - QHash<QString, qreal> length; //int - QList<QList<QVariant> >::const_iterator it; - - //draw background - QPen pen(Qt::red, 2); - p.setPen(pen); - QLinearGradient bgGradient(QPointF(0.0, height() / 2), QPointF(width(), height() / 2)); - bgGradient.setColorAt(0, QColor(221, 107, 80)); - bgGradient.setColorAt(1, QColor(251, 179, 150)); - QBrush brush(bgGradient); - p.setBrush(brush); - p.drawRect(contentsRect()); - - //draw caption - QFont f = font(); - f.setUnderline(true); - f.setBold(true); - p.setFont(f); - QString cap(caption()); - QFontMetrics fm(f); - int captionStartx = (width() - fm.width(cap)) / 2; - int captionStarty = fm.height(); - p.drawText(captionStartx, captionStarty, cap); - - //prepare drawing data - int barsStarty = fm.height() + 2 * mMargin + 10; - f.setUnderline(false); - f.setBold(true); - p.setFont(f); - int maxdescr = maxDescr().width(); - int maxcount = maxCount().width(); - - int barsStartx = maxdescr + 2 * mMargin; - int marginRight = maxcount + 2 * mMargin; - int maxWidth = width() - barsStartx - marginRight; - p.setRenderHints(QPainter::Antialiasing); - p.setPen(QPen(Qt::red, 1)); - - //calculate real lengths based on widget width - for(it = mData.constBegin(); it != mData.constEnd(); ++it){ - qreal value = it->at(1).toDouble(); - value = value / maxValue() * maxWidth; - length[it->at(0).toString()] = value; - } - - //draw the bars and numbers - int ctr(0); - for(QList<QList<QVariant> >::const_iterator itr = mData.constBegin(); itr != mData.constEnd() ; ++itr, ++ctr){ - int starty = barsStarty + ctr * p.fontMetrics().height() + ctr * mMargin; - p.drawText(mMargin, starty, itr->at(0).toString()); - QLinearGradient barGradient(QPointF(barsStartx, starty), QPointF(width(), starty)); - barGradient.setColorAt(0, QColor(0, 128, 170)); - barGradient.setColorAt(1, QColor(131, 205, 214)); - QBrush b(barGradient); - p.setBrush(b); - qreal len = length.value(itr->at(0).toString()); - QRect bar(barsStartx, starty - p.fontMetrics().height() + p.fontMetrics().descent(), len, p.fontMetrics().height()); - p.drawRect(bar); - int nStartx = barsStartx + len + mMargin; - p.drawText(nStartx, starty, QString(tr("(%1)")).arg(itr->at(2).toString())); - } -} |