filterpage.cpp Example File
samplephonebook/filterpage.cpp
#include "filterpage.h"
#include <QtGui>
FilterPage::FilterPage(QWidget* parent)
: QWidget(parent)
{
m_valueCriteriaEdit = new QLineEdit(this);
m_fieldCriteriaCombo = new QComboBox(this);
m_criteriaTypeCombo = new QComboBox(this);
m_joinMethodCombo = new QComboBox(this);
m_cumulativeExpressionLabel = new QLabel("Match All Contacts", this);
m_cumulativeExpressionLabel->setWordWrap(true);
m_cumulativeExpressionLabel->setFocusPolicy(Qt::StrongFocus);
#ifdef Q_OS_SYMBIAN
m_addBtn = new QAction("Add", this);
m_addBtn->setSoftKeyRole(QAction::PositiveSoftKey);
addAction(m_addBtn);
connect(m_addBtn, SIGNAL(triggered(bool)), this, SLOT(addClicked()));
m_filterBtn = new QAction("Filter", this);
m_filterBtn->setSoftKeyRole(QAction::NegativeSoftKey);
addAction(m_filterBtn);
connect(m_filterBtn, SIGNAL(triggered(bool)), this, SLOT(filterClicked()));
#else
m_addBtn = new QPushButton("Add", this);
connect(m_addBtn, SIGNAL(clicked()), this, SLOT(addClicked()));
m_filterBtn = new QPushButton("Filter", this);
connect(m_filterBtn, SIGNAL(clicked()), this, SLOT(filterClicked()));
#endif
m_clearBtn = new QPushButton("Clear", this);
connect(m_clearBtn, SIGNAL(clicked()), this, SLOT(clearClicked()));
QStringList filterableFields;
filterableFields.append("Name");
filterableFields.append("Phone Number");
filterableFields.append("Email");
m_fieldCriteriaCombo->addItems(filterableFields);
QStringList criteriaTypes;
criteriaTypes.append("Exact Match");
criteriaTypes.append("Starts With");
criteriaTypes.append("Ends With");
criteriaTypes.append("Contains");
m_criteriaTypeCombo->addItems(criteriaTypes);
QStringList joinTypes;
joinTypes.append("AND");
joinTypes.append("OR");
m_joinMethodCombo->addItems(joinTypes);
QFormLayout *formLayout = new QFormLayout;
formLayout->addRow(new QLabel("Search String:", this));
formLayout->addRow(m_valueCriteriaEdit);
formLayout->addRow(new QLabel("Search Field:", this));
formLayout->addRow(m_fieldCriteriaCombo);
formLayout->addRow(new QLabel("Criteria Type:", this));
formLayout->addRow(m_criteriaTypeCombo);
formLayout->addRow(new QLabel("Join Method:", this));
formLayout->addRow(m_joinMethodCombo);
QFrame* separatorFrame = new QFrame(this);
separatorFrame->setFrameShape(QFrame::HLine);
separatorFrame->setFrameShadow(QFrame::Plain);
separatorFrame->setLineWidth(2);
formLayout->addRow(separatorFrame);
formLayout->addRow(new QLabel("Filter Expression:", this));
formLayout->addRow(m_cumulativeExpressionLabel);
#ifdef Q_OS_SYMBIAN
formLayout->addRow(m_clearBtn);
#endif
QVBoxLayout *pageLayout = new QVBoxLayout;
QScrollArea *formScrollArea = new QScrollArea(this);
formScrollArea->setWidgetResizable(true);
QWidget *formContainer = new QWidget(formScrollArea);
formContainer->setLayout(formLayout);
formScrollArea->setWidget(formContainer);
pageLayout->addWidget(formScrollArea);
#ifndef Q_OS_SYMBIAN
QHBoxLayout *btnLayout = new QHBoxLayout;
btnLayout->addWidget(m_addBtn);
btnLayout->addWidget(m_clearBtn);
btnLayout->addWidget(m_filterBtn);
pageLayout->addLayout(btnLayout);
#endif
setLayout(pageLayout);
}
FilterPage::~FilterPage()
{
}
void FilterPage::addClicked()
{
QContactDetailFilter fil;
QString defName;
QString fieldName;
QString exprName;
QString exprMatch;
QString exprJoin;
switch (m_fieldCriteriaCombo->currentIndex()) {
case 0:
{
defName = QString(QLatin1String(QContactDisplayLabel::DefinitionName));
fieldName = QString(QLatin1String(QContactDisplayLabel::FieldLabel));
exprName = "Name";
}
break;
case 1:
{
defName = QString(QLatin1String(QContactPhoneNumber::DefinitionName));
fieldName = QString(QLatin1String(QContactPhoneNumber::FieldNumber));
exprName = "Phone Number";
}
break;
default:
{
defName = QString(QLatin1String(QContactEmailAddress::DefinitionName));
fieldName = QString(QLatin1String(QContactEmailAddress::FieldEmailAddress));
exprName = "Email Address";
}
break;
}
fil.setDetailDefinitionName(defName, fieldName);
fil.setValue(m_valueCriteriaEdit->text());
int flag = m_criteriaTypeCombo->itemData(m_criteriaTypeCombo->currentIndex()).toInt();
fil.setMatchFlags(QContactFilter::MatchFlags(flag));
exprMatch = m_criteriaTypeCombo->currentText().toLower();
if (m_joinMethodCombo->currentIndex() == 1) {
QContactUnionFilter ufil;
ufil << m_cumulativeFilter << fil;
QContactIntersectionFilter ifil;
ifil << ufil;
m_cumulativeFilter = ifil;
exprJoin = "OR";
} else {
QContactIntersectionFilter ifil(m_cumulativeFilter);
ifil << fil;
m_cumulativeFilter = ifil;
exprJoin = "AND";
}
if (!m_cumulativeExpression.isEmpty())
m_cumulativeExpression += " " + exprJoin + " ";
m_cumulativeExpression += exprName + " " + exprMatch + " \"" + m_valueCriteriaEdit->text() + "\"";
m_valueCriteriaEdit->setText("");
m_fieldCriteriaCombo->setCurrentIndex(0);
m_criteriaTypeCombo->setCurrentIndex(0);
m_joinMethodCombo->setCurrentIndex(0);
m_cumulativeExpressionLabel->setText(m_cumulativeExpression);
}
void FilterPage::clearClicked()
{
m_cumulativeExpression = QString();
m_valueCriteriaEdit->setText("");
m_fieldCriteriaCombo->setCurrentIndex(0);
m_criteriaTypeCombo->setCurrentIndex(0);
m_joinMethodCombo->setCurrentIndex(0);
m_cumulativeExpressionLabel->setText("Match All Contacts");
m_cumulativeFilter = QContactFilter();
}
void FilterPage::filterClicked()
{
emit showListPage(m_cumulativeFilter);
}
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) |
Trademarks |
Qt Mobility Project 1.0.0 |