Plasma
tasksengine.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "tasksengine.h"
00020
00021 #include <plasma/datacontainer.h>
00022
00023 #include <KDebug>
00024 #include <KLocale>
00025
00026 using namespace Plasma;
00027
00028 TasksEngine::TasksEngine(QObject* parent, const QVariantList& args)
00029 : Plasma::DataEngine(parent, args)
00030 {
00031 Q_UNUSED(args);
00032 }
00033
00034 void TasksEngine::init()
00035 {
00036 foreach(const TaskPtr &task , TaskManager::TaskManager::self()->tasks().values() ) {
00037 connect(task.constData(), SIGNAL(changed()), this, SLOT(taskChanged()));
00038 setDataForTask(task);
00039 }
00040
00041 connect(TaskManager::TaskManager::self(), SIGNAL(taskAdded(TaskPtr)),
00042 this, SLOT(taskAdded(TaskPtr)));
00043 connect(TaskManager::TaskManager::self(), SIGNAL(taskRemoved(TaskPtr)),
00044 this, SLOT(taskRemoved(TaskPtr)));
00045 connect(TaskManager::TaskManager::self(), SIGNAL(startupAdded(StartupPtr)),
00046 this, SLOT(startupAdded(StartupPtr)));
00047 connect(TaskManager::TaskManager::self(), SIGNAL(startupRemoved(StartupPtr)),
00048 this, SLOT(startupRemoved(StartupPtr)));
00049 }
00050
00051 void TasksEngine::startupAdded(StartupPtr startup)
00052 {
00053 connect(startup.constData(), SIGNAL(changed()), this, SLOT(startupChanged()));
00054 setDataForStartup(startup);
00055 }
00056
00057 void TasksEngine::startupRemoved(StartupPtr startup)
00058 {
00059 removeSource(startup->id().id());
00060 }
00061
00062 void TasksEngine::startupChanged()
00063 {
00064 TaskManager::Startup* startup = qobject_cast<TaskManager::Startup*>(sender());
00065
00066 Q_ASSERT(startup);
00067
00068 setDataForStartup(StartupPtr(startup));
00069 }
00070
00071 void TasksEngine::setDataForStartup(StartupPtr startup)
00072 {
00073 Q_ASSERT(startup);
00074
00075 QString name(startup->id().id());
00076
00077 const QMetaObject* metaObject = startup->metaObject();
00078
00079 for (int i = 0 ; i < metaObject->propertyCount() ; i++) {
00080 QMetaProperty property = metaObject->property(i);
00081
00082 setData(name, property.name(), property.read(startup.constData()));
00083 }
00084 setData(name, "TaskOrStartup", "startup");
00085 }
00086
00087 void TasksEngine::taskAdded(TaskPtr task)
00088 {
00089 connect(task.constData(), SIGNAL(changed()), this, SLOT(taskChanged()));
00090 setDataForTask(task);
00091 }
00092
00093 void TasksEngine::taskRemoved(TaskPtr task)
00094 {
00095 removeSource( QString::number(task->window()) );
00096 }
00097
00098 void TasksEngine::taskChanged()
00099 {
00100 TaskManager::Task* task = qobject_cast<TaskManager::Task*>(sender());
00101
00102 Q_ASSERT(task);
00103
00104 setDataForTask(TaskPtr(task));
00105 }
00106
00107 void TasksEngine::setDataForTask(TaskPtr task)
00108 {
00109 Q_ASSERT( task );
00110
00111 QString name = QString::number(task->window());
00112
00113 const QMetaObject* metaObject = task->metaObject();
00114
00115 for ( int i = 0 ; i < metaObject->propertyCount() ; i++ ) {
00116 QMetaProperty property = metaObject->property(i);
00117
00118 setData(name,property.name(),property.read(task.constData()));
00119 }
00120 setData(name, "WId", static_cast<qulonglong>(task->window()));
00121 setData(name, "TaskOrStartup", "task");
00122 }
00123
00124 #include "tasksengine.moc"