diff -r 05bc53fe583b -r 83ca720e2b9a cmmanager/cpdestinationplugin/src/cpdestinationgroup.cpp --- a/cmmanager/cpdestinationplugin/src/cpdestinationgroup.cpp Tue Aug 31 15:35:44 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,476 +0,0 @@ -/* -* 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: -* CpDestinationGroup contains all destination UI items as well as -* items for uncategorized access points and adding new destinations. -*/ - -// System includes - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes - -#include "cpdestinationgroup.h" -#include "cpdestinationentryitem.h" -#include "cpadddestinationentryitemdata.h" - -#include "OstTraceDefinitions.h" -#ifdef OST_TRACE_COMPILER_IN_USE -#include "cpdestinationgroupTraces.h" -#endif - -/*! - \class CpDestinationGroup - \brief This class contains all data items representing destinations - in commsdat. -*/ - -// External function prototypes - -// Local constants - -// ======== LOCAL FUNCTIONS ======== - -// ======== MEMBER FUNCTIONS ======== - -/*! - - Constructor. - - @param[in] itemDataHelper Helper for connecting signals and slots. - */ -CpDestinationGroup::CpDestinationGroup(CpItemDataHelper &itemDataHelper) : - CpSettingFormItemData( - HbDataFormModelItem::GroupItem, - hbTrId("txt_occ_subhead_destinations_access_points")), - mItemDataHelper(&itemDataHelper), - mUncategorisedShown(false), - mCmManager(new CmManagerShim()), - mBearerPlugins(new QList()) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_CPDESTINATIONGROUP_ENTRY); - - this->loadBearerPlugins(); - - QList > destinationList; - fetchDestinations(destinationList); - - // Create Destination list - for (int i = 0; i < destinationList.count(); i++) { - QString iapCount = - getDestinationAdditionalText(destinationList.at(i)); - - // Create new destination entry - CpDestinationEntryItemData *destDataItem; - destDataItem = new CpDestinationEntryItemData(itemDataHelper); - destDataItem->setContentWidgetData(QString("text"), destinationList.at(i)->name()); - destDataItem->setContentWidgetData(QString("additionalText"),iapCount); - destDataItem->setDestinationId(destinationList.at(i)->id()); - destDataItem->setDestinationName(destinationList.at(i)->name()); - HbIcon destIcon(resolveDestinationIcon(destinationList.at(i))); - destDataItem->setEntryItemIcon(destIcon); - bool connected = connect( - destDataItem, - SIGNAL(destChanged()), - this, - SLOT(updateDestinationInformation())); - Q_ASSERT(connected); - this->appendChild(destDataItem); - } - - // Add "Uncategorised Iaps" button - createUncategorisedDestination(); - - // "Add Destination" button - CpSettingFormEntryItemData *addDest = new CpAddDestinationEntryItemData( - itemDataHelper, - this); - addDest->setContentWidgetData( - QString("text"), - hbTrId("txt_occ_button_add_destination")); - this->appendChild(addDest); - - OstTraceFunctionExit0(CPDESTINATIONGROUP_CPDESTINATIONGROUP_EXIT); -} - -/*! - Destructor - */ -CpDestinationGroup::~CpDestinationGroup() -{ - OstTraceFunctionEntry0(DUP1_CPDESTINATIONGROUP_CPDESTINATIONGROUP_ENTRY); - - delete mBearerPlugins; - delete mCmManager; - - OstTraceFunctionExit0(DUP1_CPDESTINATIONGROUP_CPDESTINATIONGROUP_EXIT); -} - -/*! - addDestination() creates new destination item to Destinations group item. - The new destination is shown in the UI immediately. - */ -void CpDestinationGroup::addDestination( - const QString &name, - QSharedPointer dest) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_ADDDESTINATION_ENTRY); - - // Create UI item for new destination - CpDestinationEntryItemData *destDataItem; - destDataItem = new CpDestinationEntryItemData(*mItemDataHelper); - destDataItem->setContentWidgetData(QString("text"), name); - destDataItem->setContentWidgetData( - QString("additionalText"), - hbTrId("txt_occ_dblist_internet_val_no_access_points")); - destDataItem->setDestinationId(dest->id()); - destDataItem->setDestinationName(name); - HbIcon destIcon(resolveDestinationIcon(dest)); - destDataItem->setEntryItemIcon(destIcon); - connect( - destDataItem, - SIGNAL(destChanged()), - this, - SLOT(updateDestinationInformation())); - - // Insert Child to correct position - QList > destinationList; - fetchDestinations(destinationList); - insertChild(destinationList.count() - 1, destDataItem); - - OstTraceFunctionExit0(CPDESTINATIONGROUP_ADDDESTINATION_EXIT); -} - -/*! - Deletes destination from commsdat and removes it from UI. - */ -void CpDestinationGroup::deleteDestination(int destId) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_DELETEDESTINATION_ENTRY); - - // "Add Destination" child is removed from count (childCount() -1) - for (int i = 0; i < this->childCount() - 1; i++) { - CpDestinationEntryItemData *destDataItem = - static_cast(this->childAt(i)); - - if (destDataItem->destinationId() == destId) { - int index = this->indexOf(destDataItem); - this->removeChild(index); - - if (!mUncategorisedShown) { - // Return "Uncategorised" item to UI if necessary - createUncategorisedDestination(); - } - } - } - - OstTraceFunctionExit0(CPDESTINATIONGROUP_DELETEDESTINATION_EXIT); -} - -/*! - Finds correct access point settings implementation according to - access point bearer type. - - \return Returns pointer to CpBearerApPluginInterface which implements - access point settins. - */ -CpBearerApPluginInterface *CpDestinationGroup::findBearerPlugin(int apId) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_FINDBEARERPLUGIN_ENTRY); - - CpBearerApPluginInterface *retVal = NULL; - try { - CmConnectionMethodShim *cm = mCmManager->connectionMethod(apId); - int apBearerType = cm->getIntAttribute(CMManagerShim::CmBearerType); - - for (int i = 0; i < mBearerPlugins->count(); i++) { - if (mBearerPlugins->at(i)->bearerType() == apBearerType) { - retVal = mBearerPlugins->at(i); - break; - } - } - delete cm; - } - catch (const std::exception&) { - OstTrace0( - TRACE_NORMAL, - CPDESTINATIONGROUP_FINDBEARERPLUGIN, - "CpDestinationGroup::findBearerPlugin: Exception caught"); - // Let return value be NULL. - } - - OstTraceFunctionExit0(CPDESTINATIONGROUP_FINDBEARERPLUGIN_EXIT); - return retVal; -} - -/*! - Updates all destination group items' destinations' information. - (Name and access point count) - */ -void CpDestinationGroup::updateDestinationInformation() -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_UPDATEDESTINATIONINFORMATION_ENTRY); - - // "Add Destination" child is removed from count (childCount() -1) - for (int i = 0; i < childCount() - 1; i++) { - CpDestinationEntryItemData *destDataItem = - static_cast(this->childAt(i)); - - if (destDataItem->destinationId() == 0) { - // Uncategrised Iaps - QList apList; - mCmManager->connectionMethod(apList); - if (apList.count() == 0) { - // delete empty uncategorised IAPs destination - int index = this->indexOf(destDataItem); - this->removeChild(index); - mUncategorisedShown = false; - continue; - } - } - QString iapCount = getDestinationAdditionalText(destDataItem->destinationId()); - destDataItem->setContentWidgetData(QString("additionalText"), iapCount); - destDataItem->setContentWidgetData(QString("text"), destDataItem->destinationName()); - } - - OstTraceFunctionExit0(CPDESTINATIONGROUP_UPDATEDESTINATIONINFORMATION_EXIT); -} - -/*! - Creates item for uncategorized access points to destination group item - if there is any. - */ -void CpDestinationGroup::createUncategorisedDestination() -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_CREATEUNCATEGORISEDDESTINATION_ENTRY); - - QList apList; - mCmManager->connectionMethod(apList); - if (apList.count() > 0) { - // Create new destination entry - CpDestinationEntryItemData *destDataItem; - destDataItem = new CpDestinationEntryItemData(*mItemDataHelper); - destDataItem->setContentWidgetData(QString("text"), hbTrId("txt_occ_dblist_uncategorized")); - QString iapCount = getDestinationAdditionalText(0); - destDataItem->setContentWidgetData(QString("additionalText"),iapCount); - destDataItem->setDestinationId(0); - destDataItem->setDestinationName(hbTrId("txt_occ_dblist_uncategorized")); - HbIcon destIcon(mCmManager->getUncategorizedIcon()); - destDataItem->setEntryItemIcon(destIcon); - bool connected = connect( - destDataItem, - SIGNAL(destChanged()), - this, - SLOT(updateDestinationInformation())); - Q_ASSERT(connected); - QList > destinationList; - fetchDestinations(destinationList); - - insertChild(destinationList.count(), destDataItem); - mUncategorisedShown = true; - } - - OstTraceFunctionExit0(CPDESTINATIONGROUP_CREATEUNCATEGORISEDDESTINATION_EXIT); -} - -/*! - Searches all destinations from commsdat. List of representing - CmDestinationShim * items returned on completion. - */ -void CpDestinationGroup::fetchDestinations( - QList > &destinationList) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_FETCHDESTINATIONS_ENTRY); - - try { - QList destArray; - mCmManager->allDestinations(destArray); - - for (int i = 0; i < destArray.count(); i++) { - CmDestinationShim *destination; - destination = mCmManager->destination(destArray[i]); - if (!destination->isHidden()) { - destinationList.append(QSharedPointer(destination)); - } else { - delete destination; - } - } - } catch (const std::exception&) { - OstTrace0( - TRACE_NORMAL, - CPDESTINATIONGROUP_FETCHDESTINATIONS, - "CpDestinationGroup::fetchDestinations: exception caught, Reading destinations"); - } - - OstTraceFunctionExit0(CPDESTINATIONGROUP_FETCHDESTINATIONS_EXIT); -} - -/*! - Searches all bearer plugins from fixed location and loads them. - - \sa findBearerPlugin() - */ -void CpDestinationGroup::loadBearerPlugins() -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_LOADBEARERPLUGINS_ENTRY); - - // Load bearer plugins - QDir pluginsDir("\\resource\\qt\\plugins\\controlpanel\\bearerap"); - foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { - - QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); - CpBearerApPluginInterface *plugin = - qobject_cast(loader.instance()); - if (plugin) { - mBearerPlugins->append(plugin); - } - } - - OstTraceFunctionExit0(CPDESTINATIONGROUP_LOADBEARERPLUGINS_EXIT); -} - -/*! - Helper function to be used in localisation. (Overloaded) - - \return Returns correct localized QString according to access point count. - */ -QString CpDestinationGroup::getDestinationAdditionalText(QSharedPointer destination) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_GETDESTINATIONADDITIONALTEXT_ENTRY); - - QString result = ""; - int iapCount = destination->connectionMethodCount(); - int counter = 0; - for (int i = 0; i < iapCount; i++) { - CmConnectionMethodShim *cm = destination->connectionMethod(i); - if (cm->getBoolAttribute(CMManagerShim::CmDestination) - || cm->getBoolAttribute(CMManagerShim::CmHidden)) { - counter++; - } - delete cm; - } - iapCount = iapCount - counter; - if (iapCount > 0) { - result = hbTrId("txt_occ_dblist_internet_val_ln_access_points", iapCount); - } else { - result = hbTrId("txt_occ_dblist_internet_val_no_access_points"); - } - - OstTrace0(TRACE_FLOW, CPDESTINATIONGROUP_GETDESTINATIONADDITIONALTEXT_EXIT, "Exit"); - return result; -} - -/*! - Helper function to be used in localisation. (Overloaded) - - \return Returns correct localized QString according to access point count. - */ -QString CpDestinationGroup::getDestinationAdditionalText(int destinationId) -{ - OstTraceFunctionEntry0(CPDESTINATIONGROUP_GETDESTINATIONADDITIONALTEXT2_ENTRY); - - QString result = ""; - int iapCount = 0; - int counter = 0; - if (destinationId == 0) { - QList apList; - mCmManager->connectionMethod(apList); - iapCount = apList.count(); - for (int i = 0; i < iapCount; i++) { - CmConnectionMethodShim *cm = mCmManager->connectionMethod(apList[i]); - if (cm->getBoolAttribute(CMManagerShim::CmDestination) - || cm->getBoolAttribute(CMManagerShim::CmHidden)) { - counter++; - } - delete cm; - } - } else { - CmDestinationShim *destination = mCmManager->destination(destinationId); - iapCount = destination->connectionMethodCount(); - for (int i = 0; i < iapCount; i++) { - CmConnectionMethodShim *cm = destination->connectionMethod(i); - if (cm->getBoolAttribute(CMManagerShim::CmDestination) - || cm->getBoolAttribute(CMManagerShim::CmHidden)) { - counter++; - } - delete cm; - } - delete destination; - } - iapCount = iapCount - counter; - if (iapCount > 0) { - result = hbTrId("txt_occ_dblist_internet_val_ln_access_points", iapCount); - } else { - result = hbTrId("txt_occ_dblist_internet_val_no_access_points"); - } - - OstTrace0(TRACE_FLOW, CPDESTINATIONGROUP_GETDESTINATIONADDITIONALTEXT2_EXIT, "Exit"); - return result; -} - -/*! - Helper function for showing icons. - - \return Returns string representing given destination's icon - */ -QString CpDestinationGroup::resolveDestinationIcon( - QSharedPointer destination) const -{ - QString result(destination->getIcon()); - - if (result.isEmpty()) { - uint metaData = destination->metadata(CMManagerShim::SnapMetadataPurpose); - switch (metaData) { - case CMManagerShim::SnapPurposeInternet: - result = "qtg_small_internet"; - break; - - case CMManagerShim::SnapPurposeIntranet: - result = "qtg_small_intranet"; - break; - - case CMManagerShim::SnapPurposeMMS: - result = "qtg_small_mms"; - break; - - case CMManagerShim::SnapPurposeOperator: - result = "qtg_small_operator"; - break; - - default: - // CMManagerShim::SnapPurposeUnknown - result = "qtg_small_favorite"; - break; - } - } - - return result; -}