diff --git a/kdeui/jobs/kabstractwidgetjobtracker.cpp b/kdeui/jobs/kabstractwidgetjobtracker.cpp index 274cbf5..e408ab3 100644 --- a/kdeui/jobs/kabstractwidgetjobtracker.cpp +++ b/kdeui/jobs/kabstractwidgetjobtracker.cpp @@ -20,6 +20,7 @@ */ #include "kabstractwidgetjobtracker.h" +#include "kabstractwidgetjobtracker_p.h" #include #include @@ -28,24 +29,9 @@ #include -class KAbstractWidgetJobTracker::Private -{ -public: - Private(KAbstractWidgetJobTracker *parent) - : q(parent) { } - - KAbstractWidgetJobTracker *const q; - - struct MoreOptions { - bool stopOnClose : 1; - bool autoDelete : 1; - }; - - QMap moreOptions; -}; - KAbstractWidgetJobTracker::KAbstractWidgetJobTracker(QWidget *parent) - : KJobTrackerInterface(parent), d(new Private(this)) + : KJobTrackerInterface(parent) + , d(new Private(this)) { } @@ -56,60 +42,32 @@ KAbstractWidgetJobTracker::~KAbstractWidgetJobTracker() void KAbstractWidgetJobTracker::registerJob(KJob *job) { - KJobTrackerInterface::registerJob(job); - - if (d->moreOptions.contains(job)) { - return; - } - - Private::MoreOptions mo; - mo.stopOnClose = true; - mo.autoDelete = true; - - d->moreOptions.insert(job, mo); + Q_UNUSED(job); } void KAbstractWidgetJobTracker::unregisterJob(KJob *job) { - KJobTrackerInterface::unregisterJob(job); - - if (!d->moreOptions.contains(job)) { - return; - } - - d->moreOptions.remove(job); + Q_UNUSED(job); } void KAbstractWidgetJobTracker::setStopOnClose(KJob *job, bool stopOnClose) { - if (!d->moreOptions.contains(job)) { - return; - } - - d->moreOptions[job].stopOnClose = stopOnClose; + d->setStopOnClose(job, stopOnClose); } bool KAbstractWidgetJobTracker::stopOnClose(KJob *job) const { - if (!d->moreOptions.contains(job)) { - return false; - } - - return d->moreOptions[job].stopOnClose; + return d->stopOnClose(job); } void KAbstractWidgetJobTracker::setAutoDelete(KJob *job, bool autoDelete) { - if (!d->moreOptions.contains(job)) { - return; - } - - d->moreOptions[job].autoDelete = autoDelete; + d->setAutoDelete(job, autoDelete); } bool KAbstractWidgetJobTracker::autoDelete(KJob *job) const { - return d->moreOptions[job].autoDelete; + return d->autoDelete(job); } void KAbstractWidgetJobTracker::finished(KJob *job) @@ -119,34 +77,19 @@ void KAbstractWidgetJobTracker::finished(KJob *job) void KAbstractWidgetJobTracker::slotStop(KJob *job) { - if (!d->moreOptions.contains(job)) { - return; - } - - job->kill( KJob::EmitResult ); // notify that the job has been killed - + job->kill(KJob::EmitResult); // notify that the job has been killed emit stopped(job); } void KAbstractWidgetJobTracker::slotSuspend(KJob *job) { - if (!d->moreOptions.contains(job)) { - return; - } - job->suspend(); - emit suspend(job); } void KAbstractWidgetJobTracker::slotResume(KJob *job) { - if (!d->moreOptions.contains(job)) { - return; - } - job->resume(); - emit resume(job); } diff --git a/kdeui/jobs/kabstractwidgetjobtracker.h b/kdeui/jobs/kabstractwidgetjobtracker.h index a51e103..892e787 100644 --- a/kdeui/jobs/kabstractwidgetjobtracker.h +++ b/kdeui/jobs/kabstractwidgetjobtracker.h @@ -1,6 +1,7 @@ /* This file is part of the KDE project Copyright (C) 2000 Matej Koss Copyright (C) 2007 Kevin Ottens + Copyright (C) 2008 Rafael Fernández López This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -180,7 +181,7 @@ Q_SIGNALS: */ void resume(KJob *job); -private: +protected: class Private; Private *const d; }; diff --git a/kdeui/jobs/kabstractwidgetjobtracker_p.h b/kdeui/jobs/kabstractwidgetjobtracker_p.h new file mode 100644 index 0000000..db6cc1c --- /dev/null +++ b/kdeui/jobs/kabstractwidgetjobtracker_p.h @@ -0,0 +1,61 @@ +/* This file is part of the KDE project + Copyright (C) 2000 Matej Koss + Copyright (C) 2007 Kevin Ottens + Copyright (C) 2007 Rafael Fernández López + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +class KAbstractWidgetJobTracker::Private +{ +public: + Private(KAbstractWidgetJobTracker *parent) + : q(parent) + { + } + + virtual ~Private() + { + } + + KAbstractWidgetJobTracker *const q; + + //### KDE 5: make this methods virtual on KAbstractWidgetJobTracker and get rid out of this + // workaround. (ereslibre) + virtual void setStopOnClose(KJob *job, bool stopOnClose) + { + Q_UNUSED(job); + Q_UNUSED(stopOnClose); + } + + virtual bool stopOnClose(KJob *job) const + { + Q_UNUSED(job); + return true; + } + + virtual void setAutoDelete(KJob *job, bool autoDelete) + { + Q_UNUSED(job); + Q_UNUSED(autoDelete); + } + + virtual bool autoDelete(KJob *job) const + { + Q_UNUSED(job); + return true; + } +}; diff --git a/kdeui/jobs/kwidgetjobtracker.cpp b/kdeui/jobs/kwidgetjobtracker.cpp index 7650460..bcc4176 100644 --- a/kdeui/jobs/kwidgetjobtracker.cpp +++ b/kdeui/jobs/kwidgetjobtracker.cpp @@ -77,11 +77,6 @@ QWidget *KWidgetJobTracker::widget(KJob *job) void KWidgetJobTracker::registerJob(KJob *job) { - if (d->progressWidget.contains(job) || - d->progressWidgetsToBeShown.contains(job)) { - return; - } - KAbstractWidgetJobTracker::registerJob(job); Private::ProgressWidget *vi = new Private::ProgressWidget(job, this, d->parent); @@ -97,14 +92,10 @@ void KWidgetJobTracker::unregisterJob(KJob *job) KWidgetJobTracker::Private::ProgressWidget *pWidget = d->progressWidget.value(job, 0); if (!pWidget) { - d->progressWidgetsToBeShown.removeAll(job); return; } pWidget->deref(); - - d->progressWidget.remove(job); - d->progressWidgetsToBeShown.removeAll(job); } bool KWidgetJobTracker::keepOpen(KJob *job) const @@ -231,6 +222,8 @@ void KWidgetJobTracker::Private::ProgressWidget::deref() if (tracker->autoDelete(job)) { deleteLater(); } + tracker->d->progressWidget.remove(job); + tracker->d->progressWidgetsToBeShown.removeAll(job); } else { slotClean(); } @@ -432,10 +425,6 @@ void KWidgetJobTracker::Private::ProgressWidget::closeEvent(QCloseEvent *event) } QWidget::closeEvent(event); - - if (keepOpenChecked) { - KGlobal::deref(); - } } void KWidgetJobTracker::Private::ProgressWidget::init() @@ -625,7 +614,7 @@ void KWidgetJobTracker::Private::ProgressWidget::_k_openLocation() void KWidgetJobTracker::Private::ProgressWidget::_k_pauseResumeClicked() { - if ( !suspendedProperty ) { + if (!suspendedProperty) { tracker->slotSuspend(job); } else { tracker->slotResume(job); @@ -636,10 +625,6 @@ void KWidgetJobTracker::Private::ProgressWidget::_k_stop() { tracker->slotStop(job); deref(); - - if (keepOpenChecked) { - KGlobal::deref(); - } } #include "kwidgetjobtracker.moc" diff --git a/kdeui/jobs/kwidgetjobtracker.h b/kdeui/jobs/kwidgetjobtracker.h index 59c0b4f..2084dae 100644 --- a/kdeui/jobs/kwidgetjobtracker.h +++ b/kdeui/jobs/kwidgetjobtracker.h @@ -89,7 +89,7 @@ protected Q_SLOTS: //TODO: Misses canResume() - private: +private: class Private; Private *const d; diff --git a/kdeui/jobs/kwidgetjobtracker_p.h b/kdeui/jobs/kwidgetjobtracker_p.h index cb49444..2006a85 100644 --- a/kdeui/jobs/kwidgetjobtracker_p.h +++ b/kdeui/jobs/kwidgetjobtracker_p.h @@ -21,6 +21,8 @@ #ifndef KWIDGETJOBTRACKER_P_H #define KWIDGETJOBTRACKER_P_H +#include "kabstractwidgetjobtracker_p.h" + #include #include #include @@ -28,6 +30,7 @@ #include #include +#include class KPushButton; class QCheckBox; @@ -35,26 +38,30 @@ class KSqueezedTextLabel; class QLabel; class QProgressBar; - class KWidgetJobTracker::Private + : public KAbstractWidgetJobTracker::Private { public: Private(QWidget *parent, KWidgetJobTracker *tracker) - : parent(parent) - , q(tracker) + : KAbstractWidgetJobTracker::Private(tracker) + , parent(parent) { } - ~Private() + virtual ~Private() { } + virtual void setStopOnClose(KJob *job, bool stopOnClose); + virtual bool stopOnClose(KJob *job) const; + virtual void setAutoDelete(KJob *job, bool autoDelete); + virtual bool autoDelete(KJob *job) const; + void _k_slotShowProgressWidget(); class ProgressWidget; QWidget *parent; - KWidgetJobTracker *q; QMap progressWidget; QQueue progressWidgetsToBeShown; }; @@ -69,7 +76,7 @@ public: ProgressWidget(KJob *job, KWidgetJobTracker *object, QWidget *parent) : QWidget(parent), tracker(object), job(job), totalSize(0), totalFiles(0), totalDirs(0), processedSize(0), processedDirs(0), processedFiles(0), - totalSizeKnown(false), keepOpenChecked(false), + totalSizeKnown(false), stopOnClose(true), autoDelete(true), keepOpenChecked(false), cancelClose(0), openFile(0), openLocation(0), keepOpenCheck(0), pauseButton(0), sourceEdit(0), destEdit(0), progressLabel(0), destInvite(0), speedLabel(0), sizeLabel(0), @@ -80,6 +87,9 @@ public: ~ProgressWidget() { + if (keepOpenChecked) { + KGlobal::deref(); + } } KWidgetJobTracker *const tracker; @@ -93,6 +103,8 @@ public: qulonglong processedFiles; bool totalSizeKnown; + bool stopOnClose; + bool autoDelete; bool keepOpenChecked; QString caption; @@ -153,5 +165,40 @@ private Q_SLOTS: void _k_stop(); }; +void KWidgetJobTracker::Private::setStopOnClose(KJob *job, bool stopOnClose) +{ + if (!progressWidget.contains(job)) { + return; + } + progressWidget[job]->stopOnClose = stopOnClose; +} + +bool KWidgetJobTracker::Private::stopOnClose(KJob *job) const +{ + if (!progressWidget.contains(job)) { + kWarning() << "not found widget for job " << job << ". This method will return a " + "hardcoded value"; + return true; + } + return progressWidget[job]->stopOnClose; +} + +void KWidgetJobTracker::Private::setAutoDelete(KJob *job, bool autoDelete) +{ + if (!progressWidget.contains(job)) { + return; + } + progressWidget[job]->autoDelete = autoDelete; +} + +bool KWidgetJobTracker::Private::autoDelete(KJob *job) const +{ + if (!progressWidget.contains(job)) { + kWarning() << "not found widget for job " << job << ". This method will return a " + "hardcoded value"; + return true; + } + return progressWidget[job]->autoDelete; +} #endif // KWIDGETJOBTRACKER_P_H