diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgui/msgapp/src/draftslistview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/msgapp/src/draftslistview.cpp Fri Apr 16 14:56:15 2010 +0300 @@ -0,0 +1,286 @@ +/* + * 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: Drafts List View for displaying drafts messages. + * + */ + +#include "draftslistview.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// USER INCLUDES +#include "conversationsengine.h" +#include "conversationsenginedefines.h" +#include "convergedmessage.h" +#include "convergedmessageid.h" + +// LOCAL CONSTANTS +const QString LIST_ITEM_FRAME("qtg_fr_list_normal"); +const QString POPUP_LIST_FRAME("qtg_fr_popup_list_normal"); +const QString NEW_MESSAGE_ICON("qtg_mono_create_message"); +const QString SORT_ICON("qtg_mono_sort"); + +// LOCALIZATION CONSTANTS +#define LOC_COMMON_OPEN hbTrId("txt_common_menu_open") +#define LOC_COMMON_DELETE hbTrId("txt_common_menu_delete") +#define VIEW_HEADING "Drafts" +#define MENU_DELETE_ALL "Delete all drafts" +#define TB_VIEW_EXTN "View" +#define TB_NEW_MESSAGE "New message" +#define TB_EXTN_DRAFTS "Drafts" +#define TB_EXTN_CONVERSATIONS "Conversations" + +//--------------------------------------------------------------- +// DraftsListView::DraftsListView +// @see header +//--------------------------------------------------------------- +DraftsListView::DraftsListView(QGraphicsItem *parent) : + MsgBaseView(parent), mListView(0), mViewExtnList(0) +{ + createView(); +} + +//--------------------------------------------------------------- +// DraftsListView::~DraftsListView +// @see header +//--------------------------------------------------------------- +DraftsListView::~DraftsListView() +{ +} + +//--------------------------------------------------------------- +// DraftsListView::createView +// @see header +//--------------------------------------------------------------- +void DraftsListView::createView() +{ + setupToolbar(); + setupMenu(); + setupListView(); +} + +//--------------------------------------------------------------- +// DraftsListView::setupMenu +// @see header +//--------------------------------------------------------------- +void DraftsListView::setupMenu() +{ +} + +//--------------------------------------------------------------- +// DraftsListView::setupToolbar +// @see header +//--------------------------------------------------------------- +void DraftsListView::setupToolbar() +{ + HbToolBar *toolBar = this->toolBar(); + toolBar->setOrientation(Qt::Horizontal); + + // Create & setup ToolBar Extension + HbToolBarExtension *viewExtn = new HbToolBarExtension(); + HbAction *viewAction = toolBar->addExtension(viewExtn); + viewAction->setText(TB_VIEW_EXTN); + viewAction->setIcon(HbIcon(SORT_ICON)); + + mViewExtnList = new HbListWidget(); + mViewExtnList->addItem(TB_EXTN_DRAFTS); + mViewExtnList->addItem(TB_EXTN_CONVERSATIONS); + + HbListViewItem *prototype = mViewExtnList->listItemPrototype(); + HbFrameBackground frame(POPUP_LIST_FRAME, HbFrameDrawer::NinePieces); + prototype->setDefaultFrame(frame); + + connect(mViewExtnList, SIGNAL(activated(HbListWidgetItem*)), this, + SLOT(handleViewExtnActivated(HbListWidgetItem*))); + connect(mViewExtnList, SIGNAL(activated(HbListWidgetItem*)), viewExtn, SLOT(close())); + + viewExtn->setContentWidget(mViewExtnList); + + // Create & setup 2nd ToolBar button. + HbAction* newMessageAction = new HbAction(HbIcon(NEW_MESSAGE_ICON), TB_NEW_MESSAGE, this); + connect(newMessageAction, SIGNAL(triggered()), this, SLOT(createNewMessage())); + toolBar->addAction(newMessageAction); +} + +//--------------------------------------------------------------- +// DraftsListView::setupListView +// @see header +//--------------------------------------------------------------- +void DraftsListView::setupListView() +{ + // Create parent layout. + QGraphicsLinearLayout *mainLayout = new QGraphicsLinearLayout(Qt::Vertical); + mainLayout->setContentsMargins(0, 0, 0, 0); + mainLayout->setSpacing(0); + + // Create view heading. + HbGroupBox *viewHeading = new HbGroupBox(); + viewHeading->setTitleText(VIEW_HEADING); + + // Create List View. + mListView = new HbListView(this); + mListView->setScrollingStyle(HbScrollArea::PanOrFlick); + mListView->setItemRecycling(true); + mListView->setUniformItemSizes(true); + mListView->setClampingStyle(HbScrollArea::BounceBackClamping); + + // Register the custorm css path. + HbStyleLoader::registerFilePath(":/hblistviewitem.css"); + // mListView->setLayoutName("custom"); + + // Set list item properties. + HbListViewItem *prototype = mListView->listItemPrototype(); + prototype->setGraphicsSize(HbListViewItem::SmallIcon); + prototype->setStretchingStyle(HbListViewItem::StretchLandscape); + prototype->setSecondaryTextRowCount(1, 1); + HbFrameBackground frame(LIST_ITEM_FRAME, HbFrameDrawer::NinePieces); + prototype->setDefaultFrame(frame); + + // Create and set model + QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); + proxyModel->setDynamicSortFilter(true); + proxyModel->setSourceModel(ConversationsEngine::instance()->getDraftsModel()); + proxyModel->setSortRole(TimeStamp); + proxyModel->sort(0, Qt::DescendingOrder); + mListView->setModel(proxyModel); + + // Short & Long Taps + connect(mListView, SIGNAL(activated(QModelIndex)), this, SLOT(openDraftMessage(QModelIndex))); + connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this, + SLOT(handleLongPressed(HbAbstractViewItem*,QPointF))); + + // Add all widgets to main layout. + mainLayout->addItem(viewHeading); + mainLayout->addItem(mListView); + + this->setLayout(mainLayout); +} + +//------------------------------------------------------------------------------ +// DraftsListView::openDraftMessage +// @see header +//------------------------------------------------------------------------------ +void DraftsListView::openDraftMessage() +{ + openDraftMessage(mListView->currentIndex()); +} + +//------------------------------------------------------------------------------ +// DraftsListView::deleteDraftMessage +// @see header +//------------------------------------------------------------------------------ +void DraftsListView::deleteDraftMessage() +{ + int msgId = mListView->currentIndex().data(ConvergedMsgId).toInt(); + QList msgIdList; + msgIdList.append(msgId); + ConversationsEngine::instance()->deleteMessages(msgIdList); +} + +//------------------------------------------------------------------------------ +// DraftsListView::createNewMessage +// @see header +//------------------------------------------------------------------------------ +void DraftsListView::createNewMessage() +{ + QVariantList param; + param << MsgBaseView::UNIEDITOR; // target view + param << MsgBaseView::DLV; // source view + + emit switchView(param); +} + +//------------------------------------------------------------------------------ +// DraftsListView::openDraftMessage +// @see header +//------------------------------------------------------------------------------ +void DraftsListView::openDraftMessage(const QModelIndex &index) +{ + QVariant msgId = index.data(ConvergedMsgId); + QVariant msgType = index.data(MessageType); + ConvergedMessageId convergedMsgId = ConvergedMessageId(msgId.toInt()); + ConvergedMessage message; + message.setMessageType((ConvergedMessage::MessageType) msgType.toInt()); + message.setMessageId(convergedMsgId); + + // Launch uni-editor view + QByteArray dataArray; + QDataStream messageStream(&dataArray, QIODevice::WriteOnly | QIODevice::Append); + message.serialize(messageStream); + + QVariantList params; + params << MsgBaseView::UNIEDITOR; // target view + params << MsgBaseView::DLV; // source view + + params << dataArray; + emit switchView(params); +} + +//------------------------------------------------------------------------------ +// DraftsListView::handleLongPressed +// @see header +//------------------------------------------------------------------------------ +void DraftsListView::handleLongPressed(HbAbstractViewItem *item, const QPointF &coords) +{ + if (this->isVisible()) { + + // Set the current index as tapped items index. + mListView->setCurrentIndex(item->modelIndex(), QItemSelectionModel::Select); + + HbMenu *contextMenu = new HbMenu(); + + // Open + HbAction* openAction = contextMenu->addAction(LOC_COMMON_OPEN); + connect(openAction, SIGNAL(triggered()), this, SLOT(openDraftMessage())); + + // Delete + HbAction *deletAction = contextMenu->addAction(LOC_COMMON_DELETE); + connect(deletAction, SIGNAL(triggered()), this, SLOT(deleteDraftMessage())); + + contextMenu->exec(coords); + delete contextMenu; + } +} + +//------------------------------------------------------------------------------ +// DraftsListView::handleViewExtnActivated +// @see header +//------------------------------------------------------------------------------ +void DraftsListView::handleViewExtnActivated(HbListWidgetItem *item) +{ + int row = mViewExtnList->row(item); + if (CONVERSATIONS_EXTN == row) { + QVariantList param; + param << MsgBaseView::CLV; // target view + param << MsgBaseView::DLV; // source view + + emit switchView(param); + } +} + +// EOF