phonebookui/cntcommonui/views/cntnamesview_p.cpp
author hgs
Fri, 15 Oct 2010 12:24:46 +0300
changeset 81 640d30f4fb64
parent 72 6abfb1094884
permissions -rw-r--r--
201041
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 "cntnamesview_p.h"
hgs
parents:
diff changeset
    19
#include "cntactionlauncher.h"
hgs
parents:
diff changeset
    20
#include "cntfetchcontactpopup.h"
hgs
parents:
diff changeset
    21
#include "cntextensionmanager.h"
hgs
parents:
diff changeset
    22
#include "cntglobal.h"
hgs
parents:
diff changeset
    23
#include "cntdebug.h"
hgs
parents:
diff changeset
    24
#include "cntapplication.h"
hgs
parents:
diff changeset
    25
#include "cntfavourite.h"
81
hgs
parents: 72
diff changeset
    26
#include "cntpinchgrabber.h"
hgs
parents: 72
diff changeset
    27
#include "cntnamesviewitem.h"
hgs
parents: 72
diff changeset
    28
72
hgs
parents:
diff changeset
    29
#include <cntabstractengine.h>
hgs
parents:
diff changeset
    30
#include <cntuiextensionfactory.h>
hgs
parents:
diff changeset
    31
#include <cntuisocialextension.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include <hbabstractviewitem.h>
hgs
parents:
diff changeset
    34
#include <hbaction.h>
hgs
parents:
diff changeset
    35
#include <hbmenu.h>
hgs
parents:
diff changeset
    36
#include <hbtoolbar.h>
hgs
parents:
diff changeset
    37
#include <hbmainwindow.h>
hgs
parents:
diff changeset
    38
#include <hbview.h>
hgs
parents:
diff changeset
    39
#include <hbdocumentloader.h>
hgs
parents:
diff changeset
    40
#include <hblistview.h>
hgs
parents:
diff changeset
    41
#include <hblistviewitem.h>
hgs
parents:
diff changeset
    42
#include <hblineedit.h>
hgs
parents:
diff changeset
    43
#include <hbindexfeedback.h>
hgs
parents:
diff changeset
    44
#include <hbscrollbar.h>
hgs
parents:
diff changeset
    45
#include <hbsearchpanel.h>
hgs
parents:
diff changeset
    46
#include <hbtoolbar.h>
hgs
parents:
diff changeset
    47
#include <hbframebackground.h>
hgs
parents:
diff changeset
    48
#include <hbshrinkingvkbhost.h>
hgs
parents:
diff changeset
    49
#include <hbmessagebox.h>
hgs
parents:
diff changeset
    50
#include <hbparameterlengthlimiter.h>
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
#include <QInputContext>
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
const char *CNT_CONTACTLIST_XML = ":/xml/contacts_namelist.docml";
81
hgs
parents: 72
diff changeset
    55
const QString CNT_ACTIVITY_MAINVIEW = "ContactsMainView";
72
hgs
parents:
diff changeset
    56
static const int CNT_MIN_ROW_COUNT = 2;
hgs
parents:
diff changeset
    57
bool CntNamesViewPrivate::mIsFirstTimeUse = true;
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
CntNamesViewPrivate::CntNamesViewPrivate() :
hgs
parents:
diff changeset
    60
    QObject(),
hgs
parents:
diff changeset
    61
    mViewManager(NULL),
hgs
parents:
diff changeset
    62
    mListModel(NULL),
81
hgs
parents: 72
diff changeset
    63
    mView(NULL),
72
hgs
parents:
diff changeset
    64
    mListView(NULL),
hgs
parents:
diff changeset
    65
    mSearchPanel(NULL),
hgs
parents:
diff changeset
    66
    mLoader(NULL),
hgs
parents:
diff changeset
    67
    mVirtualKeyboard(NULL),
81
hgs
parents: 72
diff changeset
    68
    mSoftkey(NULL),
72
hgs
parents:
diff changeset
    69
    mNamesAction(NULL),
81
hgs
parents: 72
diff changeset
    70
    mMultipleDeleter(NULL),
72
hgs
parents:
diff changeset
    71
    mMenuBuilder(NULL),
81
hgs
parents: 72
diff changeset
    72
    mActionGroup(NULL),
hgs
parents: 72
diff changeset
    73
    mMenu(NULL),
hgs
parents: 72
diff changeset
    74
    mViewMenu(NULL),
hgs
parents: 72
diff changeset
    75
    mEngine(NULL),
72
hgs
parents:
diff changeset
    76
    mHandledContactId(0),
81
hgs
parents: 72
diff changeset
    77
    mFilterChanged(false)
72
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
    CNT_ENTRY
hgs
parents:
diff changeset
    80
    
hgs
parents:
diff changeset
    81
    bool ok;
hgs
parents:
diff changeset
    82
    document()->load( CNT_CONTACTLIST_XML, &ok);
81
hgs
parents: 72
diff changeset
    83
    if (!ok)
hgs
parents: 72
diff changeset
    84
    {
72
hgs
parents:
diff changeset
    85
        qFatal("Unable to read %S", CNT_CONTACTLIST_XML);
hgs
parents:
diff changeset
    86
    }
hgs
parents:
diff changeset
    87
    
hgs
parents:
diff changeset
    88
    document()->load( CNT_CONTACTLIST_XML, "no_find");
hgs
parents:
diff changeset
    89
    
hgs
parents:
diff changeset
    90
    mView = static_cast<HbView*> (document()->findWidget("view"));
hgs
parents:
diff changeset
    91
    
hgs
parents:
diff changeset
    92
    mVirtualKeyboard = new HbShrinkingVkbHost(mView);
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    mSoftkey = new HbAction(Hb::BackNaviAction, mView);
hgs
parents:
diff changeset
    95
    connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
hgs
parents:
diff changeset
    96
    
81
hgs
parents: 72
diff changeset
    97
    HbAction *newContact = static_cast<HbAction*> (document()->findObject("cnt:newcontact"));
hgs
parents: 72
diff changeset
    98
    newContact->setParent(mView);
hgs
parents: 72
diff changeset
    99
    connect(newContact, SIGNAL(triggered()), this, SLOT(createNewContact()));
72
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    mMultipleDeleter = static_cast<HbAction*> (document()->findObject("cnt:delete"));
hgs
parents:
diff changeset
   102
    mMultipleDeleter->setParent(mView);
hgs
parents:
diff changeset
   103
    connect(mMultipleDeleter, SIGNAL(triggered()), this, SLOT(deleteMultipleContacts()));
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    HbAction* findContacts = static_cast<HbAction*> (document()->findObject("cnt:find"));
hgs
parents:
diff changeset
   106
    findContacts->setParent(mView);
hgs
parents:
diff changeset
   107
    connect(findContacts, SIGNAL(triggered()), this, SLOT(showFinder()));
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
    HbAction* groups = static_cast<HbAction*> (document()->findObject("cnt:groups"));
hgs
parents:
diff changeset
   110
    groups->setParent(mView);
hgs
parents:
diff changeset
   111
    connect(groups, SIGNAL(triggered()), this, SLOT(showCollectionView()));
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
    mNamesAction = static_cast<HbAction*> (document()->findObject("cnt:names"));
hgs
parents:
diff changeset
   114
    mNamesAction->setParent(mView);
hgs
parents:
diff changeset
   115
81
hgs
parents: 72
diff changeset
   116
    HbAction *importSim = static_cast<HbAction*> (document()->findObject("cnt:importsim"));
hgs
parents: 72
diff changeset
   117
    importSim->setParent(mView);
hgs
parents: 72
diff changeset
   118
    connect(importSim, SIGNAL(triggered()), this, SLOT(showImportsView()));
72
hgs
parents:
diff changeset
   119
    
hgs
parents:
diff changeset
   120
    mActionGroup = new QActionGroup(this);
hgs
parents:
diff changeset
   121
    groups->setActionGroup(mActionGroup);
hgs
parents:
diff changeset
   122
    mNamesAction->setActionGroup(mActionGroup);
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
    HbAction* extension = static_cast<HbAction*> (document()->findObject("cnt:activity"));
hgs
parents:
diff changeset
   125
    extension->setParent(mView);
hgs
parents:
diff changeset
   126
    connect(extension, SIGNAL(triggered()), this, SLOT(handleExtensionAction()));
hgs
parents:
diff changeset
   127
       
hgs
parents:
diff changeset
   128
    HbAction* settings = static_cast<HbAction*>(document()->findObject("cnt:settings") );
hgs
parents:
diff changeset
   129
    settings->setParent(mView);
81
hgs
parents: 72
diff changeset
   130
    connect( settings, SIGNAL(triggered()), this, SLOT(showSettingsView()) );
72
hgs
parents:
diff changeset
   131
81
hgs
parents: 72
diff changeset
   132
    mViewMenu = static_cast<HbMenu*>(document()->findObject("viewMenu") );
hgs
parents: 72
diff changeset
   133
    mViewMenu->setParent(mView);
72
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    connect(list(), SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
hgs
parents:
diff changeset
   136
           SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
81
hgs
parents: 72
diff changeset
   137
    connect(list(), SIGNAL(activated(const QModelIndex&)), this,
72
hgs
parents:
diff changeset
   138
           SLOT(showContactView(const QModelIndex&)));
81
hgs
parents: 72
diff changeset
   139
    connect(list(), SIGNAL(pressed(const QModelIndex&)), this,
hgs
parents: 72
diff changeset
   140
           SLOT(setShowContextMenu(const QModelIndex&)));
72
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
    mSearchPanel = static_cast<HbSearchPanel*> (document()->findWidget("searchPanel"));
hgs
parents:
diff changeset
   143
    connect(mSearchPanel, SIGNAL(exitClicked()), this, SLOT(hideFinder()));
hgs
parents:
diff changeset
   144
    connect(mSearchPanel, SIGNAL(criteriaChanged(QString)), this, SLOT(setFilter(QString)));
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
    HbMainWindow* win = mView->mainWindow();
hgs
parents:
diff changeset
   147
    CntApplication* cntApp = static_cast<CntApplication*>(qApp);
hgs
parents:
diff changeset
   148
    connect(win, SIGNAL(viewReady()), cntApp, SIGNAL(applicationReady()));
hgs
parents:
diff changeset
   149
    
hgs
parents:
diff changeset
   150
    CNT_EXIT
hgs
parents:
diff changeset
   151
}
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
CntNamesViewPrivate::~CntNamesViewPrivate()
hgs
parents:
diff changeset
   154
{
hgs
parents:
diff changeset
   155
    CNT_ENTRY
hgs
parents:
diff changeset
   156
    
hgs
parents:
diff changeset
   157
    delete mListModel;
hgs
parents:
diff changeset
   158
    mListModel = NULL;
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    delete mLoader;
hgs
parents:
diff changeset
   161
    mLoader = NULL;
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
    delete mVirtualKeyboard;
hgs
parents:
diff changeset
   164
    mVirtualKeyboard = NULL;
hgs
parents:
diff changeset
   165
    
hgs
parents:
diff changeset
   166
    delete mMenuBuilder;
hgs
parents:
diff changeset
   167
    mMenuBuilder = NULL;
hgs
parents:
diff changeset
   168
    
hgs
parents:
diff changeset
   169
    delete mView;
hgs
parents:
diff changeset
   170
    mView = NULL;
hgs
parents:
diff changeset
   171
    
hgs
parents:
diff changeset
   172
    if (mMenu) 
hgs
parents:
diff changeset
   173
    {
hgs
parents:
diff changeset
   174
        delete mMenu;
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    CNT_EXIT
hgs
parents:
diff changeset
   178
}
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
void CntNamesViewPrivate::activate(const CntViewParameters aArgs)
hgs
parents:
diff changeset
   181
{
hgs
parents:
diff changeset
   182
    CNT_ENTRY
hgs
parents:
diff changeset
   183
    
hgs
parents:
diff changeset
   184
    mViewManager = &mEngine->viewManager();
81
hgs
parents: 72
diff changeset
   185
    if (mView->mainWindow() != NULL && !(mView->visibleItems() & Hb::ToolBarItem))
72
hgs
parents:
diff changeset
   186
    {
hgs
parents:
diff changeset
   187
        hideFinder();
hgs
parents:
diff changeset
   188
    }
hgs
parents:
diff changeset
   189
    
hgs
parents:
diff changeset
   190
    if (!mListModel) {
hgs
parents:
diff changeset
   191
        QContactDetailFilter filter;
hgs
parents:
diff changeset
   192
        filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
hgs
parents:
diff changeset
   193
        QString typeContact = QContactType::TypeContact;
hgs
parents:
diff changeset
   194
        filter.setValue(typeContact);
hgs
parents:
diff changeset
   195
        
hgs
parents:
diff changeset
   196
        mListModel = new CntListModel( &mEngine->contactManager(SYMBIAN_BACKEND), filter);
hgs
parents:
diff changeset
   197
        list()->setModel(mListModel);
hgs
parents:
diff changeset
   198
    }
hgs
parents:
diff changeset
   199
    
hgs
parents:
diff changeset
   200
    mNamesAction->setChecked(true);
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
    mMenuBuilder = new CntActionMenuBuilder( mListModel->myCardId() );
hgs
parents:
diff changeset
   203
    connect( mMenuBuilder, SIGNAL(deleteContact(QContact&)), this, SLOT(deleteContact(QContact&)) );
hgs
parents:
diff changeset
   204
    connect( mMenuBuilder, SIGNAL(editContact(QContact&)), this, SLOT(showContactEditorView(QContact&)) );
hgs
parents:
diff changeset
   205
    connect( mMenuBuilder, SIGNAL(openContact(QContact&)), this, SLOT(showContactView(QContact&)) );
hgs
parents:
diff changeset
   206
    connect( mMenuBuilder, SIGNAL(performContactAction( QContact& , QContactDetail, QString)), this, SLOT(executeAction(QContact& , QContactDetail, QString)));
hgs
parents:
diff changeset
   207
    
hgs
parents:
diff changeset
   208
    if ( mView->navigationAction() != mSoftkey)
hgs
parents:
diff changeset
   209
    {
hgs
parents:
diff changeset
   210
        mView->setNavigationAction(mSoftkey);
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
    changeDeleteActionStatus();
hgs
parents:
diff changeset
   214
    
hgs
parents:
diff changeset
   215
    QContactManager* contactManager = &mEngine->contactManager( SYMBIAN_BACKEND );
hgs
parents:
diff changeset
   216
    // make connections unique, that is, duplicate connections are not connected again
hgs
parents:
diff changeset
   217
    connect(contactManager, SIGNAL(contactsAdded(const QList<QContactLocalId>&)),
hgs
parents:
diff changeset
   218
            this, SLOT(handleContactAddition(const QList<QContactLocalId>&)), Qt::UniqueConnection);
hgs
parents:
diff changeset
   219
    connect(contactManager, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)),
hgs
parents:
diff changeset
   220
            this, SLOT(handleContactRemoval(const QList<QContactLocalId>&)), Qt::UniqueConnection);
hgs
parents:
diff changeset
   221
    connect(contactManager, SIGNAL(selfContactIdChanged(const QContactLocalId&, const QContactLocalId&)), 
hgs
parents:
diff changeset
   222
            this, SLOT(handleSelfContactIdChange(const QContactLocalId&, const QContactLocalId&)), Qt::UniqueConnection);
hgs
parents:
diff changeset
   223
    
hgs
parents:
diff changeset
   224
    if (aArgs.value(ESelectedAction) == CNT_CREATE_ACTION || aArgs.value(ESelectedAction) == CNT_EDIT_ACTION)
hgs
parents:
diff changeset
   225
    {
hgs
parents:
diff changeset
   226
        setScrollPosition(aArgs.value(ESelectedContact).value<QContact>().localId());
hgs
parents:
diff changeset
   227
    }
hgs
parents:
diff changeset
   228
   
hgs
parents:
diff changeset
   229
    if ( aArgs.value( EExtraAction ).toString() == CNT_FIND_ACTION  )
hgs
parents:
diff changeset
   230
    {
81
hgs
parents: 72
diff changeset
   231
        connect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(showFinder()));
hgs
parents: 72
diff changeset
   232
        mIsFirstTimeUse = false;
hgs
parents: 72
diff changeset
   233
        //there is a problem with post event of QEvent::RequestSoftwareInputPanel
hgs
parents: 72
diff changeset
   234
        //showFinder();
72
hgs
parents:
diff changeset
   235
    }
hgs
parents:
diff changeset
   236
    
hgs
parents:
diff changeset
   237
    if (mIsFirstTimeUse)
hgs
parents:
diff changeset
   238
    {
hgs
parents:
diff changeset
   239
        // Disable FTU flag
hgs
parents:
diff changeset
   240
        mIsFirstTimeUse = false;
hgs
parents:
diff changeset
   241
        
hgs
parents:
diff changeset
   242
        // Show import contacts popup only if there no local contacts
hgs
parents:
diff changeset
   243
        // Check row count from list model and exclude dummy mycard
hgs
parents:
diff changeset
   244
        if (mListModel->rowCount()==1 && mListModel->myCardId()<= 0)
hgs
parents:
diff changeset
   245
        {
hgs
parents:
diff changeset
   246
            // Default filter to fetch all contacts and groups
hgs
parents:
diff changeset
   247
            QContactFilter filter;
hgs
parents:
diff changeset
   248
            QList<QContactLocalId> contactIds = contactManager->contactIds(filter);
hgs
parents:
diff changeset
   249
            
hgs
parents:
diff changeset
   250
            // Check if favourite group contact exists
hgs
parents:
diff changeset
   251
            // Favourite group contact is created by default in phonebook
hgs
parents:
diff changeset
   252
            int favouriteId = CntFavourite::favouriteGroupId(contactManager);
hgs
parents:
diff changeset
   253
            if ( (contactIds.isEmpty() )
hgs
parents:
diff changeset
   254
                 || (contactIds.count() == 1 && contactIds.at(0) == favouriteId) )
hgs
parents:
diff changeset
   255
            {
hgs
parents:
diff changeset
   256
                HbMessageBox *note = new HbMessageBox();
hgs
parents:
diff changeset
   257
                note->setDismissPolicy(HbDialog::NoDismiss);
hgs
parents:
diff changeset
   258
                note->setTimeout(HbPopup::NoTimeout);
hgs
parents:
diff changeset
   259
                note->setBackgroundFaded(true);
hgs
parents:
diff changeset
   260
                note->setAttribute(Qt::WA_DeleteOnClose, true);
hgs
parents:
diff changeset
   261
                note->setStandardButtons(HbMessageBox::NoButton);
hgs
parents:
diff changeset
   262
                note->addAction(new HbAction(hbTrId("txt_phob_button_import"), note));
hgs
parents:
diff changeset
   263
                note->addAction(new HbAction(hbTrId("txt_common_button_cancel"), note));
81
hgs
parents: 72
diff changeset
   264
                
hgs
parents: 72
diff changeset
   265
                note->setHeadingText(hbTrId("txt_phob_title_import_contacts"));
72
hgs
parents:
diff changeset
   266
                
hgs
parents:
diff changeset
   267
                note->setIcon(HbIcon("qtg_large_sim"));
hgs
parents:
diff changeset
   268
                note->setText(hbTrId("txt_phob_info_your_phonebook_is_empty_do_you_wish"));
hgs
parents:
diff changeset
   269
                
hgs
parents:
diff changeset
   270
                note->open(this, SLOT(handleImportContacts(HbAction*)));
hgs
parents:
diff changeset
   271
            }
hgs
parents:
diff changeset
   272
        }
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
    
hgs
parents:
diff changeset
   275
    CntExtensionManager& mgr = mEngine->extensionManager();
hgs
parents:
diff changeset
   276
    if (mgr.pluginCount())
hgs
parents:
diff changeset
   277
    {
hgs
parents:
diff changeset
   278
        for (int i = 0; i < mgr.pluginCount(); i++)
hgs
parents:
diff changeset
   279
        {
hgs
parents:
diff changeset
   280
            CntUiSocialExtension* socialExtension = mgr.pluginAt(i)->socialExtension();
hgs
parents:
diff changeset
   281
            if (socialExtension)
hgs
parents:
diff changeset
   282
            {
hgs
parents:
diff changeset
   283
                static_cast<HbAction*> (document()->findObject("cnt:activity"))->setEnabled(true);
hgs
parents:
diff changeset
   284
                break;
hgs
parents:
diff changeset
   285
            }
hgs
parents:
diff changeset
   286
            else
hgs
parents:
diff changeset
   287
            {
hgs
parents:
diff changeset
   288
                static_cast<HbAction*> (document()->findObject("cnt:activity"))->setEnabled(false);
hgs
parents:
diff changeset
   289
            }
hgs
parents:
diff changeset
   290
        }
hgs
parents:
diff changeset
   291
    }
hgs
parents:
diff changeset
   292
    else
hgs
parents:
diff changeset
   293
    {
hgs
parents:
diff changeset
   294
        static_cast<HbAction*> (document()->findObject("cnt:activity"))->setEnabled(false);
hgs
parents:
diff changeset
   295
    }
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
    CNT_EXIT
hgs
parents:
diff changeset
   298
}
hgs
parents:
diff changeset
   299
81
hgs
parents: 72
diff changeset
   300
QString CntNamesViewPrivate::externalize(QDataStream &stream)
hgs
parents: 72
diff changeset
   301
{
hgs
parents: 72
diff changeset
   302
    CntViewParameters viewParameters;
hgs
parents: 72
diff changeset
   303
    viewParameters.insert(EViewId, namesView);
hgs
parents: 72
diff changeset
   304
    if (isFinderVisible())
hgs
parents: 72
diff changeset
   305
    {
hgs
parents: 72
diff changeset
   306
        viewParameters.insert(EExtraAction, CNT_FIND_ACTION);
hgs
parents: 72
diff changeset
   307
    }
hgs
parents: 72
diff changeset
   308
  
hgs
parents: 72
diff changeset
   309
    stream << viewParameters;
hgs
parents: 72
diff changeset
   310
    
hgs
parents: 72
diff changeset
   311
    return CNT_ACTIVITY_MAINVIEW;
hgs
parents: 72
diff changeset
   312
}
hgs
parents: 72
diff changeset
   313
hgs
parents: 72
diff changeset
   314
bool CntNamesViewPrivate::internalize(QDataStream &stream, CntViewParameters &viewParameters)
hgs
parents: 72
diff changeset
   315
{
hgs
parents: 72
diff changeset
   316
    stream >> viewParameters;
hgs
parents: 72
diff changeset
   317
    return true;
hgs
parents: 72
diff changeset
   318
}
hgs
parents: 72
diff changeset
   319
72
hgs
parents:
diff changeset
   320
void CntNamesViewPrivate::deactivate()
hgs
parents:
diff changeset
   321
{
hgs
parents:
diff changeset
   322
    CNT_ENTRY
hgs
parents:
diff changeset
   323
    HbMainWindow* win = mView->mainWindow();
hgs
parents:
diff changeset
   324
    if ( win != NULL)
hgs
parents:
diff changeset
   325
    {
hgs
parents:
diff changeset
   326
        CntApplication* cntApp = static_cast<CntApplication*>(qApp);
hgs
parents:
diff changeset
   327
        disconnect(win, SIGNAL(viewReady()), cntApp, SIGNAL(applicationReady()));
hgs
parents:
diff changeset
   328
    }
hgs
parents:
diff changeset
   329
    delete mMenuBuilder;
hgs
parents:
diff changeset
   330
    mMenuBuilder = NULL;
hgs
parents:
diff changeset
   331
    
hgs
parents:
diff changeset
   332
    CNT_EXIT
hgs
parents:
diff changeset
   333
}
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
void CntNamesViewPrivate::showFinder()
hgs
parents:
diff changeset
   336
{
hgs
parents:
diff changeset
   337
    CNT_ENTRY
hgs
parents:
diff changeset
   338
    
81
hgs
parents: 72
diff changeset
   339
    disconnect(mView->mainWindow(), SIGNAL(viewReady()), this, SLOT(showFinder()));
hgs
parents: 72
diff changeset
   340
    
72
hgs
parents:
diff changeset
   341
    mListModel->showMyCard(false);
hgs
parents:
diff changeset
   342
    
81
hgs
parents: 72
diff changeset
   343
    HbListViewItem* proto = list()->listItemPrototype();
72
hgs
parents:
diff changeset
   344
    proto->setTextFormat( Qt::RichText );
hgs
parents:
diff changeset
   345
    
81
hgs
parents: 72
diff changeset
   346
    mView->hideItems(Hb::ToolBarItem);
72
hgs
parents:
diff changeset
   347
    
hgs
parents:
diff changeset
   348
    focusLineEdit();
hgs
parents:
diff changeset
   349
    
81
hgs
parents: 72
diff changeset
   350
    mViewMenu = mView->takeMenu();
hgs
parents: 72
diff changeset
   351
    
72
hgs
parents:
diff changeset
   352
    CNT_EXIT
hgs
parents:
diff changeset
   353
}
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
void CntNamesViewPrivate::hideFinder()
hgs
parents:
diff changeset
   356
{
hgs
parents:
diff changeset
   357
    CNT_ENTRY
hgs
parents:
diff changeset
   358
    
hgs
parents:
diff changeset
   359
    document()->load( CNT_CONTACTLIST_XML, "no_find" );
81
hgs
parents: 72
diff changeset
   360
    mView->showItems(Hb::ToolBarItem);
72
hgs
parents:
diff changeset
   361
    
81
hgs
parents: 72
diff changeset
   362
    HbListViewItem* proto = list()->listItemPrototype();
72
hgs
parents:
diff changeset
   363
    proto->setTextFormat( Qt::PlainText );
hgs
parents:
diff changeset
   364
        
hgs
parents:
diff changeset
   365
    mListModel->showMyCard(true);
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
    if (mFilterChanged)
hgs
parents:
diff changeset
   368
    {
hgs
parents:
diff changeset
   369
        QContactDetailFilter filter;
hgs
parents:
diff changeset
   370
        filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
hgs
parents:
diff changeset
   371
        QString typeContact = QContactType::TypeContact;
hgs
parents:
diff changeset
   372
        filter.setValue(typeContact);
hgs
parents:
diff changeset
   373
        mListModel->setFilter(filter);
hgs
parents:
diff changeset
   374
        mFilterChanged = false;
hgs
parents:
diff changeset
   375
    }
hgs
parents:
diff changeset
   376
    
hgs
parents:
diff changeset
   377
    changeDeleteActionStatus();
hgs
parents:
diff changeset
   378
81
hgs
parents: 72
diff changeset
   379
    mView->setMenu(mViewMenu);
hgs
parents: 72
diff changeset
   380
72
hgs
parents:
diff changeset
   381
    CNT_EXIT    
hgs
parents:
diff changeset
   382
}
hgs
parents:
diff changeset
   383
81
hgs
parents: 72
diff changeset
   384
void CntNamesViewPrivate::setFilter(const QString &filterString)
72
hgs
parents:
diff changeset
   385
{
hgs
parents:
diff changeset
   386
    CNT_ENTRY
81
hgs
parents: 72
diff changeset
   387
hgs
parents: 72
diff changeset
   388
    QContactDetailFilter filter;
hgs
parents: 72
diff changeset
   389
hgs
parents: 72
diff changeset
   390
    if (filterString.isEmpty())
72
hgs
parents:
diff changeset
   391
    {
81
hgs
parents: 72
diff changeset
   392
        filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
hgs
parents: 72
diff changeset
   393
        QString typeContact = QContactType::TypeContact;
hgs
parents: 72
diff changeset
   394
        filter.setValue(typeContact);
72
hgs
parents:
diff changeset
   395
    }
hgs
parents:
diff changeset
   396
    else
hgs
parents:
diff changeset
   397
    {
81
hgs
parents: 72
diff changeset
   398
        QStringList searchList = filterString.split(QRegExp("\\s+"), QString::SkipEmptyParts);
hgs
parents: 72
diff changeset
   399
        filter.setDetailDefinitionName(QContactDisplayLabel::DefinitionName,
hgs
parents: 72
diff changeset
   400
            QContactDisplayLabel::FieldLabel);
hgs
parents: 72
diff changeset
   401
        filter.setMatchFlags(QContactFilter::MatchStartsWith);
hgs
parents: 72
diff changeset
   402
        filter.setValue(searchList);
hgs
parents: 72
diff changeset
   403
    }
hgs
parents: 72
diff changeset
   404
hgs
parents: 72
diff changeset
   405
    mListModel->setFilter(filter);
hgs
parents: 72
diff changeset
   406
    mFilterChanged = true;
hgs
parents: 72
diff changeset
   407
hgs
parents: 72
diff changeset
   408
    if (mListModel->rowCount() == 0)
hgs
parents: 72
diff changeset
   409
    {
hgs
parents: 72
diff changeset
   410
        document()->load( CNT_CONTACTLIST_XML, "find_empty" );
hgs
parents: 72
diff changeset
   411
    }
hgs
parents: 72
diff changeset
   412
    else
hgs
parents: 72
diff changeset
   413
    {
hgs
parents: 72
diff changeset
   414
        document()->load( CNT_CONTACTLIST_XML, "find_list" );
72
hgs
parents:
diff changeset
   415
    }
hgs
parents:
diff changeset
   416
    
hgs
parents:
diff changeset
   417
    CNT_EXIT
hgs
parents:
diff changeset
   418
}
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
void CntNamesViewPrivate::handleExtensionAction()
hgs
parents:
diff changeset
   421
{
hgs
parents:
diff changeset
   422
    CNT_ENTRY
hgs
parents:
diff changeset
   423
    CntExtensionManager& mgr = mEngine->extensionManager();
hgs
parents:
diff changeset
   424
    for (int i = 0; i < mgr.pluginCount(); i++)
hgs
parents:
diff changeset
   425
    {
hgs
parents:
diff changeset
   426
        CntUiSocialExtension* socialExtension = mgr.pluginAt(i)->socialExtension();
hgs
parents:
diff changeset
   427
        if (socialExtension)
hgs
parents:
diff changeset
   428
        {
hgs
parents:
diff changeset
   429
            CntViewParameters params;
hgs
parents:
diff changeset
   430
            socialExtension->handleToolbarAction(params);
hgs
parents:
diff changeset
   431
            if (params.count())
hgs
parents:
diff changeset
   432
            {
hgs
parents:
diff changeset
   433
                mViewManager->changeView(params);
hgs
parents:
diff changeset
   434
                break;
hgs
parents:
diff changeset
   435
            }
hgs
parents:
diff changeset
   436
        }
hgs
parents:
diff changeset
   437
    }
hgs
parents:
diff changeset
   438
    
hgs
parents:
diff changeset
   439
    CNT_EXIT
hgs
parents:
diff changeset
   440
}
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
void CntNamesViewPrivate::createNewContact()
hgs
parents:
diff changeset
   443
{
hgs
parents:
diff changeset
   444
    CNT_ENTRY
hgs
parents:
diff changeset
   445
    
hgs
parents:
diff changeset
   446
    QContact newContact;
hgs
parents:
diff changeset
   447
    newContact.setType( QContactType::TypeContact );
hgs
parents:
diff changeset
   448
    
hgs
parents:
diff changeset
   449
    showContactEditorView(newContact);
hgs
parents:
diff changeset
   450
    
hgs
parents:
diff changeset
   451
    CNT_EXIT
hgs
parents:
diff changeset
   452
}
hgs
parents:
diff changeset
   453
hgs
parents:
diff changeset
   454
void CntNamesViewPrivate::deleteContact(QContact& aContact)
hgs
parents:
diff changeset
   455
{
hgs
parents:
diff changeset
   456
    CNT_ENTRY
hgs
parents:
diff changeset
   457
    
hgs
parents:
diff changeset
   458
    QContactManager& manager = mEngine->contactManager( SYMBIAN_BACKEND );
hgs
parents:
diff changeset
   459
    QString name = manager.synthesizedContactDisplayLabel(aContact);
hgs
parents:
diff changeset
   460
    if (name.isEmpty())
hgs
parents:
diff changeset
   461
    {
hgs
parents:
diff changeset
   462
        name = hbTrId("txt_phob_list_unnamed");
hgs
parents:
diff changeset
   463
    }
hgs
parents:
diff changeset
   464
    
hgs
parents:
diff changeset
   465
    mHandledContactId = aContact.localId();
hgs
parents:
diff changeset
   466
    
81
hgs
parents: 72
diff changeset
   467
    HbMessageBox::question(HbParameterLengthLimiter("txt_phob_info_delete_1").arg(name), this, SLOT(handleDeleteContact(int)),
72
hgs
parents:
diff changeset
   468
            HbMessageBox::Delete | HbMessageBox::Cancel);
hgs
parents:
diff changeset
   469
    
hgs
parents:
diff changeset
   470
    CNT_EXIT
hgs
parents:
diff changeset
   471
}
hgs
parents:
diff changeset
   472
81
hgs
parents: 72
diff changeset
   473
void CntNamesViewPrivate::handleDeleteContact( int aAction )
hgs
parents: 72
diff changeset
   474
{
hgs
parents: 72
diff changeset
   475
    CNT_ENTRY
hgs
parents: 72
diff changeset
   476
    
hgs
parents: 72
diff changeset
   477
    if (aAction == HbMessageBox::Delete)
hgs
parents: 72
diff changeset
   478
    {
hgs
parents: 72
diff changeset
   479
        mEngine->contactManager( SYMBIAN_BACKEND ).removeContact(mHandledContactId);
hgs
parents: 72
diff changeset
   480
    }
hgs
parents: 72
diff changeset
   481
    
hgs
parents: 72
diff changeset
   482
    mHandledContactId = 0;
hgs
parents: 72
diff changeset
   483
    
hgs
parents: 72
diff changeset
   484
    CNT_EXIT
hgs
parents: 72
diff changeset
   485
}
hgs
parents: 72
diff changeset
   486
72
hgs
parents:
diff changeset
   487
void CntNamesViewPrivate::deleteMultipleContacts()
hgs
parents:
diff changeset
   488
{
hgs
parents:
diff changeset
   489
    CNT_ENTRY
hgs
parents:
diff changeset
   490
    CntFetchContactPopup* popup = CntFetchContactPopup::createMultiSelectionPopup(
hgs
parents:
diff changeset
   491
            hbTrId("txt_phob_title_delete_contacts"),
hgs
parents:
diff changeset
   492
            hbTrId("txt_common_button_delete"),
hgs
parents:
diff changeset
   493
            mEngine->contactManager(SYMBIAN_BACKEND));
hgs
parents:
diff changeset
   494
    connect(popup, SIGNAL(fetchReady(QSet<QContactLocalId>)), 
hgs
parents:
diff changeset
   495
            this, SLOT(handleDeleteMultipleContacts(QSet<QContactLocalId>)) );
hgs
parents:
diff changeset
   496
    QSet<QContactLocalId> ids;
hgs
parents:
diff changeset
   497
    popup->setSelectedContacts(ids);
hgs
parents:
diff changeset
   498
    popup->showPopup();
hgs
parents:
diff changeset
   499
    CNT_EXIT
hgs
parents:
diff changeset
   500
}
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
void CntNamesViewPrivate::handleDeleteMultipleContacts( QSet<QContactLocalId> aIds )
hgs
parents:
diff changeset
   503
{
hgs
parents:
diff changeset
   504
    CNT_ENTRY
hgs
parents:
diff changeset
   505
    
hgs
parents:
diff changeset
   506
    mEngine->contactManager( SYMBIAN_BACKEND ).removeContacts(aIds.toList(), NULL);
hgs
parents:
diff changeset
   507
    
hgs
parents:
diff changeset
   508
    CNT_EXIT
hgs
parents:
diff changeset
   509
}
hgs
parents:
diff changeset
   510
81
hgs
parents: 72
diff changeset
   511
void CntNamesViewPrivate::showPreviousView()
hgs
parents: 72
diff changeset
   512
{
hgs
parents: 72
diff changeset
   513
    CNT_ENTRY
hgs
parents: 72
diff changeset
   514
    
hgs
parents: 72
diff changeset
   515
    mViewManager->back( CntViewParameters() );
hgs
parents: 72
diff changeset
   516
    
hgs
parents: 72
diff changeset
   517
    CNT_EXIT
hgs
parents: 72
diff changeset
   518
}
hgs
parents: 72
diff changeset
   519
hgs
parents: 72
diff changeset
   520
void CntNamesViewPrivate::showCollectionView()
hgs
parents: 72
diff changeset
   521
{
hgs
parents: 72
diff changeset
   522
    CNT_ENTRY
hgs
parents: 72
diff changeset
   523
    
hgs
parents: 72
diff changeset
   524
    CntViewParameters args;
hgs
parents: 72
diff changeset
   525
    args.insert(EViewId, collectionView);
hgs
parents: 72
diff changeset
   526
    mViewManager->changeView(args);
hgs
parents: 72
diff changeset
   527
    
hgs
parents: 72
diff changeset
   528
    CNT_EXIT
hgs
parents: 72
diff changeset
   529
}
hgs
parents: 72
diff changeset
   530
72
hgs
parents:
diff changeset
   531
void CntNamesViewPrivate::showContactView( const QModelIndex& aIndex )
hgs
parents:
diff changeset
   532
{
hgs
parents:
diff changeset
   533
    CNT_ENTRY
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
    QContact c = mListModel->contact(aIndex);
hgs
parents:
diff changeset
   536
    showContactView( c );
hgs
parents:
diff changeset
   537
    
hgs
parents:
diff changeset
   538
    CNT_EXIT
hgs
parents:
diff changeset
   539
}
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
void CntNamesViewPrivate::showContactView( QContact& aContact )
hgs
parents:
diff changeset
   542
{
hgs
parents:
diff changeset
   543
    CNT_ENTRY
hgs
parents:
diff changeset
   544
    
hgs
parents:
diff changeset
   545
    CntViewParameters args;
hgs
parents:
diff changeset
   546
    args.insert(EViewId, contactCardView);
hgs
parents:
diff changeset
   547
    if (aContact.localId() == mListModel->myCardId() && aContact.details().count() <= 4)
hgs
parents:
diff changeset
   548
    {
hgs
parents:
diff changeset
   549
        args.insert(EViewId, myCardView);
hgs
parents:
diff changeset
   550
    }
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
    QVariant contact;
hgs
parents:
diff changeset
   553
    contact.setValue(aContact);
hgs
parents:
diff changeset
   554
    args.insert(ESelectedContact, contact);
hgs
parents:
diff changeset
   555
    mViewManager->changeView(args);
hgs
parents:
diff changeset
   556
    
hgs
parents:
diff changeset
   557
    CNT_EXIT
hgs
parents:
diff changeset
   558
}
hgs
parents:
diff changeset
   559
81
hgs
parents: 72
diff changeset
   560
void CntNamesViewPrivate::showContactEditorView(QContact& aContact)
hgs
parents: 72
diff changeset
   561
{
hgs
parents: 72
diff changeset
   562
    CNT_ENTRY
hgs
parents: 72
diff changeset
   563
    
hgs
parents: 72
diff changeset
   564
    CntViewParameters args;
hgs
parents: 72
diff changeset
   565
    args.insert(EViewId, editView);
hgs
parents: 72
diff changeset
   566
    
hgs
parents: 72
diff changeset
   567
    QVariant contact;
hgs
parents: 72
diff changeset
   568
    contact.setValue(aContact);
hgs
parents: 72
diff changeset
   569
    args.insert(ESelectedContact, contact);
hgs
parents: 72
diff changeset
   570
hgs
parents: 72
diff changeset
   571
    mViewManager->changeView(args);
hgs
parents: 72
diff changeset
   572
    
hgs
parents: 72
diff changeset
   573
    CNT_EXIT
hgs
parents: 72
diff changeset
   574
}
hgs
parents: 72
diff changeset
   575
hgs
parents: 72
diff changeset
   576
void CntNamesViewPrivate::showSettingsView()
hgs
parents: 72
diff changeset
   577
{
hgs
parents: 72
diff changeset
   578
    CNT_ENTRY
hgs
parents: 72
diff changeset
   579
    
hgs
parents: 72
diff changeset
   580
    CntViewParameters args;
hgs
parents: 72
diff changeset
   581
    args.insert( EViewId, settingsView );
hgs
parents: 72
diff changeset
   582
    mViewManager->changeView( args );
hgs
parents: 72
diff changeset
   583
    
hgs
parents: 72
diff changeset
   584
    CNT_EXIT
hgs
parents: 72
diff changeset
   585
}
hgs
parents: 72
diff changeset
   586
hgs
parents: 72
diff changeset
   587
void CntNamesViewPrivate::showImportsView()
hgs
parents: 72
diff changeset
   588
{
hgs
parents: 72
diff changeset
   589
    CNT_ENTRY
hgs
parents: 72
diff changeset
   590
    
hgs
parents: 72
diff changeset
   591
    CntViewParameters args;        
hgs
parents: 72
diff changeset
   592
    args.insert(EViewId, importsView);
hgs
parents: 72
diff changeset
   593
    mViewManager->changeView(args);
hgs
parents: 72
diff changeset
   594
    
hgs
parents: 72
diff changeset
   595
    CNT_EXIT
hgs
parents: 72
diff changeset
   596
}
hgs
parents: 72
diff changeset
   597
hgs
parents: 72
diff changeset
   598
void CntNamesViewPrivate::handleImportContacts( HbAction *aAction )
hgs
parents: 72
diff changeset
   599
{
hgs
parents: 72
diff changeset
   600
    CNT_ENTRY
hgs
parents: 72
diff changeset
   601
    
hgs
parents: 72
diff changeset
   602
    HbDialog *popup = static_cast<HbDialog*>(sender());
hgs
parents: 72
diff changeset
   603
    
hgs
parents: 72
diff changeset
   604
    if (popup && aAction == popup->actions().first())
hgs
parents: 72
diff changeset
   605
    {
hgs
parents: 72
diff changeset
   606
        showImportsView();
hgs
parents: 72
diff changeset
   607
    }
hgs
parents: 72
diff changeset
   608
          
hgs
parents: 72
diff changeset
   609
    CNT_EXIT
hgs
parents: 72
diff changeset
   610
}
hgs
parents: 72
diff changeset
   611
hgs
parents: 72
diff changeset
   612
void CntNamesViewPrivate::setShowContextMenu( const QModelIndex& aIndex )
hgs
parents: 72
diff changeset
   613
{
hgs
parents: 72
diff changeset
   614
    CNT_ENTRY_ARGS(aIndex)
hgs
parents: 72
diff changeset
   615
    
hgs
parents: 72
diff changeset
   616
    QContactLocalId id = mListModel->contactId(aIndex);
hgs
parents: 72
diff changeset
   617
    
hgs
parents: 72
diff changeset
   618
    // if id is smaller than 1 (basically 0), it's the empty myCard
hgs
parents: 72
diff changeset
   619
    if (id < 1)
hgs
parents: 72
diff changeset
   620
    {
hgs
parents: 72
diff changeset
   621
        mListView->setLongPressEnabled(false);
hgs
parents: 72
diff changeset
   622
    }
hgs
parents: 72
diff changeset
   623
    else
hgs
parents: 72
diff changeset
   624
    {
hgs
parents: 72
diff changeset
   625
        mListView->setLongPressEnabled(true);
hgs
parents: 72
diff changeset
   626
    }
hgs
parents: 72
diff changeset
   627
    
hgs
parents: 72
diff changeset
   628
    CNT_EXIT
hgs
parents: 72
diff changeset
   629
}
hgs
parents: 72
diff changeset
   630
72
hgs
parents:
diff changeset
   631
void CntNamesViewPrivate::showContextMenu(HbAbstractViewItem* aItem, QPointF aPoint)
hgs
parents:
diff changeset
   632
{
hgs
parents:
diff changeset
   633
    CNT_ENTRY
hgs
parents:
diff changeset
   634
    
hgs
parents:
diff changeset
   635
    QContact contact = mListModel->contact(aItem->modelIndex());
hgs
parents:
diff changeset
   636
    
81
hgs
parents: 72
diff changeset
   637
    if (mMenu) 
72
hgs
parents:
diff changeset
   638
    {
81
hgs
parents: 72
diff changeset
   639
        delete mMenu;
hgs
parents: 72
diff changeset
   640
        mMenu = NULL;
72
hgs
parents:
diff changeset
   641
    }
hgs
parents:
diff changeset
   642
    
81
hgs
parents: 72
diff changeset
   643
    mMenu = mMenuBuilder->actionMenu( contact, mListModel->myCardId() );
hgs
parents: 72
diff changeset
   644
    mMenu->setPreferredPos( aPoint );
hgs
parents: 72
diff changeset
   645
    mMenu->open();
hgs
parents: 72
diff changeset
   646
72
hgs
parents:
diff changeset
   647
    CNT_EXIT
hgs
parents:
diff changeset
   648
}
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
void CntNamesViewPrivate::executeAction( QContact& aContact, QContactDetail aDetail, QString aAction )
hgs
parents:
diff changeset
   651
{
hgs
parents:
diff changeset
   652
    CNT_ENTRY
hgs
parents:
diff changeset
   653
    
hgs
parents:
diff changeset
   654
    CntActionLauncher* other = new CntActionLauncher( mEngine->contactManager(SYMBIAN_BACKEND), aAction );
hgs
parents:
diff changeset
   655
    connect(other, SIGNAL(actionExecuted(CntActionLauncher*)), this, SLOT(actionExecuted(CntActionLauncher*)));
hgs
parents:
diff changeset
   656
    other->execute(aContact, aDetail);
hgs
parents:
diff changeset
   657
    
hgs
parents:
diff changeset
   658
    CNT_EXIT
hgs
parents:
diff changeset
   659
}
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
void CntNamesViewPrivate::actionExecuted(CntActionLauncher* aAction)
hgs
parents:
diff changeset
   662
{
hgs
parents:
diff changeset
   663
    CNT_ENTRY
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
    aAction->deleteLater();
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    CNT_EXIT
hgs
parents:
diff changeset
   668
}
hgs
parents:
diff changeset
   669
hgs
parents:
diff changeset
   670
void CntNamesViewPrivate::handleContactAddition(const QList<QContactLocalId>& aAddedList)
hgs
parents:
diff changeset
   671
{
hgs
parents:
diff changeset
   672
    CNT_ENTRY
hgs
parents:
diff changeset
   673
hgs
parents:
diff changeset
   674
    Q_UNUSED(aAddedList);
hgs
parents:
diff changeset
   675
    changeDeleteActionStatus();
hgs
parents:
diff changeset
   676
    
hgs
parents:
diff changeset
   677
    CNT_EXIT
hgs
parents:
diff changeset
   678
}
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
void CntNamesViewPrivate::handleContactRemoval(const QList<QContactLocalId>& aRemovedList)
hgs
parents:
diff changeset
   681
{
hgs
parents:
diff changeset
   682
    CNT_ENTRY
hgs
parents:
diff changeset
   683
  
hgs
parents:
diff changeset
   684
    Q_UNUSED(aRemovedList);
hgs
parents:
diff changeset
   685
    changeDeleteActionStatus();
hgs
parents:
diff changeset
   686
    
hgs
parents:
diff changeset
   687
    if (isFinderVisible() && mListModel->rowCount() == 0)
hgs
parents:
diff changeset
   688
    {
hgs
parents:
diff changeset
   689
        document()->load( CNT_CONTACTLIST_XML, "find_empty" );
hgs
parents:
diff changeset
   690
    }
hgs
parents:
diff changeset
   691
    
hgs
parents:
diff changeset
   692
    CNT_EXIT
hgs
parents:
diff changeset
   693
}
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
void CntNamesViewPrivate::handleSelfContactIdChange(const QContactLocalId& aOldId, const QContactLocalId& aNewId)
hgs
parents:
diff changeset
   696
{
hgs
parents:
diff changeset
   697
    CNT_ENTRY
hgs
parents:
diff changeset
   698
    
hgs
parents:
diff changeset
   699
    Q_UNUSED(aOldId);
hgs
parents:
diff changeset
   700
    Q_UNUSED(aNewId);
hgs
parents:
diff changeset
   701
    changeDeleteActionStatus();
hgs
parents:
diff changeset
   702
    
hgs
parents:
diff changeset
   703
    list()->scrollTo(mListModel->index(0));
hgs
parents:
diff changeset
   704
    
hgs
parents:
diff changeset
   705
    CNT_EXIT
hgs
parents:
diff changeset
   706
}
hgs
parents:
diff changeset
   707
81
hgs
parents: 72
diff changeset
   708
bool CntNamesViewPrivate::isFinderVisible()
hgs
parents: 72
diff changeset
   709
{
hgs
parents: 72
diff changeset
   710
    CNT_ENTRY
hgs
parents: 72
diff changeset
   711
    
hgs
parents: 72
diff changeset
   712
    bool isVisible = false;
hgs
parents: 72
diff changeset
   713
    if ( mSearchPanel )
hgs
parents: 72
diff changeset
   714
    {
hgs
parents: 72
diff changeset
   715
        isVisible = mSearchPanel->isVisible();
hgs
parents: 72
diff changeset
   716
    }
hgs
parents: 72
diff changeset
   717
    
hgs
parents: 72
diff changeset
   718
    CNT_EXIT
hgs
parents: 72
diff changeset
   719
    return isVisible;
hgs
parents: 72
diff changeset
   720
}
hgs
parents: 72
diff changeset
   721
hgs
parents: 72
diff changeset
   722
void CntNamesViewPrivate::changeDeleteActionStatus()
hgs
parents: 72
diff changeset
   723
{
hgs
parents: 72
diff changeset
   724
    CNT_ENTRY
hgs
parents: 72
diff changeset
   725
    
hgs
parents: 72
diff changeset
   726
    bool multipleContactsFound = mListModel->rowCount() >= CNT_MIN_ROW_COUNT;
hgs
parents: 72
diff changeset
   727
    mMultipleDeleter->setEnabled(multipleContactsFound);
hgs
parents: 72
diff changeset
   728
    
hgs
parents: 72
diff changeset
   729
    CNT_EXIT
hgs
parents: 72
diff changeset
   730
}
hgs
parents: 72
diff changeset
   731
hgs
parents: 72
diff changeset
   732
void CntNamesViewPrivate::focusLineEdit()
hgs
parents: 72
diff changeset
   733
{
hgs
parents: 72
diff changeset
   734
    CNT_ENTRY
hgs
parents: 72
diff changeset
   735
    
hgs
parents: 72
diff changeset
   736
    HbLineEdit *editor = static_cast<HbLineEdit*>(mSearchPanel->primitive("lineedit"));
hgs
parents: 72
diff changeset
   737
    if (editor)
hgs
parents: 72
diff changeset
   738
    {
hgs
parents: 72
diff changeset
   739
        editor->setObjectName("focusLineEdit");
hgs
parents: 72
diff changeset
   740
        editor->setInputMethodHints(Qt::ImhNoPredictiveText);
hgs
parents: 72
diff changeset
   741
        editor->setText("");
hgs
parents: 72
diff changeset
   742
        editor->setFocus();
hgs
parents: 72
diff changeset
   743
        
hgs
parents: 72
diff changeset
   744
        // This opens the VKB
hgs
parents: 72
diff changeset
   745
        QInputContext *ic = qApp->inputContext();
hgs
parents: 72
diff changeset
   746
        if (ic)
hgs
parents: 72
diff changeset
   747
        {
hgs
parents: 72
diff changeset
   748
            QEvent *event = new QEvent(QEvent::RequestSoftwareInputPanel);
hgs
parents: 72
diff changeset
   749
            ic->filterEvent(event);
hgs
parents: 72
diff changeset
   750
            delete event;
hgs
parents: 72
diff changeset
   751
        }
hgs
parents: 72
diff changeset
   752
    }
hgs
parents: 72
diff changeset
   753
hgs
parents: 72
diff changeset
   754
    CNT_EXIT
hgs
parents: 72
diff changeset
   755
}
hgs
parents: 72
diff changeset
   756
72
hgs
parents:
diff changeset
   757
void CntNamesViewPrivate::setScrollPosition(int focusedContact)
hgs
parents:
diff changeset
   758
{
hgs
parents:
diff changeset
   759
    CNT_ENTRY
hgs
parents:
diff changeset
   760
    
hgs
parents:
diff changeset
   761
    // Scroll to the focused contact
hgs
parents:
diff changeset
   762
    if ( focusedContact > 0 )
hgs
parents:
diff changeset
   763
    {
hgs
parents:
diff changeset
   764
        list()->scrollTo(mListModel->indexOfContactId(focusedContact), HbAbstractItemView::EnsureVisible);
hgs
parents:
diff changeset
   765
    }
hgs
parents:
diff changeset
   766
    
hgs
parents:
diff changeset
   767
    CNT_EXIT
hgs
parents:
diff changeset
   768
}
hgs
parents:
diff changeset
   769
hgs
parents:
diff changeset
   770
HbListView* CntNamesViewPrivate::list()
hgs
parents:
diff changeset
   771
{
hgs
parents:
diff changeset
   772
    CNT_ENTRY
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
    if (!mListView) {
hgs
parents:
diff changeset
   775
        mListView = static_cast<HbListView*> (mLoader->findWidget("listView"));
81
hgs
parents: 72
diff changeset
   776
        
hgs
parents: 72
diff changeset
   777
        mListView->grabGesture(Qt::PinchGesture);
hgs
parents: 72
diff changeset
   778
        
hgs
parents: 72
diff changeset
   779
        CntNamesViewItem *item = new CntNamesViewItem();
hgs
parents: 72
diff changeset
   780
        mListView->setItemPrototype(item);
72
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
        mListView->setFrictionEnabled(true);
hgs
parents:
diff changeset
   783
        mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
81
hgs
parents: 72
diff changeset
   784
        item->setGraphicsSize(HbListViewItem::Thumbnail);
hgs
parents: 72
diff changeset
   785
        item->setStretchingStyle(HbListViewItem::StretchLandscape);
72
hgs
parents:
diff changeset
   786
        mListView->verticalScrollBar()->setInteractive(true);
hgs
parents:
diff changeset
   787
        
hgs
parents:
diff changeset
   788
        HbFrameBackground frame;
hgs
parents:
diff changeset
   789
        frame.setFrameGraphicsName("qtg_fr_list_normal");
hgs
parents:
diff changeset
   790
        frame.setFrameType(HbFrameDrawer::NinePieces);
81
hgs
parents: 72
diff changeset
   791
        item->setDefaultFrame( frame );
72
hgs
parents:
diff changeset
   792
        
hgs
parents:
diff changeset
   793
        mListView->setUniformItemSizes(true);
hgs
parents:
diff changeset
   794
        mListView->setItemRecycling(true);
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
        HbIndexFeedback *indexFeedback = new HbIndexFeedback(mView);
hgs
parents:
diff changeset
   797
        indexFeedback->setIndexFeedbackPolicy(HbIndexFeedback::IndexFeedbackSingleCharacter);
hgs
parents:
diff changeset
   798
        indexFeedback->setItemView(mListView);
81
hgs
parents: 72
diff changeset
   799
        
hgs
parents: 72
diff changeset
   800
        CntPinchGrabber *grabber = new CntPinchGrabber(mListView);
hgs
parents: 72
diff changeset
   801
        mListView->installEventFilter(grabber);
72
hgs
parents:
diff changeset
   802
    }
hgs
parents:
diff changeset
   803
    
hgs
parents:
diff changeset
   804
    CNT_EXIT
hgs
parents:
diff changeset
   805
    return mListView;
hgs
parents:
diff changeset
   806
}
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
HbDocumentLoader* CntNamesViewPrivate::document()
hgs
parents:
diff changeset
   809
{
hgs
parents:
diff changeset
   810
    CNT_ENTRY
hgs
parents:
diff changeset
   811
    
hgs
parents:
diff changeset
   812
    if (!mLoader) {
hgs
parents:
diff changeset
   813
        mLoader = new HbDocumentLoader();
hgs
parents:
diff changeset
   814
    }
hgs
parents:
diff changeset
   815
    
hgs
parents:
diff changeset
   816
    CNT_EXIT
hgs
parents:
diff changeset
   817
    return mLoader;
hgs
parents:
diff changeset
   818
}
hgs
parents:
diff changeset
   819
hgs
parents:
diff changeset
   820
// End of File