phonebookui/pbkcommonui/src/cntnamesview_p.cpp
changeset 37 fd64c38c277d
parent 31 2a11b5b00470
child 40 b46a585f6909
equal deleted inserted replaced
31:2a11b5b00470 37:fd64c38c277d
    25 #include <cntuisocialextension.h>
    25 #include <cntuisocialextension.h>
    26 
    26 
    27 #include <qapplication.h>
    27 #include <qapplication.h>
    28 #include <hbabstractviewitem.h>
    28 #include <hbabstractviewitem.h>
    29 #include <hbaction.h>
    29 #include <hbaction.h>
    30 #include <hbnotificationdialog.h>
       
    31 #include <hbmenu.h>
    30 #include <hbmenu.h>
    32 #include <hbtoolbar.h>
    31 #include <hbtoolbar.h>
    33 #include <hbmainwindow.h>
    32 #include <hbmainwindow.h>
    34 #include <hbview.h>
    33 #include <hbview.h>
    35 #include <hbtextitem.h>
    34 #include <hbtextitem.h>
    99     connect(extension, SIGNAL(triggered()), this, SLOT(handleExtensionAction()));
    98     connect(extension, SIGNAL(triggered()), this, SLOT(handleExtensionAction()));
   100     connect(list(), SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
    99     connect(list(), SIGNAL(longPressed(HbAbstractViewItem*,QPointF)), this,
   101            SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
   100            SLOT(showContextMenu(HbAbstractViewItem*,QPointF)));
   102     connect(list(), SIGNAL(activated (const QModelIndex&)), this,
   101     connect(list(), SIGNAL(activated (const QModelIndex&)), this,
   103            SLOT(showContactView(const QModelIndex&)));
   102            SLOT(showContactView(const QModelIndex&)));
       
   103     
       
   104     HbAction* settings = static_cast<HbAction*>(document()->findObject("cnt:settings") );
       
   105     connect( settings, SIGNAL(triggered()), this, SLOT(showSettings()) );
   104 }
   106 }
   105 
   107 
   106 CntNamesViewPrivate::~CntNamesViewPrivate()
   108 CntNamesViewPrivate::~CntNamesViewPrivate()
   107 {
   109 {
   108     mView->deleteLater();
   110     mView->deleteLater();
   132     mMenuBuilder = NULL;
   134     mMenuBuilder = NULL;
   133 }
   135 }
   134 
   136 
   135 void CntNamesViewPrivate::activate(CntAbstractViewManager* aMgr, const CntViewParameters aArgs)
   137 void CntNamesViewPrivate::activate(CntAbstractViewManager* aMgr, const CntViewParameters aArgs)
   136 {
   138 {
       
   139     Q_UNUSED( aArgs )
   137     mViewManager = aMgr;
   140     mViewManager = aMgr;
   138     if (!mListModel) {
   141     if (!mListModel) {
   139         QContactSortOrder sortOrderFirstName;
   142         QContactSortOrder sortOrderFirstName;
   140         sortOrderFirstName.setDetailDefinitionName(QContactName::DefinitionName,
   143         sortOrderFirstName.setDetailDefinitionName(QContactName::DefinitionName,
   141             QContactName::FieldFirst);
   144             QContactName::FieldFirst);
   170     {
   173     {
   171         mView->setNavigationAction(mSoftkey);
   174         mView->setNavigationAction(mSoftkey);
   172     }
   175     }
   173     
   176     
   174     QContactManager* contactManager = aMgr->contactManager( SYMBIAN_BACKEND );
   177     QContactManager* contactManager = aMgr->contactManager( SYMBIAN_BACKEND );
   175     if ( aArgs.contains(ESelectedContact) )
   178     
   176     {
   179     disableDeleteAction();
   177         QContact selectedContact = aArgs.value(ESelectedContact).value<QContact>();
   180     connect(contactManager, SIGNAL(contactsAdded(const QList<QContactLocalId>&)),
   178         QString action = aArgs.value(ESelectedAction).toString();
   181             this, SLOT(handleContactAddition(const QList<QContactLocalId>&)));
   179         
   182     
   180         if ( action == "save" )
   183     connect(contactManager, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)),
   181         {
   184             this, SLOT(handleContactRemoval(const QList<QContactLocalId>&)));
   182             QString name = contactManager->synthesizedDisplayLabel( selectedContact );
   185     
   183             HbNotificationDialog::launchDialog(qtTrId("Contact \"%1\" saved").arg(name));
   186     connect(contactManager, SIGNAL(selfContactIdChanged(const QContactLocalId&, const QContactLocalId&)), 
   184         }
   187             this, SLOT(handleSelfContactIdChange(const QContactLocalId&, const QContactLocalId&)));
   185                
       
   186         else if ( action == "delete" )
       
   187         {
       
   188             QString name = contactManager->synthesizedDisplayLabel( selectedContact );
       
   189             HbNotificationDialog::launchDialog(qtTrId("%1 deleted").arg(name));
       
   190         }    
       
   191         else if ( action == "failed")
       
   192         {
       
   193             HbNotificationDialog::launchDialog(qtTrId("SAVING FAILED!"));
       
   194         }
       
   195     }
       
   196     
       
   197     bool multipleContacts = mListModel->rowCount() >=  CNT_MIN_ROW_COUNT;
       
   198     mMultipleDeleter->setEnabled(multipleContacts);
       
   199 }
   188 }
   200 
   189 
   201 void CntNamesViewPrivate::deactivate()
   190 void CntNamesViewPrivate::deactivate()
   202 {
   191 {
   203     hideFinder();
   192     hideFinder();
       
   193     
       
   194     QContactManager* contactManager = mViewManager->contactManager( SYMBIAN_BACKEND );
       
   195     disconnect(contactManager, SIGNAL(contactsAdded(const QList<QContactLocalId>&)),
       
   196             this, SLOT(handleContactAddition(const QList<QContactLocalId>&)));
       
   197     
       
   198     disconnect(contactManager, SIGNAL(contactsRemoved(const QList<QContactLocalId>&)),
       
   199             this, SLOT(handleContactRemoval(const QList<QContactLocalId>&)));
       
   200     
       
   201     disconnect(contactManager, SIGNAL(selfContactIdChanged(const QContactLocalId&, const QContactLocalId&)), 
       
   202             this, SLOT(handleSelfContactIdChange(const QContactLocalId&, const QContactLocalId&)));
   204 
   203 
   205     delete mMenuBuilder;
   204     delete mMenuBuilder;
   206     mMenuBuilder = NULL;
   205     mMenuBuilder = NULL;
   207     
   206     
   208     // delete the hbsearch since we can not empty text from outside.
   207     // delete the hbsearch since we can not empty text from outside.
   209     delete mSearchPanel;
   208     delete mSearchPanel;
   210     mSearchPanel = NULL;
   209     mSearchPanel = NULL;
       
   210 }
       
   211 
       
   212 void CntNamesViewPrivate::disableDeleteAction()
       
   213 {
       
   214     bool multipleContacts = mListModel->rowCount() >= CNT_MIN_ROW_COUNT;
       
   215     mMultipleDeleter->setEnabled(multipleContacts);
   211 }
   216 }
   212 
   217 
   213 void CntNamesViewPrivate::setFilter(const QString &filterString)
   218 void CntNamesViewPrivate::setFilter(const QString &filterString)
   214 {
   219 {
   215     QStringList searchList = filterString.split(QRegExp("\\s+"), QString::SkipEmptyParts);
   220     QStringList searchList = filterString.split(QRegExp("\\s+"), QString::SkipEmptyParts);
   284     mListModel->showMyCard(false);
   289     mListModel->showMyCard(false);
   285 }
   290 }
   286 
   291 
   287 void CntNamesViewPrivate::hideFinder()
   292 void CntNamesViewPrivate::hideFinder()
   288 {
   293 {
   289     layout()->removeItem(emptyLabel());
   294     if ( mSearchPanel )
   290     layout()->removeItem(search());
   295     {
   291     emptyLabel()->setVisible(false);
   296         layout()->removeItem(emptyLabel());
   292     search()->setVisible(false);
   297         layout()->removeItem(search());
   293 
   298         emptyLabel()->setVisible(false);
   294     hideBanner();
   299         search()->setVisible(false);
   295 
   300 
   296     layout()->addItem(list());
   301         hideBanner();
   297     list()->setVisible(true);
   302 
   298 
   303         layout()->addItem(list());
   299     QContactDetailFilter filter;
   304         list()->setVisible(true);
   300     filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
   305 
   301     QString typeContact = QContactType::TypeContact;
   306         QContactDetailFilter filter;
   302     filter.setValue(typeContact);
   307         filter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
   303 
   308         QString typeContact = QContactType::TypeContact;
   304     mListModel->setFilterAndSortOrder(filter);
   309         filter.setValue(typeContact);
   305     mListModel->showMyCard(true);
   310 
   306 
   311         mListModel->setFilterAndSortOrder(filter);
   307     mNewContact->setVisible(true);
   312         mListModel->showMyCard(true);
   308     mImportSim->setVisible(true);
   313 
   309     mMultipleDeleter->setVisible(true);
   314         mNewContact->setVisible(true);
   310     mView->toolBar()->show();
   315         mImportSim->setVisible(true);
       
   316         mMultipleDeleter->setVisible(true);
       
   317         mView->toolBar()->show();
       
   318     }   
   311 }
   319 }
   312 
   320 
   313 bool CntNamesViewPrivate::isFinderVisible()
   321 bool CntNamesViewPrivate::isFinderVisible()
   314 {
   322 {
   315     return search()->isVisible();
   323     bool isVisible = false;
       
   324     if ( mSearchPanel )
       
   325     {
       
   326         isVisible = mSearchPanel->isVisible();
       
   327     }
       
   328     return isVisible;
   316 }
   329 }
   317 
   330 
   318 void CntNamesViewPrivate::showPreviousView()
   331 void CntNamesViewPrivate::showPreviousView()
   319 {
   332 {
   320     if ( !isFinderVisible() )
   333     if ( !isFinderVisible() )
   366     if (!mFetchView) {
   379     if (!mFetchView) {
   367         mFetchView = new CntFetchContacts(mViewManager->contactManager( SYMBIAN_BACKEND ));
   380         mFetchView = new CntFetchContacts(mViewManager->contactManager( SYMBIAN_BACKEND ));
   368         connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleDeleteMultipleContacts()));
   381         connect(mFetchView, SIGNAL(clicked()), this, SLOT(handleDeleteMultipleContacts()));
   369     }
   382     }
   370 
   383 
   371     mFetchView->setDetails(hbTrId("txt_phob_opt_delete_contact"),hbTrId("txt_phob_button_delete"));
   384     mFetchView->setDetails(hbTrId("txt_phob_title_delete_contacts"),hbTrId("txt_phob_button_delete"));
   372     QSet<QContactLocalId> emptyContactsSet;
   385     QSet<QContactLocalId> emptyContactsSet;
   373 
   386 
   374     // Pop up a list of contacts for deletion
   387     // Pop up a list of contacts for deletion
   375     mFetchView->displayContacts(CntFetchContacts::popup,
   388     mFetchView->displayContacts(CntFetchContacts::popup,
   376                                 HbAbstractItemView::MultiSelection,
   389                                 HbAbstractItemView::MultiSelection,
   381 {
   394 {
   382     QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
   395     QSet<QContactLocalId> selectedContacts = mFetchView->getSelectedContacts();
   383 
   396 
   384     QContactManager* manager = mViewManager->contactManager( SYMBIAN_BACKEND );
   397     QContactManager* manager = mViewManager->contactManager( SYMBIAN_BACKEND );
   385     if ( !mFetchView->wasCanceled() && !selectedContacts.isEmpty() ) {
   398     if ( !mFetchView->wasCanceled() && !selectedContacts.isEmpty() ) {
   386         QList<QContactLocalId> selectedContactsList = selectedContacts.values();
   399         foreach ( QContactLocalId id, selectedContacts.values() )
   387         foreach (QContactLocalId id, selectedContactsList) {
   400         {
   388             QContact contact = manager->contact(id);
   401             manager->removeContact( id );
   389 
       
   390             manager->removeContact(contact.localId());
       
   391         }
   402         }
   392     }
       
   393 
       
   394     if (mListModel->rowCount() < CNT_MIN_ROW_COUNT) {
       
   395         mMultipleDeleter->setEnabled(false);
       
   396     }
   403     }
   397 
   404 
   398     delete mFetchView;
   405     delete mFetchView;
   399     mFetchView = NULL;
   406     mFetchView = NULL;
   400 }
   407 }
   421 }
   428 }
   422 
   429 
   423 void CntNamesViewPrivate::showContextMenu(HbAbstractViewItem* aItem, QPointF aPoint)
   430 void CntNamesViewPrivate::showContextMenu(HbAbstractViewItem* aItem, QPointF aPoint)
   424 {
   431 {
   425     QContact contact = mListModel->contact(aItem->modelIndex());
   432     QContact contact = mListModel->contact(aItem->modelIndex());
   426     HbMenu* menu = mMenuBuilder->actionMenu( contact );
   433     
   427     menu->setPreferredPos( aPoint );
   434    // In case of an empty MyCard, do not show any ContextMenu
   428     menu->setAttribute( Qt::WA_DeleteOnClose, true );
   435     if (!(contact.localId() == mListModel->myCardId() && contact.details().count() <= 4))
   429     menu->open();
   436     {
       
   437         HbMenu* menu = mMenuBuilder->actionMenu( contact, mListModel->myCardId() );
       
   438         menu->setPreferredPos( aPoint );
       
   439         menu->setAttribute( Qt::WA_DeleteOnClose, true );
       
   440         menu->open();
       
   441     }
       
   442     
       
   443     
   430 }
   444 }
   431 
   445 
   432 void CntNamesViewPrivate::executeAction( QContact& aContact, QString aAction )
   446 void CntNamesViewPrivate::executeAction( QContact& aContact, QString aAction )
   433 {
   447 {
   434     CntAction* other = new CntAction( aAction );
   448     CntAction* other = new CntAction( aAction );
   477    CntViewParameters args;        
   491    CntViewParameters args;        
   478    args.insert(EViewId, importsView);
   492    args.insert(EViewId, importsView);
   479    mViewManager->changeView(args);
   493    mViewManager->changeView(args);
   480 }
   494 }
   481 
   495 
       
   496 void CntNamesViewPrivate::showSettings()
       
   497 {
       
   498     CntViewParameters args;
       
   499     args.insert( EViewId, settingsView );
       
   500     mViewManager->changeView( args );
       
   501 }
       
   502 
       
   503 void CntNamesViewPrivate::handleContactAddition(const QList<QContactLocalId>& aAddedList)
       
   504 {
       
   505     Q_UNUSED(aAddedList);
       
   506     disableDeleteAction();
       
   507 }
       
   508 
       
   509 void CntNamesViewPrivate::handleContactRemoval(const QList<QContactLocalId>& aRemovedList)
       
   510 {
       
   511     Q_UNUSED(aRemovedList);
       
   512     disableDeleteAction();
       
   513 }
       
   514 
       
   515 void CntNamesViewPrivate::handleSelfContactIdChange(const QContactLocalId& aOldId, const QContactLocalId& aNewId)
       
   516 {
       
   517     Q_UNUSED(aOldId);
       
   518     Q_UNUSED(aNewId);
       
   519     disableDeleteAction();
       
   520 }
   482 
   521 
   483 //// lazy accessors
   522 //// lazy accessors
   484 HbListView* CntNamesViewPrivate::list()
   523 HbListView* CntNamesViewPrivate::list()
   485 {
   524 {
   486     if (!mListView) {
   525     if (!mListView) {