/**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the demonstration applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor ** the names of its contributors may be used to endorse or promote ** products derived from this software without specific prior written ** permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "contactsdlg.h" #include #include #include #include #include ContactsDialog::ContactsDialog(QWidget *parent) : QDialog(parent) { QHBoxLayout* l = new QHBoxLayout; m_listWidget = new QListWidget(this); l->addWidget(m_listWidget); QVBoxLayout* lv = new QVBoxLayout; QPushButton* backBtn = new QPushButton("Back",this); QObject::connect(backBtn, SIGNAL(pressed()), this, SLOT(close())); backBtn->setFixedWidth(100); lv->addWidget(backBtn); lv->setAlignment(backBtn,Qt::AlignTop); QPushButton* okBtn = new QPushButton("Ok",this); QObject::connect(okBtn, SIGNAL(pressed()), this, SLOT(selectContact())); okBtn->setFixedWidth(100); lv->addWidget(okBtn); lv->setAlignment(okBtn,Qt::AlignBottom); l->addLayout(lv); setLayout(l); // Remove context menu from the all widgets #ifdef Q_OS_SYMBIAN QWidgetList widgets = QApplication::allWidgets(); QWidget* w = 0; foreach (w,widgets) { w->setContextMenuPolicy(Qt::NoContextMenu); } #endif // Create QContactManager and search contacts createContactManager(); searchContact(); showFullScreen(); } ContactsDialog::~ContactsDialog() { delete m_contactManager; } void ContactsDialog::createContactManager() { #if defined Q_WS_MAEMO_5 m_contactManager = new QContactManager("maemo5"); #elif defined Q_OS_SYMBIAN m_contactManager = new QContactManager("symbian"); #endif // Use default if (!m_contactManager) { m_contactManager = new QContactManager(); } } void ContactsDialog::searchContact() { m_listWidget->clear(); // Sort contacts by lastname QContactSortOrder sort; sort.setDirection(Qt::AscendingOrder); sort.setDetailDefinitionName(QContactName::DefinitionName, QContactName::FieldLastName); // Build QListWidget from the contact list QList contactIds = m_contactManager->contactIds(sort); QContact currContact; foreach (const QContactLocalId& id, contactIds) { QListWidgetItem *currItem = new QListWidgetItem; currContact = m_contactManager->contact(id); QContactDisplayLabel dl = currContact.detail(QContactDisplayLabel::DefinitionName); currItem->setData(Qt::DisplayRole, dl.label()); currItem->setData(Qt::UserRole, currContact.localId()); // also store the id of the contact m_listWidget->addItem(currItem); } if (m_listWidget->count()>0) { m_listWidget->setCurrentRow(0); } } void ContactsDialog::selectContact() { QList items = m_listWidget->selectedItems(); if (!items.isEmpty()) { itemClicked(items.first()); } } void ContactsDialog::itemClicked(QListWidgetItem *item) { QVariant data = item->data(Qt::UserRole); QContactLocalId id = data.toInt(); QContact contact = m_contactManager->contact(id); QContactPhoneNumber cpn = contact.detail (); // Emit contact phonenumber if (!cpn.isEmpty()) { emit contactSelected(cpn.number()); // Close dialog close(); } }