messagingapp/msgui/unifiedviewer/src/univiewerbodywidget.cpp
changeset 52 12db4185673b
parent 43 35b64624a9e7
equal deleted inserted replaced
44:36f374c67aa8 52:12db4185673b
    19 
    19 
    20 // SYSTEM INCLUDES
    20 // SYSTEM INCLUDES
    21 #include <QFile>
    21 #include <QFile>
    22 #include <HbTextItem>
    22 #include <HbTextItem>
    23 #include <HbMainWindow>
    23 #include <HbMainWindow>
       
    24 #include <HbIconItem>
    24 
    25 
    25 // USER INCLUDES
    26 // USER INCLUDES
    26 #include "univiewertextitem.h"
    27 #include "univiewertextitem.h"
    27 #include "univiewerpixmapwidget.h"
    28 #include "univiewerpixmapwidget.h"
    28 #include "univieweraudiowidget.h"
    29 #include "univieweraudiowidget.h"
    31 const QString IMAGE_MIMETYPE("image");
    32 const QString IMAGE_MIMETYPE("image");
    32 const QString AUDIO_MIMETYPE("audio");
    33 const QString AUDIO_MIMETYPE("audio");
    33 const QString VIDEO_MIMETYPE("video");
    34 const QString VIDEO_MIMETYPE("video");
    34 const QString TEXT_MIMETYPE("text");
    35 const QString TEXT_MIMETYPE("text");
    35 
    36 
       
    37 static const char VIDEO_ICON[] = "qtg_large_video_player";
       
    38 
    36 //---------------------------------------------------------------
    39 //---------------------------------------------------------------
    37 //UniViewerBodyWidget::UniViewerBodyWidget
    40 //UniViewerBodyWidget::UniViewerBodyWidget
    38 // @see header file
    41 // @see header file
    39 //---------------------------------------------------------------
    42 //---------------------------------------------------------------
    40 UniViewerBodyWidget::UniViewerBodyWidget(QGraphicsItem *parent) :
    43 UniViewerBodyWidget::UniViewerBodyWidget(QGraphicsItem *parent) :
    41     HbWidget(parent), mHasText(false), mHasPixmap(false), mTextItem(0), mSlideCounter(0),
    44     HbWidget(parent), mHasText(false), mHasPixmap(false), mTextItem(0), mSlideCounter(0),
    42         mPixmapItem(0), mAudioItem(0)
    45         mPixmapItem(0), mAudioItem(0), mOverlayItem(0)
    43 {
    46 {
    44     this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    47     this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    45 }
    48 }
    46 
    49 
    47 //---------------------------------------------------------------
    50 //---------------------------------------------------------------
    48 //UniViewerBodyWidget::~UniViewerBodyWidget
    51 //UniViewerBodyWidget::~UniViewerBodyWidget
    49 // @see header file
    52 // @see header file
    50 //---------------------------------------------------------------
    53 //---------------------------------------------------------------
    51 UniViewerBodyWidget::~UniViewerBodyWidget()
    54 UniViewerBodyWidget::~UniViewerBodyWidget()
    52 {
    55 {
    53 }
       
    54 
       
    55 //---------------------------------------------------------------
       
    56 //UniViewerBodyWidget::setImage
       
    57 // @see header file
       
    58 //---------------------------------------------------------------
       
    59 void UniViewerBodyWidget::setPixmap(UniMessageInfo *info)
       
    60 {
       
    61     setHasPixmap(true);
       
    62     //create image item instance
       
    63     if (!mPixmapItem) {
       
    64         mPixmapItem = new UniViewerPixmapWidget(this);
       
    65         HbStyle::setItemName(mPixmapItem, "pixmap");
       
    66     }
       
    67     mPixmapItem->hide();
       
    68     mPixmapItem->populate(info);
       
    69 
       
    70     this->repolish();
       
    71 }
       
    72 
       
    73 //---------------------------------------------------------------
       
    74 //UniViewerBodyWidget::setAudio
       
    75 // @see header file
       
    76 //---------------------------------------------------------------
       
    77 void UniViewerBodyWidget::setAudio(UniMessageInfo *info)
       
    78 {
       
    79     if (!mAudioItem) {
       
    80         mAudioItem = new UniViewerAudioWidget(this);
       
    81         HbStyle::setItemName(mAudioItem, "audioItem");
       
    82     }
       
    83     mAudioItem->hide();
       
    84     mAudioItem->populate(info);
       
    85 
       
    86     this->repolish();
       
    87 }
       
    88 
       
    89 //---------------------------------------------------------------
       
    90 //UniViewerBodyWidget::setVideo
       
    91 // @see header file
       
    92 //---------------------------------------------------------------
       
    93 void UniViewerBodyWidget::setVideo(UniMessageInfo *info)
       
    94 {
       
    95     setHasPixmap(true);
       
    96     //create image item instance
       
    97     if (!mPixmapItem) {
       
    98        mPixmapItem = new UniViewerPixmapWidget(this);
       
    99        HbStyle::setItemName(mPixmapItem, "pixmap");
       
   100     }
       
   101     mPixmapItem->hide();
       
   102     mPixmapItem->populate(info);
       
   103     
       
   104     this->repolish();
       
   105 }
       
   106 
       
   107 //---------------------------------------------------------------
       
   108 //UniViewerBodyWidget::setText
       
   109 // @see header file
       
   110 //---------------------------------------------------------------
       
   111 void UniViewerBodyWidget::setText(QString text)
       
   112 {
       
   113     setHasText(true);
       
   114 
       
   115     if (!mTextItem) {
       
   116         mTextItem = new UniViewerTextItem(this);
       
   117         HbStyle::setItemName(mTextItem, "textItem");
       
   118         connect(mTextItem, SIGNAL(sendMessage(const QString&)), this,
       
   119             SIGNAL(sendMessage(const QString&)));
       
   120     }
       
   121     mTextItem->hide();
       
   122     text.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
       
   123     text.replace('\r', QChar::LineSeparator);
       
   124     mTextItem->setText(text);
       
   125     this->repolish();
       
   126 }
       
   127 
       
   128 //---------------------------------------------------------------
       
   129 // UniViewerBodyWidget::setSlideCounter
       
   130 // @see header file
       
   131 //---------------------------------------------------------------
       
   132 void UniViewerBodyWidget::setSlideCounter(QString &slideCounter)
       
   133 {
       
   134     if (!mSlideCounter) {
       
   135         mSlideCounter = new HbTextItem(this);
       
   136         HbStyle::setItemName(mSlideCounter, "slideCounter");
       
   137     }
       
   138 
       
   139     mSlideCounter->hide();
       
   140     mSlideCounter->setText(slideCounter);
       
   141     this->repolish();
       
   142 }
    56 }
   143 
    57 
   144 //---------------------------------------------------------------
    58 //---------------------------------------------------------------
   145 // UniViewerBodyWidget::setHasText
    59 // UniViewerBodyWidget::setHasText
   146 // @see header file
    60 // @see header file
   193         QString mimeType = info->mimetype();
   107         QString mimeType = info->mimetype();
   194 
   108 
   195         if (mimeType.contains(TEXT_MIMETYPE)) {
   109         if (mimeType.contains(TEXT_MIMETYPE)) {
   196             QFile file(info->path());
   110             QFile file(info->path());
   197             if (file.open(QIODevice::ReadOnly)) {
   111             if (file.open(QIODevice::ReadOnly)) {
   198                 QString textContent(file.readAll());
   112                 QString textContent;
       
   113                 QByteArray textArray;
       
   114                 textArray = file.readAll();
       
   115                 char *data = new char[textArray.size()+1];
       
   116                 strcpy(data,textArray.data());
       
   117                 //This is needed since MMS text content 
       
   118                 //is stored in UTF8 format
       
   119                 textContent = textContent.fromUtf8(data,strlen(data));
       
   120                 file.close();
       
   121                 delete []data;
   199                 setText(textContent);
   122                 setText(textContent);
   200             }
   123             }
   201         }
   124         }
   202         else if (mimeType.contains(AUDIO_MIMETYPE)) {
   125         else if (mimeType.contains(AUDIO_MIMETYPE)) {
   203             setAudio(info);
   126             setAudio(info);
   212         delete info;
   135         delete info;
   213     }
   136     }
   214 }
   137 }
   215 
   138 
   216 //---------------------------------------------------------------
   139 //---------------------------------------------------------------
   217 //UniViewerBodyWidget :: clearContent
   140 // UniViewerBodyWidget :: clearContent
   218 // @see header file
   141 // @see header file
   219 //---------------------------------------------------------------
   142 //---------------------------------------------------------------
   220 void UniViewerBodyWidget::clearContent()
   143 void UniViewerBodyWidget::clearContent()
   221 {
   144 {
   222     // delete the temp items(pixmap) & clear permanent items(text)
   145     // delete the temp items(pixmap) & clear permanent items(text)
   236         mTextItem->setParent(NULL);
   159         mTextItem->setParent(NULL);
   237         delete mTextItem;
   160         delete mTextItem;
   238         mTextItem = NULL;
   161         mTextItem = NULL;
   239     }
   162     }
   240 
   163 
       
   164     if (mOverlayItem) {
       
   165         mOverlayItem->setParent(NULL);
       
   166         delete mOverlayItem;
       
   167         mOverlayItem = NULL;
       
   168     }
       
   169 
   241     setHasText(false);
   170     setHasText(false);
   242     setHasPixmap(false);
   171     setHasPixmap(false);
   243     repolish();
   172     repolish();
       
   173 }
       
   174 
       
   175 //---------------------------------------------------------------
       
   176 // UniViewerBodyWidget::setText
       
   177 // @see header file
       
   178 //---------------------------------------------------------------
       
   179 void UniViewerBodyWidget::setText(QString text)
       
   180 {
       
   181     setHasText(true);
       
   182 
       
   183     if (!mTextItem) {
       
   184         mTextItem = new UniViewerTextItem(this);
       
   185         mTextItem->setObjectName("textItem");
       
   186         HbStyle::setItemName(mTextItem, "textItem");
       
   187         connect(mTextItem, SIGNAL(sendMessage(const QString&)), this,
       
   188             SIGNAL(sendMessage(const QString&)));
       
   189     }
       
   190     mTextItem->hide();
       
   191     text.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
       
   192     text.replace('\r', QChar::LineSeparator);
       
   193     mTextItem->setText(text);
       
   194 
       
   195     this->repolish();
   244 }
   196 }
   245 
   197 
   246 //---------------------------------------------------------------
   198 //---------------------------------------------------------------
   247 //UniViewerBodyWidget::sizeHint
   199 //UniViewerBodyWidget::sizeHint
   248 // @see header file
   200 // @see header file
   358         pixmapSize.setWidth(widthToSet);
   310         pixmapSize.setWidth(widthToSet);
   359         mPixmapItem->setPreferredSize(pixmapSize);
   311         mPixmapItem->setPreferredSize(pixmapSize);
   360         mPixmapItem->show();
   312         mPixmapItem->show();
   361     }
   313     }
   362 
   314 
       
   315     if (mOverlayItem) {
       
   316         mOverlayItem->show();
       
   317     }
       
   318 
   363     // Calculate the size hint to be returned.
   319     // Calculate the size hint to be returned.
   364     szHint.setHeight(0);
   320     szHint.setHeight(0);
   365 
   321 
   366     if (!slideCounterSize.isNull()) {
   322     if (!slideCounterSize.isNull()) {
   367         szHint.rheight() += (slideCounterSize.height() + spacing);
   323         szHint.rheight() += (slideCounterSize.height() + spacing);
   387     szHint.rheight() = qMax(maxHeight, szHint.height());
   343     szHint.rheight() = qMax(maxHeight, szHint.height());
   388 
   344 
   389     return szHint;
   345     return szHint;
   390 }
   346 }
   391 
   347 
       
   348 //---------------------------------------------------------------
       
   349 //UniViewerBodyWidget::setPixmap
       
   350 // @see header file
       
   351 //---------------------------------------------------------------
       
   352 void UniViewerBodyWidget::setPixmap(UniMessageInfo *info)
       
   353 {
       
   354     setHasPixmap(true);
       
   355     //create image item instance
       
   356     if (!mPixmapItem) {
       
   357         mPixmapItem = new UniViewerPixmapWidget(this);
       
   358         HbStyle::setItemName(mPixmapItem, "pixmap");
       
   359     }
       
   360     mPixmapItem->hide();
       
   361     mPixmapItem->populate(info);
       
   362 
       
   363     this->repolish();
       
   364 }
       
   365 
       
   366 //---------------------------------------------------------------
       
   367 //UniViewerBodyWidget::setAudio
       
   368 // @see header file
       
   369 //---------------------------------------------------------------
       
   370 void UniViewerBodyWidget::setAudio(UniMessageInfo *info)
       
   371 {
       
   372     if (!mAudioItem) {
       
   373         mAudioItem = new UniViewerAudioWidget(this);
       
   374         HbStyle::setItemName(mAudioItem, "audioItem");
       
   375     }
       
   376     mAudioItem->hide();
       
   377     mAudioItem->populate(info);
       
   378 
       
   379     this->repolish();
       
   380 }
       
   381 
       
   382 //---------------------------------------------------------------
       
   383 //UniViewerBodyWidget::setVideo
       
   384 // @see header file
       
   385 //---------------------------------------------------------------
       
   386 void UniViewerBodyWidget::setVideo(UniMessageInfo *info)
       
   387 {
       
   388     setHasPixmap(true);
       
   389     //create image item instance
       
   390     if (!mPixmapItem) {
       
   391         mPixmapItem = new UniViewerPixmapWidget(this);
       
   392         HbStyle::setItemName(mPixmapItem, "pixmap");
       
   393         connect(mPixmapItem, SIGNAL(thumbnailFound(bool, UniMessageInfo*)), this,
       
   394             SLOT(onThumbnailFound(bool, UniMessageInfo*)));
       
   395     }
       
   396     mPixmapItem->hide();
       
   397     mPixmapItem->populate(info);
       
   398 
       
   399     this->repolish();
       
   400 }
       
   401 
       
   402 //---------------------------------------------------------------
       
   403 // UniViewerBodyWidget::setSlideCounter
       
   404 // @see header file
       
   405 //---------------------------------------------------------------
       
   406 void UniViewerBodyWidget::setSlideCounter(QString &slideCounter)
       
   407 {
       
   408     if (!mSlideCounter) {
       
   409         mSlideCounter = new HbTextItem(this);
       
   410         HbStyle::setItemName(mSlideCounter, "slideCounter");
       
   411     }
       
   412 
       
   413     mSlideCounter->hide();
       
   414     mSlideCounter->setText(slideCounter);
       
   415 
       
   416     this->repolish();
       
   417 }
       
   418 
       
   419 //---------------------------------------------------------------
       
   420 // UniViewerBodyWidget::setOverlayIcon
       
   421 // @see header file
       
   422 //---------------------------------------------------------------
       
   423 void UniViewerBodyWidget::setOverlayIcon(const QString &iconName)
       
   424 {
       
   425     if (!mOverlayItem) {
       
   426         mOverlayItem = new HbIconItem(this);
       
   427         HbStyle::setItemName(mOverlayItem, "overlayItem");
       
   428     }
       
   429 
       
   430     mOverlayItem->hide();
       
   431     mOverlayItem->setIconName(iconName);
       
   432 
       
   433     this->repolish();
       
   434 }
       
   435 
       
   436 //---------------------------------------------------------------
       
   437 // UniViewerBodyWidget::onThumbnailFound
       
   438 // @see header file
       
   439 //---------------------------------------------------------------
       
   440 void UniViewerBodyWidget::onThumbnailFound(bool result, UniMessageInfo *info)
       
   441 {
       
   442     if (result) {
       
   443         // Thumbnail generation success
       
   444         setOverlayIcon(VIDEO_ICON);
       
   445     }
       
   446     else {
       
   447         // Show video content in audio widget.
       
   448         setAudio(info);
       
   449 
       
   450         // Remove the pixmap widget.
       
   451         setHasPixmap(false);
       
   452         if (mPixmapItem) {
       
   453             HbStyle::setItemName(mPixmapItem, "");
       
   454             mPixmapItem->hide();
       
   455         }
       
   456     }
       
   457 }
       
   458 
   392 // EOF
   459 // EOF