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(); |
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) { |