messagingapp/msgui/msgapp/src/draftslistview.cpp
changeset 23 238255e8b033
child 25 84d9eb65b26f
--- /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 <HbMenu>
+#include <HbAction>
+#include <HbToolBar>
+#include <HbToolBarExtension>
+#include <HbListView>
+#include <HbListViewItem>
+#include <HbListWidget>
+#include <HbListWidgetItem>
+#include <HbStyleLoader>
+#include <HbGroupBox>
+#include <HbFrameBackground>
+
+#include <QSortFilterProxyModel>
+#include <QGraphicsLinearLayout>
+
+// 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<int> 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