--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/unicontentswidget.cpp Tue Aug 31 15:11:31 2010 +0300
@@ -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