phonebookui/cntcommonui/collections/cntgroupmemberview_p.cpp
author hgs
Tue, 21 Sep 2010 17:07:25 +0300
changeset 72 6abfb1094884
child 81 640d30f4fb64
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "cntgroupmemberview_p.h"
hgs
parents:
diff changeset
    19
#include "cntfetchcontactpopup.h"
hgs
parents:
diff changeset
    20
#include "cntcontactcardheadingitem.h"
hgs
parents:
diff changeset
    21
#include "cntglobal.h"
hgs
parents:
diff changeset
    22
#include "cntimagelabel.h"
hgs
parents:
diff changeset
    23
#include "cntimageutility.h"
hgs
parents:
diff changeset
    24
#include "cntthumbnailmanager.h"
hgs
parents:
diff changeset
    25
#include <hbnotificationdialog.h>
hgs
parents:
diff changeset
    26
#include <hbmessagebox.h>
hgs
parents:
diff changeset
    27
#include <hbmenu.h>
hgs
parents:
diff changeset
    28
#include <hblistview.h>
hgs
parents:
diff changeset
    29
#include <hblistviewitem.h>
hgs
parents:
diff changeset
    30
#include <hbframebackground.h>
hgs
parents:
diff changeset
    31
#include <hbindexfeedback.h>
hgs
parents:
diff changeset
    32
#include <hbscrollbar.h>
hgs
parents:
diff changeset
    33
#include <hbview.h>
hgs
parents:
diff changeset
    34
#include <hbaction.h>
hgs
parents:
diff changeset
    35
#include <hblabel.h>
hgs
parents:
diff changeset
    36
#include <hbparameterlengthlimiter.h>
hgs
parents:
diff changeset
    37
#include <cntlistmodel.h>
hgs
parents:
diff changeset
    38
#include <hbmainwindow.h>
hgs
parents:
diff changeset
    39
#include <xqservicerequest.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
#include "cntdocumentloader.h"
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
const char *CNT_GROUPMEMBERVIEW_XML = ":/xml/contacts_groupmembers.docml";
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/*!
hgs
parents:
diff changeset
    46
\class CntGroupMemberViewPrivate
hgs
parents:
diff changeset
    47
\brief
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
This is the group members view class that shows list of contacts for a user group. View contains a listview that shows actual contacts that
hgs
parents:
diff changeset
    50
have been added to a particular group. There is also toolbar and menu for navigating between different views. Instance of this class is
hgs
parents:
diff changeset
    51
created by our viewmanager but view itself is owned by the mainwindow which will also delete it in the end.
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
*/
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
/*!
hgs
parents:
diff changeset
    56
Constructor, initialize member variables.
hgs
parents:
diff changeset
    57
\a viewManager is the parent that creates this view. \a parent is a pointer to parent QGraphicsItem (by default this is 0)
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
*/
hgs
parents:
diff changeset
    60
CntGroupMemberViewPrivate::CntGroupMemberViewPrivate() :
hgs
parents:
diff changeset
    61
    mGroupContact(NULL),
hgs
parents:
diff changeset
    62
    mViewManager(NULL),
hgs
parents:
diff changeset
    63
    mHeadingItem(NULL),
hgs
parents:
diff changeset
    64
    mModel(NULL),
hgs
parents:
diff changeset
    65
    mImageLabel(NULL), 
hgs
parents:
diff changeset
    66
    mListView(NULL),
hgs
parents:
diff changeset
    67
    mAvatar(NULL)
hgs
parents:
diff changeset
    68
{
hgs
parents:
diff changeset
    69
    mDocument = new CntDocumentLoader;
hgs
parents:
diff changeset
    70
    
hgs
parents:
diff changeset
    71
    bool ok;
hgs
parents:
diff changeset
    72
    mDocument->load( CNT_GROUPMEMBERVIEW_XML, &ok );
hgs
parents:
diff changeset
    73
    if ( !ok ){
hgs
parents:
diff changeset
    74
        qFatal( "Unable to load %S", CNT_GROUPMEMBERVIEW_XML );
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
    mView = static_cast<HbView*>( mDocument->findWidget("view") );
hgs
parents:
diff changeset
    78
    
hgs
parents:
diff changeset
    79
    //back button
hgs
parents:
diff changeset
    80
    mSoftkey = new HbAction(Hb::BackNaviAction, mView);
hgs
parents:
diff changeset
    81
    connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
hgs
parents:
diff changeset
    82
    
hgs
parents:
diff changeset
    83
    mImageLabel = static_cast<CntImageLabel*>(mDocument->findWidget("imageLabel"));
hgs
parents:
diff changeset
    84
    connect( mImageLabel, SIGNAL(iconClicked()), this, SLOT(openImageEditor()) );
hgs
parents:
diff changeset
    85
    connect( mImageLabel, SIGNAL(iconLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)) );
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    mListView = static_cast<HbListView*>( mDocument->findWidget("listView") );
hgs
parents:
diff changeset
    88
    connect(mListView, SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
hgs
parents:
diff changeset
    89
        SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
hgs
parents:
diff changeset
    90
    connect(mListView, SIGNAL(activated (const QModelIndex&)), this,
hgs
parents:
diff changeset
    91
        SLOT(showContactView(const QModelIndex&)));
hgs
parents:
diff changeset
    92
    
hgs
parents:
diff changeset
    93
    mHeadingItem = static_cast<CntContactCardHeadingItem*>( mDocument->findWidget("groupHeading") );
hgs
parents:
diff changeset
    94
    connect(mHeadingItem, SIGNAL(passShortPressed(const QPointF&)), this, SLOT(openImageEditor()) );
hgs
parents:
diff changeset
    95
    connect(mHeadingItem, SIGNAL(passLongPressed(const QPointF&)), this, SLOT(drawImageMenu(const QPointF&)));
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    // menu actions
hgs
parents:
diff changeset
    98
    mEditGroupAction = static_cast<HbAction*>( mDocument->findObject("cnt:editgroupdetails"));
hgs
parents:
diff changeset
    99
    connect(mEditGroupAction, SIGNAL(triggered()), this, SLOT(editGroup()));
hgs
parents:
diff changeset
   100
    
hgs
parents:
diff changeset
   101
    // toolbar actions
hgs
parents:
diff changeset
   102
    mManageAction = static_cast<HbAction*>( mDocument->findObject("cnt:managemembers"));
hgs
parents:
diff changeset
   103
    connect(mManageAction, SIGNAL(triggered()), this, SLOT(manageMembers()));
hgs
parents:
diff changeset
   104
    mDeleteAction = static_cast<HbAction*>( mDocument->findObject("cnt:deletegroup"));
hgs
parents:
diff changeset
   105
    connect(mDeleteAction, SIGNAL(triggered()), this, SLOT(deleteGroup()));
hgs
parents:
diff changeset
   106
    mShowActionsAction = static_cast<HbAction*>( mDocument->findObject("cnt:groupactions"));
hgs
parents:
diff changeset
   107
    connect(mShowActionsAction, SIGNAL(triggered()), this, SLOT(openGroupActions()));
hgs
parents:
diff changeset
   108
    
hgs
parents:
diff changeset
   109
    //Always disable by default. 
hgs
parents:
diff changeset
   110
    //Only enable, when atleast one contact contains a CommunicationAddress defined. 
hgs
parents:
diff changeset
   111
    mShowActionsAction->setDisabled(true);
hgs
parents:
diff changeset
   112
}
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
/*!
hgs
parents:
diff changeset
   115
Destructor
hgs
parents:
diff changeset
   116
*/
hgs
parents:
diff changeset
   117
CntGroupMemberViewPrivate::~CntGroupMemberViewPrivate()
hgs
parents:
diff changeset
   118
{
hgs
parents:
diff changeset
   119
    mView->deleteLater();
hgs
parents:
diff changeset
   120
    
hgs
parents:
diff changeset
   121
    delete mGroupContact;
hgs
parents:
diff changeset
   122
    mGroupContact = NULL;
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
    delete mModel;
hgs
parents:
diff changeset
   125
    mModel = NULL;
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    delete mAvatar;
hgs
parents:
diff changeset
   128
    mAvatar = NULL;
hgs
parents:
diff changeset
   129
}
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
void CntGroupMemberViewPrivate::setOrientation(Qt::Orientation orientation)
hgs
parents:
diff changeset
   132
{
hgs
parents:
diff changeset
   133
    if (orientation == Qt::Vertical) 
hgs
parents:
diff changeset
   134
    {
hgs
parents:
diff changeset
   135
        // reading "portrait" section
hgs
parents:
diff changeset
   136
        mDocument->load( CNT_GROUPMEMBERVIEW_XML, "portrait" );
hgs
parents:
diff changeset
   137
    } 
hgs
parents:
diff changeset
   138
    else 
hgs
parents:
diff changeset
   139
    {
hgs
parents:
diff changeset
   140
        // reading "landscape" section
hgs
parents:
diff changeset
   141
        mDocument->load( CNT_GROUPMEMBERVIEW_XML, "landscape" );
hgs
parents:
diff changeset
   142
    }
hgs
parents:
diff changeset
   143
}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
void CntGroupMemberViewPrivate::activate( const CntViewParameters aArgs )
hgs
parents:
diff changeset
   146
{
hgs
parents:
diff changeset
   147
    mArgs = aArgs;
hgs
parents:
diff changeset
   148
    mViewManager = &mEngine->viewManager();
hgs
parents:
diff changeset
   149
    mThumbnailManager = &mEngine->thumbnailManager();
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
    connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)),
hgs
parents:
diff changeset
   152
            this, SLOT(thumbnailReady(QPixmap, void*, int, int)));
hgs
parents:
diff changeset
   153
        
hgs
parents:
diff changeset
   154
    if (mView->navigationAction() != mSoftkey)
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
        mView->setNavigationAction(mSoftkey);   
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
        
hgs
parents:
diff changeset
   159
    QVariant contact = mArgs.value( ESelectedGroupContact );
hgs
parents:
diff changeset
   160
    mGroupContact = new QContact( contact.value<QContact>() );
hgs
parents:
diff changeset
   161
    
hgs
parents:
diff changeset
   162
    HbMainWindow* window = mView->mainWindow();
hgs
parents:
diff changeset
   163
    if ( window )
hgs
parents:
diff changeset
   164
    {
hgs
parents:
diff changeset
   165
        connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
hgs
parents:
diff changeset
   166
        setOrientation(window->orientation());
hgs
parents:
diff changeset
   167
    }
hgs
parents:
diff changeset
   168
    
hgs
parents:
diff changeset
   169
    mHeadingItem->setGroupDetails(mGroupContact);
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    // avatar
hgs
parents:
diff changeset
   172
    QList<QContactAvatar> details = mGroupContact->details<QContactAvatar>();
hgs
parents:
diff changeset
   173
    for (int i = 0;i < details.count();i++)
hgs
parents:
diff changeset
   174
    {
hgs
parents:
diff changeset
   175
        if (details.at(i).imageUrl().isValid())
hgs
parents:
diff changeset
   176
            {
hgs
parents:
diff changeset
   177
            mAvatar = new QContactAvatar(details.at(i));
hgs
parents:
diff changeset
   178
            mThumbnailManager->getThumbnail(ThumbnailManager::ThumbnailLarge, mAvatar->imageUrl().toString());
hgs
parents:
diff changeset
   179
            break;
hgs
parents:
diff changeset
   180
            }
hgs
parents:
diff changeset
   181
    }
hgs
parents:
diff changeset
   182
    
hgs
parents:
diff changeset
   183
    // create list & model
hgs
parents:
diff changeset
   184
    mListView->setFrictionEnabled(true);
hgs
parents:
diff changeset
   185
    mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
hgs
parents:
diff changeset
   186
    mListView->verticalScrollBar()->setInteractive(true);
hgs
parents:
diff changeset
   187
    mListView->setUniformItemSizes(true);
hgs
parents:
diff changeset
   188
    
hgs
parents:
diff changeset
   189
    HbFrameBackground frame;
hgs
parents:
diff changeset
   190
    frame.setFrameGraphicsName("qtg_fr_list_normal");
hgs
parents:
diff changeset
   191
    frame.setFrameType(HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   192
    HbListViewItem* prototype = mListView->listItemPrototype();
hgs
parents:
diff changeset
   193
    prototype->setDefaultFrame(frame);
hgs
parents:
diff changeset
   194
    
hgs
parents:
diff changeset
   195
    HbIndexFeedback *indexFeedback = new HbIndexFeedback(mView);
hgs
parents:
diff changeset
   196
    indexFeedback->setIndexFeedbackPolicy(HbIndexFeedback::IndexFeedbackSingleCharacter);
hgs
parents:
diff changeset
   197
    indexFeedback->setItemView(mListView);
hgs
parents:
diff changeset
   198
    
hgs
parents:
diff changeset
   199
    mListView->setLayoutName("groupmemberlist");
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
    // if no contacts are present, then disable the Manage Members toolbar 
hgs
parents:
diff changeset
   202
    QContactDetailFilter filter;
hgs
parents:
diff changeset
   203
    filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
hgs
parents:
diff changeset
   204
    filter.setValue(QLatin1String(QContactType::TypeContact));
hgs
parents:
diff changeset
   205
   
hgs
parents:
diff changeset
   206
    QList<QContactLocalId> contactIds = getContactManager()->contactIds(filter);   
hgs
parents:
diff changeset
   207
    if (contactIds.isEmpty())
hgs
parents:
diff changeset
   208
    {
hgs
parents:
diff changeset
   209
       mManageAction->setEnabled(false); 
hgs
parents:
diff changeset
   210
    }      
hgs
parents:
diff changeset
   211
    
hgs
parents:
diff changeset
   212
    createModel();
hgs
parents:
diff changeset
   213
    
hgs
parents:
diff changeset
   214
    if (mArgs.value(ESelectedAction).toString() == CNT_SAVE_ACTION)
hgs
parents:
diff changeset
   215
    {
hgs
parents:
diff changeset
   216
        QString name = getContactManager()->synthesizedContactDisplayLabel(*mGroupContact);
hgs
parents:
diff changeset
   217
        HbNotificationDialog::launchDialog(HbParameterLengthLimiter(hbTrId("txt_phob_dpophead_new_group_1_created").arg(name)));
hgs
parents:
diff changeset
   218
    }
hgs
parents:
diff changeset
   219
    decideActionButtonContext();
hgs
parents:
diff changeset
   220
}
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
void CntGroupMemberViewPrivate::deactivate()
hgs
parents:
diff changeset
   223
{
hgs
parents:
diff changeset
   224
}
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
void CntGroupMemberViewPrivate::showPreviousView()
hgs
parents:
diff changeset
   227
{
hgs
parents:
diff changeset
   228
    Q_Q(CntGroupMemberView);
hgs
parents:
diff changeset
   229
    
hgs
parents:
diff changeset
   230
    emit q->backPressed();
hgs
parents:
diff changeset
   231
    
hgs
parents:
diff changeset
   232
    //save the contact if avatar has been changed.
hgs
parents:
diff changeset
   233
    QContact contact = getContactManager()->contact(mGroupContact->localId());
hgs
parents:
diff changeset
   234
    if ( contact != *mGroupContact )
hgs
parents:
diff changeset
   235
    {
hgs
parents:
diff changeset
   236
        getContactManager()->saveContact(mGroupContact);
hgs
parents:
diff changeset
   237
    }
hgs
parents:
diff changeset
   238
    mViewManager->back(mArgs);
hgs
parents:
diff changeset
   239
}
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
void CntGroupMemberViewPrivate::openGroupActions()
hgs
parents:
diff changeset
   242
{
hgs
parents:
diff changeset
   243
    QVariant var;
hgs
parents:
diff changeset
   244
    var.setValue(*mGroupContact);
hgs
parents:
diff changeset
   245
    
hgs
parents:
diff changeset
   246
    mArgs.insert(EViewId, groupActionsView);
hgs
parents:
diff changeset
   247
    mArgs.insert(ESelectedGroupContact, var);
hgs
parents:
diff changeset
   248
    mViewManager->changeView(mArgs);
hgs
parents:
diff changeset
   249
}
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
void CntGroupMemberViewPrivate::manageMembers()
hgs
parents:
diff changeset
   252
{
hgs
parents:
diff changeset
   253
    QContactRelationshipFilter membersFilter;
hgs
parents:
diff changeset
   254
    membersFilter.setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
   255
    membersFilter.setRelatedContactRole(QContactRelationship::First);
hgs
parents:
diff changeset
   256
    membersFilter.setRelatedContactId(mGroupContact->id());   
hgs
parents:
diff changeset
   257
    
hgs
parents:
diff changeset
   258
    mOriginalGroupMembers = getContactManager()->contactIds(membersFilter);
hgs
parents:
diff changeset
   259
    
hgs
parents:
diff changeset
   260
    QContactName contactName = mGroupContact->detail( QContactName::DefinitionName );
hgs
parents:
diff changeset
   261
    QString groupName = contactName.value( QContactName::FieldCustomLabel );
hgs
parents:
diff changeset
   262
    if (groupName.isEmpty())
hgs
parents:
diff changeset
   263
    {
hgs
parents:
diff changeset
   264
        groupName = hbTrId("txt_phob_list_unnamed");
hgs
parents:
diff changeset
   265
    }
hgs
parents:
diff changeset
   266
    
hgs
parents:
diff changeset
   267
    CntFetchContactPopup* popup = CntFetchContactPopup::createMultiSelectionPopup(
hgs
parents:
diff changeset
   268
            HbParameterLengthLimiter(hbTrId("txt_phob_title_members_of_1_group")).arg(groupName),
hgs
parents:
diff changeset
   269
            hbTrId("txt_common_button_save"),
hgs
parents:
diff changeset
   270
            mEngine->contactManager(SYMBIAN_BACKEND));
hgs
parents:
diff changeset
   271
    connect( popup, SIGNAL(fetchReady(QSet<QContactLocalId>)),this, SLOT(handleManageMembers(QSet<QContactLocalId>)) );
hgs
parents:
diff changeset
   272
    popup->setSelectedContacts( mOriginalGroupMembers.toSet() );
hgs
parents:
diff changeset
   273
    popup->showPopup();
hgs
parents:
diff changeset
   274
}
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
void CntGroupMemberViewPrivate::handleManageMembers( QSet<QContactLocalId> aIds )
hgs
parents:
diff changeset
   277
{
hgs
parents:
diff changeset
   278
    QList<QContactRelationship> removedMemberships;
hgs
parents:
diff changeset
   279
    QList<QContactRelationship> addedMemberships;
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
    QSet<QContactLocalId> removedMembers = mOriginalGroupMembers.toSet() - aIds;
hgs
parents:
diff changeset
   282
    setRelationship(removedMembers, removedMemberships);
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
    QSet<QContactLocalId> addedMembers = aIds - mOriginalGroupMembers.toSet();
hgs
parents:
diff changeset
   285
    setRelationship(addedMembers, addedMemberships);
hgs
parents:
diff changeset
   286
    
hgs
parents:
diff changeset
   287
    if (!addedMemberships.isEmpty()) 
hgs
parents:
diff changeset
   288
    {
hgs
parents:
diff changeset
   289
        getContactManager()->saveRelationships(&addedMemberships, NULL);
hgs
parents:
diff changeset
   290
    }
hgs
parents:
diff changeset
   291
    
hgs
parents:
diff changeset
   292
    if (!removedMemberships.isEmpty()) 
hgs
parents:
diff changeset
   293
    {
hgs
parents:
diff changeset
   294
        getContactManager()->removeRelationships(removedMemberships, NULL);
hgs
parents:
diff changeset
   295
    }
hgs
parents:
diff changeset
   296
    
hgs
parents:
diff changeset
   297
    decideActionButtonContext();
hgs
parents:
diff changeset
   298
}
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
void CntGroupMemberViewPrivate::createModel()
hgs
parents:
diff changeset
   301
{
hgs
parents:
diff changeset
   302
    QContactRelationshipFilter rFilter;
hgs
parents:
diff changeset
   303
    rFilter.setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
   304
    rFilter.setRelatedContactRole(QContactRelationship::First);
hgs
parents:
diff changeset
   305
    rFilter.setRelatedContactId(mGroupContact->id());
hgs
parents:
diff changeset
   306
    
hgs
parents:
diff changeset
   307
    mModel = new CntListModel(getContactManager(), rFilter, false);
hgs
parents:
diff changeset
   308
    mListView->setModel(mModel);
hgs
parents:
diff changeset
   309
}
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
void CntGroupMemberViewPrivate::editGroup()
hgs
parents:
diff changeset
   312
{
hgs
parents:
diff changeset
   313
    mArgs.insert(EViewId, groupEditorView);
hgs
parents:
diff changeset
   314
    QVariant var;
hgs
parents:
diff changeset
   315
    var.setValue(*mGroupContact);
hgs
parents:
diff changeset
   316
    mArgs.insert(ESelectedGroupContact, var);
hgs
parents:
diff changeset
   317
    mViewManager->changeView(mArgs);
hgs
parents:
diff changeset
   318
}
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
void CntGroupMemberViewPrivate::deleteGroup()
hgs
parents:
diff changeset
   321
{
hgs
parents:
diff changeset
   322
    QContactName contactName = mGroupContact->detail( QContactName::DefinitionName );
hgs
parents:
diff changeset
   323
    QString groupName = contactName.value( QContactName::FieldCustomLabel );
hgs
parents:
diff changeset
   324
    if (groupName.isNull())
hgs
parents:
diff changeset
   325
    {
hgs
parents:
diff changeset
   326
        groupName = hbTrId("txt_phob_list_unnamed");
hgs
parents:
diff changeset
   327
    }
hgs
parents:
diff changeset
   328
    
hgs
parents:
diff changeset
   329
    HbLabel *headingLabel = new HbLabel();
hgs
parents:
diff changeset
   330
    headingLabel->setPlainText(HbParameterLengthLimiter(hbTrId("txt_phob_dialog_delete_1_group")).arg(groupName));
hgs
parents:
diff changeset
   331
    
hgs
parents:
diff changeset
   332
    HbMessageBox::question(hbTrId("txt_phob_dialog_only_group_will_be_removed_contac"), this, SLOT(handleDeleteGroup(int)),
hgs
parents:
diff changeset
   333
            HbMessageBox::Delete | HbMessageBox::Cancel, headingLabel);
hgs
parents:
diff changeset
   334
}
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
void CntGroupMemberViewPrivate::handleDeleteGroup(int action)
hgs
parents:
diff changeset
   337
{
hgs
parents:
diff changeset
   338
    if (action == HbMessageBox::Delete)
hgs
parents:
diff changeset
   339
    {
hgs
parents:
diff changeset
   340
        getContactManager()->removeContact(mGroupContact->localId());
hgs
parents:
diff changeset
   341
        showPreviousView();
hgs
parents:
diff changeset
   342
    }
hgs
parents:
diff changeset
   343
}
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
/*!
hgs
parents:
diff changeset
   346
Called when a list item is longpressed
hgs
parents:
diff changeset
   347
*/
hgs
parents:
diff changeset
   348
void CntGroupMemberViewPrivate::showContextMenu(HbAbstractViewItem *aItem, const QPointF &aCoords)
hgs
parents:
diff changeset
   349
{
hgs
parents:
diff changeset
   350
    QVariant data( aItem->modelIndex().row() );
hgs
parents:
diff changeset
   351
   
hgs
parents:
diff changeset
   352
    QModelIndex index = aItem->modelIndex();
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
    HbMenu *menu = new HbMenu();
hgs
parents:
diff changeset
   355
    menu->setAttribute(Qt::WA_DeleteOnClose);
hgs
parents:
diff changeset
   356
    menu->setPreferredPos( aCoords );
hgs
parents:
diff changeset
   357
    
hgs
parents:
diff changeset
   358
    HbAction *removeFromGroupAction = 0;
hgs
parents:
diff changeset
   359
    HbAction *openContactAction = 0;
hgs
parents:
diff changeset
   360
    HbAction *editContactAction = 0;
hgs
parents:
diff changeset
   361
    HbAction *sendToHsAction = 0;
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
    openContactAction = menu->addAction(hbTrId("txt_common_menu_open"));
hgs
parents:
diff changeset
   364
    editContactAction = menu->addAction(hbTrId("txt_common_menu_edit"));
hgs
parents:
diff changeset
   365
    removeFromGroupAction = menu->addAction(hbTrId("txt_phob_menu_remove_from_group"));
hgs
parents:
diff changeset
   366
    sendToHsAction = menu->addAction(hbTrId("txt_phob_menu_send_to_homescreen"));
hgs
parents:
diff changeset
   367
    
hgs
parents:
diff changeset
   368
    openContactAction->setData( data );
hgs
parents:
diff changeset
   369
    editContactAction->setData( data );
hgs
parents:
diff changeset
   370
    removeFromGroupAction->setData( data );
hgs
parents:
diff changeset
   371
    sendToHsAction->setData( data );
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
    menu->open(this, SLOT(handleMenu(HbAction*)));
hgs
parents:
diff changeset
   374
}
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
void CntGroupMemberViewPrivate::handleMenu(HbAction* action)
hgs
parents:
diff changeset
   377
{
hgs
parents:
diff changeset
   378
    int row = action->data().toInt();
hgs
parents:
diff changeset
   379
    HbMenu *menuItem = static_cast<HbMenu*>(sender());
hgs
parents:
diff changeset
   380
    QModelIndex index = mModel->index(row);
hgs
parents:
diff changeset
   381
    
hgs
parents:
diff changeset
   382
    if ( action == menuItem->actions().first() )
hgs
parents:
diff changeset
   383
        {
hgs
parents:
diff changeset
   384
        showContactView(index);
hgs
parents:
diff changeset
   385
        }
hgs
parents:
diff changeset
   386
    else if (action == menuItem->actions().at(1))
hgs
parents:
diff changeset
   387
        {
hgs
parents:
diff changeset
   388
        editContact(index);
hgs
parents:
diff changeset
   389
        }
hgs
parents:
diff changeset
   390
    else if (action == menuItem->actions().at(2))
hgs
parents:
diff changeset
   391
        {
hgs
parents:
diff changeset
   392
        removeFromGroup(index);
hgs
parents:
diff changeset
   393
        }
hgs
parents:
diff changeset
   394
    else if (action == menuItem->actions().at(3))
hgs
parents:
diff changeset
   395
        {
hgs
parents:
diff changeset
   396
        sendToHs(index);
hgs
parents:
diff changeset
   397
        }
hgs
parents:
diff changeset
   398
}
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
/*!
hgs
parents:
diff changeset
   401
Called after user clicked on the listview.
hgs
parents:
diff changeset
   402
*/
hgs
parents:
diff changeset
   403
void CntGroupMemberViewPrivate::sendToHs(const QModelIndex &index)
hgs
parents:
diff changeset
   404
{
hgs
parents:
diff changeset
   405
    QVariantHash preferences;
hgs
parents:
diff changeset
   406
    preferences["contactId"] = mModel->contact(index).id().localId();
hgs
parents:
diff changeset
   407
    
hgs
parents:
diff changeset
   408
    XQServiceRequest snd("com.nokia.symbian.IHomeScreenClient",
hgs
parents:
diff changeset
   409
                         "addWidget(QString,QVariantHash)",
hgs
parents:
diff changeset
   410
                         false);
hgs
parents:
diff changeset
   411
    snd << QString("contactwidgethsplugin");
hgs
parents:
diff changeset
   412
    snd << preferences;
hgs
parents:
diff changeset
   413
    snd.send();
hgs
parents:
diff changeset
   414
}
hgs
parents:
diff changeset
   415
hgs
parents:
diff changeset
   416
/*!
hgs
parents:
diff changeset
   417
Called after user clicked on the listview.
hgs
parents:
diff changeset
   418
*/
hgs
parents:
diff changeset
   419
void CntGroupMemberViewPrivate::showContactView(const QModelIndex &index)
hgs
parents:
diff changeset
   420
{
hgs
parents:
diff changeset
   421
    mArgs.insert(EViewId, contactCardView);
hgs
parents:
diff changeset
   422
    QVariant var;
hgs
parents:
diff changeset
   423
    var.setValue(mModel->contact(index));
hgs
parents:
diff changeset
   424
    mArgs.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   425
    QVariant varGroup;
hgs
parents:
diff changeset
   426
    varGroup.setValue(*mGroupContact);
hgs
parents:
diff changeset
   427
    mArgs.insert(ESelectedGroupContact, varGroup);
hgs
parents:
diff changeset
   428
    mViewManager->changeView(mArgs);
hgs
parents:
diff changeset
   429
        
hgs
parents:
diff changeset
   430
}
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
void CntGroupMemberViewPrivate::removeFromGroup(const QModelIndex &index)
hgs
parents:
diff changeset
   433
{
hgs
parents:
diff changeset
   434
    // get contact id using index
hgs
parents:
diff changeset
   435
    QContact selectedContact = mModel->contact(index);
hgs
parents:
diff changeset
   436
    QContactRelationship relationship;
hgs
parents:
diff changeset
   437
    relationship.setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
   438
    relationship.setFirst(mGroupContact->id());
hgs
parents:
diff changeset
   439
    relationship.setSecond(selectedContact.id());
hgs
parents:
diff changeset
   440
    getContactManager()->removeRelationship(relationship);
hgs
parents:
diff changeset
   441
    decideActionButtonContext();
hgs
parents:
diff changeset
   442
}
hgs
parents:
diff changeset
   443
hgs
parents:
diff changeset
   444
void CntGroupMemberViewPrivate::editContact(const QModelIndex &index)
hgs
parents:
diff changeset
   445
{
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
    mArgs.insert(EViewId, editView);
hgs
parents:
diff changeset
   448
    QVariant var;
hgs
parents:
diff changeset
   449
    var.setValue(mModel->contact(index));
hgs
parents:
diff changeset
   450
    mArgs.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   451
    mViewManager->changeView(mArgs);
hgs
parents:
diff changeset
   452
}
hgs
parents:
diff changeset
   453
hgs
parents:
diff changeset
   454
void CntGroupMemberViewPrivate::thumbnailReady(const QPixmap& pixmap, void *data, int id, int error)
hgs
parents:
diff changeset
   455
{
hgs
parents:
diff changeset
   456
    Q_UNUSED(data);
hgs
parents:
diff changeset
   457
    Q_UNUSED(id);
hgs
parents:
diff changeset
   458
    Q_UNUSED(error);
hgs
parents:
diff changeset
   459
    if (!error)
hgs
parents:
diff changeset
   460
    {
hgs
parents:
diff changeset
   461
        HbIcon icon(pixmap);
hgs
parents:
diff changeset
   462
        mHeadingItem->setIcon(icon);
hgs
parents:
diff changeset
   463
        
hgs
parents:
diff changeset
   464
        mImageLabel->clear();
hgs
parents:
diff changeset
   465
        mImageLabel->setIcon(pixmap);
hgs
parents:
diff changeset
   466
    }
hgs
parents:
diff changeset
   467
}
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
void CntGroupMemberViewPrivate::openImageEditor()
hgs
parents:
diff changeset
   470
{
hgs
parents:
diff changeset
   471
    QVariant var;
hgs
parents:
diff changeset
   472
    var.setValue(*mGroupContact);
hgs
parents:
diff changeset
   473
       
hgs
parents:
diff changeset
   474
    // only group contact is assigned since we want to only
hgs
parents:
diff changeset
   475
    // change the groups image
hgs
parents:
diff changeset
   476
    mArgs.insert(ESelectedGroupContact, var);
hgs
parents:
diff changeset
   477
    
hgs
parents:
diff changeset
   478
    mArgs.insert(EViewId, imageEditorView );
hgs
parents:
diff changeset
   479
        
hgs
parents:
diff changeset
   480
    mViewManager->changeView( mArgs );
hgs
parents:
diff changeset
   481
}
hgs
parents:
diff changeset
   482
hgs
parents:
diff changeset
   483
QContactManager* CntGroupMemberViewPrivate::getContactManager()
hgs
parents:
diff changeset
   484
{
hgs
parents:
diff changeset
   485
    return &mEngine->contactManager(SYMBIAN_BACKEND);
hgs
parents:
diff changeset
   486
}
hgs
parents:
diff changeset
   487
hgs
parents:
diff changeset
   488
void CntGroupMemberViewPrivate::setRelationship(QSet<QContactLocalId>        &aLocalIds,
hgs
parents:
diff changeset
   489
                                         QList<QContactRelationship>  &aRelationshipList)
hgs
parents:
diff changeset
   490
{
hgs
parents:
diff changeset
   491
    foreach (QContactLocalId localId, aLocalIds) {
hgs
parents:
diff changeset
   492
		QContactId id;
hgs
parents:
diff changeset
   493
		id.setLocalId(localId);
hgs
parents:
diff changeset
   494
        QContactRelationship membership;
hgs
parents:
diff changeset
   495
        membership.setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
   496
        membership.setFirst(mGroupContact->id());
hgs
parents:
diff changeset
   497
        membership.setSecond(id);
hgs
parents:
diff changeset
   498
        aRelationshipList.append(membership);
hgs
parents:
diff changeset
   499
    }
hgs
parents:
diff changeset
   500
}
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
/*!
hgs
parents:
diff changeset
   503
Draw the image specific content menu
hgs
parents:
diff changeset
   504
*/
hgs
parents:
diff changeset
   505
void CntGroupMemberViewPrivate::drawImageMenu(const QPointF &aCoords)
hgs
parents:
diff changeset
   506
{
hgs
parents:
diff changeset
   507
    HbMenu *menu = new HbMenu();
hgs
parents:
diff changeset
   508
    HbAction *changeImageAction = menu->addAction(hbTrId("txt_phob_menu_change_picture"), this, SLOT(openImageEditor()));
hgs
parents:
diff changeset
   509
    if (mAvatar && !mAvatar->imageUrl().isEmpty())
hgs
parents:
diff changeset
   510
    {
hgs
parents:
diff changeset
   511
        menu->addAction(hbTrId("txt_phob_menu_remove_image"), this, SLOT(removeImage()));
hgs
parents:
diff changeset
   512
    }
hgs
parents:
diff changeset
   513
    menu->setPreferredPos(aCoords);
hgs
parents:
diff changeset
   514
    menu->open();
hgs
parents:
diff changeset
   515
}
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
void CntGroupMemberViewPrivate::removeImage()
hgs
parents:
diff changeset
   519
{
hgs
parents:
diff changeset
   520
    if (mAvatar) 
hgs
parents:
diff changeset
   521
    {
hgs
parents:
diff changeset
   522
        if (!mAvatar->imageUrl().isEmpty())
hgs
parents:
diff changeset
   523
        {
hgs
parents:
diff changeset
   524
            bool success = mGroupContact->removeDetail(mAvatar);
hgs
parents:
diff changeset
   525
            // Check if image removable.
hgs
parents:
diff changeset
   526
            CntImageUtility imageUtility;
hgs
parents:
diff changeset
   527
            if(imageUtility.isImageRemovable(mAvatar->imageUrl().toString()))
hgs
parents:
diff changeset
   528
            {
hgs
parents:
diff changeset
   529
                imageUtility.removeImage(mAvatar->imageUrl().toString());
hgs
parents:
diff changeset
   530
            }
hgs
parents:
diff changeset
   531
            mAvatar->setImageUrl(QUrl());
hgs
parents:
diff changeset
   532
            mImageLabel->clear();
hgs
parents:
diff changeset
   533
            mImageLabel->setAvatarIcon(HbIcon("qtg_large_add_group_picture"));
hgs
parents:
diff changeset
   534
            mHeadingItem->setIcon(HbIcon("qtg_large_add_group_picture"));
hgs
parents:
diff changeset
   535
            getContactManager()->saveContact(mGroupContact);
hgs
parents:
diff changeset
   536
       }
hgs
parents:
diff changeset
   537
    }
hgs
parents:
diff changeset
   538
}
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
void CntGroupMemberViewPrivate::decideActionButtonContext()
hgs
parents:
diff changeset
   541
{
hgs
parents:
diff changeset
   542
    bool isActionDefined( false );
hgs
parents:
diff changeset
   543
    
hgs
parents:
diff changeset
   544
    QContactPhoneNumber confCallNumber = mGroupContact->detail<QContactPhoneNumber>();
hgs
parents:
diff changeset
   545
    //first check whether Conf Num is defined for a group.    
hgs
parents:
diff changeset
   546
    if( !confCallNumber.number().isEmpty() )
hgs
parents:
diff changeset
   547
    {
hgs
parents:
diff changeset
   548
        isActionDefined = true;
hgs
parents:
diff changeset
   549
    }
hgs
parents:
diff changeset
   550
    else
hgs
parents:
diff changeset
   551
    {
hgs
parents:
diff changeset
   552
        //Since no conf number has been defined.
hgs
parents:
diff changeset
   553
        //lets try to find if any group member has a communication field set or not
hgs
parents:
diff changeset
   554
        
hgs
parents:
diff changeset
   555
        int count = mModel->rowCount();
hgs
parents:
diff changeset
   556
        
hgs
parents:
diff changeset
   557
        for ( int i = 0; i<count; i++ )
hgs
parents:
diff changeset
   558
        {
hgs
parents:
diff changeset
   559
            QModelIndex modelIndex = mModel->index(i,0);
hgs
parents:
diff changeset
   560
            QContact groupMember = mModel->contact(modelIndex);
hgs
parents:
diff changeset
   561
            
hgs
parents:
diff changeset
   562
            QContactDetail phoneDetail = groupMember.detail( QContactPhoneNumber::DefinitionName );
hgs
parents:
diff changeset
   563
            QContactDetail emailDetail = groupMember.detail( QContactEmailAddress::DefinitionName );        
hgs
parents:
diff changeset
   564
            
hgs
parents:
diff changeset
   565
            if ( !phoneDetail.isEmpty() || !emailDetail.isEmpty() )
hgs
parents:
diff changeset
   566
            {
hgs
parents:
diff changeset
   567
                isActionDefined = true;
hgs
parents:
diff changeset
   568
                break;
hgs
parents:
diff changeset
   569
            }
hgs
parents:
diff changeset
   570
        }
hgs
parents:
diff changeset
   571
    }
hgs
parents:
diff changeset
   572
 
hgs
parents:
diff changeset
   573
    if ( isActionDefined )
hgs
parents:
diff changeset
   574
    {
hgs
parents:
diff changeset
   575
        //Enable when atleast 1 of the contacts in the current group have a 
hgs
parents:
diff changeset
   576
        //communication address Defined or When a Group has Conf number defined.
hgs
parents:
diff changeset
   577
        mShowActionsAction->setDisabled(false);    
hgs
parents:
diff changeset
   578
    }
hgs
parents:
diff changeset
   579
    else
hgs
parents:
diff changeset
   580
    {
hgs
parents:
diff changeset
   581
        //Disable when none of the contacts in the current group have any 
hgs
parents:
diff changeset
   582
        //communication address Defined.         
hgs
parents:
diff changeset
   583
        mShowActionsAction->setDisabled(true);
hgs
parents:
diff changeset
   584
    }
hgs
parents:
diff changeset
   585
}
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
// end of file