phonebookui/pbkcommonui/src/cntimageeditorview.cpp
changeset 59 a642906a277a
parent 47 7cbcb2896f0e
child 65 ae724a111993
--- 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;
+        }
+    }
+}
+