23 #include "kstatusbarjobtracker_p.h"
26 #include <QProgressBar>
29 #include <QStackedWidget>
30 #include <QMouseEvent>
50 if (d->progressWidget.contains(job)) {
54 Private::ProgressWidget *vi =
new Private::ProgressWidget(job,
this, d->parent);
55 d->currentProgressWidget = vi;
57 d->progressWidget.insert(job, vi);
64 if (!d->progressWidget.contains(job))
67 if (d->currentProgressWidget == d->progressWidget[job])
68 d->currentProgressWidget = 0;
70 if (!d->progressWidget[job]->beingDeleted)
71 delete d->progressWidget[job];
73 d->progressWidget.remove(job);
78 if (!d->progressWidget.contains(job)) {
82 return d->progressWidget[job];
87 if (!d->currentProgressWidget) {
91 d->currentProgressWidget->setMode(statusBarMode);
98 if (!d->progressWidget.contains(job)) {
102 d->progressWidget[job]->description(title, field1, field2);
107 if (!d->progressWidget.contains(job)) {
111 d->progressWidget[job]->totalAmount(unit, amount);
116 if (!d->progressWidget.contains(job)) {
120 d->progressWidget[job]->percent(percent);
125 if (!d->progressWidget.contains(job)) {
129 d->progressWidget[job]->speed(value);
134 if (!d->progressWidget.contains(job)) {
138 d->progressWidget[job]->slotClean();
141 void KStatusBarJobTracker::Private::ProgressWidget::killJob()
143 job->kill(KJob::EmitResult);
146 void KStatusBarJobTracker::Private::ProgressWidget::init(
KJob *job,
QWidget *parent)
150 int w = fontMetrics().width(
" 999.9 kB/s 00:00:01 " ) + 8;
151 box =
new QHBoxLayout(widget);
154 widget->setLayout(box);
156 stack =
new QStackedWidget(widget);
157 box->addWidget(stack);
159 if (q->d->showStopButton) {
161 box->addWidget(button);
162 connect(button, SIGNAL(clicked(
bool)),
163 this, SLOT(killJob()));
168 progressBar =
new QProgressBar(widget);
169 progressBar->installEventFilter(
this);
170 progressBar->setMinimumWidth(w);
171 stack->insertWidget(1, progressBar);
174 label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
175 label->installEventFilter(
this);
176 label->setMinimumWidth(w);
177 stack->insertWidget(2,
label);
178 setMinimumSize(sizeHint());
182 q->setAutoDelete(job,
true);
184 QVBoxLayout *layout =
new QVBoxLayout;
185 layout->addWidget(widget);
189 void KStatusBarJobTracker::Private::ProgressWidget::setMode(StatusBarModes newMode)
203 stack->setCurrentWidget(
label);
211 stack->setCurrentWidget(progressBar);
215 void KStatusBarJobTracker::Private::ProgressWidget::description(
const QString &title,
222 label->setText(title);
225 void KStatusBarJobTracker::Private::ProgressWidget::totalAmount(KJob::Unit unit, qulonglong amount)
229 #if 0 // currently unused
230 if (unit==KJob::Bytes) {
236 void KStatusBarJobTracker::Private::ProgressWidget::percent(
unsigned long percent)
238 progressBar->setValue(percent);
241 void KStatusBarJobTracker::Private::ProgressWidget::speed(
unsigned long value)
246 label->setText(
i18n(
" %1/s ", KGlobal::locale()->formatByteSize(value)));
250 void KStatusBarJobTracker::Private::ProgressWidget::slotClean()
253 progressBar->setValue(0);
259 bool KStatusBarJobTracker::Private::ProgressWidget::eventFilter(
QObject *obj, QEvent *event)
261 if (obj==progressBar || obj==
label) {
263 if (event->type() == QEvent::MouseButtonPress) {
264 QMouseEvent *e =
static_cast<QMouseEvent*
>(event);
267 if (e->button() == Qt::LeftButton) {
268 if (mode == KStatusBarJobTracker::LabelOnly) {
269 setMode(KStatusBarJobTracker::ProgressOnly);
270 }
else if (mode == KStatusBarJobTracker::ProgressOnly) {
271 setMode(KStatusBarJobTracker::LabelOnly);
280 return QWidget::eventFilter(obj, event);
283 #include "kstatusbarjobtracker.moc"
284 #include "kstatusbarjobtracker_p.moc"