--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/testapplications/generator/hellostarter/lunchwidget.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,219 @@
+/*
+* 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 "lunchwidget.h"
+#include <hbapplication>
+#include <QStringList>
+#include <HbComboBox>
+#include <HbIcon>
+#include <hbMainWindow>
+#include <hbinstance.h>
+#include "tstasksettings.h"
+#include <XQConversions>
+#include <e32base.h>
+#include <QFile>
+#include <QTextStream>
+#include <QTimer>
+#include <hblineedit.h>
+#include <HbValidator>
+
+#define hbApp qobject_cast<HbApplication*>(qApp)
+
+lunchwidget::lunchwidget(QGraphicsItem *parent)
+ : HbWidget(parent), mActionCounter(0)
+{
+ mFile = new QFile("c:\\data\\helloworldstarter.txt");
+ mFile->open(QIODevice::Append | QIODevice::Text);
+ mStream = new QTextStream(mFile);
+
+ mResultLabel = new HbLabel("idle");
+ mTenLabel= new HbLabel("10x");
+ mOneLabel= new HbLabel("1x");
+ mPlusLabel= new HbLabel("+");
+
+
+ mStartButton = new HbPushButton("Start");
+ mCloseButton = new HbPushButton("Close");
+ mAutoButton = new HbPushButton("Auto");
+
+
+ mTenCombo = new HbComboBox();
+ mOneCombo = new HbComboBox();
+ for (int i=0; i<10; i++) {
+ QString num;
+ num.setNum(i);
+ mTenCombo->addItem(num);
+ mOneCombo->addItem(num);
+ }
+
+ mTimesEdid = new HbLineEdit("300");
+ mTimesEdid->setObjectName("TimesEditLine");
+ mQTimesValidator = new QIntValidator(this);
+ mQTimesValidator->setRange(0, 1000000);
+ mTimesValidator = new HbValidator(this);
+ mTimesValidator->addField(mQTimesValidator, "300");
+ mTimesEdid->setValidator(mTimesValidator);
+
+ mTimesLabel = new HbLabel("Times:");
+ mCounterLabel = new HbLabel("Count:");
+ mCounterValueLabel = new HbLabel("");
+
+ mGridLayout = new QGraphicsGridLayout();
+ mGridLayout->addItem(mResultLabel, 0, 0, 1, 6);
+ mGridLayout->addItem(mStartButton, 1, 0, 1, 2);
+ mGridLayout->addItem(mCloseButton, 1, 3, 1, 2);
+ mGridLayout->addItem(mAutoButton, 1, 5, 1, 2);
+ mGridLayout->addItem(mTenLabel, 2, 0, 1, 2);
+ mGridLayout->addItem(mPlusLabel, 2, 2, 1, 2);
+ mGridLayout->addItem(mOneLabel, 2, 4, 1, 2);
+ mGridLayout->addItem(mTenCombo, 3, 0, 1, 3);
+ mGridLayout->addItem(mOneCombo, 3, 4, 1, 3);
+ mGridLayout->addItem(mTimesLabel, 4, 0, 1, 2);
+ mGridLayout->addItem(mTimesEdid, 4, 3, 1, 4);
+ mGridLayout->addItem(mCounterLabel, 5, 0, 1, 3);
+ mGridLayout->addItem(mCounterValueLabel, 5, 4, 1, 3);
+
+ setLayout(mGridLayout);
+
+ connect( mStartButton, SIGNAL(released()), this, SLOT(start()) );
+ connect( mCloseButton, SIGNAL(released()), this, SLOT(stop()) );
+ connect( mAutoButton, SIGNAL(released()), this, SLOT(automat()) );
+
+ mTimer = new QTimer(this);
+ connect(mTimer, SIGNAL(timeout()), this, SLOT(timeout()));
+
+}
+
+lunchwidget::~lunchwidget()
+{
+ delete mFile;
+ delete mStream;
+ delete mQTimesValidator;
+ delete mTimesValidator;
+}
+
+void lunchwidget::start()
+{
+ int ten = mTenCombo->currentText().toInt();
+ int one = mOneCombo->currentText().toInt();
+ int num = ten*10+one;
+ for (int i=1; i<=num; i++) {
+ QString application;
+ application = tr("HelloWorldBasic%1").arg(i);
+ mResultLabel->setPlainText(application);
+ HBufC *appName = XQConversions::qStringToS60Desc(application);
+ CleanupStack::PushL(appName);
+
+ RProcess process;
+ CleanupClosePushL(process);
+
+ bool result = false;
+ if (process.Create(*appName, KNullDesC()) == KErrNone) {
+ // wait until process reports it's ready
+ TRequestStatus stat;
+ process.Rendezvous(stat);
+ process.Resume();
+ User::WaitForRequest(stat);
+
+ if (stat.Int() == KErrNone) {
+ result = true;
+ User::After(1000);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&process);
+ CleanupStack::PopAndDestroy(appName);
+ }
+}
+
+void lunchwidget::stop()
+{
+ RProcess application;
+ TFindProcess finder(_L("*hello*"));
+ TFullName fullname;
+ while (finder.Next(fullname) == KErrNone) {
+ TInt err = application.Open(fullname);
+ if (err==KErrNone && (application.FileName().Find(_L("HelloWorldBasic"))>=0 || application.FileName().Find(_L("helloworldbasic"))>=0)) {
+ application.Terminate(KErrCancel);
+ User::After(1000);
+ }
+ application.Close();
+ }
+}
+
+void lunchwidget::timeout()
+{
+ if(mActionCounter == mTimes) {
+ stop();
+ mTimer->stop();
+ *mStream<<"end\n";
+ mStream->flush();
+ enableControls(true);
+ }
+ if(!mOpened) {
+ start();
+ mOpened = true;
+ }
+ else {
+ stop();
+ mOpened = false;
+ mActionCounter++;
+ *mStream<<mActionCounter<<"\n";
+ mStream->flush();
+ setCounterLabel(mActionCounter);
+ }
+
+
+}
+
+void lunchwidget::automat()
+{
+ mTimes = times();
+ mActionCounter = 0;
+ *mStream<<"auto open\n";
+ mStream->flush();
+ mOpened = false;
+ enableControls(false);
+ mTimer->start(2000);
+}
+
+void lunchwidget::enableControls(bool enable)
+{
+ mStartButton->setEnabled(enable);
+ mCloseButton->setEnabled(enable);
+ mAutoButton->setEnabled(enable);
+ mTenCombo->setEnabled(enable);
+ mOneCombo->setEnabled(enable);
+ mTimesEdid->setEnabled(enable);
+}
+
+void lunchwidget::setCounterLabel(int count)
+{
+ QString num;
+ num.setNum(count);
+ mCounterValueLabel->setPlainText(num);
+}
+
+int lunchwidget::times()
+{
+ QString ttext = mTimesEdid->text();
+ bool ok;
+ int times = ttext.toInt(&ok);
+ if(!ok) {
+ times = 0;
+ }
+ return times;
+}