diff -r dcf0eedfc1a3 -r d189ee25cf9d emailuis/nmsettingui/src/nmmailboxselectionview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/nmsettingui/src/nmmailboxselectionview.cpp Tue Aug 31 15:04:17 2010 +0300 @@ -0,0 +1,236 @@ +/* +* 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 +#include + +#include "nmmailboxentryitem.h" +#include "nmmailboxselectionview.h" +#include "nmsettingsviewfactory.h" +#include "nmmailboxsettingsmanager.h" + +/*! + \class NmMailboxSelectionView + \brief Selection view for the mailbox accounts. +*/ + +// ======== MEMBER FUNCTIONS ======== + +/*! + Constructor of NmMailboxSelectionView. + + Constructs the model and populates it with the mailbox items. +*/ +NmMailboxSelectionView::NmMailboxSelectionView( + const NmSettingsViewFactory &settingsFactory, + NmMailboxSettingsManager &settingsManager, + const QList &mailboxList, + QGraphicsItem *parent) +: CpBaseSettingView(0, parent), + mSettingsManager(settingsManager), + mSettingsFactory(settingsFactory), + mRefreshForm(false) +{ + NM_FUNCTION; + + QScopedPointer signalMapper(new QSignalMapper()); + + // Connect the form's activated signal. + HbDataForm *form = qobject_cast(widget()); + connect(form, SIGNAL(activated(QModelIndex)), + this, SLOT(itemActivate(QModelIndex))); + + QScopedPointer itemHelper(new CpItemDataHelper()); + QScopedPointer model(new HbDataFormModel()); + + // Ownership is not transferred yet. + mItemDataHelper = itemHelper.data(); + mModel = model.data(); + + // populate data. + populateDataModel(mailboxList); + + (void)model.take(); + (void)itemHelper.take(); + mSignalMapper = signalMapper.take(); + + // Set the localized title string. + setTitle(hbTrId("txt_mail_title_mail")); +} + +/*! + Destructor of NmMailboxSelectionView. +*/ +NmMailboxSelectionView::~NmMailboxSelectionView() +{ + NM_FUNCTION; + + delete mItemDataHelper; + delete mModel; + delete mSignalMapper; +} + +/*! + Handles the mailbox button click signal. Calls the SettingsViewFactory + to construct the setting view for the selected mailbox account. + + \param item NmMailBoxEntryItem mapped for the button. + +*/ +void NmMailboxSelectionView::buttonClick(QObject *item) +{ + NM_FUNCTION; + + NmMailboxEntryItem *entryItem = static_cast(item); + const NmId &id = entryItem->id(); + const QString &name = entryItem->text(); + mSettingsFactory.launchSettingView(id, name); +} + +/*! + Handels the dataform's activated signal when item is shown. + Maps the signal/mailbox item for the buttons. + + \param index Data model index. + +*/ +void NmMailboxSelectionView::itemActivate(const QModelIndex &index) +{ + NM_FUNCTION; + + HbDataForm *form = qobject_cast(widget()); + HbDataFormModel *model = static_cast(form->model()); + NmMailboxEntryItem *item = static_cast(model->itemFromIndex(index)); + + if (!mSignalMapper->mapping(item)) { + + HbDataFormViewItem *viewItem = + static_cast(form->itemByIndex(index)); + HbPushButton *button = + static_cast(viewItem->dataItemContentWidget()); + + connect(button, SIGNAL(pressed()), mSignalMapper, SLOT(map())); + + mSignalMapper->setMapping(button, item); + + connect(mSignalMapper, SIGNAL(mapped(QObject *)), + this, SLOT(buttonClick(QObject *)), Qt::UniqueConnection); + } +} + +/*! + Populates the data model for the view. + + \param mailboxList List of all the available mailbox accounts. + +*/ +void NmMailboxSelectionView::populateDataModel(const QList &mailboxList) +{ + NM_FUNCTION; + + mModel->clear(); + foreach (NmMailbox *mailbox, mailboxList) { + NmId id = mailbox->id(); + QScopedPointer item( + new NmMailboxEntryItem(*mItemDataHelper, id, mailbox->name(), + mSettingsManager.mailboxIcon(id))); + mModel->appendDataFormItem(item.data()); + item.take(); + } + HbDataForm *form = qobject_cast(widget()); + form->setModel(mModel); +} + +/*! + Handles mailbox list changes. + + \param mailboxId mailbox id + \param type type of change \sa nmsettingscommon.h +*/ +void NmMailboxSelectionView::mailboxListChanged(const NmId &mailboxId, + NmSettings::MailboxEventType type) +{ + NM_FUNCTION; + + switch (type) { + case NmSettings::MailboxDeleted: { + // Search correct item. + QModelIndex itemModelIndex; + bool found(false); + const int rowCount(mModel->rowCount()); + for (int rowIndex(0); rowIndex < rowCount && !found; ++rowIndex) { + itemModelIndex = mModel->index(rowIndex, 0); + NmMailboxEntryItem *entryItem = static_cast( + mModel->itemFromIndex(itemModelIndex)); + if (entryItem && (entryItem->id() == mailboxId)) { + found = true; + } + } + + if (found) { + // There is nothing that we can do if removing fails. + (void)mModel->removeItem(itemModelIndex); + } + break; + } + default: { + break; + } + } +} + +/*! + Handles mailbox property changes. + + \param mailboxId mailbox id + \param property changed property \sa nmsettingscommon.h + \param value changed value +*/ +void NmMailboxSelectionView::mailboxPropertyChanged(const NmId &mailboxId, + QVariant property, QVariant value) +{ + NM_FUNCTION; + + // Search correct item. + NmMailboxEntryItem *entryItem = 0; + const int itemCount(mModel->rowCount()); + for (int itemIndex(0); itemIndex < itemCount; ++itemIndex) { + entryItem = static_cast( + mModel->itemFromIndex(mModel->index(itemIndex, 0))); + if (entryItem && (entryItem->id() == mailboxId)) { + break; + } + entryItem = 0; + } + + switch (property.toInt()) { + case NmSettings::MailboxName: + if (entryItem) { + entryItem->setText(value.toString()); + mRefreshForm = true; + } + break; + default: + break; + } +}