locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsplugin.cpp
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsplugin.cpp	Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 2010 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:  Implementation of psy settings plugin class. 
+ *
+ */
+#include "pospsysettingsplugin.h"
+#include "pospsysettingsengine.h"
+
+#include <QDebug>
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::PosPsySettingsPlugin()
+// Constructor
+//---------------------------------------------------------------------
+PosPsySettingsPlugin::PosPsySettingsPlugin():
+mGroup(NULL),
+mSignalMapper(NULL),
+mOperation(NULL)
+    {  
+   qDebug() << "================ PSY Plug-in loaded ==============================";	
+   qDebug() << "+ PosPsySettingsPlugin::PosPsySettingsPlugin()";	
+    mEngine = new PosPsySettingsEngine();
+   qDebug() << "- PosPsySettingsPlugin::PosPsySettingsPlugin()";	
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::~PosPsySettingsPlugin()
+// Destructor
+//---------------------------------------------------------------------
+PosPsySettingsPlugin::~PosPsySettingsPlugin()
+    {
+    qDebug() << "- PosPsySettingsPlugin::~PosPsySettingsPlugin()";	
+    //Note: no need to call mOperation->removeConnection() as it is already handled in advview's destructor
+    if (mEngine)
+        {
+        delete mEngine;
+        mEngine = NULL;
+        }
+    
+    // delete the group
+    if(mGroup)
+        {
+        mOperation->removeItem( mGroup );
+        }
+
+    // clear the list of available psys
+    mPsyList.clear();
+    
+    QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+            SLOT(onPsyPressed(int))); 
+    // delete the QSignalMapper instance
+    if (mSignalMapper)
+        {
+        delete mSignalMapper;
+        mSignalMapper = NULL;
+        }
+
+    // delete the signal mapper instances 
+    int cnt = mPsySignalMapperList.count();
+    for (int i = 0; i < cnt ; ++i)
+        {
+        QObject::disconnect(mPsySignalMapperList[i], SIGNAL(signalmapped()),
+                mSignalMapper, SLOT(map()));
+        delete mPsySignalMapperList[i];
+        mPsySignalMapperList[i] = NULL;
+        }
+    // clear the list of signal mapper
+    mPsySignalMapperList.clear();
+    
+    qDebug() << "- PosPsySettingsPlugin::~PosPsySettingsPlugin()";	
+    qDebug() << "================ PSY Plug-in unloaded ==============================";	   
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::initialise( PosSettingsAdvOp* operation )
+// 
+//---------------------------------------------------------------------
+int PosPsySettingsPlugin::initialise(PosSettingsAdvOp* operation)
+    {
+    qDebug() << "+ PosPsySettingsPlugin::initialise()";	
+    mOperation = operation;
+    mPsyList.clear();
+    // get the list of psys 
+    int error = mEngine->listPsys(mPsyList);
+    // if the list is not available return error
+    if (error == KErrNone)
+        {
+        // create group
+        mGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem, tr(
+                "Positioning methods"), 0);
+        // append the group to data form using operation
+        operation->appendDataFormItem(mGroup);
+
+        // add group items
+        addItems();
+
+        // make connection to update the group inase of change in availbale list of psy
+        QObject::connect(mEngine, SIGNAL(PSYChange()), this,
+                SLOT(updateGroup()));
+        qDebug() << "- PosPsySettingsPlugin::initialise()";	
+        return KErrNone;
+        }
+    qDebug() << "- PosPsySettingsPlugin::initialise()";	    
+    return error;
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::onPsyPressed( int state, int psyUid )
+// 
+//---------------------------------------------------------------------
+void PosPsySettingsPlugin::onPsyPressed(int index)
+    {
+    qDebug() << "+ PosPsySettingsPlugin::onPsyPressed()";	
+    // get the check box item using the index
+    HbDataFormModelItem *checkBox = mGroup->childAt(index);
+    // get the psy name for the check box
+    QVariant name(checkBox->contentWidgetData("text"));
+    QString psyName = name.toString();
+    qDebug() << "Psy to be changed:" << psyName;
+   
+    // get the psyuid for the psy 
+    TUid psyUid = mPsyList.at(index).mPsyModuelId;
+
+    // get the state of the check box
+    QVariant state(checkBox->contentWidgetData(("checkState")));
+    int psyState = state.toInt();
+
+    // change the psy state based on check box state
+    if (psyState == Qt::Checked)
+        {
+        qDebug() << "Psy value:true";	
+        int error = mEngine->changePsyState(psyUid, PsyEnable);
+        }
+    else
+        {
+        qDebug() << "Psy value:false";		
+        int error = mEngine->changePsyState(psyUid, PsyDisable);
+        }
+	qDebug() << "- PosPsySettingsPlugin::onPsyPressed()";		
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::updateGroup
+// 
+//---------------------------------------------------------------------
+void PosPsySettingsPlugin::updateGroup()
+    {
+	qDebug() << "+ PosPsySettingsPlugin::updateGroup()";		
+    // remove all connections
+    int cnt= mGroup->childCount();
+    for (int i = 0; i < cnt; ++i)
+        {
+        mOperation->removeConnection(mGroup->childAt(i),
+                SIGNAL(stateChanged(int)), mPsySignalMapperList[i],
+                SLOT(signalmap()));
+        }
+		cnt = mPsySignalMapperList.count();
+    for (int i = 0; i < cnt; ++i)
+        {
+        QObject::disconnect(mPsySignalMapperList[i], SIGNAL(signalmapped()),
+                mSignalMapper, SLOT(map()));
+        delete mPsySignalMapperList[i];
+        mPsySignalMapperList[i] = NULL;        
+        }
+ 		mPsySignalMapperList.clear();
+ 		
+    QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+            SLOT(onPsyPressed(int)));
+
+    // delete the QSignalMapper instance
+    if (mSignalMapper)
+        {
+        delete mSignalMapper;
+        mSignalMapper = NULL;
+        }    
+
+    // clear list of psys
+    mPsyList.clear();
+    // get the list of psys 
+    int error = mEngine->listPsys(mPsyList);
+    // if the list is not available return error
+    if (error == KErrNone )
+        {
+      	// remove all group's children
+       //mGroup->removeChildren(0, oldChildCount);
+       //ToDo: Hack from HbDataForm team
+        int cnt = mGroup->childCount();
+        for(int i=0;i<cnt; ++i)	{
+        	mGroup->removeChild(0);	
+        	}
+        // add the group items
+        addItems();
+        if (mOperation->isExpanded(mOperation->indexFromItem(mGroup)))
+            {
+            // set as expanded since group was already expanded
+            mOperation->setExpanded(mOperation->indexFromItem(mGroup), true);
+            }
+        }
+	qDebug() << "- PosPsySettingsPlugin::updateGroup()";		
+    }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::addItems
+// 
+//---------------------------------------------------------------------
+void PosPsySettingsPlugin::addItems()
+    {
+    qDebug() << "+ PosPsySettingsPlugin::addItems()";		
+    // create the signal mapper 
+    if(mSignalMapper)
+        {
+        delete mSignalMapper;
+        mSignalMapper = NULL;
+        }
+    mSignalMapper = new QSignalMapper();
+
+    // for each of the psys in the list
+    // - add a check box item with name
+    // - set the checkbox state according to the psy's current state
+    // - make connections
+    // foreach( PosPsyInfo psy, mPsyList )
+    int cnt = mPsyList.count();
+    qDebug() << "No of Psys: " << cnt;
+    for (int i = 0; i < cnt; ++i)
+        {
+        // create the check box item
+        HbDataFormModelItem* checkBox = new HbDataFormModelItem(
+                    HbDataFormModelItem::CheckBoxItem, QString());
+        QString psyName = mPsyList.at(i).mPsyName;
+        qDebug() << "Psy Name: " << psyName;
+        checkBox->setContentWidgetData("text", psyName);
+
+        // set the state of checkbox
+        if (mPsyList.at(i).mPsyState == PsyEnable)
+            {
+            checkBox->setContentWidgetData("checkState", Qt::Checked);
+            }
+        else
+            {
+            checkBox->setContentWidgetData("checkState", Qt::Unchecked);
+            }
+        // append the check box item to the group
+        mGroup->appendChild(checkBox);
+
+        // create a new psySignalMapper for each checkbox created
+        PosSettingsSignalMapper* psySignalMapper =
+                new PosSettingsSignalMapper();
+        mPsySignalMapperList.append(psySignalMapper);
+
+        // add connections on change of check box state
+        mOperation->addConnection(checkBox, SIGNAL(stateChanged(int)),
+                mPsySignalMapperList[i], SLOT(signalmap()));
+        QObject::connect(mPsySignalMapperList[i], SIGNAL(signalmapped()),
+                mSignalMapper, SLOT(map()));
+        // set mapping of each check box item to its index
+        mSignalMapper->setMapping(mPsySignalMapperList[i], i);
+
+        }
+    QObject::connect(mSignalMapper, SIGNAL(mapped(int)), this,
+            SLOT(onPsyPressed(int)));
+	qDebug() << "- PosPsySettingsPlugin::addItems()";		
+    }
+
+Q_EXPORT_PLUGIN2(pospsysettings, PosPsySettingsPlugin)
+;