26 #include "../../../core/transferhandler.h"
28 #include <QVBoxLayout>
29 #include <QGraphicsLinearLayout>
30 #include <QGraphicsLayoutItem>
31 #include <QGraphicsWidget>
33 #include <QHBoxLayout>
34 #include <QGraphicsProxyWidget>
35 #include <QStyleOptionGraphicsItem>
37 #include <QPushButton>
38 #include <QProgressBar>
45 #include <plasma/svg.h>
46 #include <plasma/applet.h>
47 #include <plasma/theme.h>
48 #include <plasma/dataengine.h>
49 #include <Plasma/Label>
50 #include <Plasma/ScrollWidget>
52 const float KGetPieChart::PieChart::PIE_OPACITY = 0.67f;
53 const float KGetPieChart::PieChart::ACTIVE_PIE_OPACITY = 0.84f;
58 m_totalSize(totalSize)
60 setMinimumSize(QSizeF(80, 80));
61 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
62 setCacheMode(QGraphicsItem::DeviceCoordinateCache);
64 m_totalPen.setWidth(1);
65 m_totalPen.setColor(Qt::darkGray);
66 m_totalPen.setStyle(Qt::SolidLine);
68 m_activePen.setWidth(1);
69 m_activePen.setColor(Qt::white);
70 m_activePen.setStyle(Qt::SolidLine);
89 QHash<OrgKdeKgetTransferInterface*, Data>::const_iterator it;
90 QHash<OrgKdeKgetTransferInterface*, Data>::const_iterator itEnd = m_data->constEnd();
91 int startAngle = 90 * 16;
92 for (it = m_data->constBegin(); it != itEnd; ++it) {
93 const int span = (-1 * ((it.value().size * 360 * 16) /
m_totalSize));
94 m_angles[it.key()] = qMakePair(startAngle, span);
105 kDebug() <<
"Repaint";
107 if (
m_totalSize && (m_angles.count() != m_data->count())) {
111 p->setRenderHint(QPainter::Antialiasing);
112 p->setRenderHint(QPainter::SmoothPixmapTransform);
113 p->setRenderHint(QPainter::TextAntialiasing);
115 int size = option->rect.height();
116 if (option->rect.width() < size) {
117 size = option->rect.width();
119 const QRect rect = QRect(option->rect.x() + option->rect.width() / 2 - size / 2,
124 QHash<OrgKdeKgetTransferInterface*, Data>::const_iterator it;
125 QHash<OrgKdeKgetTransferInterface*, Data>::const_iterator itEnd = m_data->constEnd();
126 for (it = m_data->constBegin(); it != itEnd; ++it) {
127 OrgKdeKgetTransferInterface *transfer = it.key();
128 const Data data = it.value();
129 QPair<int, int> angles = m_angles[transfer];
130 const QBrush brush(data.
color);
135 p->setPen(m_totalPen);
137 p->setPen(m_activePen);
140 p->setOpacity(PIE_OPACITY);
141 p->drawPie(rect, angles.first, angles.second);
143 p->setOpacity(ACTIVE_PIE_OPACITY);
147 p->drawPie(QRect(rect.x() + 15, rect.y() + 15, rect.width() - 30, rect.height() - 30), angles.first, angles.second);
154 m_colorLabel =
new Plasma::Label();
155 m_colorLabel->nativeWidget()->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
156 m_name =
new Plasma::Label();
157 m_name->nativeWidget()->setWordWrap(
false);
158 m_name->nativeWidget()->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred));
159 m_sizeLabel =
new Plasma::Label();
160 m_sizeLabel->nativeWidget()->setWordWrap(
false);
162 QGraphicsLinearLayout *layout =
new QGraphicsLinearLayout(Qt::Horizontal);
163 layout->addItem(m_colorLabel);
164 layout->addItem(m_name);
165 layout->addItem(m_sizeLabel);
176 m_sizeLabel->setText(KGlobal::locale()->formatByteSize(size));
181 m_name->setText(name);
186 QPixmap pixmap(10, 10);
187 pixmap.fill(QColor(color));
188 m_colorLabel->nativeWidget()->setPixmap(pixmap);
192 m_colors(
"Oxygen.colors"),
196 QGraphicsLinearLayout *layout =
new QGraphicsLinearLayout(Qt::Vertical,
this);
199 layout->insertItem(0, m_piechart);
200 m_scrollWidget =
new Plasma::ScrollWidget();
201 m_scrollWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
203 m_scrollWidget->setWidget(m_containerWidget);
204 m_containerLayout =
new QGraphicsLinearLayout(Qt::Vertical, m_containerWidget);
206 layout->addItem(m_scrollWidget);
217 foreach (OrgKdeKgetTransferInterface *transfer, transfers) {
218 if (m_items.contains(transfer)) {
222 connect(transfer, SIGNAL(transferChangedEvent(
int)),
this, SLOT(slotUpdateTransfer(
int)));
224 QString fileName = KUrl(transfer->dest().value()).fileName();
225 kDebug() << fileName;
228 data.
name = fileName;
230 data.
size = transfer->totalSize();
232 m_data[transfer] = data;
237 m_items[transfer] = item;
243 m_containerLayout->addItem(item);
245 m_containerLayout->insertItem(0, item);
255 QHash<OrgKdeKgetTransferInterface*, Item*>::iterator it;
256 QHash<OrgKdeKgetTransferInterface*, Item*>::iterator itEnd = m_items.end();
257 for (it = m_items.begin(); it != itEnd; ) {
258 OrgKdeKgetTransferInterface *transfer = it.key();
259 if (transfers.contains(transfer)) {
260 Item *item = it.value();
261 it = m_items.erase(it);
264 m_data.remove(transfer);
266 m_containerLayout->removeItem(item);
276 void KGetPieChart::Private::slotUpdateTransfer(
int transferChange)
278 OrgKdeKgetTransferInterface *transfer = qobject_cast<OrgKdeKgetTransferInterface*>(QObject::sender());
280 bool updatePieSize =
false;
281 bool updatePie =
false;
282 if (transfer && m_items.contains(transfer)) {
283 Item *item = m_items[transfer];
290 m_data[transfer].name = KUrl(transfer->dest().value()).fileName();
291 item->
setName(m_data[transfer].name);
295 KIO::filesize_t newSize = transfer->totalSize();
297 m_data[transfer].size = newSize;
299 item->
setSize(m_data[transfer].size);
301 updatePieSize =
true;
304 m_data[transfer].downloadedSize = transfer->downloadedSize();
311 }
else if (updatePie) {
312 m_piechart->update();
315 void KGetPieChart::Private::updateTransfers()
317 if (m_items.isEmpty()) {
321 int step = m_colors.count() / m_items.count();
328 QHash<OrgKdeKgetTransferInterface*, Item*>::const_iterator it;
329 QHash<OrgKdeKgetTransferInterface*, Item*>::const_iterator itEnd = m_items.constEnd();
330 for (it = m_items.constBegin(); it != itEnd; ++it) {
331 m_data[it.key()].color = m_colors.color(i * 6 + 4);
332 it.value()->setColor(m_data[it.key()].color);
354 connect(
this, SIGNAL(
transfersAdded(QList<OrgKdeKgetTransferInterface*>)), d, SLOT(addTransfers(QList<OrgKdeKgetTransferInterface*>)));
355 connect(
this, SIGNAL(
transfersRemoved(QList<OrgKdeKgetTransferInterface*>)), d, SLOT(removeTransfers(QList<OrgKdeKgetTransferInterface*>)));
360 #include "kgetpiechart.moc"
361 #include "kgetpiechart_p.moc"
void transfersAdded(const QList< OrgKdeKgetTransferInterface * > &transfers)
Item(QGraphicsWidget *parent=0)
The job is stopped, but this also indicates that it stopped because an error occurred.
void setName(const QString &name)
PieChart(QHash< OrgKdeKgetTransferInterface *, Data > *data, KIO::filesize_t totalSize, QGraphicsWidget *parent=0)
KGetPieChart(QObject *parent, const QVariantList &args)
KIO::filesize_t downloadedSize
void setTotalSize(KIO::filesize_t totalSize)
void setColor(const QColor &color)
void transfersRemoved(const QList< OrgKdeKgetTransferInterface * > &transfers)
void removeTransfers(const QList< OrgKdeKgetTransferInterface * > &transfers)
Private(QGraphicsWidget *parent=0)
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0)
void setDataWidget(QGraphicsWidget *widget)
void setSize(KIO::filesize_t size)
void addTransfers(const QList< OrgKdeKgetTransferInterface * > &transfers)
KIO::filesize_t m_totalSize