messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp
changeset 34 84197e66a4bd
parent 31 ebfee66fde93
child 43 35b64624a9e7
equal deleted inserted replaced
31:ebfee66fde93 34:84197e66a4bd
    19 #include <HbTextEdit>
    19 #include <HbTextEdit>
    20 #include <HbTextItem>
    20 #include <HbTextItem>
    21 #include <HbFrameItem>
    21 #include <HbFrameItem>
    22 #include <HbFrameDrawer>
    22 #include <HbFrameDrawer>
    23 #include <HbIconItem>
    23 #include <HbIconItem>
    24 #include <HbPushButton>
       
    25 #include <HbAction>
    24 #include <HbAction>
    26 #include <hbinputeditorinterface.h>
    25 #include <hbinputeditorinterface.h>
    27 //#include <HbGestureSceneFilter>
       
    28 //#include <HbGesture>
       
    29 #include <HbMenu>
       
    30 #include <HbMainWindow>
    26 #include <HbMainWindow>
    31 #include <HbDeviceProfile>
    27 #include <HbDeviceProfile>
    32 #include <QImageReader>
    28 #include <QImageReader>
    33 #include <QFileInfo>
    29 #include <QFileInfo>
    34 #include <MsgMediaResolver.h>
    30 #include <MsgMediaResolver.h>
    47 #include <xqappmgr.h>
    43 #include <xqappmgr.h>
    48 
    44 
    49 // USER INCLUDES
    45 // USER INCLUDES
    50 #include "msgunieditorbody.h"
    46 #include "msgunieditorbody.h"
    51 #include "UniEditorGenUtils.h"
    47 #include "UniEditorGenUtils.h"
    52 #include "unisendingsettings.h"
    48 #include "UniSendingSettings.h"
    53 #include "msgmonitor.h"
    49 #include "msgunieditormonitor.h"
    54 #include "s60qconversions.h"
    50 #include "s60qconversions.h"
    55 #include "mmsconformancecheck.h"
    51 #include "mmsconformancecheck.h"
    56 #include "unieditorpluginloader.h"
    52 #include "unieditorpluginloader.h"
    57 #include "unieditorplugininterface.h"
    53 #include "unieditorplugininterface.h"
    58 #include "convergedmessage.h"
    54 #include "convergedmessage.h"
    59 #include "msgmediautil.h"
    55 #include "msgmediautil.h"
       
    56 #include "msgunieditorpixmapwidget.h"
       
    57 #include "msgunieditoraudiowidget.h"
    60 
    58 
    61 // Constants
    59 // Constants
    62 const QString EDITOR_FRAME("qtg_fr_lineedit_normal");
       
    63 const QString BACKGROUND_FRAME("qtg_fr_btn_normal");
    60 const QString BACKGROUND_FRAME("qtg_fr_btn_normal");
    64 const QString AUDIO_REGION("AudioRegion");
       
    65 const QString VIDEO_REGION("VideoRegion");
       
    66 const QString IMAGE_REGION("ImageRegion");
       
    67 const QString INVALID_REGION("InvalidRegion");
       
    68 const QString SEND_ICON("qtg_mono_send");
    61 const QString SEND_ICON("qtg_mono_send");
       
    62 
    69 const int KShowCounterLimit = 10;
    63 const int KShowCounterLimit = 10;
    70 const int BYTES_TO_KBYTES_FACTOR = 1024; 
    64 const int BYTES_TO_KBYTES_FACTOR = 1024; 
    71 
    65 
    72 //Localized Constants for item specific menu
    66 //Localized Constants for item specific menu
    73 #define LOC_OPEN    hbTrId("txt_common_menu_open")
       
    74 #define LOC_REMOVE  hbTrId("txt_common_menu_remove")
       
    75 #define LOC_DETAILS hbTrId("txt_common_menu_details")
       
    76 #define LOC_TITLE   hbTrId("txt_messaging_title_messaging")
    67 #define LOC_TITLE   hbTrId("txt_messaging_title_messaging")
    77 #define LOC_UNABLE_TO_ADD_CONTENT hbTrId("txt_messaging_dpopinfo_unable_to_add_more_content")
    68 #define LOC_UNABLE_TO_ADD_CONTENT hbTrId("txt_messaging_dpopinfo_unable_to_add_more_content")
    78 #define LOC_UNABLE_TO_ATTACH_ITEM hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_avai")
    69 #define LOC_UNABLE_TO_ATTACH_ITEM hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_avai")
    79 #define LOC_PROCESSING hbTrId("txt_messaging_formlabel_loading")
    70 #define LOC_PROCESSING hbTrId("txt_messaging_formlabel_loading")
    80 
    71 #define LOC_HINT_TEXT hbTrId("txt_messaging_formlabel_enter_message_here")
    81 const QString AUDIO_ICON("qtg_mono_audio");
    72 
    82 const QString ANIMATION_ICON("qtg_anim_loading");
    73 const QString ANIMATION_ICON("qtg_anim_loading");
    83 const QString ANIMATION_FILE(":/qtg_anim_loading.axml");
    74 const QString ANIMATION_FILE(":/qtg_anim_loading.axml");
    84 // LOCAL FUNCTIONS
    75 // LOCAL FUNCTIONS
    85 
    76 
    86 //---------------------------------------------------------------
    77 //---------------------------------------------------------------
    88 // @return fullPath of unified editor's temporary dir
    79 // @return fullPath of unified editor's temporary dir
    89 //---------------------------------------------------------------
    80 //---------------------------------------------------------------
    90 void showInsertFailureNote()
    81 void showInsertFailureNote()
    91 {
    82 {
    92     int availableSize =
    83     int availableSize =
    93             (MsgMonitor::maxMmsSize() - MsgMonitor::messageSize())
    84             (MsgUnifiedEditorMonitor::maxMmsSize() - MsgUnifiedEditorMonitor::messageSize())
    94             /BYTES_TO_KBYTES_FACTOR;
    85             /BYTES_TO_KBYTES_FACTOR;
    95     QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM)
    86     QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM)
    96             .arg(availableSize);
    87             .arg(availableSize);
    97     HbNotificationDialog* dlg = new HbNotificationDialog();
    88     HbNotificationDialog* dlg = new HbNotificationDialog();
    98     dlg->setFocusPolicy(Qt::NoFocus);
    89     dlg->setFocusPolicy(Qt::NoFocus);
   106 MsgUnifiedEditorBody::MsgUnifiedEditorBody( QGraphicsItem *parent ) :
    97 MsgUnifiedEditorBody::MsgUnifiedEditorBody( QGraphicsItem *parent ) :
   107 MsgUnifiedEditorBaseWidget(parent),
    98 MsgUnifiedEditorBaseWidget(parent),
   108 mHasImage(false),
    99 mHasImage(false),
   109 mHasAudio(false),
   100 mHasAudio(false),
   110 mTextEdit(0),
   101 mTextEdit(0),
   111 mEditorFrame(0),
   102 mPixmapItem(0),
   112 mIconItem(0),
       
   113 mAudioItem(0),
   103 mAudioItem(0),
   114 mImageSize(0),
   104 mImageSize(0),
   115 mAudioSize(0),
   105 mAudioSize(0),
   116 mVideoSize(0),
   106 mVideoSize(0),
   117 mProcessImageOperation(0),
   107 mProcessImageOperation(0),
   118 mMediaResolver(0),
   108 mMediaResolver(0),
   119 mImageInfo(0),
   109 mImageInfo(0),
   120 mProcessingWidget(0)
   110 mProcessingWidget(0),
       
   111 mDraftMessage(false)
   121 {
   112 {
   122     mTextEdit = new HbTextEdit(this);
   113     mTextEdit = new HbTextEdit(this);
       
   114     mTextEdit->setSmileysEnabled(true);
       
   115     mTextEdit->setPlaceholderText(LOC_HINT_TEXT);
   123     HbStyle::setItemName(mTextEdit,"textEdit");
   116     HbStyle::setItemName(mTextEdit,"textEdit");
   124 
   117     connect(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged()));
   125     HbFrameDrawer* frameDrawer = new HbFrameDrawer(EDITOR_FRAME, 
   118 
   126                                                    HbFrameDrawer::NinePieces);
       
   127     
       
   128     mEditorFrame = new HbFrameItem(frameDrawer,this);
       
   129     HbStyle::setItemName(mEditorFrame,"textEditFrame");
       
   130     mEditorFrame->setZValue(-1);
       
   131     
       
   132     // add "Send" action in VKB
   119     // add "Send" action in VKB
   133     HbEditorInterface editorInterface(mTextEdit);
   120     HbEditorInterface editorInterface(mTextEdit);
   134     HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this);
   121     HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this);
   135     connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage()));
   122     connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage()));
   136     editorInterface.addAction(sendAction);
   123     editorInterface.addAction(sendAction);
   137 
   124 
   138   /*  mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
       
   139     mGestureFilter->setLongpressAnimation(true);
       
   140     HbGesture *gesture = new HbGesture(HbGesture::longpress, 5);
       
   141     mGestureFilter->addGesture(gesture);
       
   142     connect(gesture, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));*/
       
   143     connect(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged()));
       
   144 
       
   145     mMmsConformanceCheck = new MmsConformanceCheck;
   125     mMmsConformanceCheck = new MmsConformanceCheck;
   146     
   126     
   147     mCharCounter = new HbTextItem(this);
   127     mCharCounter = new HbTextItem(this);
   148     HbStyle::setItemName(mCharCounter, "charCounter");
   128     HbStyle::setItemName(mCharCounter, "charCounter");
   149     mCharCounter->setZValue(1.5);
   129     mCharCounter->setZValue(1.5);
   196 QString MsgUnifiedEditorBody::text()
   176 QString MsgUnifiedEditorBody::text()
   197 {
   177 {
   198     return mTextEdit->toPlainText();
   178     return mTextEdit->toPlainText();
   199 }
   179 }
   200 
   180 
   201 void MsgUnifiedEditorBody::setImage(QString& imagefile)
   181 void MsgUnifiedEditorBody::setImage(QString& imagefile , bool draftMessage)
   202 {
   182 {
       
   183     mDraftMessage = draftMessage;
   203     if (!mImageInfo)
   184     if (!mImageInfo)
   204      {
   185      {
   205         setImage(true);
   186         setImage(true);
   206         
   187         
   207         mImageFile = imagefile;
   188         mImageFile = imagefile;
   208         if (mIconItem)
   189         if (mPixmapItem)
   209         {
   190         {
   210             delete mIconItem;
   191             mPixmapItem->setParent(NULL);
   211             mIconItem = NULL;
   192             delete mPixmapItem;
       
   193             mPixmapItem = NULL;
   212             mImageSize = 0;
   194             mImageSize = 0;
   213         }
   195         }
   214 
   196 
   215         int error = KErrNone;
   197         int error = KErrNone;
   216         
   198         
   267         return;
   249         return;
   268     
   250     
   269     int msgSize = messageSize();
   251     int msgSize = messageSize();
   270     QFileInfo fileinfo(mImageFile);
   252     QFileInfo fileinfo(mImageFile);
   271     int imageSize = fileinfo.size() + KEstimatedMimeHeaderSize;
   253     int imageSize = fileinfo.size() + KEstimatedMimeHeaderSize;
   272     if ( (imageSize + msgSize) <= MsgMonitor::maxMmsSize())
   254     if ( (imageSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize())
   273     {
   255     {
   274         mImageSize = imageSize;
   256         mImageSize = imageSize;
   275     }
   257     }
   276     else
   258     else
   277     {
   259     {
   280         //Show appropriate note and leave
   262         //Show appropriate note and leave
   281         showInsertFailureNote();
   263         showInsertFailureNote();
   282         return;
   264         return;
   283     }
   265     }
   284 
   266 
   285     mIconItem = new HbIconItem(this);
   267     mPixmapItem = new MsgUnifiedEditorPixmapWidget(this);
   286     mIconItem->hide();
   268     mPixmapItem->hide();
   287     //mIconItem->setIconName(mImageFile);
   269     HbStyle::setItemName(mPixmapItem, "pixmap");
   288     QPixmap pixmap(mImageFile);
   270     mPixmapItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
   289     mIconItem->setIcon(HbIcon(pixmap));
   271     mPixmapItem->populate(mImageFile);
   290 
   272     connect(mPixmapItem,SIGNAL(remove()),this,SLOT(removeMedia()));
   291     HbStyle::setItemName(mIconItem, "pixmap");
   273     
   292     mIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
       
   293    // mIconItem->installSceneEventFilter(mGestureFilter);
       
   294 
       
   295     // repolish the body widget
   274     // repolish the body widget
   296     this->repolish();
   275     this->repolish();
   297 
   276 
   298     // emit signal to indicate addition of image
   277     // emit signal to indicate addition of image
   299     emit contentChanged();
   278     if(!mDraftMessage)
       
   279     {
       
   280         emit contentChanged();
       
   281     }
   300 }
   282 }
   301 
   283 
   302 void MsgUnifiedEditorBody::setAudio(QString& audiofile)
   284 void MsgUnifiedEditorBody::setAudio(QString& audiofile)
   303 {
   285 {
   304     //check for insert conformance
   286     //check for insert conformance
   307 
   289 
   308     setAudio(true);
   290     setAudio(true);
   309     mAudioFile = audiofile;
   291     mAudioFile = audiofile;
   310     if(mAudioItem)
   292     if(mAudioItem)
   311     {
   293     {
       
   294         mAudioItem->setParent(NULL);
   312         delete mAudioItem;
   295         delete mAudioItem;
   313         mAudioItem = NULL;
   296         mAudioItem = NULL;
   314         mAudioSize = 0;
   297         mAudioSize = 0;
   315     }
   298     }
   316 
   299 
   317     int msgSize = messageSize();
   300     int msgSize = messageSize();
   318     QFileInfo fileinfo(mAudioFile);
   301     QFileInfo fileinfo(mAudioFile);
   319     int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize;
   302     int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize;
   320     if((audioSize + msgSize) <= MsgMonitor::maxMmsSize() )
   303     if((audioSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize() )
   321     {
   304     {
   322     	mAudioSize = audioSize;
   305     	mAudioSize = audioSize;
   323     }
   306     }
   324     else
   307     else
   325     {
   308     {
   328     	//Show appropriate note and leave
   311     	//Show appropriate note and leave
   329     	showInsertFailureNote();
   312     	showInsertFailureNote();
   330     	return;
   313     	return;
   331     }    
   314     }    
   332 
   315 
   333     HbIconItem* audioIcon = new HbIconItem(AUDIO_ICON);
   316     mAudioItem = new MsgUniFiedEditorAudioWidget(this);
   334     mAudioItem = new HbPushButton(this);
       
   335     mAudioItem->hide();
   317     mAudioItem->hide();
   336     HbStyle::setItemName(mAudioItem,"audioItem");
   318     HbStyle::setItemName(mAudioItem,"audioItem");
   337     mAudioItem->setIcon(audioIcon->icon());
   319     mAudioItem->populate(mAudioFile);
   338     mAudioItem->setText(fileinfo.baseName());
   320     connect(mAudioItem,SIGNAL(remove()),this,SLOT(removeMedia()));
   339     MsgMediaUtil mediaUtil;
       
   340     mAudioItem->setAdditionalText(mediaUtil.mediaDuration(mAudioFile));
       
   341     mAudioItem->setTextAlignment(Qt::AlignVCenter | Qt::AlignLeft);
       
   342     connect(mAudioItem, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));
       
   343 
   321 
   344     // repolish the body widget
   322     // repolish the body widget
   345     this->repolish();
   323     this->repolish();
   346 
   324 
   347     // emit signal to indicate addition of audio
   325     // emit signal to indicate addition of audio
   360     // as it means we are not in middle of resizing
   338     // as it means we are not in middle of resizing
   361     if (mHasImage && mSavedImageFile.isEmpty()) 
   339     if (mHasImage && mSavedImageFile.isEmpty()) 
   362         mediaFiles << mImageFile;
   340         mediaFiles << mImageFile;
   363     if(mHasAudio)
   341     if(mHasAudio)
   364         mediaFiles << mAudioFile;
   342         mediaFiles << mAudioFile;
   365 
       
   366     //TODO: append video content
       
   367 
   343 
   368     return mediaFiles;
   344     return mediaFiles;
   369 }
   345 }
   370 
   346 
   371 QSizeF MsgUnifiedEditorBody::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
   347 QSizeF MsgUnifiedEditorBody::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
   425         QSizeF audioSize = mAudioItem->effectiveSizeHint(which, constraint);
   401         QSizeF audioSize = mAudioItem->effectiveSizeHint(which, constraint);
   426         szHint.rheight() += (audioSize.height() + bodyItemSpacing);
   402         szHint.rheight() += (audioSize.height() + bodyItemSpacing);
   427         mAudioItem->show();
   403         mAudioItem->show();
   428     }
   404     }
   429     
   405     
   430     if(mIconItem || mProcessingWidget)
   406     if(mPixmapItem || mProcessingWidget)
   431         {
   407         {
   432         QSizeF imageSize(0.0,0.0);
   408         QSizeF imageSize(0.0,0.0);
   433         QSizeF defaultImageSize(QImageReader(mImageFile).size());
   409         QSizeF defaultImageSize(QImageReader(mImageFile).size());
   434 
   410 
   435         if(!defaultImageSize.isEmpty())
   411         if(!defaultImageSize.isEmpty())
   459             {
   435             {
   460                 qreal newWidth = defaultImageSize.width()*newHeight/defaultImageSize.height();
   436                 qreal newWidth = defaultImageSize.width()*newHeight/defaultImageSize.height();
   461                 imageSize.setWidth(newWidth);
   437                 imageSize.setWidth(newWidth);
   462             }
   438             }
   463 
   439 
   464             if(mIconItem)
   440             if(mPixmapItem)
   465             {
   441             {
   466             mIconItem->setPreferredSize(imageSize);
   442             mPixmapItem->setPreferredSize(imageSize);
   467             mIconItem->setSize(imageSize);
   443             mPixmapItem->setSize(imageSize);
   468             if(mMainWindow->orientation() == Qt::Horizontal)
   444             if(mMainWindow->orientation() == Qt::Horizontal)
   469             {
   445             {
   470                 QPointF currPos = mIconItem->pos();
   446                 QPointF currPos = mPixmapItem->pos();
   471                 currPos.setX(leftMargin+((maxWidth-imageSize.width())/2));
   447                 currPos.setX(leftMargin+((maxWidth-imageSize.width())/2));
   472                 mIconItem->setPos(currPos);
   448                 mPixmapItem->setPos(currPos);
   473             }
   449             }
   474             mIconItem->show();
   450             mPixmapItem->show();
       
   451             emit enableSendButton(true);
   475             }
   452             }
   476             
   453             
   477             if(mProcessingWidget)
   454             if(mProcessingWidget)
   478             {
   455             {
   479                 imageSize.setHeight(mProcessingWidget->preferredHeight());
   456                 imageSize.setHeight(mProcessingWidget->preferredHeight());
   488     mTextEdit->setMinimumHeight(maxHeight);
   465     mTextEdit->setMinimumHeight(maxHeight);
   489     szHint.rheight() += bodyItemSpacing;
   466     szHint.rheight() += bodyItemSpacing;
   490     return szHint;
   467     return szHint;
   491 }
   468 }
   492 
   469 
   493 void MsgUnifiedEditorBody::longPressed(QPointF position)
       
   494 {
       
   495     HbMenu* menu = new HbMenu;
       
   496     menu->addAction(LOC_OPEN, this, SLOT(openMedia()));
       
   497     menu->addAction(LOC_REMOVE, this, SLOT(removeMedia()));
       
   498     menu->addAction(LOC_DETAILS, this, SLOT(viewDetails()));
       
   499 
       
   500     menu->setDismissPolicy(HbPopup::TapAnywhere);
       
   501     menu->setAttribute(Qt::WA_DeleteOnClose, true);
       
   502     menu->setPreferredPos(position);
       
   503 
       
   504     menu->setObjectName(getHitRegion(position));
       
   505     menu->show();
       
   506 }
       
   507 
       
   508 void MsgUnifiedEditorBody::removeMedia()
   470 void MsgUnifiedEditorBody::removeMedia()
   509 {
   471 {
   510     HbAction* action = qobject_cast<HbAction*>(sender());
   472     QObject* senderObject = sender();
   511     QString objName = action->parent()->objectName();
   473     
   512     if(objName == IMAGE_REGION)
   474     MsgUnifiedEditorPixmapWidget* pixmap = 
       
   475         qobject_cast<MsgUnifiedEditorPixmapWidget*>(senderObject);
       
   476 
       
   477     MsgUniFiedEditorAudioWidget* audio = 
       
   478         qobject_cast<MsgUniFiedEditorAudioWidget*>(senderObject);
       
   479     
       
   480     if(pixmap) //remove image
   513     {
   481     {
   514         mImageFile.clear();
   482         mImageFile.clear();
   515         if(mIconItem)
   483         if(mPixmapItem)
   516         {
   484         {
   517       //      mIconItem->removeSceneEventFilter(mGestureFilter);
   485             mPixmapItem->setParent(NULL);
   518             delete mIconItem;
   486             delete mPixmapItem;
   519             mIconItem = NULL;
   487             mPixmapItem = NULL;
   520         }
   488         }
   521         setImage(false);
   489         setImage(false);
   522         mImageSize = 0;
   490         mImageSize = 0;
   523     }
   491     }
   524     else if(objName == AUDIO_REGION)
   492     else if(audio)//remove audio item
   525     {
   493         {
   526         mAudioFile.clear();
   494             mAudioFile.clear();
   527         if(mAudioItem)
   495             if(mAudioItem)
   528         {
   496             {
   529             delete mAudioItem;
   497                 mAudioItem->setParent(NULL);
   530             mAudioItem = NULL;
   498                 delete mAudioItem;
   531         }
   499                 mAudioItem = NULL;
   532         setAudio(false);
   500             }
   533         mAudioSize = 0;
   501             setAudio(false);
   534     }
   502             mAudioSize = 0;
   535     else if(objName == VIDEO_REGION)
   503         }
   536     {
       
   537         //TODO: complete this with video handling story
       
   538     }
       
   539     else
       
   540     {
       
   541         // return without doing anything
       
   542         return;
       
   543     }
       
   544 
   504 
   545     this->repolish();
   505     this->repolish();
   546 
   506 
   547 	emit contentChanged();
   507 	emit contentChanged();
   548 }
       
   549 
       
   550 //---------------------------------------------------------------
       
   551 // MsgUnifiedEditorBody :: openMedia
       
   552 // @see header file
       
   553 //---------------------------------------------------------------
       
   554 void MsgUnifiedEditorBody::openMedia()
       
   555 {
       
   556     HbAction* action = qobject_cast<HbAction*>(sender());
       
   557     QString objName = action->parent()->objectName();
       
   558     
       
   559     QString fileName;
       
   560     if ( objName == IMAGE_REGION )
       
   561     {
       
   562         fileName = mImageFile;
       
   563     }
       
   564     else if ( objName == AUDIO_REGION )
       
   565     {
       
   566         fileName = mAudioFile;
       
   567     }
       
   568     else
       
   569     {
       
   570         return;
       
   571     }
       
   572     
       
   573     XQSharableFile sf;
       
   574     XQAiwRequest* request = 0;
       
   575 
       
   576     if ( !sf.open(fileName) ) 
       
   577         {
       
   578         return;
       
   579         }
       
   580 
       
   581     // Get handlers
       
   582     XQApplicationManager appManager;
       
   583     QList<XQAiwInterfaceDescriptor> fileHandlers = appManager.list(sf);
       
   584     if (fileHandlers.count() > 0)
       
   585         {
       
   586         XQAiwInterfaceDescriptor d = fileHandlers.first();
       
   587         request = appManager.create(sf, d);
       
   588     
       
   589         if ( !request )
       
   590             {
       
   591             sf.close();
       
   592             return ;
       
   593             }
       
   594         }
       
   595     else
       
   596         {
       
   597         sf.close();
       
   598         return;
       
   599         }
       
   600 
       
   601     // Result handlers
       
   602     connect (request, SIGNAL(requestOk(const QVariant&)), 
       
   603             this, SLOT(handleOk(const QVariant&)));
       
   604     connect (request, SIGNAL(requestError(const QVariant&)), 
       
   605             this, SLOT(handleError(const QVariant&)));
       
   606 
       
   607     request->setEmbedded(true);
       
   608     request->setSynchronous(true);
       
   609 
       
   610     // Fill args
       
   611     QList<QVariant> args;
       
   612     args << qVariantFromValue(sf);
       
   613     request->setArguments(args);
       
   614 
       
   615     // Fill headers
       
   616     QString key("WindowTitle");
       
   617     QVariant value(QString(LOC_TITLE));
       
   618     XQRequestInfo info;
       
   619     info.setInfo(key, value);
       
   620     request->setInfo(info);
       
   621     
       
   622     request->send();
       
   623     
       
   624     // Cleanup
       
   625     sf.close();
       
   626     delete request;
       
   627 }
       
   628 
       
   629 void MsgUnifiedEditorBody::viewDetails()
       
   630 {
       
   631     //open details view.
       
   632 }
   508 }
   633 
   509 
   634 bool MsgUnifiedEditorBody::hasImage()
   510 bool MsgUnifiedEditorBody::hasImage()
   635 {
   511 {
   636     return mHasImage;
   512     return mHasImage;
   674     {
   550     {
   675         // This is the first media content to be inserted
   551         // This is the first media content to be inserted
   676         estimatedMediaSize = KEstimatedMmsSmilHeaderSize;
   552         estimatedMediaSize = KEstimatedMmsSmilHeaderSize;
   677     }
   553     }
   678     
   554     
   679     return estimatedMediaSize + MsgMonitor::subjectSize() + MsgMonitor::containerSize();
   555     return estimatedMediaSize + MsgUnifiedEditorMonitor::subjectSize() + MsgUnifiedEditorMonitor::containerSize();
   680 }
       
   681 
       
   682 QString MsgUnifiedEditorBody::getHitRegion(QPointF position)
       
   683 {
       
   684     if(mIconItem)
       
   685     {
       
   686         QPolygonF imageHitRegion = mIconItem->mapToScene(mIconItem->boundingRect());
       
   687         if(imageHitRegion.containsPoint(position, Qt::OddEvenFill))
       
   688         {
       
   689             return IMAGE_REGION;
       
   690         }
       
   691     }
       
   692 
       
   693     if(mAudioItem)
       
   694     {
       
   695         QPolygonF audioHitRegion = mAudioItem->mapToScene(mAudioItem->boundingRect());
       
   696         if(audioHitRegion.containsPoint(position, Qt::OddEvenFill))
       
   697         {
       
   698             return AUDIO_REGION;
       
   699         }
       
   700     }
       
   701 
       
   702     //TODO : add hit test for video region with video userstory
       
   703 
       
   704     return INVALID_REGION;
       
   705 }
   556 }
   706 
   557 
   707 void MsgUnifiedEditorBody::onTextChanged()
   558 void MsgUnifiedEditorBody::onTextChanged()
   708 {   
   559 {   
   709     QString string = text();
   560     QString string = text();
   710 
   561 
   711     if( string.size() > mPrevBuffer.size() &&
   562     if( string.size() > mPrevBuffer.size() &&
   712         MsgMonitor::messageType() == ConvergedMessage::Mms )
   563         MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Mms )
   713     {
   564     {
   714         // reject any text input if mms size limit is reached
   565         // reject any text input if mms size limit is reached
   715         int futureSize = bodySize() +
   566         int futureSize = bodySize() +
   716                 MsgMonitor::containerSize() + MsgMonitor::subjectSize();
   567                 MsgUnifiedEditorMonitor::containerSize() + MsgUnifiedEditorMonitor::subjectSize();
   717         if(futureSize > MsgMonitor::maxMmsSize())
   568         if(futureSize > MsgUnifiedEditorMonitor::maxMmsSize())
   718         {
   569         {
   719             mTextEdit->setPlainText(mPrevBuffer);
   570             mTextEdit->setPlainText(mPrevBuffer);
   720             HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT);
   571             HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT);
   721             mTextEdit->setCursorPosition(mPrevBuffer.length());
   572             mTextEdit->setCursorPosition(mPrevBuffer.length());
   722             return;
   573             return;
   752     mPrevBuffer = string;
   603     mPrevBuffer = string;
   753     
   604     
   754     // emit signal to indicate change in content
   605     // emit signal to indicate change in content
   755     emit contentChanged();
   606     emit contentChanged();
   756     
   607     
   757     if(MsgMonitor::messageType() == ConvergedMessage::Sms)
   608     if(MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Sms)
   758     {
   609     {
   759         //Set char counter value
   610         //Set char counter value
   760         QString display = QString("%1(%2)").arg(numOfRemainingChars).arg(
   611         QString display = QString("%1(%2)").arg(numOfRemainingChars).arg(
   761             numOfPDUs);
   612             numOfPDUs);
   762         mCharCounter->setText(display);
   613         mCharCounter->setText(display);
   796     handleSetImage();
   647     handleSetImage();
   797 }
   648 }
   798 
   649 
   799 void MsgUnifiedEditorBody::startResizeAnimation()
   650 void MsgUnifiedEditorBody::startResizeAnimation()
   800 {
   651 {
       
   652     // emit signal to indicate disable the send tool button.
       
   653     emit enableSendButton(false);
       
   654     
       
   655 	
   801     QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical);
   656     QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical);
   802     
   657     
   803     mProcessingWidget = new HbWidget(this);
   658     mProcessingWidget = new HbWidget(this);
   804     HbStyle::setItemName(mProcessingWidget,"pixmap"); 
   659     HbStyle::setItemName(mProcessingWidget,"pixmap"); 
   805     mProcessingWidget->hide();
   660     mProcessingWidget->hide();
   826     if(mProcessingWidget)
   681     if(mProcessingWidget)
   827     {
   682     {
   828         delete mProcessingWidget;
   683         delete mProcessingWidget;
   829         mProcessingWidget = NULL;
   684         mProcessingWidget = NULL;
   830     }
   685     }
       
   686 	
   831 }
   687 }
   832 
   688 
   833 // ---------------------------------------------------------
   689 // ---------------------------------------------------------
   834 // MsgUnifiedEditorBody::isUnicode
   690 // MsgUnifiedEditorBody::isUnicode
   835 // ---------------------------------------------------------
   691 // ---------------------------------------------------------
   848     mCharCounter->setVisible(false);
   704     mCharCounter->setVisible(false);
   849     mBackgroundItem->setVisible(false);
   705     mBackgroundItem->setVisible(false);
   850 }
   706 }
   851 
   707 
   852 //---------------------------------------------------------------
   708 //---------------------------------------------------------------
   853 // MsgUnifiedEditorBody :: handleOk
       
   854 // @see header file
       
   855 //---------------------------------------------------------------
       
   856 void MsgUnifiedEditorBody::handleOk(const QVariant& result)
       
   857 {
       
   858     Q_UNUSED(result)
       
   859 }
       
   860 
       
   861 //---------------------------------------------------------------
       
   862 // MsgUnifiedEditorBody :: handleError
       
   863 // @see header file
       
   864 //---------------------------------------------------------------
       
   865 void MsgUnifiedEditorBody::handleError(int errorCode, 
       
   866     const QString& errorMessage)
       
   867 {
       
   868     Q_UNUSED(errorMessage)
       
   869     Q_UNUSED(errorCode)
       
   870 }
       
   871 
       
   872 //---------------------------------------------------------------
       
   873 // MsgUnifiedEditorBody :: setFocus
   709 // MsgUnifiedEditorBody :: setFocus
   874 // @see header file
   710 // @see header file
   875 //---------------------------------------------------------------
   711 //---------------------------------------------------------------
   876 void MsgUnifiedEditorBody::setFocus()
   712 void MsgUnifiedEditorBody::setFocus()
   877 {
   713 {