1 /***************************************************************************
2 * KT list view item task implementation. *
3 * -------------------------------------------------------------------- *
4 * Copyright (C) 1999, Gary Meyer <gary@meyer.net> *
5 * -------------------------------------------------------------------- *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 ***************************************************************************/
12 #include "chartWidget.h"
14 #include <QVBoxLayout>
15 #include <QLinearGradient>
25 Chart::Chart(QWidget
* parent
) :
28 setSizePolicy(QSizePolicy::Minimum
, QSizePolicy::MinimumExpanding
);
31 freeMemoryLabel
= NULL
;
35 void Chart::setMemoryInfos(t_memsize
* memoryInfos
) {
36 this->memoryInfos
= memoryInfos
;
39 void Chart::setFreeMemoryLabel(QLabel
* freeMemoryLabel
) {
40 this->freeMemoryLabel
= freeMemoryLabel
;
44 /* Graphical Memory Display */
45 bool Chart::drawChart(t_memsize total
, const QList
<t_memsize
>& used
, const QList
<QColor
>& colors
, const QList
<QString
>& texts
) {
49 QPen
pen(QColor(0, 0, 0));
52 if (total
== NO_MEMORY_INFO
) {
53 paint
.fillRect(1, 1, width() - 2, height() - 2, QBrush(QColor(128, 128, 128)));
55 paint
.drawRect(rect());
56 freeMemoryLabel
->setText(i18n("Not available."));
61 int startline
= height()-2;
63 int percent
, localheight
;
64 t_memsize last_used
= 0;
66 for (int count
= used
.size()-1; count
>=0; --count
) {
67 last_used
= used
.at(count
);
68 QColor color
= colors
.at(count
);
69 QString text
= texts
.at(count
);
71 percent
= (((qint64
)last_used
) * 100) / total
;
74 localheight
= ((height()-2) * percent
) / 100;
76 localheight
= startline
;
78 //kDebug() << "Count : " << count << " Percent : " << percent << "%" << " Localheight:" << localheight << endl;
81 QLinearGradient
gradient(QPointF(1, startline
), QPointF(width()-2, -localheight
));
83 QColor
endProgressColor(0xFF, 0xFF, 0xFF, 100);
84 gradient
.setColorAt(0, color
);
85 gradient
.setColorAt(1, endProgressColor
);
86 paint
.fillRect(1, startline
, width()-2, -localheight
, gradient
);
88 //paint.fillRect(1, startline, width()-2, -localheight, color);
90 if (localheight
>= SPACING
) {
91 paint
.drawText(0, startline
-localheight
, width(), localheight
, Qt::AlignCenter
| Qt::TextWordWrap
, QString("%1 %2%").arg(text
).arg(percent
));
95 startline
-= localheight
;
99 // draw surrounding box
101 qDrawShadePanel(&paint
, r
.x(), r
.y(), r
.width(), r
.height(), palette(), true, 1);
103 freeMemoryLabel
->setText(i18n("%1 free", formattedUnit(last_used
)));
110 QString
Chart::formattedUnit(t_memsize value
) {
111 if (value
> (1024 * 1024))
112 if (value
> (1024 * 1024 * 1024))
113 return i18n("%1 GiB", KGlobal::locale()->formatNumber(value
/ (1024 * 1024 * 1024.0), 2));
115 return i18n("%1 MiB", KGlobal::locale()->formatNumber(value
/ (1024 * 1024.0), 2));
117 return i18n("%1 KiB", KGlobal::locale()->formatNumber(value
/ 1024.0, 2));
120 ChartWidget::ChartWidget(const QString
& title
, const QString
& hint
, Chart
* chartImplementation
, QWidget
* parent
) :
123 QVBoxLayout
* mainLayout
= new QVBoxLayout(this);
125 titleLabel
= new QLabel("<strong>" + title
+ "</strong>", this);
126 titleLabel
->setAlignment(Qt::AlignHCenter
);
127 titleLabel
->setToolTip(hint
);
128 mainLayout
->addWidget(titleLabel
);
130 chart
= chartImplementation
;
131 chart
->setToolTip(hint
);
132 mainLayout
->addWidget(chart
);
134 freeMemoryLabel
= new QLabel("", this);
135 freeMemoryLabel
->setAlignment(Qt::AlignHCenter
);
136 freeMemoryLabel
->setToolTip(hint
);
137 mainLayout
->addWidget(freeMemoryLabel
);
139 chart
->setFreeMemoryLabel(freeMemoryLabel
);
142 void ChartWidget::setMemoryInfos(t_memsize
* memoryInfos
) {
143 chart
->setMemoryInfos(memoryInfos
);
146 void ChartWidget::refresh() {
147 //The update() method will launch paintEvent() automatically