messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp
changeset 27 e4592d119491
parent 25 84d9eb65b26f
child 47 5b14749788d7
--- a/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp	Mon May 03 12:29:07 2010 +0300
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp	Fri May 14 15:49:35 2010 +0300
@@ -22,24 +22,22 @@
 #include <HbFrameDrawer>
 #include <HbIconItem>
 #include <HbPushButton>
-#include <QFileInfo>
 #include <HbAction>
 #include <hbinputeditorinterface.h>
-#include <QGraphicsLayout>
-#include <HbGestureSceneFilter>
-#include <HbGesture>
+//#include <HbGestureSceneFilter>
+//#include <HbGesture>
 #include <HbMenu>
 #include <HbMainWindow>
-#include <hbinstance.h>
 #include <HbDeviceProfile>
 #include <QImageReader>
 #include <QFileInfo>
-#include <apmstd.h>
 #include <MsgMediaResolver.h>
 #include <MsgImageInfo.h>
 #include <HbIconAnimationManager>
 #include <HbIconAnimator>
 #include <HbIcon>
+#include <QGraphicsLinearLayout>
+#include <HbNotificationDialog>
 
 #include <csmsaccount.h>
 #include <smutset.h>
@@ -68,37 +66,59 @@
 const QString IMAGE_REGION("ImageRegion");
 const QString INVALID_REGION("InvalidRegion");
 const QString SEND_ICON("qtg_mono_send");
+const int KShowCounterLimit = 10;
+const int BYTES_TO_KBYTES_FACTOR = 1024; 
 
 //Localized Constants for item specific menu
 #define LOC_OPEN    hbTrId("txt_common_menu_open")
 #define LOC_REMOVE  hbTrId("txt_common_menu_remove")
 #define LOC_DETAILS hbTrId("txt_common_menu_details")
 #define LOC_TITLE   hbTrId("txt_messaging_title_messaging")
+#define LOC_UNABLE_TO_ADD_CONTENT hbTrId("txt_messaging_dpopinfo_unable_to_add_more_content")
+#define LOC_UNABLE_TO_ATTACH_ITEM hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_avai")
+#define LOC_PROCESSING hbTrId("txt_messaging_formlabel_loading")
 
 const QString AUDIO_ICON("qtg_mono_audio");
-const QString ANIMATION_ICON(":/qtg_anim_longtap_2");
-
-const TInt KShowCounterLimit = 10;
+const QString ANIMATION_ICON("qtg_anim_loading");
+const QString ANIMATION_FILE(":/qtg_anim_loading.axml");
+// LOCAL FUNCTIONS
 
-MsgUnifiedEditorBody::MsgUnifiedEditorBody( const QString& pluginPath, 
-    QGraphicsItem *parent ) :
-HbWidget(parent),
+//---------------------------------------------------------------
+// showInsertFailureNote
+// @return fullPath of unified editor's temporary dir
+//---------------------------------------------------------------
+void showInsertFailureNote()
+{
+    int availableSize =
+            (MsgMonitor::maxMmsSize() - MsgMonitor::messageSize())
+            /BYTES_TO_KBYTES_FACTOR;
+    QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM)
+            .arg(availableSize);
+    HbNotificationDialog* dlg = new HbNotificationDialog();
+    dlg->setFocusPolicy(Qt::NoFocus);
+    dlg->setDismissPolicy(HbPopup::TapAnywhere);
+    dlg->setAttribute(Qt::WA_DeleteOnClose, true);
+    dlg->setText(displayStr);
+    dlg->show();
+}
+
+
+MsgUnifiedEditorBody::MsgUnifiedEditorBody( QGraphicsItem *parent ) :
+MsgUnifiedEditorBaseWidget(parent),
 mHasImage(false),
 mHasAudio(false),
 mTextEdit(0),
 mEditorFrame(0),
 mIconItem(0),
 mAudioItem(0),
-mPluginPath(pluginPath),
 mImageSize(0),
 mAudioSize(0),
 mVideoSize(0),
 mProcessImageOperation(0),
 mMediaResolver(0),
-mImageInfo(0)
+mImageInfo(0),
+mProcessingWidget(0)
 {
-    setPluginBaseId(style()->registerPlugin(mPluginPath));
-
     mTextEdit = new HbTextEdit(this);
     HbStyle::setItemName(mTextEdit,"textEdit");
 
@@ -115,16 +135,13 @@
     connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage()));
     editorInterface.addAction(sendAction);
 
-    mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
+  /*  mGestureFilter = new HbGestureSceneFilter(Qt::LeftButton, this);
     mGestureFilter->setLongpressAnimation(true);
     HbGesture *gesture = new HbGesture(HbGesture::longpress, 5);
     mGestureFilter->addGesture(gesture);
-    connect(gesture, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));
+    connect(gesture, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF)));*/
     connect(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged()));
 
-    mfs.Connect();
-    mfs.ShareProtected();
-
     mMmsConformanceCheck = new MmsConformanceCheck;
     
     mCharCounter = new HbTextItem(this);
@@ -146,6 +163,7 @@
     mPluginInterface =
                         mPluginLoader->getUniEditorPlugin(ConvergedMessage::Sms);    
     
+    TRAP_IGNORE(
     CSmsSettings* settings = CSmsSettings::NewLC();
     CSmsAccount* account = CSmsAccount::NewLC();
     account->LoadSettingsL( *settings );
@@ -161,23 +179,18 @@
     
     CleanupStack::PopAndDestroy( account );
     CleanupStack::PopAndDestroy( settings );                
+    );
 
-    //Set the mPrevBuffer to NULL initially
-    mPrevBuffer = QString();
-    
     mCharCounter->setVisible(false);
     mBackgroundItem->setVisible(false);
 }
 
 MsgUnifiedEditorBody::~MsgUnifiedEditorBody()
 {
-    style()->unregisterPlugin(mPluginPath);
     delete mMmsConformanceCheck;
     delete mProcessImageOperation;
     delete mMediaResolver;
     delete mImageInfo;
-    //Close has to be called after ProcessImageOperation object is deleted
-    mfs.Close();
 }
 
 QString MsgUnifiedEditorBody::text()
@@ -204,7 +217,7 @@
         if( !mProcessImageOperation )
         {
         TRAP(error,mProcessImageOperation = 
-            CUniEditorProcessImageOperation::NewL(*this, mfs));
+            CUniEditorProcessImageOperation::NewL(*this));
         }
         if( !mMediaResolver && error == KErrNone )
         {
@@ -214,21 +227,23 @@
         if( error == KErrNone)
         {
             mMediaResolver->SetCharacterSetRecognition(EFalse);
-
             HBufC *name = S60QConversions::qStringToS60Desc(imagefile);
-            RFile file = mMediaResolver->FileHandleL(*name);
-     
-            TRAP(error,mImageInfo = static_cast<CMsgImageInfo*>
-            (mMediaResolver->CreateMediaInfoL(file)));
-            if (error == KErrNone)
+            RFile file;
+            TRAP(error, file = mMediaResolver->FileHandleL(*name));
+            if(error == KErrNone)
             {
-                TRAP(error, mMediaResolver->ParseInfoDetailsL(mImageInfo, file));
+                TRAP(error,mImageInfo = static_cast<CMsgImageInfo*>
+                (mMediaResolver->CreateMediaInfoL(file)));
+                if (error == KErrNone)
+                {
+                    TRAP(error, mMediaResolver->ParseInfoDetailsL(
+                            mImageInfo, file));
+                }
+                file.Close();
             }
-
-            file.Close();
             delete name;
         }
-        
+
         if (error == KErrNone)
         {
             mSavedImageFile = imagefile;
@@ -263,6 +278,7 @@
         mImageFile.clear();
         setImage(false);
         //Show appropriate note and leave
+        showInsertFailureNote();
         return;
     }
 
@@ -274,7 +290,7 @@
 
     HbStyle::setItemName(mIconItem, "pixmap");
     mIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
-    mIconItem->installSceneEventFilter(mGestureFilter);
+   // mIconItem->installSceneEventFilter(mGestureFilter);
 
     // repolish the body widget
     this->repolish();
@@ -298,7 +314,6 @@
         mAudioSize = 0;
     }
 
-    //TODO: Add conformance checks before calculating the size    
     int msgSize = messageSize();
     QFileInfo fileinfo(mAudioFile);
     int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize;
@@ -311,6 +326,7 @@
     	mAudioFile.clear();
     	setAudio(false);
     	//Show appropriate note and leave
+    	showInsertFailureNote();
     	return;
     }    
 
@@ -332,38 +348,6 @@
     emit contentChanged();
 }
 
-void MsgUnifiedEditorBody::setVideo(QString& videofile)
-{
-    //check for insert conformance
-    if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(videofile))
-        return;
-
-    // update the media file-list
-    mVideoFile = videofile;
-
-    //TODO: Add conformance checks before calculating the size    
-    int msgSize = messageSize();
-    QFileInfo fileinfo(mVideoFile);
-    int videoSize = fileinfo.size() + KEstimatedMimeHeaderSize;
-    if((videoSize + msgSize) <= MsgMonitor::maxMmsSize() )    
-    {
-    	mVideoSize = videoSize;
-    }
-    else
-    {
-    	//Show appropriate note and leave
-    	return;
-    }    
-
-    //TODO: create video item instance
-
-    // repolish the body widget
-    this->repolish();
-
-    // emit signal to indicate addition of video
-    emit contentChanged();
-}
-
 void MsgUnifiedEditorBody::setText(QString& text)
 {
 	mTextEdit->setPlainText(text);
@@ -387,9 +371,12 @@
 QSizeF MsgUnifiedEditorBody::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
 {
     QSizeF szHint = HbWidget::sizeHint(which,constraint);
-    
-    QList<HbMainWindow *> windowList = hbInstance->allMainWindows();
-    HbMainWindow* mMainWindow = windowList[0];
+
+    HbMainWindow* mMainWindow = this->mainWindow();    
+    if(!mMainWindow)
+    {
+        return szHint;
+    }
 
     qreal leftMargin = 0.0;
     qreal rightMargin = 0.0;
@@ -440,7 +427,7 @@
         mAudioItem->show();
     }
     
-    if(mIconItem)
+    if(mIconItem || mProcessingWidget)
         {
         QSizeF imageSize(0.0,0.0);
         QSizeF defaultImageSize(QImageReader(mImageFile).size());
@@ -474,6 +461,8 @@
                 imageSize.setWidth(newWidth);
             }
 
+            if(mIconItem)
+            {
             mIconItem->setPreferredSize(imageSize);
             mIconItem->setSize(imageSize);
             if(mMainWindow->orientation() == Qt::Horizontal)
@@ -483,9 +472,18 @@
                 mIconItem->setPos(currPos);
             }
             mIconItem->show();
+            }
+            
+            if(mProcessingWidget)
+            {
+                imageSize.setHeight(mProcessingWidget->preferredHeight());
+                mProcessingWidget->setPreferredSize(imageSize);
+                mProcessingWidget->show();
+            }
             szHint.rheight() += imageSize.height();
         }
     }
+    
 
     mTextEdit->setMinimumHeight(maxHeight);
     szHint.rheight() += bodyItemSpacing;
@@ -516,7 +514,7 @@
         mImageFile.clear();
         if(mIconItem)
         {
-            mIconItem->removeSceneEventFilter(mGestureFilter);
+      //      mIconItem->removeSceneEventFilter(mGestureFilter);
             delete mIconItem;
             mIconItem = NULL;
         }
@@ -709,17 +707,28 @@
 void MsgUnifiedEditorBody::onTextChanged()
 {   
     QString string = text();
-    
-    if(  !mPrevBuffer.isEmpty() &&
-         string.size() > mPrevBuffer.size() &&
-         MsgMonitor::messageType() == ConvergedMessage::Mms )
+
+    if( string.size() > mPrevBuffer.size() &&
+        MsgMonitor::messageType() == ConvergedMessage::Mms )
     {
-        //Save the previous buffer
-        mPrevBuffer = string;
-        // emit signal to indicate change in content
-        emit contentChanged();
-                
-        return;
+        // reject any text input if mms size limit is reached
+        int futureSize = bodySize() +
+                MsgMonitor::containerSize() + MsgMonitor::subjectSize();
+        if(futureSize > MsgMonitor::maxMmsSize())
+        {
+            mTextEdit->setPlainText(mPrevBuffer);
+            HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT);
+            mTextEdit->setCursorPosition(mPrevBuffer.length());
+            return;
+        }
+        else if(!mPrevBuffer.isEmpty())
+        {
+            //Save the previous buffer
+            mPrevBuffer = string;
+            // emit signal to indicate change in content
+            emit contentChanged();
+            return;
+        }
     }
 
     //Check done for optimization
@@ -789,33 +798,36 @@
 
 void MsgUnifiedEditorBody::startResizeAnimation()
 {
-    HbIconAnimationManager *manager = HbIconAnimationManager::global();
-    bool defined = manager->addDefinitionFile(":/animation.axml");
-
-    HbIcon animIcon;
-    animIcon.setIconName("frame_anim_looping");
-
-    mIconItem = new HbIconItem(this);
-    mIconItem->hide();
-    HbStyle::setItemName(mIconItem,"pixmap");
-    mIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
-    mIconItem->setIcon(animIcon);
-
-    mImageFile = ANIMATION_ICON;
-    HbIconAnimator animator;
-    animator.setIcon(animIcon);
-
-    animator.startAnimation();
-    this->repolish();
+    QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical);
+    
+    mProcessingWidget = new HbWidget(this);
+    HbStyle::setItemName(mProcessingWidget,"pixmap"); 
+    mProcessingWidget->hide();
+    mProcessingWidget->setLayout(processingLayout);
+    
+    HbTextItem* processingText = new HbTextItem(LOC_PROCESSING,mProcessingWidget);
+    processingText->setAlignment(Qt::AlignCenter);
+    processingLayout->addItem(processingText);
+    
+    HbIconItem* animationItem = new HbIconItem(ANIMATION_ICON,mProcessingWidget);
+    processingLayout->addItem(animationItem);
+    
+    HbIconAnimator& iconAnimator = animationItem->animator();
+    HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global();
+    iconAnimationManager->addDefinitionFile(ANIMATION_FILE);
+    
+    iconAnimator.startAnimation();
+    
+    this->repolish();    
 }
 
 void MsgUnifiedEditorBody::stopResizeAnimation()
 {
-    if (mIconItem)
+    if(mProcessingWidget)
     {
-        delete mIconItem;
-        mIconItem = NULL;     
-    }   
+        delete mProcessingWidget;
+        mProcessingWidget = NULL;
+    }
 }
 
 // ---------------------------------------------------------
@@ -857,4 +869,12 @@
     Q_UNUSED(errorCode)
 }
 
+//---------------------------------------------------------------
+// MsgUnifiedEditorBody :: setFocus
+// @see header file
+//---------------------------------------------------------------
+void MsgUnifiedEditorBody::setFocus()
+{
+    mTextEdit->setFocus(Qt::MouseFocusReason);
+}
 // EOF