messagingapp/msgui/conversationview/src/msgconversationbaseview.cpp
changeset 31 ebfee66fde93
child 34 84197e66a4bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/src/msgconversationbaseview.cpp	Fri Jun 04 10:25:39 2010 +0100
@@ -0,0 +1,278 @@
+/*
+ * 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:Conversation Base view.
+ *
+ */
+
+#include "msgconversationbaseview.h"
+
+// SYSTEM INCLUDES
+#include <QGraphicsLinearLayout>
+#include <HbMainWindow>
+#include <HbNotificationDialog>
+
+#include <xqaiwrequest.h>
+#include <xqappmgr.h>
+
+#include <cntservicescontact.h>
+#include <qtcontactsglobal.h>
+#include <qtcontacts.h>
+#include <ccsdefs.h>
+#include <XQSettingsManager>
+#include <QTimer>
+
+// USER INCLUDES
+#include "msgconversationview.h"
+#include "conversationsengine.h"
+#include "msgviewdefines.h"
+#include "conversationsenginedefines.h"
+#include "msgcontactcardwidget.h"
+#include "conversationidpsconsts.h"
+
+QTM_USE_NAMESPACE
+
+// LOCALIZATION
+#define LOC_SAVED_TO_DRAFTS    hbTrId("txt_messaging_dpopinfo_saved_to_drafts")
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::MsgConversationBaseView
+// Constructor
+//---------------------------------------------------------------
+MsgConversationBaseView::MsgConversationBaseView(QGraphicsItem* parent) :
+MsgBaseView(parent),
+mConversationId(-1),
+mCVIdkey(XQSettingsKey::TargetPublishAndSubscribe,KMsgCVIdProperty, 
+        KMsgCVIdKey)
+{ 
+    connect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));   
+    initView();
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::~MsgConversationBaseView
+// Destructor
+//---------------------------------------------------------------
+MsgConversationBaseView::~MsgConversationBaseView()
+{   
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::openConversationView
+// Launches conversation view for entry id and mode
+//---------------------------------------------------------------
+void MsgConversationBaseView::openConversation(qint64 convId)
+{
+    ConversationsEngine::instance()->getConversations(convId);
+    mConversationId = convId;
+    connect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
+    
+	// publsih conversation id
+    mSettingsManager->writeItemValue(mCVIdkey,(int)mConversationId);
+    
+    if(mConversationView)
+        {
+        mConversationView->refreshView();
+        }
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::initView
+// create and initialise the conversationview
+//---------------------------------------------------------------
+void MsgConversationBaseView::initView()
+    {
+    
+    // Create header widget
+    mContactCard = new MsgContactCardWidget(this);
+
+    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+
+    qreal spacing = HbDeviceProfile::profile(this).unitValue();
+    mMainLayout->setSpacing(spacing);
+    mMainLayout->setContentsMargins(CONTENT_MARGIN, CONTENT_MARGIN,
+                                   CONTENT_MARGIN, CONTENT_MARGIN);
+
+    mMainLayout->addItem(mContactCard);
+
+    /**
+     * Create conversation view and connect to proper signals.
+     * NOTE: contactCardWidget is NOT parent of MsgConversationView.
+     * Just passing reference to MsgConversationView.
+     */
+    mConversationView = new MsgConversationView(mContactCard);
+
+    mConversationView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+    connect(mConversationView, SIGNAL(closeConversationView()),
+            this, SLOT(closeConversationView()));
+
+    connect(mConversationView,SIGNAL(replyStarted()),
+            this,SLOT(markMessagesAsRead()));
+
+    connect(mConversationView, SIGNAL(switchView(const QVariantList&)),
+            this, SIGNAL(switchView(const QVariantList&)));
+    
+    connect(mConversationView,SIGNAL(hideChrome(bool)),this,SLOT(hideChrome(bool)));
+
+    this->setMenu(mConversationView->menu());
+
+    mMainLayout->addItem(mConversationView);
+
+    this->setLayout(mMainLayout);
+    
+    mSettingsManager = new XQSettingsManager(this);
+          
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::closeConversationView
+// close conversation view
+//---------------------------------------------------------------
+void MsgConversationBaseView::closeConversationView()
+{
+   markMessagesAsRead();
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::markMessagesAsRead
+// Mark unread msgs in cv as read
+//---------------------------------------------------------------
+void MsgConversationBaseView::markMessagesAsRead()
+    {
+    if( mConversationId >= 0)
+        {
+        ConversationsEngine::instance()->markConversationRead(mConversationId);
+        }
+    }
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::saveContentToDrafts
+// saves the editors content to drafts
+//---------------------------------------------------------------
+void MsgConversationBaseView::saveContentToDrafts()
+    {
+    bool result = false;
+    if( mConversationId >= 0)
+        {
+        result = mConversationView->saveContentToDrafts();
+        }
+    
+    if(result)
+        {
+        HbNotificationDialog::launchDialog(LOC_SAVED_TO_DRAFTS);
+        }
+    }
+
+//--------------------------------------------------------------- 
+// MsgConversationBaseView::conversationId 
+// get the conversation ID 
+//---------------------------------------------------------------     
+qint64 MsgConversationBaseView::conversationId() 
+    { 
+    return mConversationId; 
+    }
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::clearContent
+// clears conversation view content
+//---------------------------------------------------------------
+void MsgConversationBaseView::clearContent()
+{
+    ConversationsEngine::instance()->clearConversations();
+    mConversationView->clearEditors();
+}
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::handleOk
+//
+//---------------------------------------------------------------
+void MsgConversationBaseView::handleOk(const QVariant& result)
+    {
+    Q_UNUSED(result)
+    }
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::handleError
+//
+//---------------------------------------------------------------
+void MsgConversationBaseView::handleError(int errorCode, const QString& errorMessage)
+    {
+    Q_UNUSED(errorMessage)
+    Q_UNUSED(errorCode)
+    }
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::doDelayedConstruction
+//
+//---------------------------------------------------------------	
+void MsgConversationBaseView::doDelayedConstruction()
+{
+    disconnect(this->mainWindow(),SIGNAL(viewReady()),this,SLOT(doDelayedConstruction()));
+    QTimer::singleShot(50,this,SLOT(handleViewReady()));    
+}
+
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::handleViewReady
+//
+//---------------------------------------------------------------	
+void MsgConversationBaseView::handleViewReady()
+    {
+    ConversationsEngine::instance()->fetchMoreConversations();
+    }
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::hideChrome
+//
+//---------------------------------------------------------------
+void MsgConversationBaseView::hideChrome(bool hide)
+    {
+    if(hide)
+        {        
+        this->hideItems(Hb::StatusBarItem | Hb::TitleBarItem);
+        this->setContentFullScreen(true);
+        
+        if(this->mainWindow()->orientation() == Qt::Horizontal)
+            {
+            mMainLayout->removeItem(mContactCard);
+            mContactCard->hide();
+            }
+        }
+    else
+        {
+        this->showItems(Hb::StatusBarItem | Hb::TitleBarItem);
+        this->setContentFullScreen(false);
+        
+        if(!mContactCard->isVisible())
+            {
+            mMainLayout->insertItem(0,mContactCard);
+            mContactCard->show();
+            }
+        }
+    }
+
+//---------------------------------------------------------------
+// MsgConversationBaseView::setPSCVId
+//
+//---------------------------------------------------------------
+void MsgConversationBaseView::setPSCVId(bool setId)
+{
+    if(setId){
+    mSettingsManager->writeItemValue(mCVIdkey,(int)mConversationId);
+    }
+    else {
+    mSettingsManager->writeItemValue(mCVIdkey,-1);
+    }
+}
+// EOF