--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/testapplications/tstestpluginmanager/fakeplugin/src/tstestmodel.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "tstestmodel.h"
+
+#include <QPainter>
+#include <QDateTime>
+#include <QDebug>
+#include <QTimer>
+#include "tstestpropertydefs.h"
+
+TsTestModel::TsTestModel(QObject *parent) : QObject(parent), mWasValid(false)
+{
+ verifyConnection();
+}
+
+TsTestModel::~TsTestModel()
+{
+ qDeleteAll(mBitmaps);
+
+}
+
+QList<QVariantHash> TsTestModel::taskList() const
+{
+ return mData;
+}
+
+QList<QVariantHash> TsTestModel::taskList(int limit) const
+{
+ qDebug()<<"task list";
+ return mData.mid(0, limit);
+}
+
+bool TsTestModel::openTask(const QVariant &id)
+{
+ for (QList<QVariantHash>::iterator i = mData.begin(); i != mData.end(); ++i) {
+ if (i->value("TaskId") == id) {
+ if (!i->value("TaskIsRunning").toBool()) {
+ i->insert("TaskIsRunning", true);
+ i->insert("TaskCanBeClosed", true);
+ }
+ i->insert("TaskTimestamp", QDateTime::currentDateTime());
+ emit dataChanged();
+ return true;
+ }
+ }
+ return false;
+}
+
+bool TsTestModel::closeTask(const QVariant &id)
+{
+
+ for(int i=0; i<mData.count(); i++) {
+ QVariantHash vh = mData.at(i);
+ if(vh.value("TaskId") == id) {
+ if (vh.value("TaskCanBeClosed").toBool()) {
+ mData.removeAt(i);
+ if (mBitmaps.count()>i) {
+ delete mBitmaps.at(i);
+ mBitmaps.removeAt(i);
+ }
+ }
+ emit dataChanged();
+ return true;
+ }
+ }
+ return false;
+}
+
+void TsTestModel::checkValue()
+{
+ bool ok;
+ int value = mSubscriber.value().toInt(&ok);
+ if (!ok) {
+ return;
+ }
+ if(value == 0) {
+ return;
+ }
+ if(value == -1) {
+ removeAll();
+ return;
+ }
+
+ int itemnum = byte(value, 0);
+ if(itemnum == 0) {
+ return;
+ }
+ bool running = byte(value, 1);
+ bool closeable = byte(value, 2);
+ addItems(itemnum, running, closeable);
+
+}
+
+void TsTestModel::verifyConnection()
+{
+ mSubscriber.setPath(QString("%1/%2").arg(TsTestProperty::KTsTestPath).arg(TsTestProperty::KPluginPath));
+
+ if (mSubscriber.value().isValid()) {
+ if(mWasValid) {
+ QTimer::singleShot(20000, this, SLOT(verifyConnection()));
+ return;
+ }
+ mWasValid = true;
+ connect(&mSubscriber, SIGNAL(contentsChanged()), this, SLOT(checkValue()));
+ // might have missed first value change
+ checkValue();
+ } else {
+ mWasValid = false;
+ QTimer::singleShot(3000, this, SLOT(verifyConnection()));
+ }
+}
+
+void TsTestModel::removeAll()
+{
+ if(mData.count()>0) {
+ mData.clear();
+ qDeleteAll(mBitmaps);
+ mBitmaps.clear();
+ emit dataChanged();
+ }
+}
+
+char TsTestModel::byte(int numtoget, int byte)
+{
+ char ret = 0;
+ if(byte>3 || byte<0) {
+ return ret;
+ }
+ numtoget = numtoget>>8*byte;
+ ret = static_cast<char>(numtoget);
+
+ return ret;
+
+}
+
+QColor TsTestModel::generateColor(int item)
+{
+ int r = item*230%255;
+ int g = item*80%255;
+ int b = item*150%255;
+
+ QColor c(r, g, b);
+ return c;
+}
+
+QPixmap TsTestModel::generatePixmap(int item)
+{
+ QColor color = generateColor(item);
+ QPixmap pixmap(128, 128);
+ pixmap.fill(Qt::transparent);
+ {
+ QPainter painter(&pixmap);
+ painter.setBrush(Qt::white);
+ painter.setPen(QPen(color, 2));
+ QFont font;
+ font.setPointSize(8);
+ painter.setFont(font);
+ QString note;
+ note = tr("Task %1").arg(item);
+ painter.drawText(10, 80, note);
+ }
+ return pixmap;
+}
+
+void TsTestModel::addItem(bool running, bool closeable)
+{
+ QVariantHash entry;
+ int num = mData.count() + 1;
+ QPixmap pixmap = generatePixmap(num);
+ CFbsBitmap *bitmap = pixmap.toSymbianCFbsBitmap();
+ mBitmaps.append(bitmap);
+ entry.insert("TaskScreenshot", bitmap->Handle());
+ entry.insert("TaskIsRunning", running);
+ entry.insert("TaskCanBeClosed", closeable);
+
+ entry.insert("TaskId", num);
+ QString name;
+ name = tr("Task %1").arg(num);
+ entry.insert("TaskName", name);
+
+ entry.insert("TaskTimestamp", QDateTime::currentDateTime());
+ entry.insert("TaskUid", QString("EB002E%1").arg(num, 2, 10, QChar('0')).toUInt(0, 16));
+
+ mData.append(entry);
+}
+
+void TsTestModel::addItems(int num, bool running, bool closeable)
+{
+ for(int i=0; i<num; i++) {
+ addItem(running, closeable);
+ }
+}