diff -r ebfee66fde93 -r 84197e66a4bd messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp --- a/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp Fri Jun 04 10:25:39 2010 +0100 +++ b/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp Fri Jun 11 13:35:48 2010 +0300 @@ -21,12 +21,8 @@ #include #include #include -#include #include #include -//#include -//#include -#include #include #include #include @@ -49,36 +45,31 @@ // USER INCLUDES #include "msgunieditorbody.h" #include "UniEditorGenUtils.h" -#include "unisendingsettings.h" -#include "msgmonitor.h" +#include "UniSendingSettings.h" +#include "msgunieditormonitor.h" #include "s60qconversions.h" #include "mmsconformancecheck.h" #include "unieditorpluginloader.h" #include "unieditorplugininterface.h" #include "convergedmessage.h" #include "msgmediautil.h" +#include "msgunieditorpixmapwidget.h" +#include "msgunieditoraudiowidget.h" // Constants -const QString EDITOR_FRAME("qtg_fr_lineedit_normal"); const QString BACKGROUND_FRAME("qtg_fr_btn_normal"); -const QString AUDIO_REGION("AudioRegion"); -const QString VIDEO_REGION("VideoRegion"); -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") +#define LOC_HINT_TEXT hbTrId("txt_messaging_formlabel_enter_message_here") -const QString AUDIO_ICON("qtg_mono_audio"); const QString ANIMATION_ICON("qtg_anim_loading"); const QString ANIMATION_FILE(":/qtg_anim_loading.axml"); // LOCAL FUNCTIONS @@ -90,7 +81,7 @@ void showInsertFailureNote() { int availableSize = - (MsgMonitor::maxMmsSize() - MsgMonitor::messageSize()) + (MsgUnifiedEditorMonitor::maxMmsSize() - MsgUnifiedEditorMonitor::messageSize()) /BYTES_TO_KBYTES_FACTOR; QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM) .arg(availableSize); @@ -108,8 +99,7 @@ mHasImage(false), mHasAudio(false), mTextEdit(0), -mEditorFrame(0), -mIconItem(0), +mPixmapItem(0), mAudioItem(0), mImageSize(0), mAudioSize(0), @@ -117,31 +107,21 @@ mProcessImageOperation(0), mMediaResolver(0), mImageInfo(0), -mProcessingWidget(0) +mProcessingWidget(0), +mDraftMessage(false) { mTextEdit = new HbTextEdit(this); + mTextEdit->setSmileysEnabled(true); + mTextEdit->setPlaceholderText(LOC_HINT_TEXT); HbStyle::setItemName(mTextEdit,"textEdit"); + connect(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged())); - HbFrameDrawer* frameDrawer = new HbFrameDrawer(EDITOR_FRAME, - HbFrameDrawer::NinePieces); - - mEditorFrame = new HbFrameItem(frameDrawer,this); - HbStyle::setItemName(mEditorFrame,"textEditFrame"); - mEditorFrame->setZValue(-1); - // add "Send" action in VKB HbEditorInterface editorInterface(mTextEdit); HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this); connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage())); editorInterface.addAction(sendAction); - /* 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(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged())); - mMmsConformanceCheck = new MmsConformanceCheck; mCharCounter = new HbTextItem(this); @@ -198,17 +178,19 @@ return mTextEdit->toPlainText(); } -void MsgUnifiedEditorBody::setImage(QString& imagefile) +void MsgUnifiedEditorBody::setImage(QString& imagefile , bool draftMessage) { + mDraftMessage = draftMessage; if (!mImageInfo) { setImage(true); mImageFile = imagefile; - if (mIconItem) + if (mPixmapItem) { - delete mIconItem; - mIconItem = NULL; + mPixmapItem->setParent(NULL); + delete mPixmapItem; + mPixmapItem = NULL; mImageSize = 0; } @@ -269,7 +251,7 @@ int msgSize = messageSize(); QFileInfo fileinfo(mImageFile); int imageSize = fileinfo.size() + KEstimatedMimeHeaderSize; - if ( (imageSize + msgSize) <= MsgMonitor::maxMmsSize()) + if ( (imageSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize()) { mImageSize = imageSize; } @@ -282,21 +264,21 @@ return; } - mIconItem = new HbIconItem(this); - mIconItem->hide(); - //mIconItem->setIconName(mImageFile); - QPixmap pixmap(mImageFile); - mIconItem->setIcon(HbIcon(pixmap)); - - HbStyle::setItemName(mIconItem, "pixmap"); - mIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop); - // mIconItem->installSceneEventFilter(mGestureFilter); - + mPixmapItem = new MsgUnifiedEditorPixmapWidget(this); + mPixmapItem->hide(); + HbStyle::setItemName(mPixmapItem, "pixmap"); + mPixmapItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop); + mPixmapItem->populate(mImageFile); + connect(mPixmapItem,SIGNAL(remove()),this,SLOT(removeMedia())); + // repolish the body widget this->repolish(); // emit signal to indicate addition of image - emit contentChanged(); + if(!mDraftMessage) + { + emit contentChanged(); + } } void MsgUnifiedEditorBody::setAudio(QString& audiofile) @@ -309,6 +291,7 @@ mAudioFile = audiofile; if(mAudioItem) { + mAudioItem->setParent(NULL); delete mAudioItem; mAudioItem = NULL; mAudioSize = 0; @@ -317,7 +300,7 @@ int msgSize = messageSize(); QFileInfo fileinfo(mAudioFile); int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize; - if((audioSize + msgSize) <= MsgMonitor::maxMmsSize() ) + if((audioSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize() ) { mAudioSize = audioSize; } @@ -330,16 +313,11 @@ return; } - HbIconItem* audioIcon = new HbIconItem(AUDIO_ICON); - mAudioItem = new HbPushButton(this); + mAudioItem = new MsgUniFiedEditorAudioWidget(this); mAudioItem->hide(); HbStyle::setItemName(mAudioItem,"audioItem"); - mAudioItem->setIcon(audioIcon->icon()); - mAudioItem->setText(fileinfo.baseName()); - MsgMediaUtil mediaUtil; - mAudioItem->setAdditionalText(mediaUtil.mediaDuration(mAudioFile)); - mAudioItem->setTextAlignment(Qt::AlignVCenter | Qt::AlignLeft); - connect(mAudioItem, SIGNAL(longPress(QPointF)), this, SLOT(longPressed(QPointF))); + mAudioItem->populate(mAudioFile); + connect(mAudioItem,SIGNAL(remove()),this,SLOT(removeMedia())); // repolish the body widget this->repolish(); @@ -363,8 +341,6 @@ if(mHasAudio) mediaFiles << mAudioFile; - //TODO: append video content - return mediaFiles; } @@ -427,7 +403,7 @@ mAudioItem->show(); } - if(mIconItem || mProcessingWidget) + if(mPixmapItem || mProcessingWidget) { QSizeF imageSize(0.0,0.0); QSizeF defaultImageSize(QImageReader(mImageFile).size()); @@ -461,17 +437,18 @@ imageSize.setWidth(newWidth); } - if(mIconItem) + if(mPixmapItem) { - mIconItem->setPreferredSize(imageSize); - mIconItem->setSize(imageSize); + mPixmapItem->setPreferredSize(imageSize); + mPixmapItem->setSize(imageSize); if(mMainWindow->orientation() == Qt::Horizontal) { - QPointF currPos = mIconItem->pos(); + QPointF currPos = mPixmapItem->pos(); currPos.setX(leftMargin+((maxWidth-imageSize.width())/2)); - mIconItem->setPos(currPos); + mPixmapItem->setPos(currPos); } - mIconItem->show(); + mPixmapItem->show(); + emit enableSendButton(true); } if(mProcessingWidget) @@ -490,147 +467,46 @@ return szHint; } -void MsgUnifiedEditorBody::longPressed(QPointF position) -{ - HbMenu* menu = new HbMenu; - menu->addAction(LOC_OPEN, this, SLOT(openMedia())); - menu->addAction(LOC_REMOVE, this, SLOT(removeMedia())); - menu->addAction(LOC_DETAILS, this, SLOT(viewDetails())); - - menu->setDismissPolicy(HbPopup::TapAnywhere); - menu->setAttribute(Qt::WA_DeleteOnClose, true); - menu->setPreferredPos(position); - - menu->setObjectName(getHitRegion(position)); - menu->show(); -} - void MsgUnifiedEditorBody::removeMedia() { - HbAction* action = qobject_cast(sender()); - QString objName = action->parent()->objectName(); - if(objName == IMAGE_REGION) + QObject* senderObject = sender(); + + MsgUnifiedEditorPixmapWidget* pixmap = + qobject_cast(senderObject); + + MsgUniFiedEditorAudioWidget* audio = + qobject_cast(senderObject); + + if(pixmap) //remove image { mImageFile.clear(); - if(mIconItem) + if(mPixmapItem) { - // mIconItem->removeSceneEventFilter(mGestureFilter); - delete mIconItem; - mIconItem = NULL; + mPixmapItem->setParent(NULL); + delete mPixmapItem; + mPixmapItem = NULL; } setImage(false); mImageSize = 0; } - else if(objName == AUDIO_REGION) - { - mAudioFile.clear(); - if(mAudioItem) + else if(audio)//remove audio item { - delete mAudioItem; - mAudioItem = NULL; + mAudioFile.clear(); + if(mAudioItem) + { + mAudioItem->setParent(NULL); + delete mAudioItem; + mAudioItem = NULL; + } + setAudio(false); + mAudioSize = 0; } - setAudio(false); - mAudioSize = 0; - } - else if(objName == VIDEO_REGION) - { - //TODO: complete this with video handling story - } - else - { - // return without doing anything - return; - } this->repolish(); emit contentChanged(); } -//--------------------------------------------------------------- -// MsgUnifiedEditorBody :: openMedia -// @see header file -//--------------------------------------------------------------- -void MsgUnifiedEditorBody::openMedia() -{ - HbAction* action = qobject_cast(sender()); - QString objName = action->parent()->objectName(); - - QString fileName; - if ( objName == IMAGE_REGION ) - { - fileName = mImageFile; - } - else if ( objName == AUDIO_REGION ) - { - fileName = mAudioFile; - } - else - { - return; - } - - XQSharableFile sf; - XQAiwRequest* request = 0; - - if ( !sf.open(fileName) ) - { - return; - } - - // Get handlers - XQApplicationManager appManager; - QList fileHandlers = appManager.list(sf); - if (fileHandlers.count() > 0) - { - XQAiwInterfaceDescriptor d = fileHandlers.first(); - request = appManager.create(sf, d); - - if ( !request ) - { - sf.close(); - return ; - } - } - else - { - sf.close(); - return; - } - - // Result handlers - connect (request, SIGNAL(requestOk(const QVariant&)), - this, SLOT(handleOk(const QVariant&))); - connect (request, SIGNAL(requestError(const QVariant&)), - this, SLOT(handleError(const QVariant&))); - - request->setEmbedded(true); - request->setSynchronous(true); - - // Fill args - QList args; - args << qVariantFromValue(sf); - request->setArguments(args); - - // Fill headers - QString key("WindowTitle"); - QVariant value(QString(LOC_TITLE)); - XQRequestInfo info; - info.setInfo(key, value); - request->setInfo(info); - - request->send(); - - // Cleanup - sf.close(); - delete request; -} - -void MsgUnifiedEditorBody::viewDetails() -{ - //open details view. -} - bool MsgUnifiedEditorBody::hasImage() { return mHasImage; @@ -676,32 +552,7 @@ estimatedMediaSize = KEstimatedMmsSmilHeaderSize; } - return estimatedMediaSize + MsgMonitor::subjectSize() + MsgMonitor::containerSize(); -} - -QString MsgUnifiedEditorBody::getHitRegion(QPointF position) -{ - if(mIconItem) - { - QPolygonF imageHitRegion = mIconItem->mapToScene(mIconItem->boundingRect()); - if(imageHitRegion.containsPoint(position, Qt::OddEvenFill)) - { - return IMAGE_REGION; - } - } - - if(mAudioItem) - { - QPolygonF audioHitRegion = mAudioItem->mapToScene(mAudioItem->boundingRect()); - if(audioHitRegion.containsPoint(position, Qt::OddEvenFill)) - { - return AUDIO_REGION; - } - } - - //TODO : add hit test for video region with video userstory - - return INVALID_REGION; + return estimatedMediaSize + MsgUnifiedEditorMonitor::subjectSize() + MsgUnifiedEditorMonitor::containerSize(); } void MsgUnifiedEditorBody::onTextChanged() @@ -709,12 +560,12 @@ QString string = text(); if( string.size() > mPrevBuffer.size() && - MsgMonitor::messageType() == ConvergedMessage::Mms ) + MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Mms ) { // reject any text input if mms size limit is reached int futureSize = bodySize() + - MsgMonitor::containerSize() + MsgMonitor::subjectSize(); - if(futureSize > MsgMonitor::maxMmsSize()) + MsgUnifiedEditorMonitor::containerSize() + MsgUnifiedEditorMonitor::subjectSize(); + if(futureSize > MsgUnifiedEditorMonitor::maxMmsSize()) { mTextEdit->setPlainText(mPrevBuffer); HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT); @@ -754,7 +605,7 @@ // emit signal to indicate change in content emit contentChanged(); - if(MsgMonitor::messageType() == ConvergedMessage::Sms) + if(MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Sms) { //Set char counter value QString display = QString("%1(%2)").arg(numOfRemainingChars).arg( @@ -798,6 +649,10 @@ void MsgUnifiedEditorBody::startResizeAnimation() { + // emit signal to indicate disable the send tool button. + emit enableSendButton(false); + + QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical); mProcessingWidget = new HbWidget(this); @@ -828,6 +683,7 @@ delete mProcessingWidget; mProcessingWidget = NULL; } + } // --------------------------------------------------------- @@ -850,26 +706,6 @@ } //--------------------------------------------------------------- -// MsgUnifiedEditorBody :: handleOk -// @see header file -//--------------------------------------------------------------- -void MsgUnifiedEditorBody::handleOk(const QVariant& result) -{ - Q_UNUSED(result) -} - -//--------------------------------------------------------------- -// MsgUnifiedEditorBody :: handleError -// @see header file -//--------------------------------------------------------------- -void MsgUnifiedEditorBody::handleError(int errorCode, - const QString& errorMessage) -{ - Q_UNUSED(errorMessage) - Q_UNUSED(errorCode) -} - -//--------------------------------------------------------------- // MsgUnifiedEditorBody :: setFocus // @see header file //---------------------------------------------------------------