phonebookui/pbkcommonui/src/cntnamesview_p.cpp
changeset 27 de1630741fbe
parent 25 76a2435edfd4
child 31 2a11b5b00470
--- a/phonebookui/pbkcommonui/src/cntnamesview_p.cpp	Fri Apr 16 14:53:18 2010 +0300
+++ b/phonebookui/pbkcommonui/src/cntnamesview_p.cpp	Mon May 03 12:24:20 2010 +0300
@@ -17,8 +17,12 @@
 
 #include "cntnamesview_p.h"
 #include "cntaction.h"
+#include "cntextensionmanager.h"
 #include "qtpbkglobal.h"
 
+#include <cntuiextensionfactory.h>
+#include <cntuisocialextension.h>
+
 #include <qapplication.h>
 #include <hbabstractviewitem.h>
 #include <hbaction.h>
@@ -31,6 +35,8 @@
 #include <hbdocumentloader.h>
 #include <hblistview.h>
 #include <hblistviewitem.h>
+#include <hbindexfeedback.h>
+#include <hbscrollbar.h>
 #include <hbgroupbox.h>
 #include <hbsearchpanel.h>
 #include <hbtoolbar.h>
@@ -43,21 +49,20 @@
 
 const char *CNT_CONTACTLIST_XML = ":/xml/contacts_namelist.docml";
 
-CntNamesViewPrivate::CntNamesViewPrivate() :
+CntNamesViewPrivate::CntNamesViewPrivate(CntExtensionManager &extensionManager) :
     QObject(),
-    mViewManager(0),
-    mListModel(0),
-    mView(0),
-    mListView(0),
-    mEmptyList(0),
-    mBanner(0),
-    mSearchPanel(0),
-    mLoader(0),
-    mLayout(0),
-    mVirtualKeyboard(0),
-    mMenuBuilder(0),
+    mExtensionManager(extensionManager),
+    mViewManager(NULL),
+    mListModel(NULL),
+    mListView(NULL),
+	mEmptyList(NULL),
+    mBanner(NULL),
+    mSearchPanel(NULL),
+    mLoader(NULL),
+    mLayout(NULL),
+    mMenuBuilder(NULL),
     mIsDefault(true),
-    mId( CntViewParameters::namesView )
+    mId( namesView )
 {
     bool ok;
     document()->load( CNT_CONTACTLIST_XML, &ok);
@@ -76,12 +81,15 @@
     HbAction* findContacts = static_cast<HbAction*> (document()->findObject("cnt:find"));
     HbAction* groups = static_cast<HbAction*> (document()->findObject("cnt:groups"));
     HbAction* importSim = static_cast<HbAction*> (document()->findObject("cnt:importsim"));
+    
+    HbAction* extension = static_cast<HbAction*> (document()->findObject("cnt:activity"));
        
     connect(mSoftkey, SIGNAL(triggered()), this, SLOT(showPreviousView()));
     connect(newContact, SIGNAL(triggered()), this, SLOT(createNewContact()));
     connect(findContacts, SIGNAL(triggered()), this, SLOT(showFinder()));
     connect(groups, SIGNAL(triggered()), this, SLOT(showCollectionView()));
-    connect( importSim, SIGNAL(triggered()), this, SLOT(importSim()) );
+    connect(importSim, SIGNAL(triggered()), this, SLOT(importSim()));
+    connect(extension, SIGNAL(triggered()), this, SLOT(handleExtensionAction()));
     connect(list(), SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
            SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
     connect(list(), SIGNAL(activated (const QModelIndex&)), this,
@@ -94,56 +102,54 @@
     mView->deleteLater();
 
     delete mListModel;
-    mListModel = 0;
+    mListModel = NULL;
 
     delete mListView;
-    mListView = 0;
+    mListView = NULL;
 
     delete mSearchPanel;
-    mSearchPanel = 0;
+    mSearchPanel = NULL;
 
     delete mEmptyList;
-    mEmptyList = 0;
+    mEmptyList = NULL;
 
     delete mBanner;
-    mBanner = 0;
+    mBanner = NULL;
 
     delete mLoader;
-    mLoader = 0;
+    mLoader = NULL;
 
     delete mVirtualKeyboard;
-    mVirtualKeyboard = 0;
+    mVirtualKeyboard = NULL;
     
     delete mMenuBuilder;
-    mMenuBuilder = 0;
+    mMenuBuilder = NULL;
 }
 
-void CntNamesViewPrivate::activate(CntAbstractViewManager* aMgr, const CntViewParameters& aArgs)
+void CntNamesViewPrivate::activate(CntAbstractViewManager* aMgr, const CntViewParameters aArgs)
 {
     mViewManager = aMgr;
     if (!mListModel) {
         QContactSortOrder sortOrderFirstName;
         sortOrderFirstName.setDetailDefinitionName(QContactName::DefinitionName,
             QContactName::FieldFirst);
+        sortOrderFirstName.setCaseSensitivity(Qt::CaseInsensitive);
 
         QContactSortOrder sortOrderLastName;
         sortOrderLastName.setDetailDefinitionName(QContactName::DefinitionName,
             QContactName::FieldLast);
+        sortOrderLastName.setCaseSensitivity(Qt::CaseInsensitive);
 
         QList<QContactSortOrder> sortOrders;
         sortOrders.append(sortOrderFirstName);
         sortOrders.append(sortOrderLastName);
 
-        mListModel = new MobCntModel(mViewManager->contactManager(SYMBIAN_BACKEND), QContactFilter(), sortOrders);
-
         QContactDetailFilter filter;
         filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
-
         QString typeContact = QContactType::TypeContact;
         filter.setValue(typeContact);
 
-        mListModel->setFilterAndSortOrder(filter);
-        mListModel->showMyCard(true);
+        mListModel = new MobCntModel(mViewManager->contactManager(SYMBIAN_BACKEND), filter, sortOrders);
     }
 
     list()->setModel(mListModel);
@@ -160,21 +166,21 @@
     }
     
     QContactManager* contactManager = aMgr->contactManager( SYMBIAN_BACKEND );
-    QString action = aArgs.selectedAction();
+    QString action = aArgs.value(ESelectedAction).toString();
     if ( action == "save" )
     {
-        QString name = contactManager->synthesizedDisplayLabel( aArgs.selectedContact() );
+        QString name = contactManager->synthesizedDisplayLabel( aArgs.value(ESelectedContact).value<QContact>() );
         HbNotificationDialog::launchDialog(qtTrId("Contact \"%1\" saved").arg(name));
 
-        scrollTo( aArgs.selectedContact() );
+        scrollTo( aArgs.value(ESelectedContact).value<QContact>() );
     }
            
-    else if ( aArgs.selectedAction() == "delete" )
+    else if ( action == "delete" )
     {
-        QString name = contactManager->synthesizedDisplayLabel( aArgs.selectedContact() );
+        QString name = contactManager->synthesizedDisplayLabel( aArgs.value(ESelectedContact).value<QContact>() );
         HbNotificationDialog::launchDialog(qtTrId("%1 deleted").arg(name));
     }    
-    else if ( aArgs.selectedAction() == "failed")
+    else if ( action == "failed")
     {
         HbNotificationDialog::launchDialog(qtTrId("SAVING FAILED!"));
     }
@@ -189,11 +195,11 @@
     list()->setModel(NULL);
     
     delete mMenuBuilder;
-    mMenuBuilder = 0;
+    mMenuBuilder = NULL;
     
     // delete the hbsearch since we can not empty text from outside.
     delete mSearchPanel;
-    mSearchPanel = 0;
+    mSearchPanel = NULL;
 }
 
 void CntNamesViewPrivate::scrollTo(const QContact &aContact)
@@ -315,6 +321,24 @@
     hideFinder();
 }
 
+void CntNamesViewPrivate::handleExtensionAction()
+{
+    for(int i = 0;i < mExtensionManager.pluginCount();i++)
+    {
+        CntUiSocialExtension* socialExtension = mExtensionManager.pluginAt(i)->socialExtension();
+        if (socialExtension)
+        {
+            CntViewParameters params;
+            socialExtension->handleToolbarAction(params);
+            if (params.count())
+            {
+                mViewManager->changeView(params);
+                break;
+            }
+        }
+    }
+}
+
 void CntNamesViewPrivate::createNewContact()
 {
     QContact newContact;
@@ -329,13 +353,16 @@
 
 void CntNamesViewPrivate::showContactView( QContact& aContact )
 {
-    CntViewParameters args(CntViewParameters::commLauncherView);
+    CntViewParameters args;
+    args.insert(EViewId, commLauncherView);
     if (aContact.localId() == mListModel->myCardId() && aContact.details().count() <= 4)
     {
-        args.setNextViewId(CntViewParameters::myCardView);
+        args.insert(EViewId, myCardView);
     }
 
-    args.setSelectedContact(aContact);
+    QVariant contact;
+    contact.setValue(aContact);
+    args.insert(ESelectedContact, contact);
     mViewManager->changeView(args);
 }
 
@@ -380,15 +407,20 @@
 
 void CntNamesViewPrivate::showContactEditorView(QContact& aContact)
 {
-    CntViewParameters args(CntViewParameters::editView);
-    args.setSelectedContact(aContact);
+    CntViewParameters args;
+    args.insert(EViewId, editView);
+    
+    QVariant contact;
+    contact.setValue(aContact);
+    args.insert(ESelectedContact, contact);
 
     mViewManager->changeView(args);
 }
 
 void CntNamesViewPrivate::showCollectionView()
 {
-    CntViewParameters args(CntViewParameters::collectionView);
+    CntViewParameters args;
+    args.insert(EViewId, collectionView);
     mViewManager->changeView(args);
 }
 
@@ -454,13 +486,20 @@
         prototype->setGraphicsSize(HbListViewItem::Thumbnail);
 
         mListView->setFrictionEnabled(true);
-        mListView->setScrollingStyle(HbScrollArea::PanOrFlick);
+        mListView->setScrollingStyle(HbScrollArea::PanWithFollowOn);
         mListView->listItemPrototype()->setGraphicsSize(HbListViewItem::Thumbnail);
-
+        mListView->verticalScrollBar()->setInteractive(true);
+        
         HbFrameBackground frame;
         frame.setFrameGraphicsName("qtg_fr_list_normal");
         frame.setFrameType(HbFrameDrawer::NinePieces);
         mListView->itemPrototypes().first()->setDefaultFrame(frame);
+        
+        mListView->setUniformItemSizes(true);
+
+        HbIndexFeedback *indexFeedback = new HbIndexFeedback(mView);
+        indexFeedback->setIndexFeedbackPolicy(HbIndexFeedback::IndexFeedbackSingleCharacter);
+        indexFeedback->setItemView(mListView);
     }
     return mListView;
 }
@@ -486,6 +525,7 @@
 {
     if (!mSearchPanel) {
         mSearchPanel = new HbSearchPanel();
+        mSearchPanel->setVisible( false );
         connect(mSearchPanel, SIGNAL(exitClicked()), this, SLOT(hideFinder()));
         connect(mSearchPanel, SIGNAL(criteriaChanged(QString)), this, SLOT(setFilter(QString)));
     }