diff options
Diffstat (limited to 'demos/mobile/qcamera/contactsdlg.cpp')
-rwxr-xr-x | demos/mobile/qcamera/contactsdlg.cpp | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/demos/mobile/qcamera/contactsdlg.cpp b/demos/mobile/qcamera/contactsdlg.cpp new file mode 100755 index 0000000..defd34c --- /dev/null +++ b/demos/mobile/qcamera/contactsdlg.cpp @@ -0,0 +1,159 @@ +/**************************************************************************** +** +** 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 <QHBoxLayout> +#include <QApplication> +#include <QAction> +#include <QTimer> +#include <QPushButton> + +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<QContactLocalId> 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<QListWidgetItem*> 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<QContactPhoneNumber> (); + + // Emit contact phonenumber + if (!cpn.isEmpty()) { + emit contactSelected(cpn.number()); + // Close dialog + close(); + } +} + |