36
36
#include <Plasma/Meter>
37
37
#include <Plasma/PushButton>
39
static const int UPDATE_INTERVAL = 200;
39
41
JobWidget::JobWidget(SystemTray::Job *job, Plasma::ExtenderItem *parent)
40
42
: QGraphicsWidget(parent),
41
m_extenderItem(parent),
43
m_extenderItemDestroyed(false)
43
m_extenderItem(parent),
46
m_extenderItemDestroyed(false)
45
48
Q_ASSERT(m_extenderItem);
96
99
m_details->setText(i18n("More"));
98
connect(m_job, SIGNAL(changed(SystemTray::Job*)), this, SLOT(updateJob()));
101
connect(m_job, SIGNAL(changed(SystemTray::Job*)), this, SLOT(scheduleUpdateJob()));
102
connect(m_job, SIGNAL(stateChanged(SystemTray::Job*)), this, SLOT(updateJobState()));
99
103
connect(m_job, SIGNAL(destroyed(SystemTray::Job*)), this, SLOT(destroyExtenderItem()));
100
104
connect(m_details, SIGNAL(clicked()),
101
105
this, SLOT(detailsClicked()));
153
157
m_extenderItemDestroyed = true;
160
void JobWidget::scheduleUpdateJob()
162
if (m_extenderItemDestroyed) {
166
if (!m_updateTimerId) {
167
m_updateTimerId = startTimer(UPDATE_INTERVAL);
171
void JobWidget::updateJobState()
173
if (m_extenderItemDestroyed) {
177
//show the current status in the title.
178
if (!m_job->error().isEmpty()) {
179
m_extenderItem->setTitle(m_job->error());
180
} else if (m_job->state() == SystemTray::Job::Running) {
181
m_extenderItem->setTitle(m_job->message());
183
m_eta->setText(i18n("%1 (%2 remaining)", m_job->speed(),
184
KGlobal::locale()->prettyFormatDuration(m_job->eta())));
186
m_eta->setText(QString());
188
} else if (m_job->state() == SystemTray::Job::Suspended) {
189
m_extenderItem->setTitle(
190
i18nc("%1 is the name of the job, can be things like Copying, deleting, moving",
191
"%1 [Paused]", m_job->message()));
192
m_eta->setText(i18n("Paused"));
194
m_extenderItem->setTitle(
195
i18nc("%1 is the name of the job, can be things like Copying, deleting, moving",
196
"%1 [Finished]", m_job->message()));
197
m_extenderItem->showCloseButton();
156
202
void JobWidget::updateJob()
158
204
if (m_extenderItemDestroyed) {
184
//show the current status in the title.
185
if (!m_job->error().isEmpty()) {
186
item->setTitle(m_job->error());
187
} else if (m_job->state() == SystemTray::Job::Running) {
188
item->setTitle(m_job->message());
190
m_eta->setText(i18n("%1 (%2 remaining)", m_job->speed(),
191
KGlobal::locale()->prettyFormatDuration(m_job->eta())));
193
m_eta->setText(QString());
195
} else if (m_job->state() == SystemTray::Job::Suspended) {
197
i18nc("%1 is the name of the job, can be things like Copying, deleting, moving",
198
"%1 [Paused]", m_job->message()));
199
m_eta->setText(i18n("Paused"));
202
i18nc("%1 is the name of the job, can be things like Copying, deleting, moving",
203
"%1 [Finished]", m_job->message()));
204
item->showCloseButton();
208
228
//set the correct actions to visible.
209
if (item->action("suspend")) {
210
item->action("suspend")->setVisible(m_job->isSuspendable() &&
229
if (m_extenderItem->action("suspend")) {
230
m_extenderItem->action("suspend")->setVisible(m_job->isSuspendable() &&
211
231
m_job->state() == SystemTray::Job::Running);
214
if (item->action("resume")) {
215
item->action("resume")->setVisible(m_job->isSuspendable() &&
234
if (m_extenderItem->action("resume")) {
235
m_extenderItem->action("resume")->setVisible(m_job->isSuspendable() &&
216
236
m_job->state() == SystemTray::Job::Suspended);
219
if (item->action("stop")) {
220
item->action("stop")->setVisible(m_job->isKillable() &&
239
if (m_extenderItem->action("stop")) {
240
m_extenderItem->action("stop")->setVisible(m_job->isKillable() &&
221
241
m_job->state() != SystemTray::Job::Stopped);
234
254
m_fileCountLabel->setText(i18np("%2 / 1 file", "%2 / %1 files", files, processed["files"]));
237
QString processedString = KGlobal::locale()->formatByteSize(processed["bytes"]);
238
QString totalsString = KGlobal::locale()->formatByteSize(totals["bytes"]);
239
m_totalBytesLabel->setText(QString("%1 / %2").arg(processedString, totalsString));
257
qlonglong done = processed["bytes"];
258
qlonglong total = totals["bytes"];
260
QString processedString = KGlobal::locale()->formatByteSize(processed["bytes"]);
261
QString totalsString = KGlobal::locale()->formatByteSize(totals["bytes"]);
262
m_totalBytesLabel->setText(QString("%1 / %2").arg(processedString, totalsString));
265
m_totalBytesLabel->hide();
241
item->setIcon(m_job->applicationIconName());
268
m_extenderItem->setIcon(m_job->applicationIconName());
244
271
void JobWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
277
void JobWidget::timerEvent(QTimerEvent *event)
279
if (event->timerId() == m_updateTimerId) {
280
killTimer(m_updateTimerId);
250
286
void JobWidget::updateLabels()
252
288
QFontMetricsF fm = m_fromLabel->nativeWidget()->fontMetrics();
272
308
void JobWidget::detailsClicked()
274
310
if (!m_totalBytesLabel->isVisible()) {
275
m_details->setText(i18n("less"));
311
m_details->setText(i18n("Less"));
276
312
m_totalBytesLabel->setVisible(true);
277
313
m_dirCountLabel->setVisible(true);
278
314
m_fileCountLabel->setVisible(true);
281
317
m_layout->addItem(m_dirCountLabel, 6, 1);
282
318
m_extenderItem->setCollapsed(m_extenderItem->isCollapsed());
284
m_details->setText(i18n("more"));
320
m_details->setText(i18n("More"));
285
321
m_totalBytesLabel->setVisible(false);
286
322
m_dirCountLabel->setVisible(false);
287
323
m_fileCountLabel->setVisible(false);