diff -r ecc8def7944a -r 2dc6caa42ec3 ipsservices/nmipssettings/src/nmipssettingsmultiselectionitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/nmipssettings/src/nmipssettingsmultiselectionitem.cpp Fri May 14 15:41:10 2010 +0300 @@ -0,0 +1,225 @@ +/* +* 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: +* +*/ + +#include +#include +#include +#include +#include +#include + +#include "nmipssettingsmultiselectionitem.h" + +/*! + \class NmIpsSettingsMultiSelectionItem + \brief The class implements a custom HbDataFormViewItem for showing multi selection dialog. + +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constructor of NmIpsSettingsMultiSelectionItem. +*/ + + +NmIpsSettingsMultiSelectionItem::NmIpsSettingsMultiSelectionItem( + QGraphicsItem *parent, Qt::WindowFlags wFlags) + : HbWidget(parent, wFlags), + mButton(0), + mSelectionDialog(0) +{ + // Create widget layout. + QScopedPointer layout(new QGraphicsLinearLayout(Qt::Vertical, this)); + this->setLayout(layout.data()); + + // Create button. + mButton = new HbPushButton(); + layout->addItem(mButton); + + connect(mButton, SIGNAL(clicked()), this, SLOT(launchSelectionDialog())); + (void)layout.take(); +} + +/*! + Destructor of NmIpsSettingsMultiSelectionItem. +*/ +NmIpsSettingsMultiSelectionItem::~NmIpsSettingsMultiSelectionItem() +{ + delete mSelectionDialog; +} + +/*! + Returns shown text. + + \return Shown text. +*/ +QString NmIpsSettingsMultiSelectionItem::text() const +{ + return mButton->text(); +} + +/*! + Sets shown text. + + \param text Shown text. +*/ +void NmIpsSettingsMultiSelectionItem::setText(QString text) +{ + mButton->setText(text); +} + +/*! + Returns items which are shown in dialog. + + \return items which are shown in dialog. +*/ +QStringList NmIpsSettingsMultiSelectionItem::stringItems() const +{ + return mItems; +} + +/*! + Sets items which are shown in dialog. + + \param items Items which are shown in dialog. +*/ +void NmIpsSettingsMultiSelectionItem::setStringItems(QStringList items) +{ + mItems = items; + generateButtonText(); +} + +/*! + Returns selected items. + + \return selected items. +*/ +QList NmIpsSettingsMultiSelectionItem::selectedItems()const +{ + return mSelectedItems; +} + +/*! + Sets selected items. + + \param selectedItems Indexes of items which will be seleceted when dialog is shown. +*/ +void NmIpsSettingsMultiSelectionItem::setSelectedItems(QList selectedItems) +{ + // Store selected items and generate button text. + mSelectedItems = selectedItems; + generateButtonText(); +} + +/*! + Returns heading text. + + \return heading text. +*/ +QString NmIpsSettingsMultiSelectionItem::heading() const +{ + return mHeading; +} + +/*! + Sets heading text. + + \param heading Shown heading text in dialog. +*/ +void NmIpsSettingsMultiSelectionItem::setHeading(QString heading) +{ + mHeading = heading; +} + +/*! + Launches the Selection dialog. +*/ +void NmIpsSettingsMultiSelectionItem::launchSelectionDialog() +{ + if (mSelectionDialog) { + delete mSelectionDialog; + mSelectionDialog = 0; + } + + // Create the dialog. + mSelectionDialog = new HbSelectionDialog(); + mSelectionDialog->setSelectionMode(HbAbstractItemView::MultiSelection); + mSelectionDialog->setStringItems(mItems, mItems.count() + 1); + mSelectionDialog->setSelectedItems(mSelectedItems); + + // Set the heading for the dialog. + HbLabel *headingLabel = new HbLabel(mHeading, mSelectionDialog); + mSelectionDialog->setHeadingWidget(headingLabel); + mSelectionDialog->open(this, SLOT(selectionDialogClosed(HbAction *))); +} + +/*! + Handles the action from selection dialog. + + \param action Dialog closing action. +*/ +void NmIpsSettingsMultiSelectionItem::selectionDialogClosed(HbAction *action) +{ + if (action == mSelectionDialog->primaryAction()) { + // Get selected items. + mSelectedItems = mSelectionDialog->selectedItems(); + + // Generate button text from selected items. + generateButtonText(); + + QMap properties; + properties.insert("selectedItems", mSelectedItems); + + emit propertyChanged(properties); + + // Emit the signal. + emit editingFinished(); + } +} + +/*! + Generates shown text from selected items. +*/ +void NmIpsSettingsMultiSelectionItem::generateButtonText() +{ + // Generate button text only if both properties are valid. + const int itemCount(mItems.count()); + if (mItems.count() >= mSelectedItems.count()) { + // Construct separator for button text. + QChar groupSeparator = HbExtendedLocale::system().groupSeparator(); + QString separator(" "); + separator.insert(0, groupSeparator); + + QString buttonText; + QListIterator itemIterator(mSelectedItems); + while (itemIterator.hasNext()) { + QVariant item(itemIterator.next()); + bool conversionOk(false); + const int selectedIndex(item.toInt(&conversionOk)); + if (conversionOk && (selectedIndex >= 0) && (selectedIndex < itemCount)) { + // Generate button text. + buttonText.append(mItems.at(selectedIndex)); + // Add separator if not last item. + if (itemIterator.hasNext()) { + buttonText.append(separator); + } + } + } + mButton->setText(buttonText); + } +}