phonebookui/pbkcommonui/src/cntimageeditorview.cpp
changeset 24 0ba2181d7c28
child 25 76a2435edfd4
equal deleted inserted replaced
0:e686773b3f54 24:0ba2181d7c28
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "cntimageeditorview.h"
       
    19 
       
    20 #include <QGraphicsLinearLayout>
       
    21 #include <qtcontacts.h>
       
    22 #include <hbdocumentloader.h>
       
    23 #include <hbabstractviewitem.h>
       
    24 #include <hbscrollarea.h>
       
    25 #include <hblabel.h>
       
    26 #include <hbpushbutton.h>
       
    27 #include <xqaiwrequest.h>
       
    28 #include <thumbnailmanager_qt.h>
       
    29 
       
    30 const char *CNT_IMAGE_XML = ":/xml/contacts_if.docml";
       
    31 const int BUTTON_HEIGHT = 50;
       
    32 
       
    33 #define FETCHER_SERVICE "com.nokia.services.media"
       
    34 #define FETCHER_INTERFACE "image"
       
    35 #define FETCHER_OPERATION "fetch(QVariantMap,QVariant)"
       
    36 
       
    37 /*!
       
    38 Constructor
       
    39 */
       
    40 CntImageEditorView::CntImageEditorView(CntViewManager *viewManager, QGraphicsItem *parent) :
       
    41         CntBaseView(viewManager, parent),
       
    42         mContact(0),
       
    43         mAvatar(0),
       
    44         mImageLabel(0),
       
    45         mScrollArea(0),
       
    46         mRequest(0),
       
    47         mThumbnailManager(0),
       
    48         mContainerWidget(0)
       
    49 {
       
    50     bool ok = false;
       
    51     ok = loadDocument(CNT_IMAGE_XML);
       
    52 
       
    53     if (ok)
       
    54     {
       
    55         QGraphicsWidget *content = findWidget(QString("content"));
       
    56         setWidget(content);
       
    57     }
       
    58     else
       
    59     {
       
    60         qFatal("Unable to read :/xml/contacts_if.docml");
       
    61     }
       
    62     mThumbnailManager = new ThumbnailManager(this);
       
    63     mThumbnailManager->setMode(ThumbnailManager::Default);
       
    64     mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality);
       
    65     mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailLarge);
       
    66 	
       
    67     connect( mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
       
    68         this, SLOT(thumbnailReady(QPixmap, void*, int, int)) );
       
    69 }
       
    70 
       
    71 void CntImageEditorView::thumbnailReady(const QPixmap& pixmap, void *data, int id, int error)
       
    72 {
       
    73     Q_UNUSED(data);
       
    74     Q_UNUSED(id);
       
    75     Q_UNUSED(error);
       
    76     QIcon qicon(pixmap);
       
    77     HbIcon icon(qicon);
       
    78 	mImageLabel->clear();
       
    79 	mImageLabel->setIcon(icon);
       
    80 }
       
    81 
       
    82 /*!
       
    83 Destructor
       
    84 */
       
    85 CntImageEditorView::~CntImageEditorView()
       
    86 {
       
    87     delete mImageLabel;
       
    88     delete mAvatar;
       
    89     delete mContact;
       
    90 	delete mRequest;
       
    91 }
       
    92 
       
    93 void CntImageEditorView::resizeEvent(QGraphicsSceneResizeEvent *event)
       
    94 {
       
    95     if (mScrollArea)
       
    96     {
       
    97         mContainerWidget->resize(mScrollArea->size().width(), 0);
       
    98     }
       
    99     CntBaseView::resizeEvent(event);
       
   100 }
       
   101 
       
   102 /*!
       
   103 Called when user closes the view
       
   104 */
       
   105 void CntImageEditorView::aboutToCloseView()
       
   106 {
       
   107     mContact->saveDetail(mAvatar);
       
   108 
       
   109     if (mAvatar->avatar().isEmpty())
       
   110     {
       
   111         mContact->removeDetail(mAvatar);
       
   112     }
       
   113     viewManager()->previousViewParameters().setSelectedContact(*mContact);
       
   114     viewManager()->onActivatePreviousView();
       
   115 }
       
   116 
       
   117 /*!
       
   118 Called when activating the view (create image label and scroll area with buttons)
       
   119 */
       
   120 void CntImageEditorView::activateView(const CntViewParameters &viewParameters)
       
   121 {
       
   122     mContact = new QContact(viewParameters.selectedContact());
       
   123 
       
   124     // set the correct image if the contact already has an image set
       
   125     mImageLabel = static_cast<HbLabel*>(findWidget(QString("image")));
       
   126     QList<QContactAvatar> details = mContact->details<QContactAvatar>();
       
   127 
       
   128     if (details.count() > 0)
       
   129     {
       
   130         for (int i = 0;i < details.count();i++)
       
   131         {
       
   132             if (details.at(i).subType() == QContactAvatar::SubTypeImage)
       
   133             {
       
   134                 mAvatar = new QContactAvatar(details.at(i));
       
   135                 mThumbnailManager->getThumbnail(mAvatar->avatar());
       
   136                 break;
       
   137             }
       
   138         }
       
   139     }
       
   140     else
       
   141     {
       
   142         mAvatar = new QContactAvatar();
       
   143         mAvatar->setSubType(QContactAvatar::SubTypeImage);
       
   144     }
       
   145 
       
   146     QGraphicsWidget *w = findWidget(QString("content"));
       
   147     static_cast<QGraphicsLinearLayout*>(w->layout())->setAlignment(mImageLabel, Qt::AlignCenter);
       
   148 
       
   149     // construct listview and the model for it
       
   150     mScrollArea = static_cast<HbScrollArea*>(findWidget(QString("scrollArea")));
       
   151 
       
   152     mContainerWidget = new HbWidget();
       
   153     QGraphicsLinearLayout *buttonLayout = new QGraphicsLinearLayout(Qt::Vertical);
       
   154     buttonLayout->setContentsMargins(0, 0, 0, 0);
       
   155 
       
   156     HbPushButton *newPhoto = new HbPushButton(HbIcon(":/icons/qgn_indi_ai_nt_camera.svg"),
       
   157                                               hbTrId("txt_phob_list_take_a_new_photo"), Qt::Horizontal);
       
   158     newPhoto->setPreferredHeight(BUTTON_HEIGHT);
       
   159     newPhoto->setPreferredWidth(300);
       
   160     newPhoto->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
       
   161     connect(newPhoto, SIGNAL(clicked()), this, SLOT(openCamera()));
       
   162     buttonLayout->addItem(newPhoto);
       
   163 
       
   164     HbPushButton *gallery = new HbPushButton(HbIcon(":/icons/qgn_prop_tutor_gallery.svg"),
       
   165                                               hbTrId("Choose from Gallery"), Qt::Horizontal);
       
   166     gallery->setPreferredHeight(BUTTON_HEIGHT);
       
   167     gallery->setPreferredWidth(300);
       
   168     gallery->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
       
   169     connect(gallery, SIGNAL(clicked()), this, SLOT(openGallery()));
       
   170     buttonLayout->addItem(gallery);
       
   171 
       
   172     mContainerWidget->setLayout(buttonLayout);
       
   173     mContainerWidget->setPreferredWidth(mScrollArea->size().width());
       
   174     mScrollArea->setContentWidget(mContainerWidget);
       
   175 }
       
   176 
       
   177 /*!
       
   178 Open camera and get new image for contact
       
   179 */
       
   180 void CntImageEditorView::openCamera()
       
   181 {
       
   182 
       
   183 }
       
   184 
       
   185 /*!
       
   186 Open gallery and select image for contact
       
   187 */
       
   188 void CntImageEditorView::openGallery()
       
   189 {
       
   190     if (mRequest)
       
   191     {
       
   192         delete mRequest;
       
   193         mRequest = 0;
       
   194     }
       
   195 
       
   196     mRequest = mAppManager.create(FETCHER_SERVICE, FETCHER_INTERFACE, FETCHER_OPERATION, false);
       
   197 
       
   198     connect(mRequest, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleImageChange(const QVariant&)));
       
   199     mRequest->send();
       
   200 }
       
   201 
       
   202 /*!
       
   203 Set the selected image as new QContactAvatar::SubTypeImage
       
   204 */
       
   205 void CntImageEditorView::handleImageChange(const QVariant &value)
       
   206 {
       
   207     if (value.canConvert<QString>())
       
   208     {
       
   209         mAvatar->setAvatar(value.toString());
       
   210         mThumbnailManager->getThumbnail(value.toString());
       
   211     }
       
   212 }