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