homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionslistdialog.cpp
/*
* 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: Hs list dialog
*
*/
#include <hbaction.h>
#include <hblabel.h>
#include <hsmenuservice.h>
#include <QDebug>
#include <QStandardItemModel>
#include <hsmenuitemmodel.h>
#include "hscollectionslistdialog.h"
/*!
\class HsCollectionsListDialog
\ingroup group_hsworkerstateplugin
\brief Hs List Dialog
Hs List Dialog
*/
/*!
\var HsCollectionsListDialog::mModel
Model.
*/
/*!
\var HsCollectionsListDialog::mItemId
Selected item id.
*/
/*!
\fn void HsCollectionsListDialog::makeConnect();
Connects edit line signals to slots.
*/
/*!
\fn void HsCollectionsListDialog::makeDisconnect();
Disconnects edit line signals from slots.
*/
/*!
Constructor
\param sortOrder sort order.
\param collectionId collectionId id of collection
to remove from list.
\retval void
*/
HsCollectionsListDialog::HsCollectionsListDialog(HsSortAttribute sortOrder,
int collectionId) :
HbSelectionDialog(), mItemId(0)
{
setPrimaryAction(NULL);
setHeadingWidget(new HbLabel(hbTrId("txt_applib_title_add_to")));
// it must be single selection, although it shows checkboxes -
// it is Orbit defect and will be fixed in next release
setSelectionMode(HbAbstractItemView::SingleSelection);
mModel = standartItemModel(sortOrder, collectionId);
setModel(mModel);
}
/*!
Destructor
*/
HsCollectionsListDialog::~HsCollectionsListDialog()
{
delete mModel;
}
/*!
Executes dialog.
\retval Selected action.
*/
void HsCollectionsListDialog::open(QObject* receiver, const char* member)
{
this->setAttribute(Qt::WA_DeleteOnClose);
HbSelectionDialog::open(receiver, member);
}
/*!
\reimp
Disconnects signals and calls base class impl. which emits finished(HbAction*)
*/
void HsCollectionsListDialog::closeEvent ( QCloseEvent * event )
{
qDebug("HsCollectionsListDialog::closeEvent");
HbAction *closingAction = qobject_cast<HbAction *>(sender());
if (closingAction != actions().value(0)) {
QModelIndexList modlist = selectedModelIndexes();
if (modlist.count()) {
mItemId
= mModel-> data(modlist[0], CaItemModel::IdRole).toInt();
}
}
HbDialog::closeEvent(event); // emits finished(HbAction*)
}
/*!
Creates standard item model.
\param sortOrder sort order.
\param collectionId id of collection to remove from model.
\return QStandardItemModel - caller takes ownership.
*/
QStandardItemModel *HsCollectionsListDialog::standartItemModel(
HsSortAttribute sortOrder, int collectionId)
{
HSMENUTEST_FUNC_ENTRY("HsListDialog::standartItemModel");
QScopedPointer<HsMenuItemModel> caModel(
HsMenuService::getAllCollectionsModel(sortOrder));
caModel->setSecondLineVisibility(false);
QStandardItemModel *model = new QStandardItemModel(this);
QList<QStandardItem *> items;
for (int row = 0; row < caModel->rowCount(); row++) {
uint flags = caModel->data(caModel->index(row, 0),
CaItemModel::FlagsRole).value<EntryFlags> ();
int itemId = caModel->data(caModel->index(row, 0),
CaItemModel::IdRole).toInt();
if ((flags & RemovableEntryFlag) && (itemId != collectionId)) {
QStandardItem *standardItem = new QStandardItem();
standardItem->setData(caModel->data(caModel->index(row, 0),
CaItemModel::IdRole), CaItemModel::IdRole);
standardItem->setData(caModel->data(caModel->index(row, 0),
Qt::DisplayRole), Qt::DisplayRole);
standardItem->setData(caModel->data(caModel->index(row, 0),
Qt::DecorationRole), Qt::DecorationRole);
items << standardItem;
}
}
model->insertColumn(0, items);
insertNewCollectionItem(model);
HSMENUTEST_FUNC_EXIT("HsListDialog::standartItemModel");
return model;
}
/*!
Inserts "new collection" item into model.
\param model a model.
*/
void HsCollectionsListDialog::insertNewCollectionItem(
QStandardItemModel *model)
{
HSMENUTEST_FUNC_ENTRY("HsListDialog::insertNewCollectionItem");
QStandardItem *standardItem = new QStandardItem();
standardItem->setData(0, CaItemModel::IdRole);
standardItem->setData(hbTrId("txt_applib_list_new_collection"),
Qt::DisplayRole);
standardItem->setData(HbIcon(defaultCollectionIconId()),
Qt::DecorationRole);
QList<QStandardItem *> items;
items << standardItem;
model->insertRow(0, items);
HSMENUTEST_FUNC_EXIT("HsListDialog::insertNewCollectionItem");
}
/*!
Gets selected item id.
\retval Selected item id.
*/
int HsCollectionsListDialog::getItemId()
{
return mItemId;
}