messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp
changeset 23 238255e8b033
child 25 84d9eb65b26f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,319 @@
+/*
+ * 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 displays the body of the viewer
+ *
+ */
+
+#include "univiewerbodywidget.h"
+
+#include <QFile>
+#include <QFileInfo>
+#include <QPixmap>
+#include <QGraphicsLayout>
+
+#include <HbTextItem>
+#include <HbIconItem>
+#include <HbPushButton>
+#include <HbAction>
+#include <HbMenu>
+#include <HbMainWindow>
+#include <HbInstance>
+#include <HbGesture>
+#include <HbGestureSceneFilter>
+
+#include "debugtraces.h"
+#include "univiewertextitem.h"
+
+// LOCAL CONSTANTS
+const QString AUDIO_ICON("qtg_mono_audio.svg");
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::UniViewerBodyWidget
+// @see header file
+//---------------------------------------------------------------
+UniViewerBodyWidget::UniViewerBodyWidget(QGraphicsItem *parent) :
+    HbWidget(parent), mHasText(false), mTextItem(0), mIconItem(0), mAudioItem(0)
+{
+    //This is permanent item in the widget
+    mTextItem = new UniViewerTextItem(this);
+    HbStyle::setItemName(mTextItem, "textItem");
+
+    //Gesture filter for the image
+    gestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
+    gestureFilter->setLongpressAnimation(true);
+    HbGesture *gesture = new HbGesture(HbGesture::longpress, 20);
+    gestureFilter->addGesture(gesture);
+    connect(gesture, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));
+    
+    connect(mTextItem,SIGNAL(sendMessage(const QString&)),
+            this, SIGNAL(sendMessage(const QString&)));
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::~UniViewerBodyWidget
+// @see header file
+//---------------------------------------------------------------
+UniViewerBodyWidget::~UniViewerBodyWidget()
+{
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::setImage
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::setImage(QString imagefile)
+{
+    //create image item instance
+    if (!mIconItem) {
+        mIconItem = new HbIconItem(this);
+        HbStyle::setItemName(mIconItem, "pixmap");
+    }
+
+    QPixmap pixmap(imagefile);
+    mIconItem->setIcon(HbIcon(pixmap));
+    this->repolish();
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::setAudio
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::setAudio(QString audiofile)
+{
+    if (!mAudioItem) {
+        mAudioItem = new HbPushButton(this);
+        HbStyle::setItemName(mAudioItem, "audioItem");
+    }
+    QFileInfo fileInfo(audiofile);
+    mAudioItem->setIcon(HbIcon(AUDIO_ICON));
+    mAudioItem->setText(fileInfo.baseName());
+    mAudioItem->setAdditionalText("00:00");
+    mAudioItem->setTextAlignment(Qt::AlignLeft);
+    this->repolish();
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::setVideo
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::setVideo(QString videofile)
+{
+    Q_UNUSED(videofile)
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::resizeEvent
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::resizeEvent(QGraphicsSceneResizeEvent* event)
+{
+    Q_UNUSED(event)
+
+    HbMainWindow *mainWindow = this->mainWindow();
+    if (mainWindow) {
+        qreal screenWidth = 0.0;
+        qreal screenHeight = 0.0;
+        qreal leftMargin = 0.0;
+        qreal rightMargin = 0.0;
+        qreal chromeHeight = 0.0;
+        qreal toolbarHeight = 0.0;
+        qreal iconSize = 0.0;
+        style()->parameter("hb-param-screen-width", screenWidth);
+        style()->parameter("hb-param-screen-height", screenHeight);
+        style()->parameter("hb-param-margin-gene-left", leftMargin);
+        style()->parameter("hb-param-margin-gene-right", rightMargin);
+        style()->parameter("hb-param-widget-chrome-height", chromeHeight);
+        style()->parameter("hb-param-widget-toolbar-height", toolbarHeight);
+        style()->parameter("hb-param-graphic-size-primary-large", iconSize);
+
+        qreal maxWidth = 0.0;
+        qreal maxHeight = 0.0;
+
+        if (mainWindow->orientation() == Qt::Horizontal) {
+            if (mIconItem) {
+                if (mHasText) {
+                    maxWidth = (screenWidth / 2) - leftMargin
+                        - HbDeviceProfile::profile(mIconItem).unitValue();
+                }
+                else {
+                    maxWidth = screenWidth - leftMargin - rightMargin;
+                }
+                maxHeight = screenHeight - chromeHeight - toolbarHeight;
+            }
+            if (mAudioItem) {
+                mAudioItem->setStretched(true);
+            }
+        }
+        else if (mainWindow->orientation() == Qt::Vertical) {
+            if (mIconItem) {
+                maxWidth = screenWidth - leftMargin - rightMargin;
+                maxHeight = screenHeight - chromeHeight - toolbarHeight;
+            }
+            if (mAudioItem) {
+                mAudioItem->setStretched(false);
+            }
+        }
+
+        if (mIconItem) {
+            qreal imageWidth = mIconItem->icon().defaultSize().width();
+            qreal imageHeight = mIconItem->icon().defaultSize().height();
+
+            qreal widthToSet = 0.0;
+            qreal heightToSet = 0.0;
+
+            if (imageWidth < iconSize) {
+                widthToSet = iconSize;
+                heightToSet = iconSize;
+            }
+            else if (imageWidth <= maxWidth) {
+                // resize not needed
+                widthToSet = imageWidth;
+                heightToSet = qMin(imageHeight, maxHeight);
+            }
+            else {
+                // resize needed, keep aspect-ratio and resize
+                widthToSet = maxWidth;
+                heightToSet = maxWidth * (imageHeight / imageWidth);
+                heightToSet = qMin(heightToSet, maxHeight);
+
+            }
+            if (heightToSet == maxHeight) {
+                widthToSet = heightToSet * (imageWidth / imageHeight);
+            }
+
+            mIconItem->setMinimumWidth(widthToSet);
+            mIconItem->setMinimumHeight(heightToSet);
+            mIconItem->setMaximumWidth(widthToSet);
+            mIconItem->setMaximumHeight(heightToSet);
+        }
+    }
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::longPressed
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::longPressed(QPointF position)
+{
+    HbMenu* menu = new HbMenu;
+    menu->addAction(tr("Open"), this, SLOT(openMedia()));
+    menu->addAction(tr("View details"), this, SLOT(viewDetails()));
+    menu->exec(position);
+    delete menu;
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::openMedia
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::openMedia()
+{
+    //open corresponding viewer app.
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::viewDetails
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::viewDetails()
+{
+    //open details view.
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget::setTextContent
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::setTextContent(QString text)
+{
+    text.replace('\n', QChar::LineSeparator);
+    mTextItem->setText(text);
+    setHasText(true);
+}
+
+//---------------------------------------------------------------
+// UniViewerBodyWidget::hasText
+// @see header file
+//---------------------------------------------------------------
+bool UniViewerBodyWidget::hasText()
+{
+    return mHasText;
+}
+
+//---------------------------------------------------------------
+// UniViewerBodyWidget::setHasText
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::setHasText(bool text)
+{
+    mHasText = text;
+}
+
+//---------------------------------------------------------------
+// UniViewerBodyWidget::setSlideContents
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::setSlideContents(UniMessageInfoList objList, QString slideString)
+{
+    Q_UNUSED(slideString)
+
+    int count = objList.count();
+
+    for (int a = 0; a < count; ++a) {
+        UniMessageInfo* info = objList.at(a);
+        QString type = info->mimetype();
+
+        if (type.contains("video")) {
+            setVideo(info->path());
+        }
+        else if (type.contains("audio")) {
+            setAudio(info->path());
+        }
+        if (type.contains("image")) {
+            setImage(info->path());
+        }
+        else if (type.contains("text")) {
+            QFile file(info->path());
+            file.open(QIODevice::ReadOnly);
+            QString textContent(file.readAll());
+            setTextContent(textContent);
+        }
+        delete info;
+    }
+}
+
+//---------------------------------------------------------------
+//UniViewerBodyWidget :: clearContent
+// @see header file
+//---------------------------------------------------------------
+void UniViewerBodyWidget::clearContent()
+{
+    // delete the temp items(pixmap) & clear permanent items(text)
+    if (mIconItem) {
+        mIconItem->setParent(NULL);
+        delete mIconItem;
+        mIconItem = NULL;
+    }
+
+    if (mAudioItem) {
+        mAudioItem->setParent(NULL);
+        delete mAudioItem;
+        mAudioItem = NULL;
+    }
+
+    mTextItem->setText(QString());
+    setHasText(false);
+}
+
+// EOF