--- a/phonebookui/pbkcommonui/src/cntimageeditorview.cpp Tue Jul 06 14:05:47 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntimageeditorview.cpp Wed Aug 18 09:39:00 2010 +0300
@@ -17,12 +17,15 @@
#include "cntimageeditorview.h"
#include "cntimageutility.h"
+#include "cntsavemanager.h"
+#include "cntimagelabel.h"
#include <hblabel.h>
#include <xqaiwrequest.h>
#include <xqaiwdecl.h>
#include "cntdebug.h"
+#include "cntglobal.h"
#include <thumbnailmanager_qt.h>
#include <hbaction.h>
@@ -31,8 +34,11 @@
#include <hblistview.h>
#include <hblistviewitem.h>
#include <hbframebackground.h>
+#include <hbdevicenotificationdialog.h>
+#include <hbparameterlengthlimiter.h>
#include <QStandardItemModel>
+#include <QApplication>
const char *CNT_IMAGE_XML = ":/xml/contacts_if.docml";
@@ -40,13 +46,14 @@
Constructor
*/
CntImageEditorView::CntImageEditorView() :
- mContact(NULL),
- mAvatar(NULL),
- mImageLabel(NULL),
- mRequest(NULL),
- mViewManager(NULL),
- mListView(NULL),
- mModel(NULL)
+ mContact(NULL),
+ mAvatar(NULL),
+ mImageLabel(NULL),
+ mRequest(NULL),
+ mViewManager(NULL),
+ mListView(NULL),
+ mModel(NULL),
+ mSaveManager(NULL)
{
bool ok = false;
mDocumentLoader.load(CNT_IMAGE_XML, &ok);
@@ -76,6 +83,9 @@
connect( mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
this, SLOT(thumbnailReady(QPixmap, void*, int, int)) );
+
+ // closing the application from task swapper or end key will cause the contact to be saved
+ connect( qApp, SIGNAL(aboutToQuit()), this, SLOT(saveContact()));
}
/*!
@@ -88,15 +98,17 @@
mView->deleteLater();
delete mAvatar;
- mAvatar = 0;
+ mAvatar = NULL;
delete mContact;
- mContact = 0;
+ mContact = NULL;
delete mRequest;
- mRequest = 0;
+ mRequest = NULL;
delete mRemoveImage;
- mRemoveImage = 0;
+ mRemoveImage = NULL;
delete mModel;
- mModel = 0;
+ mModel = NULL;
+ delete mSaveManager;
+ mSaveManager = NULL;
CNT_EXIT
}
@@ -115,14 +127,41 @@
HbMainWindow* window = mView->mainWindow();
if ( window )
{
- connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
- setOrientation(window->orientation());
+ connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
+ setOrientation(window->orientation());
+ }
+
+ if ( mArgs.contains(ESelectedContact))
+ {
+ mContact = new QContact(mArgs.value(ESelectedContact).value<QContact>());
+ }
+
+ if ( mArgs.contains(ESelectedGroupContact) && !mContact )
+ {
+ mContact = new QContact(mArgs.value(ESelectedGroupContact).value<QContact>());
}
- mContact = new QContact(mArgs.value(ESelectedContact).value<QContact>());
+ QString myCard = mArgs.value( EMyCard ).toString();
+ QContactLocalId localId = mContact->localId();
+ QContactLocalId selfContactId = mViewManager->contactManager(SYMBIAN_BACKEND)->selfContactId();
+ bool isMyCard = ( localId == selfContactId && localId != 0 ) || !myCard.isEmpty();
+
+ if (isMyCard)
+ {
+ mSaveManager = new CntSaveManager(CntSaveManager::EMyCard);
+ }
+ else if (mContact->type() == QContactType::TypeGroup)
+ {
+ mSaveManager = new CntSaveManager(CntSaveManager::EGroup);
+ }
+ else
+ {
+ mSaveManager = new CntSaveManager();
+ }
// set the correct image if the contact already has an image set
- mImageLabel = static_cast<HbLabel*>(mDocumentLoader.findWidget(QString("cnt_image_label")));
+ mImageLabel = static_cast<CntImageLabel*>(mDocumentLoader.findWidget(QString("cnt_image_label")));
+ mImageLabel->ungrabGesture(Qt::TapGesture);
QList<QContactAvatar> details = mContact->details<QContactAvatar>();
if (details.count() > 0)
{
@@ -142,7 +181,7 @@
mRemoveImage->setEnabled(false);
if (mContact->type() == QContactType::TypeGroup)
{
- mImageLabel->setIcon(HbIcon("qtg_large_add_group_picture"));
+ mImageLabel->setAvatarIcon(HbIcon("qtg_large_add_group_picture"));
}
}
@@ -196,7 +235,7 @@
mRequest = 0;
}
- mRequest = mAppManager.create(XQI_CAMERA_CAPTURE, "capture(int,QVariantMap)", false);
+ mRequest = mAppManager.create(XQI_CAMERA_CAPTURE, XQOP_CAMERA_CAPTURE, false);
if ( mRequest )
{
int mode = 0; //image mode
@@ -257,8 +296,18 @@
QVariant var;
var.setValue(*mContact);
- mArgs.insert(ESelectedContact, var);
- mArgs.insert(ESelectedGroupContact, var);
+ // If the arguments didn't originally contain "normal" contact,
+ // then the group contact should be updated. This case applies only
+ // when group image is edited
+ if ( !mArgs.contains(ESelectedContact) )
+ {
+ mArgs.insert(ESelectedGroupContact, var);
+ }
+ else
+ {
+ mArgs.insert(ESelectedContact, var);
+ }
+
mArgs.insert(ECustomParam, viewId());
mViewManager->back( mArgs );
}
@@ -278,9 +327,9 @@
mAvatar->setImageUrl(QUrl());
mImageLabel->clear();
if (mContact->type() == QContactType::TypeGroup)
- mImageLabel->setIcon(HbIcon("qtg_large_add_group_picture"));
+ mImageLabel->setAvatarIcon(HbIcon("qtg_large_add_group_picture"));
else
- mImageLabel->setIcon(HbIcon("qtg_large_add_contact_picture"));
+ mImageLabel->setAvatarIcon(HbIcon("qtg_large_add_contact_picture"));
mRemoveImage->setEnabled(false);
}
}
@@ -338,10 +387,8 @@
Q_UNUSED(id);
if (!error)
{
- QIcon qicon(pixmap);
- HbIcon icon(qicon);
mImageLabel->clear();
- mImageLabel->setIcon(icon);
+ mImageLabel->setIcon(pixmap);
}
CNT_EXIT
@@ -385,6 +432,47 @@
void CntImageEditorView::handleError(int errorCode, const QString& errorMessage)
{
+ Q_UNUSED(errorCode);
+ Q_UNUSED(errorMessage);
CNT_LOG_ARGS("error code = " << errorCode << "errorMessage=" << errorMessage)
}
+void CntImageEditorView::saveContact()
+{
+ mContact->saveDetail(mAvatar);
+
+ if ( mAvatar->imageUrl().isEmpty())
+ {
+ mContact->removeDetail(mAvatar);
+ }
+
+ QString name = mViewManager->contactManager(SYMBIAN_BACKEND)->synthesizedContactDisplayLabel(*mContact);
+
+ if (name.isEmpty())
+ {
+ name = hbTrId("txt_phob_list_unnamed");
+ }
+
+ CntSaveManager::CntSaveResult result = mSaveManager->saveContact(mContact, mViewManager->contactManager(SYMBIAN_BACKEND));
+
+ if (mContact->type() != QContactType::TypeGroup)
+ {
+ switch (result)
+ {
+ case CntSaveManager::ESaved:
+ HbDeviceNotificationDialog::notification(QString(),HbParameterLengthLimiter(hbTrId("txt_phob_dpophead_contact_1_saved")).arg(name));
+ break;
+ case CntSaveManager::EUpdated:
+ HbDeviceNotificationDialog::notification(QString(),HbParameterLengthLimiter(hbTrId("txt_phob_dpophead_contacts_1_updated")).arg(name));
+ break;
+ case CntSaveManager::EFailed:
+ HbDeviceNotificationDialog::notification(QString(),hbTrId("SAVING FAILED!"));
+ break;
+ case CntSaveManager::EDeleted:
+ case CntSaveManager::ENothingDone:
+ default:
+ break;
+ }
+ }
+}
+