--- a/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp Thu Jun 17 09:57:06 2010 +0100
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorbody.cpp Thu Jul 22 16:32:06 2010 +0100
@@ -21,12 +21,7 @@
#include <HbFrameItem>
#include <HbFrameDrawer>
#include <HbIconItem>
-#include <HbPushButton>
#include <HbAction>
-#include <hbinputeditorinterface.h>
-//#include <HbGestureSceneFilter>
-//#include <HbGesture>
-#include <HbMenu>
#include <HbMainWindow>
#include <HbDeviceProfile>
#include <QImageReader>
@@ -45,40 +40,34 @@
#include <xqrequestinfo.h>
#include <xqsharablefile.h>
#include <xqappmgr.h>
-
+#include <xqconversions.h>
// USER INCLUDES
#include "msgunieditorbody.h"
#include "UniEditorGenUtils.h"
-#include "unisendingsettings.h"
-#include "msgmonitor.h"
-#include "s60qconversions.h"
+#include "UniSendingSettings.h"
+#include "msgunieditormonitor.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 +79,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 +97,7 @@
mHasImage(false),
mHasAudio(false),
mTextEdit(0),
-mEditorFrame(0),
-mIconItem(0),
+mPixmapItem(0),
mAudioItem(0),
mImageSize(0),
mAudioSize(0),
@@ -117,29 +105,13 @@
mProcessImageOperation(0),
mMediaResolver(0),
mImageInfo(0),
-mProcessingWidget(0)
+mProcessingWidget(0),
+mDraftMessage(false),
+mIsImageResizing(false)
{
mTextEdit = new HbTextEdit(this);
+ mTextEdit->setPlaceholderText(LOC_HINT_TEXT);
HbStyle::setItemName(mTextEdit,"textEdit");
-
- 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;
@@ -198,67 +170,82 @@
return mTextEdit->toPlainText();
}
-void MsgUnifiedEditorBody::setImage(QString& imagefile)
-{
- if (!mImageInfo)
- {
- setImage(true);
-
- mImageFile = imagefile;
- if (mIconItem)
+void MsgUnifiedEditorBody::setImage(QString& imagefile, bool draftMessage)
+ {
+ // do nothing if filepath is empty
+ if (imagefile.isEmpty())
{
- delete mIconItem;
- mIconItem = NULL;
- mImageSize = 0;
- }
-
- int error = KErrNone;
-
- if( !mProcessImageOperation )
- {
- TRAP(error,mProcessImageOperation =
- CUniEditorProcessImageOperation::NewL(*this));
- }
- if( !mMediaResolver && error == KErrNone )
- {
- TRAP(error,mMediaResolver = CMsgMediaResolver::NewL());
+ return;
}
- if( error == KErrNone)
+ mDraftMessage = draftMessage;
+ if (!mImageInfo)
{
- mMediaResolver->SetCharacterSetRecognition(EFalse);
- HBufC *name = S60QConversions::qStringToS60Desc(imagefile);
- RFile file;
- TRAP(error, file = mMediaResolver->FileHandleL(*name));
- if(error == KErrNone)
+ setImage(true);
+
+ mImageFile = imagefile;
+ if (mPixmapItem)
+ {
+ mPixmapItem->setParent(NULL);
+ delete mPixmapItem;
+ mPixmapItem = NULL;
+ mImageSize = 0;
+ }
+
+ int error = KErrNone;
+ if (!mDraftMessage)
{
- TRAP(error,mImageInfo = static_cast<CMsgImageInfo*>
- (mMediaResolver->CreateMediaInfoL(file)));
+ // if image is in draft, no need to resize it because it is resized already
+ if (!mProcessImageOperation)
+ {
+ TRAP(error,mProcessImageOperation =
+ CUniEditorProcessImageOperation::NewL(*this));
+ }
+ if (!mMediaResolver && error == KErrNone)
+ {
+ TRAP(error,mMediaResolver = CMsgMediaResolver::NewL());
+ }
+
+ if (error == KErrNone)
+ {
+ mMediaResolver->SetCharacterSetRecognition(EFalse);
+ HBufC *name = XQConversions::qStringToS60Desc(imagefile);
+ 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();
+ }
+ delete name;
}
- file.Close();
}
- delete name;
- }
-
- if (error == KErrNone)
- {
+ if (error == KErrNone && !mDraftMessage)
+ {
mSavedImageFile = imagefile;
startResizeAnimation();
+ mIsImageResizing = true;
mProcessImageOperation->Process(mImageInfo);
- }
+ }
else
- {
- delete mImageInfo;
- mImageInfo = NULL;
+ {
+ if (mImageInfo)
+ {
+ delete mImageInfo;
+ mImageInfo = NULL;
+ }
mSavedImageFile.clear();
handleSetImage();
+ }
+
}
}
-}
void MsgUnifiedEditorBody::handleSetImage()
{
@@ -269,7 +256,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,16 +269,13 @@
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();
@@ -301,6 +285,12 @@
void MsgUnifiedEditorBody::setAudio(QString& audiofile)
{
+ // do nothing if filepath is empty
+ if(audiofile.isEmpty())
+ {
+ return;
+ }
+
//check for insert conformance
if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(audiofile))
return;
@@ -309,6 +299,7 @@
mAudioFile = audiofile;
if(mAudioItem)
{
+ mAudioItem->setParent(NULL);
delete mAudioItem;
mAudioItem = NULL;
mAudioSize = 0;
@@ -317,7 +308,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 +321,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();
@@ -350,7 +336,10 @@
void MsgUnifiedEditorBody::setText(QString& text)
{
- mTextEdit->setPlainText(text);
+ if(!text.isEmpty())
+ {
+ mTextEdit->setPlainText(text);
+ }
}
const QStringList MsgUnifiedEditorBody::mediaContent()
@@ -363,8 +352,6 @@
if(mHasAudio)
mediaFiles << mAudioFile;
- //TODO: append video content
-
return mediaFiles;
}
@@ -427,7 +414,7 @@
mAudioItem->show();
}
- if(mIconItem || mProcessingWidget)
+ if(mPixmapItem || mProcessingWidget)
{
QSizeF imageSize(0.0,0.0);
QSizeF defaultImageSize(QImageReader(mImageFile).size());
@@ -461,17 +448,17 @@
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();
}
if(mProcessingWidget)
@@ -490,147 +477,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<HbAction*>(sender());
- QString objName = action->parent()->objectName();
- if(objName == IMAGE_REGION)
+ QObject* senderObject = sender();
+
+ MsgUnifiedEditorPixmapWidget* pixmap =
+ qobject_cast<MsgUnifiedEditorPixmapWidget*>(senderObject);
+
+ MsgUniFiedEditorAudioWidget* audio =
+ qobject_cast<MsgUniFiedEditorAudioWidget*>(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<HbAction*>(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<XQAiwInterfaceDescriptor> 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<QVariant> 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 +562,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 +570,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 +615,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(
@@ -777,27 +638,34 @@
void MsgUnifiedEditorBody::EditorOperationEvent(
TUniEditorProcessImageOperationEvent aEvent, TFileName aFileName)
{
- stopResizeAnimation();
-
delete mImageInfo;
mImageInfo = NULL;
if (aEvent == EUniEditorProcessImageOperationComplete &&
aFileName.Length() > 0)
{
- mImageFile = S60QConversions::s60DescToQString(aFileName);
+ mImageFile = XQConversions::s60DescToQString(aFileName);
}
else
{
mImageFile = mSavedImageFile;
}
mSavedImageFile.clear();
+
+ // image resize is complete. reset the image resize flag
+ mIsImageResizing = false;
//handle the processed image from ProcessImage Operation
handleSetImage();
+
+ stopResizeAnimation();
}
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);
@@ -810,6 +678,7 @@
processingLayout->addItem(processingText);
HbIconItem* animationItem = new HbIconItem(ANIMATION_ICON,mProcessingWidget);
+ animationItem->setAlignment(Qt::AlignHCenter);
processingLayout->addItem(animationItem);
HbIconAnimator& iconAnimator = animationItem->animator();
@@ -828,6 +697,7 @@
delete mProcessingWidget;
mProcessingWidget = NULL;
}
+
}
// ---------------------------------------------------------
@@ -850,26 +720,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
//---------------------------------------------------------------