diff -r 84d9eb65b26f -r e4592d119491 messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp --- 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 #include #include -#include #include #include -#include -#include -#include +//#include +//#include #include #include -#include #include #include #include -#include #include #include #include #include #include +#include +#include #include #include @@ -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 - (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 + (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 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