phonebookui/cntcommonui/views/cntmycardview.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 "cntmycardview.h"
hgs
parents:
diff changeset
    19
#include "cntfetchcontactpopup.h"
hgs
parents:
diff changeset
    20
#include "cntglobal.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <qtcontacts.h>
hgs
parents:
diff changeset
    23
#include <hbpushbutton.h>
hgs
parents:
diff changeset
    24
#include <hbaction.h>
hgs
parents:
diff changeset
    25
#include <hbview.h>
hgs
parents:
diff changeset
    26
#include <hbmainwindow.h>
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
const char *CNT_MYCARD_UI_XML = ":/xml/contacts_mc.docml";
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
CntMyCardView::CntMyCardView() :
hgs
parents:
diff changeset
    31
    mContact(NULL),
hgs
parents:
diff changeset
    32
    mViewManager(NULL)
hgs
parents:
diff changeset
    33
{
hgs
parents:
diff changeset
    34
    bool ok = false;
hgs
parents:
diff changeset
    35
    mDocumentLoader.load(CNT_MYCARD_UI_XML, &ok);
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
    if (ok)
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
        mView = static_cast<HbView*>(mDocumentLoader.findWidget(QString("view")));
hgs
parents:
diff changeset
    40
    }
hgs
parents:
diff changeset
    41
    else
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
        qFatal("Unable to read :/xml/contacts_mc.docml");
hgs
parents:
diff changeset
    44
    }
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    //back button
hgs
parents:
diff changeset
    47
    mSoftkey = new HbAction(Hb::BackNaviAction, mView);
hgs
parents:
diff changeset
    48
    connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
hgs
parents:
diff changeset
    49
}
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
CntMyCardView::~CntMyCardView()
hgs
parents:
diff changeset
    52
{
hgs
parents:
diff changeset
    53
    mView->deleteLater();
hgs
parents:
diff changeset
    54
    
hgs
parents:
diff changeset
    55
    delete mContact;
hgs
parents:
diff changeset
    56
    mContact = NULL;
hgs
parents:
diff changeset
    57
}
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
/*!
hgs
parents:
diff changeset
    60
Activates a previous view
hgs
parents:
diff changeset
    61
*/
hgs
parents:
diff changeset
    62
void CntMyCardView::showPreviousView()
hgs
parents:
diff changeset
    63
{
hgs
parents:
diff changeset
    64
	CntViewParameters args;
hgs
parents:
diff changeset
    65
    mViewManager->back(args);
hgs
parents:
diff changeset
    66
}
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
/*
hgs
parents:
diff changeset
    69
Activates a default view
hgs
parents:
diff changeset
    70
*/
hgs
parents:
diff changeset
    71
void CntMyCardView::activate(const CntViewParameters aArgs)
hgs
parents:
diff changeset
    72
{
hgs
parents:
diff changeset
    73
    mViewManager = &mEngine->viewManager();
hgs
parents:
diff changeset
    74
    
hgs
parents:
diff changeset
    75
    if (mView->navigationAction() != mSoftkey) {
hgs
parents:
diff changeset
    76
        mView->setNavigationAction(mSoftkey);
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
    
hgs
parents:
diff changeset
    79
    HbMainWindow* window = mView->mainWindow();
hgs
parents:
diff changeset
    80
    connect(window, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(setOrientation(Qt::Orientation)));
hgs
parents:
diff changeset
    81
    setOrientation(window->orientation());
hgs
parents:
diff changeset
    82
    
hgs
parents:
diff changeset
    83
    mContact = new QContact(aArgs.value(ESelectedContact).value<QContact>());
hgs
parents:
diff changeset
    84
    HbPushButton *newButton = static_cast<HbPushButton*>(mDocumentLoader.findWidget(QString("cnt_button_new")));
hgs
parents:
diff changeset
    85
    connect(newButton, SIGNAL(clicked()), this, SLOT(openNameEditor()));
hgs
parents:
diff changeset
    86
    connect(newButton, SIGNAL(longPress(QPointF)), this, SLOT(openNameEditor()));
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
    HbPushButton *chooseButton = static_cast<HbPushButton*>(mDocumentLoader.findWidget(QString("cnt_button_choose")));
hgs
parents:
diff changeset
    89
    connect(chooseButton, SIGNAL(clicked()), this, SLOT(openMyCardSelectionView()));
hgs
parents:
diff changeset
    90
    connect(chooseButton, SIGNAL(longPress(QPointF)), this, SLOT(openMyCardSelectionView()));
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    QContactDetailFilter filter;
hgs
parents:
diff changeset
    93
    filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
hgs
parents:
diff changeset
    94
    filter.setValue(QLatin1String(QContactType::TypeContact));
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    if (mEngine->contactManager( SYMBIAN_BACKEND ).contactIds(filter).isEmpty())
hgs
parents:
diff changeset
    97
    {
hgs
parents:
diff changeset
    98
        chooseButton->setEnabled(false);
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
}
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
void CntMyCardView::deactivate()
hgs
parents:
diff changeset
   103
{
hgs
parents:
diff changeset
   104
}
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
void CntMyCardView::setOrientation(Qt::Orientation orientation)
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
    if (orientation == Qt::Vertical) 
hgs
parents:
diff changeset
   109
    {
hgs
parents:
diff changeset
   110
        // reading "portrait" section
hgs
parents:
diff changeset
   111
        mDocumentLoader.load(CNT_MYCARD_UI_XML, "portrait");
hgs
parents:
diff changeset
   112
    } 
hgs
parents:
diff changeset
   113
    else 
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
        // reading "landscape" section
hgs
parents:
diff changeset
   116
        mDocumentLoader.load(CNT_MYCARD_UI_XML, "landscape");
hgs
parents:
diff changeset
   117
    }
hgs
parents:
diff changeset
   118
}
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
/*!
hgs
parents:
diff changeset
   121
Opens the name detail editor view
hgs
parents:
diff changeset
   122
*/
hgs
parents:
diff changeset
   123
void CntMyCardView::openNameEditor()
hgs
parents:
diff changeset
   124
{
hgs
parents:
diff changeset
   125
    CntViewParameters viewParameters;
hgs
parents:
diff changeset
   126
    viewParameters.insert(EViewId, editView);
hgs
parents:
diff changeset
   127
    viewParameters.insert(EMyCard, "myCard" );
hgs
parents:
diff changeset
   128
    
hgs
parents:
diff changeset
   129
    QVariant var;
hgs
parents:
diff changeset
   130
    var.setValue(*mContact);
hgs
parents:
diff changeset
   131
    viewParameters.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   132
    viewParameters.insert(EExtraAction, CNT_ROOT_ACTION);
hgs
parents:
diff changeset
   133
    mViewManager->changeView(viewParameters);
hgs
parents:
diff changeset
   134
}
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
/*!
hgs
parents:
diff changeset
   137
Opens the my card selection view
hgs
parents:
diff changeset
   138
*/
hgs
parents:
diff changeset
   139
void CntMyCardView::openMyCardSelectionView()
hgs
parents:
diff changeset
   140
{
hgs
parents:
diff changeset
   141
    CntFetchContactPopup* popup = CntFetchContactPopup::createSingleSelectionPopup(
hgs
parents:
diff changeset
   142
            hbTrId("txt_phob_title_select_contact"),
hgs
parents:
diff changeset
   143
            mEngine->contactManager(SYMBIAN_BACKEND));
hgs
parents:
diff changeset
   144
    connect( popup, SIGNAL(fetchReady(QSet<QContactLocalId>)), this, SLOT(handleMultiCardSelection(QSet<QContactLocalId>)));
hgs
parents:
diff changeset
   145
    QSet<QContactLocalId> ids;
hgs
parents:
diff changeset
   146
    popup->setSelectedContacts(ids);
hgs
parents:
diff changeset
   147
    popup->showPopup();
hgs
parents:
diff changeset
   148
}
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
void CntMyCardView::handleMultiCardSelection( QSet<QContactLocalId> aIds )
hgs
parents:
diff changeset
   151
{
hgs
parents:
diff changeset
   152
    QContactManager& manager = mEngine->contactManager( SYMBIAN_BACKEND );
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    if ( !aIds.isEmpty() ) {
hgs
parents:
diff changeset
   155
        QList<QContactLocalId> selectedContactsList = aIds.values();
hgs
parents:
diff changeset
   156
        QContact contact = manager.contact(selectedContactsList.front());
hgs
parents:
diff changeset
   157
        removeFromGroup(&contact);
hgs
parents:
diff changeset
   158
        
hgs
parents:
diff changeset
   159
        manager.setSelfContactId( contact.localId() );
hgs
parents:
diff changeset
   160
        showPreviousView();
hgs
parents:
diff changeset
   161
    }
hgs
parents:
diff changeset
   162
}
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
void CntMyCardView::removeFromGroup(const QContact* aContact)
hgs
parents:
diff changeset
   165
{
hgs
parents:
diff changeset
   166
    // Fetch all groups the contact is member and remove the relationships
hgs
parents:
diff changeset
   167
    QContactManager& mgr = mEngine->contactManager(SYMBIAN_BACKEND);
hgs
parents:
diff changeset
   168
    QContactRelationshipFilter relationshipFilter;                   
hgs
parents:
diff changeset
   169
    relationshipFilter.setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
   170
    relationshipFilter.setRelatedContactId(aContact->id());           
hgs
parents:
diff changeset
   171
    relationshipFilter.setRelatedContactRole(QContactRelationship::Second);
hgs
parents:
diff changeset
   172
    QList<QContactLocalId> groupIds = mgr.contactIds(relationshipFilter);
hgs
parents:
diff changeset
   173
    
hgs
parents:
diff changeset
   174
    QList<QContactRelationship> relationships;
hgs
parents:
diff changeset
   175
    for(int i = 0;i < groupIds.count();i++) {
hgs
parents:
diff changeset
   176
        QContact groupContact = mgr.contact(groupIds.at(i));
hgs
parents:
diff changeset
   177
        QContactRelationship relationship;
hgs
parents:
diff changeset
   178
        relationship.setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
   179
        relationship.setFirst(groupContact.id());
hgs
parents:
diff changeset
   180
        relationship.setSecond(aContact->id());
hgs
parents:
diff changeset
   181
        relationships.append(relationship);
hgs
parents:
diff changeset
   182
    }
hgs
parents:
diff changeset
   183
    QMap<int, QContactManager::Error> errorMap;
hgs
parents:
diff changeset
   184
    mgr.removeRelationships(relationships,&errorMap);
hgs
parents:
diff changeset
   185
}
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
// EOF