messagingapp/msgui/unifiedviewer/src/unicontentswidget.cpp
changeset 31 ebfee66fde93
child 47 5b14749788d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/unicontentswidget.cpp	Fri Jun 04 10:25:39 2010 +0100
@@ -0,0 +1,239 @@
+/*
+ * 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: This widget is place holder for message headers and body
+ *
+ */
+#include "unicontentswidget.h"
+
+#include <QGraphicsLinearLayout>
+#include <hbinputeditorinterface.h>
+#include <hbinputstandardfilters.h>
+
+#include "univiewerfeeder.h"
+#include "univiewslidewidget.h"
+#include "convergedmessage.h"
+#include "debugtraces.h"
+#include "nativemessageconsts.h"
+//---------------------------------------------------------------
+//UniContentsWidget :: UniContentsWidget
+// @see header file
+//---------------------------------------------------------------
+UniContentsWidget::UniContentsWidget(UniViewerFeeder* feeder,QGraphicsItem * parent) :
+    HbWidget(parent), mViewFeeder(feeder), mTotalSlides(1), mCurrentSlide(0), //Not used now
+            mSlideWindow(10), // These need not be class members
+            mInitialLoadCount(2), // These need not be class members
+            mTotalSlidesLoaded(0), mRowCount(0)
+
+{
+    QDEBUG_WRITE("UniContentsWidget: Constructor start");
+
+    mMainLayout = new QGraphicsLinearLayout(Qt::Vertical,this);
+    mMainLayout->setSpacing(0);
+    mMainLayout->setContentsMargins(0, 0, 0, 0);
+    
+    if(mViewFeeder->msgType() == KSenduiMtmMmsUidValue)
+    {
+        mMessageType = ConvergedMessage::Mms; 
+    }
+    else if (mViewFeeder->msgType() == KSenduiMtmSmsUidValue)
+    {
+        mMessageType = ConvergedMessage::Sms;
+    }
+    else // Does this hold good.
+    {   
+        mMessageType = ConvergedMessage::None;
+    }
+
+    // create the mInitailLoadCount number of slides
+    for (int i = 0; i < mInitialLoadCount; i++)
+    {
+        UniViewSlideWidget* slide = new UniViewSlideWidget(feeder, i, this);
+        addItemToLayout(slide);
+        slide->setInsideLayout(true);
+        mSlides.append(slide);
+        
+        connect(slide,SIGNAL(sendMessage(const QString&,const QString&)),
+                this, SIGNAL(sendMessage(const QString&,const QString&)));
+    }
+
+    setLayout(mMainLayout);
+
+    QDEBUG_WRITE("UniContentsWidget: Constructor end");
+}
+
+//---------------------------------------------------------------
+//UniContentsWidget :: ~UniContentsWidget
+// @see header file
+//---------------------------------------------------------------
+UniContentsWidget::~UniContentsWidget()
+{
+    for (int a = 0; a < mSlides.count(); a++)
+    {
+        delete mSlides[a];
+    }
+}
+
+//---------------------------------------------------------------
+//UniContentsWidget ::addItemToLayout
+// @see header file
+//---------------------------------------------------------------
+void UniContentsWidget::addItemToLayout(UniViewSlideWidget* item)
+{
+    mMainLayout->addItem(item);
+    ++mRowCount;
+}
+
+//---------------------------------------------------------------
+//UniContentsWidget ::removeItemFromLayout
+// @see header file
+//---------------------------------------------------------------
+void UniContentsWidget::removeItemFromLayout(UniViewSlideWidget* item)
+{
+    mMainLayout->removeItem(item);
+    mRowCount--;
+}
+
+//---------------------------------------------------------------
+//UniContentsWidget::clearContent
+// @see header file
+//---------------------------------------------------------------
+void UniContentsWidget::clearContent()
+{
+    QDEBUG_WRITE("UniContentsWidget::clearContent() start");
+
+    // Clear the first slide content
+    int slidesToClear;
+    bool returnAfterClear = false;
+    if (mSlides.count() < mSlideWindow)
+    {
+        slidesToClear = mSlides.count();
+        returnAfterClear = true;
+    }
+    else
+    {
+        slidesToClear = mSlideWindow;
+    }
+    for (int i = 0; i < slidesToClear; i++)
+    {
+        mSlides[i]->clearContent();
+        if (mSlides[i]->insideLayout())
+        {
+            this->removeItemFromLayout(mSlides[i]);
+            mSlides[i]->setParent(NULL);
+            mSlides[i]->setParentItem(NULL);
+            mSlides[i]->hide();
+            mSlides[i]->setInsideLayout(false);
+        }
+    }
+
+    mTotalSlidesLoaded = slidesToClear;
+    if (returnAfterClear)
+        return;
+
+    // Delete the remaining slides
+    for (int a = slidesToClear; a < mSlides.count(); a++)
+    {
+        mSlides[a]->setParent(NULL);
+        mSlides[a]->setParentItem(NULL);
+        delete mSlides[a];
+        mSlides.removeAt(a);
+        mRowCount--;
+    }
+
+    QDEBUG_WRITE("UniContentsWidget::clearContent() end");
+}
+
+//---------------------------------------------------------------
+//UniContentsWidget::populateContent
+// @see header file
+//---------------------------------------------------------------
+void UniContentsWidget::populateContent()
+{
+    QDEBUG_WRITE("UniContentsWidget::populateContent() start");
+
+    if ( (mViewFeeder->msgType() == KSenduiMtmMmsUidValue) &&
+         (mViewFeeder->slideCount() > 0) )
+    {
+        mMessageType = ConvergedMessage::Mms; 
+        mTotalSlides = mViewFeeder->slideCount();
+        if (mTotalSlides >= mSlides.count())
+        {
+            mTotalSlidesLoaded = mSlides.count();
+        }
+        else
+        {
+            mTotalSlidesLoaded = mTotalSlides;
+        }
+    }
+    else
+    {
+        mTotalSlidesLoaded = 1;
+        mTotalSlides = 1;
+    }
+
+    //Populate the mTotalSlidesLoaded
+    for (int i = 0; i < mTotalSlidesLoaded; i++)
+    {
+        if (!mSlides[i]->insideLayout())
+        {
+            mSlides[i]->show();
+            mSlides[i]->setInsideLayout(true);
+            this->addItemToLayout(mSlides[i]);
+        }
+        mSlides[i]->populateContent();
+    }
+
+    for (int j = mTotalSlidesLoaded; j < mSlides.count(); j++)
+    {
+        if (mSlides[j]->insideLayout())
+        {
+            this->removeItemFromLayout(mSlides[j]);
+            mSlides[j]->setInsideLayout(false);
+            mSlides[j]->hide();
+        }
+    }
+
+    //Create remaining slides on demand
+
+    QDEBUG_WRITE("UniContentsWidget::populateContent() end");
+}
+
+//---------------------------------------------------------------
+//UniContentsWidget::populateNextSlide
+// @see header file
+//---------------------------------------------------------------
+void UniContentsWidget::populateNextSlide()
+{
+    if (mTotalSlidesLoaded >= mTotalSlides)
+    {
+        return;
+    }
+
+    UniViewSlideWidget* slide = new UniViewSlideWidget(mViewFeeder,
+        mTotalSlidesLoaded);
+    addItemToLayout(slide);
+    slide->setInsideLayout(true);
+    mSlides.append(slide);
+
+    slide->populateContent();
+    
+    connect(slide,SIGNAL(sendMessage(const QString&,const QString&)),
+            this, SIGNAL(sendMessage(const QString&,const QString&)));
+
+    mTotalSlidesLoaded++;
+    //TODO to remove the previous slide if the mTotalSlidesLoaded
+    //exceeds the mSlideWindow
+}
+
+// EOF