diff -r c743ef5928ba -r f9ce957a272c homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,212 @@ +/* + * 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 + +#include "hsarrangestate.h" +#include "hsmenuevent.h" +#include "hsmenuitemmodel.h" + +/*! + \class HsArrangeState + \ingroup group_hsmenustateplugin + \brief Application Library State. + State responsible for arrange collection's entries. + */ + +/*! + Constructor + \param parent owner + \retval void + */ +HsArrangeState::HsArrangeState(QState *parent) : + QState(parent), mDialog(0), mEntriesList(0), mItemModel(0) +{ + construct(); +} + +/*! + Destructor + \retval void + */ +HsArrangeState::~HsArrangeState() +{ + if (mEntriesList) { + delete mEntriesList; + } + if (mDialog) { + delete mDialog; + } + if (mItemModel) { + delete mItemModel; + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsArrangeState::construct() +{ + HSMENUTEST_FUNC_ENTRY("HsArrangeState::construct"); + setObjectName("homescreen.nokia.com/state/arrangestate"); + connect(this, SIGNAL(exited()),SLOT(stateExited())); + HSMENUTEST_FUNC_EXIT("HsArrangeState::construct"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsArrangeState::save() +{ + qDebug("HsArrangeState::save()"); + HSMENUTEST_FUNC_ENTRY("HsArrangeState::save"); + + getArrangedEntriesIds(); + if (mArrangedCollIdList.count() == mCollIdList.count()) { + for (int i(0); i < mArrangedCollIdList.count(); i++) { + if (mArrangedCollIdList.at(i) != mCollIdList.at(i)) { + HsMenuService::organizeCollection( + HsMenuService::allCollectionsId(), mArrangedCollIdList); + break; + } + } + } + + HSMENUTEST_FUNC_EXIT("HsArrangeState::save"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT +void HsArrangeState::onEntry(QEvent *event) +{ + qDebug("HsArrangeState::onEntry()"); + HSMENUTEST_FUNC_ENTRY("HsArrangeState::onEntry"); + QState::onEntry(event); + HsMenuEvent *menuEvent = static_cast(event); + QVariantMap data = menuEvent->data(); + + mTopItemId = data.value(itemIdKey()).toInt(); + + mItemModel = HsMenuService::getAllCollectionsModel(); + + mEntriesList = new HbListWidget(); + fulfillEntriesList(); + + mEntriesList->scrollTo(mTopModelIndex, + HbAbstractItemView::PositionAtTop); + mEntriesList->setArrangeMode(true); + + mDialog = new HbDialog(); + mDialog->setDismissPolicy(HbPopup::NoDismiss); + mDialog->setTimeout(HbPopup::NoTimeout); + + mDialog->setPreferredSize( + HbInstance::instance()->allMainWindows().at(0)->size()); + + HbLabel *label = new HbLabel(hbTrId("txt_applib_title_arrange")); + mDialog->setHeadingWidget(label); + mDialog->setContentWidget(mEntriesList); + + mDialog->setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"), + mDialog)); + + HbAction *result = mDialog->exec(); + mEntriesList->setArrangeMode(false); + if (result == mDialog->primaryAction()) { + save(); + } + delete result; + result = NULL; + + HSMENUTEST_FUNC_EXIT("HsArrangeState::onEntry"); +} +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsArrangeState::stateExited() +{ + HSMENUTEST_FUNC_ENTRY("HsArrangeState::stateExited"); + + mDialog->setHeadingWidget(0); //delete label + mDialog->setContentWidget(0); //delete mEntriesList + mEntriesList = NULL; + delete mDialog; + mDialog = NULL; + delete mItemModel; + mItemModel = NULL; + + mArrangedCollIdList.clear(); + mCollIdList.clear(); + + HSMENUTEST_FUNC_EXIT("HsArrangeState::stateExited"); + qDebug("HsArrangeState::stateExited()"); +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsArrangeState::fulfillEntriesList() +{ + qDebug() << "HsArrangeState::fulfillEntriesList"; + + mTopModelIndex = QModelIndex(); + for (int i(0); i < mItemModel->rowCount(); i++) { + QModelIndex idx = mItemModel->index(i); + HbListWidgetItem *widgetItem = new HbListWidgetItem(); + int itemId = mItemModel->data(idx, CaItemModel::IdRole).toInt(); + widgetItem->setData(mItemModel->data(idx, CaItemModel::IdRole), + CaItemModel::IdRole); + mCollIdList.append(itemId); + widgetItem->setData(mItemModel->data(idx, Qt::DisplayRole), + Qt::DisplayRole); + widgetItem->setData(mItemModel->data(idx, Qt::DecorationRole), + Qt::DecorationRole); + + mEntriesList->addItem(widgetItem); + if (mTopItemId == itemId) { + mEntriesList->indexCount(); + mEntriesList->setCurrentItem(widgetItem); + mTopModelIndex = mEntriesList->currentIndex(); + } + } +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsArrangeState::getArrangedEntriesIds() +{ + for (int i(0); i < mEntriesList->count(); i++) { + HbListWidgetItem *widgetItem = mEntriesList->item(i); + QVariant entryId = widgetItem->data(CaItemModel::IdRole); + mArrangedCollIdList.append(entryId.toInt()); + } +}