--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/testapplications/activitydebugger/activitydebuger.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,521 @@
+/*
+* 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 "activitydebuger.h"
+
+#include <QGridLayout>
+#include <HbLabel>
+#include <HbPushButton>
+#include <QCoreApplication>
+#include <QSignalMapper>
+#include <QVariant>
+#include <QList>
+#include <QVariantHash>
+#include <HbComboBox>
+#include <QBrush>
+#include <QPalette>
+#include <QGraphicsGridLayout>
+#include <QTimer>
+#include <e32std.h>
+#include <HbInstance>
+
+#include <qservicemanager.h>
+#include "activitydebugerconsole.h"
+
+const char ActivityApplicationKeyword [] = ":ApplicationId";
+const char ActivityActivityKeyword [] = ":ActivityName";
+const char ActivityScreenshotKeyword [] = "screenshot";
+
+QTM_USE_NAMESPACE
+
+ActivityDebuger::ActivityDebuger(QGraphicsItem *parent) : HbView(parent), mActivityClient(NULL), mByteArray(NULL)
+{
+ mThumbwait = 0;
+ mThumbnull = 0;
+ mThumbcurrent = 0;
+ QServiceManager serviceManager;
+ serviceManager.addService(":/activityserviceplugin.xml");
+ mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient");
+ if (!mActivityClient) {
+ qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityClient service.");
+ }
+
+ mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager");
+ if (!mActivityManager) {
+ qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service.");
+ }
+ mTimesLabel = new HbLabel("Times");
+ mBytesLabel = new HbLabel("Bytes");
+ mPixmapLabel = new HbLabel("Pixmap");
+ mSizeLabel = new HbLabel("Size(WxH)");
+
+ mPixmap = new QPixmap(":/images/wolf.bmp");
+ mPixmap2 = new QPixmap(":/images/bird.bmp");
+ mEmptyPixmap = new QPixmap();
+
+
+ mTimesCombo = new HbComboBox();
+ mLengthCombo = new HbComboBox();
+ mPixmapCombo = new HbComboBox();
+ mWidthCombo = new HbComboBox();
+ mHeightCombo = new HbComboBox();
+
+ mTimesCombo->addItem("1");
+ mTimesCombo->addItem("2");
+ mTimesCombo->addItem("4");
+ mTimesCombo->addItem("5");
+ mTimesCombo->addItem("10");
+ mTimesCombo->addItem("20");
+ mTimesCombo->addItem("40");
+ mTimesCombo->addItem("60");
+
+ QVariant variant;
+ variant = 10;
+ mLengthCombo->addItem("10 B", variant);
+ variant = 100;
+ mLengthCombo->addItem("100 B", variant);
+ variant = 1024;
+ mLengthCombo->addItem("1 KB", variant);
+ variant = 10240;
+ mLengthCombo->addItem("10 KB", variant);
+ variant = 102400;
+ mLengthCombo->addItem("100 KB", variant);
+ variant = 1024*1024;
+ mLengthCombo->addItem("1 MB", variant);
+
+ mWidthCombo->addItem("360");
+ mWidthCombo->addItem("180");
+ mWidthCombo->addItem("128");
+ mWidthCombo->addItem("90");
+
+ mHeightCombo->addItem("640");
+ mHeightCombo->addItem("320");
+ mHeightCombo->addItem("160");
+ mHeightCombo->addItem("128");
+
+
+ mPixmapCombo->addItem("no");
+ mPixmapCombo->addItem("yes");
+ mPixmapCombo->addItem("grab");
+
+ mSaveButton = new HbPushButton("Add");
+ mGetButton = new HbPushButton("Activities");
+ mDelButton = new HbPushButton("Delete");
+ mGetDataButton = new HbPushButton("Get data");
+ mUpdateButton = new HbPushButton("Update");
+ mThumbButton = new HbPushButton("Get pixmaps");
+ mClearButton = new HbPushButton("Clear");
+ mDelMyButton = new HbPushButton("Reserved");
+
+ mConsole = new ActivityDebugerConsole;
+
+ mLayout = new QGraphicsGridLayout();
+ mLayout->addItem(mConsole, 0, 0, 3, 6);
+ mLayout->addItem(mSizeLabel, 3, 0, 1, 2);
+ mLayout->addItem(mWidthCombo, 3, 2, 1, 2);
+ mLayout->addItem(mHeightCombo, 3, 4, 1, 2);
+ mLayout->addItem(mTimesLabel, 4, 0, 1, 2);
+ mLayout->addItem(mBytesLabel, 4, 2, 1, 2);
+ mLayout->addItem(mPixmapLabel, 4, 4, 1, 2);
+ mLayout->addItem(mTimesCombo, 5, 0, 1, 2);
+ mLayout->addItem(mLengthCombo, 5, 2, 1, 2);
+ mLayout->addItem(mPixmapCombo, 5, 4, 1, 2);
+ mLayout->addItem(mClearButton, 6, 0, 1, 3);
+ mLayout->addItem(mGetDataButton, 6, 3, 1, 3);
+ mLayout->addItem(mSaveButton, 7, 0, 1, 3);
+ mLayout->addItem(mUpdateButton, 7, 3, 1, 3);
+ mLayout->addItem(mGetButton, 8, 0, 1, 2);
+ mLayout->addItem(mThumbButton, 8, 2, 1, 4);
+ mLayout->addItem(mDelButton, 9, 0, 1, 3);
+ mLayout->addItem(mDelMyButton, 9, 3, 1, 3);
+
+
+
+ setLayout(mLayout);
+
+ connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity()));
+ connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity()));
+ connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity()));
+ connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData()));
+ connect(mUpdateButton, SIGNAL(released()), this, SLOT(updateActivity()));
+ connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb()));
+ connect(mClearButton, SIGNAL(released()), mConsole, SLOT(clear()));
+
+
+
+}
+
+ActivityDebuger::~ActivityDebuger()
+{
+ delete mEmptyPixmap;
+ delete mPixmap;
+ delete mPixmap2;
+ delete mActivityClient;
+ delete mActivityManager;
+}
+
+
+void ActivityDebuger::Before()
+{
+ TTime time;
+ time.HomeTime();
+ iBefore = time.Int64();
+}
+
+void ActivityDebuger::After()
+{
+ TTime time;
+ time.HomeTime();
+ iAfter = time.Int64();
+}
+
+void ActivityDebuger::Result()
+{
+ TInt64 res(0);
+ res = iAfter-iBefore;
+ res = res/1000;
+ iResult = res;
+}
+
+void ActivityDebuger::deleteActivity()
+{
+ mItemMeaage.clear();
+ mItemMeaage += "***Remove all:\n";
+ QList<QVariantHash> activities;
+ bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList<QVariantHash>, activities));
+ bool retok = false;
+ int items = 0;
+ if (ok) {
+ QString actname;
+ for (int i=0; i<activities.count(); i++) {
+ actname = activities.at(i).value(ActivityActivityKeyword).toString();
+ ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, actname));
+ ok = ok*retok;
+
+ mItemMeaage += "*";
+ mItemMeaage += actname;
+ mItemMeaage += "; ";
+ QString res;
+ res.setNum(ok);
+ mItemMeaage += res;
+
+ mItemMeaage += "*\n";
+
+ items++;
+ }
+ mItemMeaage += tr("*Items %1*\n").arg(items);
+ }
+ else
+ {
+ mItemMeaage += "*Failed*\n";
+ }
+
+ UpdateConsole();
+
+}
+
+void ActivityDebuger::getActivity()
+{
+ mItemMeaage.clear();
+ mItemMeaage += "***Activities list:\n";
+ bool ok = false;
+ QList<QVariantHash> activities;
+ ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, activities));
+ if ( ok )
+ {
+ int items = 0;
+ for ( int i=0; i<activities.count(); i++)
+ {
+ QString actname = activities.at(i).value(ActivityActivityKeyword).toString();
+ int appid = activities.at(i).value(ActivityApplicationKeyword).toInt(&ok);
+ mItemMeaage += "*";
+ QString aid;
+ aid.setNum(appid);
+ mItemMeaage += aid;
+ mItemMeaage += "; ";
+ mItemMeaage += actname;
+ mItemMeaage += "; ";
+ QString pixfile = activities.at(i).value(ActivityScreenshotKeyword).toString();
+ mItemMeaage += pixfile;
+ QVariantHash::const_iterator node(activities.at(i).find("visible"));
+ QString visible;
+ if ( activities.at(i).end() != node )
+ {
+ bool vis = node.value().toBool();
+ visible.setNum(vis);
+ }
+ else
+ {
+ visible = "none";
+ }
+ mItemMeaage += "; ";
+ mItemMeaage += visible;
+ QString res;
+ res.setNum(ok);
+ mItemMeaage += "; ";
+ mItemMeaage += res;
+ mItemMeaage += "*\n";
+
+ items++;
+ }
+ mItemMeaage += tr("*Items %1*\n").arg(items);
+ }
+ else
+ {
+ mItemMeaage += "*Failed*\n";
+ }
+ UpdateConsole();
+}
+
+void ActivityDebuger::getActivityThumb()
+{
+ mItemMeaage.clear();
+ mItemMeaage += "***Activities pixmaps:\n";
+ UpdateConsole();
+ disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+ connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+ mThumbwait = 0;
+ mThumbnull = 0;
+ mThumbcurrent = 0;
+ bool ok = false;
+ QList<QVariantHash> activities;
+
+ ok = QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, activities));
+ if ( ok )
+ {
+ mThumbwait = activities.count();
+ int width = mWidthCombo->currentText().toInt();
+ int height = mHeightCombo->currentText().toInt();
+ QSize pixSize(width, height);
+ for ( int i=0; i<activities.count(); i++)
+ {
+ QString actname = activities.at(i).value(ActivityActivityKeyword).toString();
+ int appid = activities.at(i).value(ActivityApplicationKeyword).toInt(&ok);
+ QString pixfile;
+ if ( ok )
+ {
+ pixfile = activities.at(i).value(ActivityScreenshotKeyword).toString();
+ void* userdata = reinterpret_cast<void*>(i);
+ ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, userdata));
+ }
+
+ mItemMeaage = "*";
+ QString aid;
+ aid.setNum(appid);
+ mItemMeaage += aid;
+ mItemMeaage += "; ";
+ mItemMeaage += actname;
+ mItemMeaage += "; ";
+ QString locid = tr("locid=%1").arg(i);
+ mItemMeaage += locid;
+ mItemMeaage += "; ";
+ QString res;
+ res.setNum(ok);
+ mItemMeaage += res;
+ mItemMeaage += "*\n";
+ UpdateConsole();
+ }
+ }
+ else
+ {
+ mItemMeaage += "*Failed*\n";
+ UpdateConsole();
+ }
+
+}
+
+
+
+void ActivityDebuger::saveActivity()
+{
+ mItemMeaage.clear();
+ mItemMeaage += "***Add:\n";
+ int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
+ delete mByteArray;
+ mByteArray = NULL;
+ mByteArray = new QByteArray(bytes, 'a');
+ QVariant variant;
+ variant = *mByteArray;
+ QPixmap *pixmap = NULL;
+ QPixmap screenshot;
+ if (mPixmapCombo->currentText() == "yes") {
+ pixmap = mPixmap;
+ }
+ else if ( mPixmapCombo->currentText() == "grab" )
+ {
+ HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+ screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+ pixmap = &screenshot;
+ }
+ else
+ {
+ pixmap = mEmptyPixmap;
+ }
+
+ QVariantHash metadata;
+ metadata.insert("screenshot", *pixmap);
+ int times = 0;
+ times = mTimesCombo->currentText().toInt();
+ bool ok = false;
+ bool retok = false;
+ int items = 0;
+ for (int i=0; i<times; i++) {
+ QString name;
+ name.setNum(i);
+ ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name), Q_ARG(QVariant, variant), Q_ARG(QVariantHash, metadata));
+ mItemMeaage += "*";
+ mItemMeaage += name;
+ mItemMeaage += "; ";
+ QString res;
+ res.setNum(ok*retok);
+ mItemMeaage += res;
+ mItemMeaage += "*\n";
+
+ items++;
+ }
+ mItemMeaage += tr("*Items %1*\n").arg(items);
+ UpdateConsole();
+}
+
+void ActivityDebuger::updateActivity()
+{
+ mItemMeaage.clear();
+ mItemMeaage += "***Update:\n";
+ int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
+ delete mByteArray;
+ mByteArray = NULL;
+ mByteArray = new QByteArray(bytes, 'a');
+ QVariant variant;
+ variant = *mByteArray;
+ QPixmap *pixmap = NULL;
+ QPixmap screenshot;
+ if (mPixmapCombo->currentText() == "yes") {
+ pixmap = mPixmap2;
+ }
+ else if ( mPixmapCombo->currentText() == "grab" )
+ {
+ HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+ screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+ pixmap = &screenshot;
+ }
+ else
+ {
+ pixmap = mEmptyPixmap;
+ }
+ QVariantHash metadata;
+ metadata.insert("screenshot", *pixmap);
+ int times = 0;
+ times = mTimesCombo->currentText().toInt();
+ bool ok = false;
+ bool retok = false;
+ int items = 0;
+ for (int i=0; i<times; i++) {
+ QString name;
+ name.setNum(i);
+ ok = QMetaObject::invokeMethod(mActivityClient, "updateActivity", Q_RETURN_ARG(bool, retok), Q_ARG(QString, name), Q_ARG(QVariant, variant), Q_ARG(QVariantHash, metadata));
+
+ mItemMeaage += "*";
+ mItemMeaage += name;
+ mItemMeaage += "; ";
+ QString res;
+ res.setNum(ok*retok);
+ mItemMeaage += res;
+ mItemMeaage += "*\n";
+
+ items++;
+ }
+ mItemMeaage += tr("*Items %1*\n").arg(items);
+ UpdateConsole();
+}
+
+void ActivityDebuger::getActivityData()
+{
+ mItemMeaage.clear();
+ mItemMeaage += "***Activities data:\n";
+ QList<QVariantHash> activities;
+ bool ok = QMetaObject::invokeMethod(mActivityClient, "activities", Q_RETURN_ARG(QList<QVariantHash>, activities));
+ if (ok) {
+ QString name;
+ QVariant data;
+ int items = 0;
+ for (int i=0; i<activities.count(); i++) {
+ name = activities.at(i).value(ActivityActivityKeyword).toString();
+ ok = QMetaObject::invokeMethod(mActivityClient, "activityData", Q_RETURN_ARG(QVariant, data), Q_ARG(QString, name));
+ const char* type = data.typeName();
+ QString dtype(type);
+ items++;
+
+ mItemMeaage += "*";
+ mItemMeaage += name;
+ mItemMeaage += "; ";
+ mItemMeaage += dtype;
+ mItemMeaage += "; ";
+ QString res;
+ res.setNum(ok);
+ mItemMeaage += res;
+ mItemMeaage += "*\n";
+ }
+ mItemMeaage += tr("*Items %1*\n").arg(items);
+ }
+ else
+ {
+ mItemMeaage += "*Failed*\n";
+ }
+ UpdateConsole();
+}
+
+void ActivityDebuger::thumbnailReady(QPixmap pix, void * ptr)
+ {
+ mItemMeaage.clear();
+ QString pixsize;
+ if ( pix.isNull() )
+ {
+ mThumbnull++;
+ pixsize = "null";
+ }
+ else
+ {
+ QSize size = pix.size();
+ int w = size.width();
+ int h = size.height();
+ pixsize = tr("%1x%2").arg(w).arg(h);
+ }
+ int loc_id = reinterpret_cast<int>(ptr);
+ QString locid;
+ locid = tr("locid=%1").arg(loc_id);
+ mThumbcurrent++;
+
+ mItemMeaage += "*";
+ mItemMeaage += locid;
+ mItemMeaage += "; ";
+ mItemMeaage += pixsize;
+ mItemMeaage += "*\n";
+
+ if (mThumbcurrent == mThumbwait)
+ {
+ disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+ QString screennum = tr("*screennum: %1*\n").arg(mThumbwait);
+ mItemMeaage += screennum;
+ }
+ UpdateConsole();
+ }
+
+void ActivityDebuger::UpdateConsole()
+ {
+ mConsole->appendText(mItemMeaage);
+ mConsole->scrollToBotton();
+ }