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> |
|
27 //#include <HbGestureSceneFilter> |
|
28 //#include <HbGesture> |
|
29 #include <HbMenu> |
|
30 #include <HbMainWindow> |
25 #include <HbMainWindow> |
31 #include <HbDeviceProfile> |
26 #include <HbDeviceProfile> |
32 #include <QImageReader> |
27 #include <QImageReader> |
33 #include <QFileInfo> |
28 #include <QFileInfo> |
34 #include <MsgMediaResolver.h> |
29 #include <MsgMediaResolver.h> |
43 #include <smutset.h> |
38 #include <smutset.h> |
44 #include <xqaiwrequest.h> |
39 #include <xqaiwrequest.h> |
45 #include <xqrequestinfo.h> |
40 #include <xqrequestinfo.h> |
46 #include <xqsharablefile.h> |
41 #include <xqsharablefile.h> |
47 #include <xqappmgr.h> |
42 #include <xqappmgr.h> |
48 |
43 #include <xqconversions.h> |
49 // USER INCLUDES |
44 // USER INCLUDES |
50 #include "msgunieditorbody.h" |
45 #include "msgunieditorbody.h" |
51 #include "UniEditorGenUtils.h" |
46 #include "UniEditorGenUtils.h" |
52 #include "unisendingsettings.h" |
47 #include "UniSendingSettings.h" |
53 #include "msgmonitor.h" |
48 #include "msgunieditormonitor.h" |
54 #include "s60qconversions.h" |
49 |
55 #include "mmsconformancecheck.h" |
50 #include "mmsconformancecheck.h" |
56 #include "unieditorpluginloader.h" |
51 #include "unieditorpluginloader.h" |
57 #include "unieditorplugininterface.h" |
52 #include "unieditorplugininterface.h" |
58 #include "convergedmessage.h" |
53 #include "convergedmessage.h" |
59 #include "msgmediautil.h" |
54 #include "msgmediautil.h" |
|
55 #include "msgunieditorpixmapwidget.h" |
|
56 #include "msgunieditoraudiowidget.h" |
60 |
57 |
61 // Constants |
58 // Constants |
62 const QString EDITOR_FRAME("qtg_fr_lineedit_normal"); |
|
63 const QString BACKGROUND_FRAME("qtg_fr_btn_normal"); |
59 const QString BACKGROUND_FRAME("qtg_fr_btn_normal"); |
64 const QString AUDIO_REGION("AudioRegion"); |
60 |
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"); |
|
69 const int KShowCounterLimit = 10; |
61 const int KShowCounterLimit = 10; |
70 const int BYTES_TO_KBYTES_FACTOR = 1024; |
62 const int BYTES_TO_KBYTES_FACTOR = 1024; |
71 |
63 |
72 //Localized Constants for item specific menu |
64 //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") |
65 #define LOC_TITLE hbTrId("txt_messaging_title_messaging") |
77 #define LOC_UNABLE_TO_ADD_CONTENT hbTrId("txt_messaging_dpopinfo_unable_to_add_more_content") |
66 #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") |
67 #define LOC_UNABLE_TO_ATTACH_ITEM hbTrId("txt_messaging_dpopinfo_unable_to_attach_item_avai") |
79 #define LOC_PROCESSING hbTrId("txt_messaging_formlabel_loading") |
68 #define LOC_PROCESSING hbTrId("txt_messaging_formlabel_loading") |
80 |
69 #define LOC_HINT_TEXT hbTrId("txt_messaging_formlabel_enter_message_here") |
81 const QString AUDIO_ICON("qtg_mono_audio"); |
70 |
82 const QString ANIMATION_ICON("qtg_anim_loading"); |
71 const QString ANIMATION_ICON("qtg_anim_loading"); |
83 const QString ANIMATION_FILE(":/qtg_anim_loading.axml"); |
72 const QString ANIMATION_FILE(":/qtg_anim_loading.axml"); |
84 // LOCAL FUNCTIONS |
73 // LOCAL FUNCTIONS |
85 |
74 |
86 //--------------------------------------------------------------- |
75 //--------------------------------------------------------------- |
88 // @return fullPath of unified editor's temporary dir |
77 // @return fullPath of unified editor's temporary dir |
89 //--------------------------------------------------------------- |
78 //--------------------------------------------------------------- |
90 void showInsertFailureNote() |
79 void showInsertFailureNote() |
91 { |
80 { |
92 int availableSize = |
81 int availableSize = |
93 (MsgMonitor::maxMmsSize() - MsgMonitor::messageSize()) |
82 (MsgUnifiedEditorMonitor::maxMmsSize() - MsgUnifiedEditorMonitor::messageSize()) |
94 /BYTES_TO_KBYTES_FACTOR; |
83 /BYTES_TO_KBYTES_FACTOR; |
95 QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM) |
84 QString displayStr = QString(LOC_UNABLE_TO_ATTACH_ITEM) |
96 .arg(availableSize); |
85 .arg(availableSize); |
97 HbNotificationDialog* dlg = new HbNotificationDialog(); |
86 HbNotificationDialog* dlg = new HbNotificationDialog(); |
98 dlg->setFocusPolicy(Qt::NoFocus); |
87 dlg->setFocusPolicy(Qt::NoFocus); |
106 MsgUnifiedEditorBody::MsgUnifiedEditorBody( QGraphicsItem *parent ) : |
95 MsgUnifiedEditorBody::MsgUnifiedEditorBody( QGraphicsItem *parent ) : |
107 MsgUnifiedEditorBaseWidget(parent), |
96 MsgUnifiedEditorBaseWidget(parent), |
108 mHasImage(false), |
97 mHasImage(false), |
109 mHasAudio(false), |
98 mHasAudio(false), |
110 mTextEdit(0), |
99 mTextEdit(0), |
111 mEditorFrame(0), |
100 mPixmapItem(0), |
112 mIconItem(0), |
|
113 mAudioItem(0), |
101 mAudioItem(0), |
114 mImageSize(0), |
102 mImageSize(0), |
115 mAudioSize(0), |
103 mAudioSize(0), |
116 mVideoSize(0), |
104 mVideoSize(0), |
117 mProcessImageOperation(0), |
105 mProcessImageOperation(0), |
118 mMediaResolver(0), |
106 mMediaResolver(0), |
119 mImageInfo(0), |
107 mImageInfo(0), |
120 mProcessingWidget(0) |
108 mProcessingWidget(0), |
|
109 mDraftMessage(false), |
|
110 mIsImageResizing(false) |
121 { |
111 { |
122 mTextEdit = new HbTextEdit(this); |
112 mTextEdit = new HbTextEdit(this); |
|
113 mTextEdit->setPlaceholderText(LOC_HINT_TEXT); |
123 HbStyle::setItemName(mTextEdit,"textEdit"); |
114 HbStyle::setItemName(mTextEdit,"textEdit"); |
124 |
|
125 HbFrameDrawer* frameDrawer = new HbFrameDrawer(EDITOR_FRAME, |
|
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 |
|
133 HbEditorInterface editorInterface(mTextEdit); |
|
134 HbAction *sendAction = new HbAction(HbIcon(SEND_ICON), QString(),this); |
|
135 connect(sendAction, SIGNAL(triggered()),this, SIGNAL(sendMessage())); |
|
136 editorInterface.addAction(sendAction); |
|
137 |
|
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())); |
115 connect(mTextEdit, SIGNAL(contentsChanged()), this, SLOT(onTextChanged())); |
144 |
116 |
145 mMmsConformanceCheck = new MmsConformanceCheck; |
117 mMmsConformanceCheck = new MmsConformanceCheck; |
146 |
118 |
147 mCharCounter = new HbTextItem(this); |
119 mCharCounter = new HbTextItem(this); |
196 QString MsgUnifiedEditorBody::text() |
168 QString MsgUnifiedEditorBody::text() |
197 { |
169 { |
198 return mTextEdit->toPlainText(); |
170 return mTextEdit->toPlainText(); |
199 } |
171 } |
200 |
172 |
201 void MsgUnifiedEditorBody::setImage(QString& imagefile) |
173 void MsgUnifiedEditorBody::setImage(QString& imagefile, bool draftMessage) |
202 { |
174 { |
|
175 // do nothing if filepath is empty |
|
176 if (imagefile.isEmpty()) |
|
177 { |
|
178 return; |
|
179 } |
|
180 |
|
181 mDraftMessage = draftMessage; |
203 if (!mImageInfo) |
182 if (!mImageInfo) |
204 { |
183 { |
205 setImage(true); |
184 setImage(true); |
206 |
185 |
207 mImageFile = imagefile; |
186 mImageFile = imagefile; |
208 if (mIconItem) |
187 if (mPixmapItem) |
209 { |
188 { |
210 delete mIconItem; |
189 mPixmapItem->setParent(NULL); |
211 mIconItem = NULL; |
190 delete mPixmapItem; |
|
191 mPixmapItem = NULL; |
212 mImageSize = 0; |
192 mImageSize = 0; |
213 } |
193 } |
214 |
194 |
215 int error = KErrNone; |
195 int error = KErrNone; |
216 |
196 if (!mDraftMessage) |
217 if( !mProcessImageOperation ) |
197 { |
218 { |
198 // if image is in draft, no need to resize it because it is resized already |
219 TRAP(error,mProcessImageOperation = |
199 if (!mProcessImageOperation) |
220 CUniEditorProcessImageOperation::NewL(*this)); |
200 { |
221 } |
201 TRAP(error,mProcessImageOperation = |
222 if( !mMediaResolver && error == KErrNone ) |
202 CUniEditorProcessImageOperation::NewL(*this)); |
223 { |
203 } |
224 TRAP(error,mMediaResolver = CMsgMediaResolver::NewL()); |
204 if (!mMediaResolver && error == KErrNone) |
225 } |
205 { |
226 |
206 TRAP(error,mMediaResolver = CMsgMediaResolver::NewL()); |
227 if( error == KErrNone) |
207 } |
228 { |
208 |
229 mMediaResolver->SetCharacterSetRecognition(EFalse); |
209 if (error == KErrNone) |
230 HBufC *name = S60QConversions::qStringToS60Desc(imagefile); |
210 { |
231 RFile file; |
211 mMediaResolver->SetCharacterSetRecognition(EFalse); |
232 TRAP(error, file = mMediaResolver->FileHandleL(*name)); |
212 HBufC *name = XQConversions::qStringToS60Desc(imagefile); |
233 if(error == KErrNone) |
213 RFile file; |
234 { |
214 TRAP(error, file = mMediaResolver->FileHandleL(*name)); |
235 TRAP(error,mImageInfo = static_cast<CMsgImageInfo*> |
|
236 (mMediaResolver->CreateMediaInfoL(file))); |
|
237 if (error == KErrNone) |
215 if (error == KErrNone) |
238 { |
216 { |
239 TRAP(error, mMediaResolver->ParseInfoDetailsL( |
217 TRAP(error,mImageInfo = static_cast<CMsgImageInfo*> |
240 mImageInfo, file)); |
218 (mMediaResolver->CreateMediaInfoL(file))); |
|
219 if (error == KErrNone) |
|
220 { |
|
221 TRAP(error, mMediaResolver->ParseInfoDetailsL( |
|
222 mImageInfo, file)); |
|
223 } |
|
224 file.Close(); |
|
225 } |
|
226 delete name; |
241 } |
227 } |
242 file.Close(); |
228 } |
243 } |
229 if (error == KErrNone && !mDraftMessage) |
244 delete name; |
230 { |
245 } |
|
246 |
|
247 if (error == KErrNone) |
|
248 { |
|
249 mSavedImageFile = imagefile; |
231 mSavedImageFile = imagefile; |
250 startResizeAnimation(); |
232 startResizeAnimation(); |
|
233 mIsImageResizing = true; |
251 mProcessImageOperation->Process(mImageInfo); |
234 mProcessImageOperation->Process(mImageInfo); |
252 } |
235 } |
253 else |
236 else |
254 { |
237 { |
255 delete mImageInfo; |
238 if (mImageInfo) |
256 mImageInfo = NULL; |
239 { |
|
240 delete mImageInfo; |
|
241 mImageInfo = NULL; |
|
242 } |
257 mSavedImageFile.clear(); |
243 mSavedImageFile.clear(); |
258 handleSetImage(); |
244 handleSetImage(); |
259 } |
245 } |
260 } |
246 |
261 } |
247 } |
|
248 } |
262 |
249 |
263 void MsgUnifiedEditorBody::handleSetImage() |
250 void MsgUnifiedEditorBody::handleSetImage() |
264 { |
251 { |
265 //check for insert conformance |
252 //check for insert conformance |
266 if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(mImageFile)) |
253 if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(mImageFile)) |
267 return; |
254 return; |
268 |
255 |
269 int msgSize = messageSize(); |
256 int msgSize = messageSize(); |
270 QFileInfo fileinfo(mImageFile); |
257 QFileInfo fileinfo(mImageFile); |
271 int imageSize = fileinfo.size() + KEstimatedMimeHeaderSize; |
258 int imageSize = fileinfo.size() + KEstimatedMimeHeaderSize; |
272 if ( (imageSize + msgSize) <= MsgMonitor::maxMmsSize()) |
259 if ( (imageSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize()) |
273 { |
260 { |
274 mImageSize = imageSize; |
261 mImageSize = imageSize; |
275 } |
262 } |
276 else |
263 else |
277 { |
264 { |
280 //Show appropriate note and leave |
267 //Show appropriate note and leave |
281 showInsertFailureNote(); |
268 showInsertFailureNote(); |
282 return; |
269 return; |
283 } |
270 } |
284 |
271 |
285 mIconItem = new HbIconItem(this); |
272 mPixmapItem = new MsgUnifiedEditorPixmapWidget(this); |
286 mIconItem->hide(); |
273 mPixmapItem->hide(); |
287 //mIconItem->setIconName(mImageFile); |
274 HbStyle::setItemName(mPixmapItem, "pixmap"); |
288 QPixmap pixmap(mImageFile); |
275 mPixmapItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop); |
289 mIconItem->setIcon(HbIcon(pixmap)); |
276 mPixmapItem->populate(mImageFile); |
290 |
277 connect(mPixmapItem,SIGNAL(remove()),this,SLOT(removeMedia())); |
291 HbStyle::setItemName(mIconItem, "pixmap"); |
278 |
292 mIconItem->setAlignment(Qt::AlignHCenter | Qt::AlignTop); |
|
293 // mIconItem->installSceneEventFilter(mGestureFilter); |
|
294 |
|
295 // repolish the body widget |
279 // repolish the body widget |
296 this->repolish(); |
280 this->repolish(); |
297 |
281 |
298 // emit signal to indicate addition of image |
282 // emit signal to indicate addition of image |
299 emit contentChanged(); |
283 emit contentChanged(); |
300 } |
284 } |
301 |
285 |
302 void MsgUnifiedEditorBody::setAudio(QString& audiofile) |
286 void MsgUnifiedEditorBody::setAudio(QString& audiofile) |
303 { |
287 { |
|
288 // do nothing if filepath is empty |
|
289 if(audiofile.isEmpty()) |
|
290 { |
|
291 return; |
|
292 } |
|
293 |
304 //check for insert conformance |
294 //check for insert conformance |
305 if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(audiofile)) |
295 if(EInsertSuccess != mMmsConformanceCheck->checkModeForInsert(audiofile)) |
306 return; |
296 return; |
307 |
297 |
308 setAudio(true); |
298 setAudio(true); |
309 mAudioFile = audiofile; |
299 mAudioFile = audiofile; |
310 if(mAudioItem) |
300 if(mAudioItem) |
311 { |
301 { |
|
302 mAudioItem->setParent(NULL); |
312 delete mAudioItem; |
303 delete mAudioItem; |
313 mAudioItem = NULL; |
304 mAudioItem = NULL; |
314 mAudioSize = 0; |
305 mAudioSize = 0; |
315 } |
306 } |
316 |
307 |
317 int msgSize = messageSize(); |
308 int msgSize = messageSize(); |
318 QFileInfo fileinfo(mAudioFile); |
309 QFileInfo fileinfo(mAudioFile); |
319 int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize; |
310 int audioSize = fileinfo.size() + KEstimatedMimeHeaderSize; |
320 if((audioSize + msgSize) <= MsgMonitor::maxMmsSize() ) |
311 if((audioSize + msgSize) <= MsgUnifiedEditorMonitor::maxMmsSize() ) |
321 { |
312 { |
322 mAudioSize = audioSize; |
313 mAudioSize = audioSize; |
323 } |
314 } |
324 else |
315 else |
325 { |
316 { |
328 //Show appropriate note and leave |
319 //Show appropriate note and leave |
329 showInsertFailureNote(); |
320 showInsertFailureNote(); |
330 return; |
321 return; |
331 } |
322 } |
332 |
323 |
333 HbIconItem* audioIcon = new HbIconItem(AUDIO_ICON); |
324 mAudioItem = new MsgUniFiedEditorAudioWidget(this); |
334 mAudioItem = new HbPushButton(this); |
|
335 mAudioItem->hide(); |
325 mAudioItem->hide(); |
336 HbStyle::setItemName(mAudioItem,"audioItem"); |
326 HbStyle::setItemName(mAudioItem,"audioItem"); |
337 mAudioItem->setIcon(audioIcon->icon()); |
327 mAudioItem->populate(mAudioFile); |
338 mAudioItem->setText(fileinfo.baseName()); |
328 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 |
329 |
344 // repolish the body widget |
330 // repolish the body widget |
345 this->repolish(); |
331 this->repolish(); |
346 |
332 |
347 // emit signal to indicate addition of audio |
333 // emit signal to indicate addition of audio |
348 emit contentChanged(); |
334 emit contentChanged(); |
349 } |
335 } |
350 |
336 |
351 void MsgUnifiedEditorBody::setText(QString& text) |
337 void MsgUnifiedEditorBody::setText(QString& text) |
352 { |
338 { |
353 mTextEdit->setPlainText(text); |
339 if(!text.isEmpty()) |
|
340 { |
|
341 mTextEdit->setPlainText(text); |
|
342 } |
354 } |
343 } |
355 |
344 |
356 const QStringList MsgUnifiedEditorBody::mediaContent() |
345 const QStringList MsgUnifiedEditorBody::mediaContent() |
357 { |
346 { |
358 QStringList mediaFiles; |
347 QStringList mediaFiles; |
459 { |
446 { |
460 qreal newWidth = defaultImageSize.width()*newHeight/defaultImageSize.height(); |
447 qreal newWidth = defaultImageSize.width()*newHeight/defaultImageSize.height(); |
461 imageSize.setWidth(newWidth); |
448 imageSize.setWidth(newWidth); |
462 } |
449 } |
463 |
450 |
464 if(mIconItem) |
451 if(mPixmapItem) |
465 { |
452 { |
466 mIconItem->setPreferredSize(imageSize); |
453 mPixmapItem->setPreferredSize(imageSize); |
467 mIconItem->setSize(imageSize); |
454 mPixmapItem->setSize(imageSize); |
468 if(mMainWindow->orientation() == Qt::Horizontal) |
455 if(mMainWindow->orientation() == Qt::Horizontal) |
469 { |
456 { |
470 QPointF currPos = mIconItem->pos(); |
457 QPointF currPos = mPixmapItem->pos(); |
471 currPos.setX(leftMargin+((maxWidth-imageSize.width())/2)); |
458 currPos.setX(leftMargin+((maxWidth-imageSize.width())/2)); |
472 mIconItem->setPos(currPos); |
459 mPixmapItem->setPos(currPos); |
473 } |
460 } |
474 mIconItem->show(); |
461 mPixmapItem->show(); |
475 } |
462 } |
476 |
463 |
477 if(mProcessingWidget) |
464 if(mProcessingWidget) |
478 { |
465 { |
479 imageSize.setHeight(mProcessingWidget->preferredHeight()); |
466 imageSize.setHeight(mProcessingWidget->preferredHeight()); |
488 mTextEdit->setMinimumHeight(maxHeight); |
475 mTextEdit->setMinimumHeight(maxHeight); |
489 szHint.rheight() += bodyItemSpacing; |
476 szHint.rheight() += bodyItemSpacing; |
490 return szHint; |
477 return szHint; |
491 } |
478 } |
492 |
479 |
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() |
480 void MsgUnifiedEditorBody::removeMedia() |
509 { |
481 { |
510 HbAction* action = qobject_cast<HbAction*>(sender()); |
482 QObject* senderObject = sender(); |
511 QString objName = action->parent()->objectName(); |
483 |
512 if(objName == IMAGE_REGION) |
484 MsgUnifiedEditorPixmapWidget* pixmap = |
|
485 qobject_cast<MsgUnifiedEditorPixmapWidget*>(senderObject); |
|
486 |
|
487 MsgUniFiedEditorAudioWidget* audio = |
|
488 qobject_cast<MsgUniFiedEditorAudioWidget*>(senderObject); |
|
489 |
|
490 if(pixmap) //remove image |
513 { |
491 { |
514 mImageFile.clear(); |
492 mImageFile.clear(); |
515 if(mIconItem) |
493 if(mPixmapItem) |
516 { |
494 { |
517 // mIconItem->removeSceneEventFilter(mGestureFilter); |
495 mPixmapItem->setParent(NULL); |
518 delete mIconItem; |
496 delete mPixmapItem; |
519 mIconItem = NULL; |
497 mPixmapItem = NULL; |
520 } |
498 } |
521 setImage(false); |
499 setImage(false); |
522 mImageSize = 0; |
500 mImageSize = 0; |
523 } |
501 } |
524 else if(objName == AUDIO_REGION) |
502 else if(audio)//remove audio item |
525 { |
503 { |
526 mAudioFile.clear(); |
504 mAudioFile.clear(); |
527 if(mAudioItem) |
505 if(mAudioItem) |
528 { |
506 { |
529 delete mAudioItem; |
507 mAudioItem->setParent(NULL); |
530 mAudioItem = NULL; |
508 delete mAudioItem; |
531 } |
509 mAudioItem = NULL; |
532 setAudio(false); |
510 } |
533 mAudioSize = 0; |
511 setAudio(false); |
534 } |
512 mAudioSize = 0; |
535 else if(objName == VIDEO_REGION) |
513 } |
536 { |
|
537 //TODO: complete this with video handling story |
|
538 } |
|
539 else |
|
540 { |
|
541 // return without doing anything |
|
542 return; |
|
543 } |
|
544 |
514 |
545 this->repolish(); |
515 this->repolish(); |
546 |
516 |
547 emit contentChanged(); |
517 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 } |
518 } |
633 |
519 |
634 bool MsgUnifiedEditorBody::hasImage() |
520 bool MsgUnifiedEditorBody::hasImage() |
635 { |
521 { |
636 return mHasImage; |
522 return mHasImage; |
674 { |
560 { |
675 // This is the first media content to be inserted |
561 // This is the first media content to be inserted |
676 estimatedMediaSize = KEstimatedMmsSmilHeaderSize; |
562 estimatedMediaSize = KEstimatedMmsSmilHeaderSize; |
677 } |
563 } |
678 |
564 |
679 return estimatedMediaSize + MsgMonitor::subjectSize() + MsgMonitor::containerSize(); |
565 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 } |
566 } |
706 |
567 |
707 void MsgUnifiedEditorBody::onTextChanged() |
568 void MsgUnifiedEditorBody::onTextChanged() |
708 { |
569 { |
709 QString string = text(); |
570 QString string = text(); |
710 |
571 |
711 if( string.size() > mPrevBuffer.size() && |
572 if( string.size() > mPrevBuffer.size() && |
712 MsgMonitor::messageType() == ConvergedMessage::Mms ) |
573 MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Mms ) |
713 { |
574 { |
714 // reject any text input if mms size limit is reached |
575 // reject any text input if mms size limit is reached |
715 int futureSize = bodySize() + |
576 int futureSize = bodySize() + |
716 MsgMonitor::containerSize() + MsgMonitor::subjectSize(); |
577 MsgUnifiedEditorMonitor::containerSize() + MsgUnifiedEditorMonitor::subjectSize(); |
717 if(futureSize > MsgMonitor::maxMmsSize()) |
578 if(futureSize > MsgUnifiedEditorMonitor::maxMmsSize()) |
718 { |
579 { |
719 mTextEdit->setPlainText(mPrevBuffer); |
580 mTextEdit->setPlainText(mPrevBuffer); |
720 HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT); |
581 HbNotificationDialog::launchDialog(LOC_UNABLE_TO_ADD_CONTENT); |
721 mTextEdit->setCursorPosition(mPrevBuffer.length()); |
582 mTextEdit->setCursorPosition(mPrevBuffer.length()); |
722 return; |
583 return; |
775 } |
636 } |
776 |
637 |
777 void MsgUnifiedEditorBody::EditorOperationEvent( |
638 void MsgUnifiedEditorBody::EditorOperationEvent( |
778 TUniEditorProcessImageOperationEvent aEvent, TFileName aFileName) |
639 TUniEditorProcessImageOperationEvent aEvent, TFileName aFileName) |
779 { |
640 { |
780 stopResizeAnimation(); |
|
781 |
|
782 delete mImageInfo; |
641 delete mImageInfo; |
783 mImageInfo = NULL; |
642 mImageInfo = NULL; |
784 |
643 |
785 if (aEvent == EUniEditorProcessImageOperationComplete && |
644 if (aEvent == EUniEditorProcessImageOperationComplete && |
786 aFileName.Length() > 0) |
645 aFileName.Length() > 0) |
787 { |
646 { |
788 mImageFile = S60QConversions::s60DescToQString(aFileName); |
647 mImageFile = XQConversions::s60DescToQString(aFileName); |
789 } |
648 } |
790 else |
649 else |
791 { |
650 { |
792 mImageFile = mSavedImageFile; |
651 mImageFile = mSavedImageFile; |
793 } |
652 } |
794 mSavedImageFile.clear(); |
653 mSavedImageFile.clear(); |
|
654 |
|
655 // image resize is complete. reset the image resize flag |
|
656 mIsImageResizing = false; |
795 //handle the processed image from ProcessImage Operation |
657 //handle the processed image from ProcessImage Operation |
796 handleSetImage(); |
658 handleSetImage(); |
|
659 |
|
660 stopResizeAnimation(); |
797 } |
661 } |
798 |
662 |
799 void MsgUnifiedEditorBody::startResizeAnimation() |
663 void MsgUnifiedEditorBody::startResizeAnimation() |
800 { |
664 { |
|
665 // emit signal to indicate disable the send tool button. |
|
666 emit enableSendButton(false); |
|
667 |
|
668 |
801 QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical); |
669 QGraphicsLinearLayout* processingLayout = new QGraphicsLinearLayout(Qt::Vertical); |
802 |
670 |
803 mProcessingWidget = new HbWidget(this); |
671 mProcessingWidget = new HbWidget(this); |
804 HbStyle::setItemName(mProcessingWidget,"pixmap"); |
672 HbStyle::setItemName(mProcessingWidget,"pixmap"); |
805 mProcessingWidget->hide(); |
673 mProcessingWidget->hide(); |
808 HbTextItem* processingText = new HbTextItem(LOC_PROCESSING,mProcessingWidget); |
676 HbTextItem* processingText = new HbTextItem(LOC_PROCESSING,mProcessingWidget); |
809 processingText->setAlignment(Qt::AlignCenter); |
677 processingText->setAlignment(Qt::AlignCenter); |
810 processingLayout->addItem(processingText); |
678 processingLayout->addItem(processingText); |
811 |
679 |
812 HbIconItem* animationItem = new HbIconItem(ANIMATION_ICON,mProcessingWidget); |
680 HbIconItem* animationItem = new HbIconItem(ANIMATION_ICON,mProcessingWidget); |
|
681 animationItem->setAlignment(Qt::AlignHCenter); |
813 processingLayout->addItem(animationItem); |
682 processingLayout->addItem(animationItem); |
814 |
683 |
815 HbIconAnimator& iconAnimator = animationItem->animator(); |
684 HbIconAnimator& iconAnimator = animationItem->animator(); |
816 HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global(); |
685 HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global(); |
817 iconAnimationManager->addDefinitionFile(ANIMATION_FILE); |
686 iconAnimationManager->addDefinitionFile(ANIMATION_FILE); |
848 mCharCounter->setVisible(false); |
718 mCharCounter->setVisible(false); |
849 mBackgroundItem->setVisible(false); |
719 mBackgroundItem->setVisible(false); |
850 } |
720 } |
851 |
721 |
852 //--------------------------------------------------------------- |
722 //--------------------------------------------------------------- |
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 |
723 // MsgUnifiedEditorBody :: setFocus |
874 // @see header file |
724 // @see header file |
875 //--------------------------------------------------------------- |
725 //--------------------------------------------------------------- |
876 void MsgUnifiedEditorBody::setFocus() |
726 void MsgUnifiedEditorBody::setFocus() |
877 { |
727 { |