diff -r 40a3f856b14d -r 41a7f70b3818 phonesettings/cpphonesettingsplugins/telephonyplugin/src/cptelephonypluginview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonesettings/cpphonesettingsplugins/telephonyplugin/src/cptelephonypluginview.cpp Tue Aug 31 15:14:29 2010 +0300 @@ -0,0 +1,177 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include "cptelephonypluginview.h" +#include "cppluginlogging.h" + +/*! + \class CpTelephonyPluginView + \brief The class CpTelephonyPluginView + loads child setting plugins contained + in "Telephony" view. +*/ + +// Local constants +const char* PLUGIN_NAME_CALLSPLUGIN = "cpcallsplugin"; +const char* PLUGIN_NAME_VMBXPLUGIN = "vmbxcpplugin"; +const char* PLUGIN_NAME_DIVERTPLUGIN = "cpdivertplugin"; +const char* PLUGIN_NAME_BARRINGPLUGIN = "cpbarringplugin"; + +/*! + Constructor. +*/ +CpTelephonyPluginView::CpTelephonyPluginView() : + CpBaseSettingView(0,0), + m_helper(NULL) +{ + DPRINT << ": IN"; + + HbDataForm *form = qobject_cast(widget()); + if (form) { + HbDataFormModel *model = new HbDataFormModel(form); + form->setHeading(hbTrId("txt_phone_subhead_telephone")); + // Create and initialize plugin's item data helper + m_helper = initializeItemDataHelper(); + QList items; + + DPRINT << ": Loading cpcallsplugin"; + items.append(groupItemFromPlugin( + PLUGIN_NAME_CALLSPLUGIN)); + CpSettingFormItemData* expandedItem = items.last(); + + DPRINT << ": Loading vmbxcpplugin"; + items.append(groupItemFromPlugin( + PLUGIN_NAME_VMBXPLUGIN)); + + DPRINT << ": Loading cpdivertsplugin"; + items.append(groupItemFromPlugin( + PLUGIN_NAME_DIVERTPLUGIN)); + + DPRINT << ": Loading cpbarringplugin"; + items.append(groupItemFromPlugin( + PLUGIN_NAME_BARRINGPLUGIN)); + + // Insert items to form model + foreach (CpSettingFormItemData* i, items) { + model->appendDataFormItem(i); + } + + form->setModel(model); + + if (expandedItem) { + QModelIndex expandedItemIndex = model->indexFromItem(expandedItem); + + if (expandedItemIndex.isValid()) { + form->setExpanded(expandedItemIndex, true); + } + } + } + + DPRINT << ": OUT"; +} + +/*! + Constructor with param list. +*/ +CpTelephonyPluginView::CpTelephonyPluginView(const QVariantList ¶ms) : + CpBaseSettingView(0,0), + m_helper(NULL) +{ + HbDataForm *form = qobject_cast(widget()); + if (form){ + HbDataFormModel *model = new HbDataFormModel; + form->setHeading(hbTrId("txt_phone_subhead_telephone")); + m_helper = initializeItemDataHelper(); + QList items; + TBool expanded(false); + CpSettingFormItemData* expandedItem(NULL); + foreach (QVariant var, params){ + items.append(groupItemFromPlugin(var.toString())); + if(!expanded){ + expandedItem = items.last(); + expanded = true; + } + } + // Insert items to form model + foreach (CpSettingFormItemData* i, items) { + model->appendDataFormItem(i); + } + form->setModel(model); + if (expandedItem) { + QModelIndex expandedItemIndex = model->indexFromItem(expandedItem); + + if (expandedItemIndex.isValid()) { + form->setExpanded(expandedItemIndex, true); + } + } + } +} + +/*! + Destructor. +*/ +CpTelephonyPluginView::~CpTelephonyPluginView() +{ + DPRINT << ": IN"; + qDeleteAll(m_plugins); + delete m_helper; + DPRINT << ": OUT"; +} + +/*! + Load group item for given plugin name. +*/ +QList CpTelephonyPluginView::groupItemFromPlugin( + const QString& plugin) +{ + DPRINT << ": IN"; + + QList items; + CpPluginInterface *p(NULL); + try { + p = CpPluginLoader::loadCpPluginInterface(plugin); + if (p && m_helper) { + m_plugins.append(p); + items = p->createSettingFormItemData(*m_helper); + } + } catch(...) { + DCRITICAL << ": CATCH ERROR, item creation failed!"; + delete p; + } + + DPRINT << ": OUT"; + return items; +} + +/*! + Item data helper initialization. +*/ +CpItemDataHelper* CpTelephonyPluginView::initializeItemDataHelper() +{ + DPRINT; + return new CpItemDataHelper(qobject_cast(widget())); +} + +// End of File.