KIO
kdynamicjobtracker.cpp
Go to the documentation of this file.
00001 /* 00002 * Copyright 2008 by Rob Scheepmaker <r.scheepmaker@student.utwente.nl> 00003 * Copyright 2010 Shaun Reich <shaun.reich@kdemail.net> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Lesser General Public 00007 * License as published by the Free Software Foundation; either 00008 * version 2.1 of the License, or (at your option) any later version. 00009 * 00010 * This library is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Lesser General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Lesser General Public 00016 * License along with this library; if not, write to the Free Software 00017 * Foundation, Inc., 51 Franklin St, Fifth Floor, 00018 * Boston, MA 02110-1301 USA 00019 */ 00020 00021 #include "kdynamicjobtracker_p.h" 00022 00023 #include <kuiserverjobtracker.h> 00024 #include <kwidgetjobtracker.h> 00025 #include <kjobtrackerinterface.h> 00026 #include <kdebug.h> 00027 00028 #include <QDBusConnection> 00029 #include <QDBusConnectionInterface> 00030 #include <QDBusInterface> 00031 #include <QMap> 00032 00033 struct AllTrackers 00034 { 00035 KUiServerJobTracker *kuiserverTracker; 00036 KWidgetJobTracker *widgetTracker; 00037 }; 00038 00039 class KDynamicJobTracker::Private 00040 { 00041 public: 00042 Private() : kuiserverTracker(0), 00043 widgetTracker(0) 00044 { 00045 } 00046 00047 ~Private() 00048 { 00049 delete kuiserverTracker; 00050 delete widgetTracker; 00051 } 00052 00053 KUiServerJobTracker *kuiserverTracker; 00054 KWidgetJobTracker *widgetTracker; 00055 QMap<KJob*, AllTrackers> trackers; 00056 }; 00057 00058 KDynamicJobTracker::KDynamicJobTracker(QObject *parent) 00059 : KJobTrackerInterface(parent), 00060 d(new Private) 00061 { 00062 } 00063 00064 KDynamicJobTracker::~KDynamicJobTracker() 00065 { 00066 delete d; 00067 } 00068 00069 void KDynamicJobTracker::registerJob(KJob *job) 00070 { 00071 if (!d->kuiserverTracker) { 00072 d->kuiserverTracker = new KUiServerJobTracker(); 00073 } 00074 00075 d->trackers[job].kuiserverTracker = d->kuiserverTracker; 00076 d->trackers[job].kuiserverTracker->registerJob(job); 00077 00078 QDBusInterface interface("org.kde.kuiserver", "/JobViewServer", "", 00079 QDBusConnection::sessionBus(), this); 00080 QDBusReply<bool> reply = interface.call("requiresJobTracker"); 00081 00082 if (reply.isValid() && reply.value()) { 00083 //create a widget tracker in addition to kuiservertracker. 00084 if (!d->widgetTracker) { 00085 d->widgetTracker = new KWidgetJobTracker(); 00086 } 00087 d->trackers[job].widgetTracker = d->widgetTracker; 00088 d->trackers[job].widgetTracker->registerJob(job); 00089 } 00090 00091 Q_ASSERT(d->trackers[job].kuiserverTracker || d->trackers[job].widgetTracker); 00092 } 00093 00094 void KDynamicJobTracker::unregisterJob(KJob *job) 00095 { 00096 KUiServerJobTracker *kuiserverTracker = d->trackers[job].kuiserverTracker; 00097 KWidgetJobTracker *widgetTracker = d->trackers[job].widgetTracker; 00098 00099 if (!(widgetTracker || kuiserverTracker)) { 00100 kWarning() << "Tried to unregister a kio job that hasn't been registered."; 00101 return; 00102 } 00103 00104 if(kuiserverTracker) 00105 kuiserverTracker->unregisterJob(job); 00106 00107 if(widgetTracker) 00108 widgetTracker->unregisterJob(job); 00109 } 00110 00111 #include "kdynamicjobtracker_p.moc"
KDE 4.6 API Reference