summaryrefslogtreecommitdiffstats
path: root/src/imports/organizer/qdeclarativeorganizeritemfilter.cpp
diff options
context:
space:
mode:
authorCristiano di Flora <cristiano.di-flora@nokia.com>2012-05-18 13:22:50 +0300
committerQt by Nokia <qt-info@nokia.com>2012-06-05 15:07:03 +0200
commitc31771eed9ac35970a86795b1051a8c60843fe37 (patch)
tree767d53a932ca6760bf712516ebd1ae7454b8ec5d /src/imports/organizer/qdeclarativeorganizeritemfilter.cpp
parent0adbe2e255b59d2dfd5ceba0be531cb8fff067af (diff)
Refactoring Organizer detailFilter class.
This patch changes the interface and behaviour of QOrganizerItemDetailFilter class (and of the corresponding QML DetailFilter element). The previous class and element, based on single field / value pair matching are now renamed as QOrganizerItemDetailFieldFilter and DetailFieldFilter respectively. The new detail filter implementation provides a convenince filter for exact detail-to-detail matching. No MatchFlags or wildcards are supported. Matching items must have a detail that is identical to that of the filter. The old interface of DetailFilter is still available in the refactored class / element, but it is deprecated and will be removed in a separate change. Change-Id: I3911f76476fecf10a4813509dc2cbbda3057aa56 Reviewed-by: Cristiano di Flora <cristiano.di-flora@nokia.com>
Diffstat (limited to 'src/imports/organizer/qdeclarativeorganizeritemfilter.cpp')
-rw-r--r--src/imports/organizer/qdeclarativeorganizeritemfilter.cpp153
1 files changed, 130 insertions, 23 deletions
diff --git a/src/imports/organizer/qdeclarativeorganizeritemfilter.cpp b/src/imports/organizer/qdeclarativeorganizeritemfilter.cpp
index cbb564a2a..9202847bd 100644
--- a/src/imports/organizer/qdeclarativeorganizeritemfilter.cpp
+++ b/src/imports/organizer/qdeclarativeorganizeritemfilter.cpp
@@ -74,8 +74,9 @@ QDeclarativeOrganizerItemFilter::QDeclarativeOrganizerItemFilter(QObject *parent
\li Filter.UnionFilter A filter which matches any organizer item that is matched by any
of the filters it includes.
\li Filter.CollectionFilter A filter which matches any organizer item that is matched by collection.
- \li Filter.DetailFilter A filter which matches organizer items containing one or more details
- of a particular type with a particular value.
+ \li Filter.DetailFilter A filter which matches organizer items containing exactly one given detail.
+ \li Filter.DetailFieldFilter A filter which matches organizer items containing one or more details
+ of a particular type with a particular field having a particular value.
\li Filter.DetailRangeFilter A filter which matches organizer items containing one or more details
of a particular type whose values are within a particular range.
\li Filter.IdFilter A filter which matches any organizer item whose ID is contained in
@@ -324,6 +325,7 @@ QOrganizerItemFilter QDeclarativeOrganizerItemCollectionFilter::filter() const
}
+
/*!
\qmlclass DetailFilter QDeclarativeOrganizerItemDetailFilter
\brief The DetailFilter element provides a filter based around a detail value criterion.
@@ -342,8 +344,113 @@ QOrganizerItemFilter QDeclarativeOrganizerItemCollectionFilter::filter() const
filter: todoFilter
}
+ Type {
+ id: typeDetailToMatch
+ type: Type.Todo
+ }
+
DetailFilter {
id: todoFilter
+ detail: typeDetailToMatch
+ }
+
+ ListView {
+ width: parent.width; height: parent.height;
+ model: organizer.items
+ delegate: Text {text: displayLabel}
+ }
+ }
+ \endcode
+
+ \sa QOrganizerItemDetailFilter
+ */
+
+/*!
+ \internal
+ */
+QDeclarativeOrganizerItemDetailFilter::QDeclarativeOrganizerItemDetailFilter(QObject *parent)
+ : QDeclarativeOrganizerItemFilter(parent)
+ , m_detail(0), m_componentCompleted(false)
+{
+ connect(this, SIGNAL(valueChanged()), SIGNAL(filterChanged()));
+}
+
+/*!
+ \internal
+ */
+void QDeclarativeOrganizerItemDetailFilter::classBegin()
+{
+}
+
+/*!
+ \internal
+ */
+void QDeclarativeOrganizerItemDetailFilter::componentComplete()
+{
+ setDetail();
+ m_componentCompleted = true;
+}
+
+/*!
+ \qmlproperty Detail DetailFilter::detail
+
+ This property holds the detail instance used by this filter for matching.
+ */
+QDeclarativeOrganizerItemDetail *QDeclarativeOrganizerItemDetailFilter::detail() const
+{
+ return m_detail;
+}
+
+void QDeclarativeOrganizerItemDetailFilter::setDetail(QDeclarativeOrganizerItemDetail *detail)
+{
+ if (m_detail != detail) {
+ m_detail = detail;
+ if (m_componentCompleted)
+ setDetail();
+ }
+}
+
+
+/*!
+ \internal
+ */
+QOrganizerItemFilter QDeclarativeOrganizerItemDetailFilter::filter() const
+{
+ return d;
+}
+
+/*!
+ \internal
+ */
+void QDeclarativeOrganizerItemDetailFilter::setDetail()
+{
+ if (m_detail) {
+ d.setDetail(m_detail->detail());
+ emit valueChanged();
+ }
+}
+
+
+/*!
+ \qmlclass DetailFieldFilter QDeclarativeOrganizerItemDetailFieldFilter
+ \brief The DetailFieldFilter element provides a filter based around a detail value criterion.
+ \inqmlmodule QtOrganizer
+ \ingroup qml-organizer-filters
+
+ Simple example how to utilize DetailFieldFilter element together with OrganizerModel and ListView elements:
+ \code
+ Rectangle {
+ height: 400; width: 400;
+
+ OrganizerModel{
+ id: organizer
+ startPeriod: "2009-01-01"
+ endPeriod: "2012-12-31"
+ filter: todoFilter
+ }
+
+ DetailFieldFilter {
+ id: todoFilter
detail: Detail.Type
field: Type.FieldType
value: Type.Todo
@@ -357,13 +464,13 @@ QOrganizerItemFilter QDeclarativeOrganizerItemCollectionFilter::filter() const
}
\endcode
- \sa QOrganizerItemDetailFilter
+ \sa QOrganizerItemDetailFieldFilter
*/
/*!
\internal
*/
-QDeclarativeOrganizerItemDetailFilter::QDeclarativeOrganizerItemDetailFilter(QObject *parent)
+QDeclarativeOrganizerItemDetailFieldFilter::QDeclarativeOrganizerItemDetailFieldFilter(QObject *parent)
: QDeclarativeOrganizerItemFilter(parent)
, m_detail(QDeclarativeOrganizerItemDetail::Undefined)
, m_field(-1)
@@ -375,31 +482,31 @@ QDeclarativeOrganizerItemDetailFilter::QDeclarativeOrganizerItemDetailFilter(QOb
/*!
\internal
*/
-void QDeclarativeOrganizerItemDetailFilter::classBegin()
+void QDeclarativeOrganizerItemDetailFieldFilter::classBegin()
{
}
/*!
\internal
*/
-void QDeclarativeOrganizerItemDetailFilter::componentComplete()
+void QDeclarativeOrganizerItemDetailFieldFilter::componentComplete()
{
setDetail();
m_componentCompleted = true;
}
/*!
- \qmlproperty enum DetailFilter::detail
+ \qmlproperty enum DetailFieldFilter::detail
This property holds the detail type of which the detail filter will be matched to. The value
shuold be the enumeration value of Detail::type.
*/
-QDeclarativeOrganizerItemDetail::DetailType QDeclarativeOrganizerItemDetailFilter::detail() const
+QDeclarativeOrganizerItemDetail::DetailType QDeclarativeOrganizerItemDetailFieldFilter::detail() const
{
return m_detail;
}
-void QDeclarativeOrganizerItemDetailFilter::setDetail(QDeclarativeOrganizerItemDetail::DetailType detail)
+void QDeclarativeOrganizerItemDetailFieldFilter::setDetail(QDeclarativeOrganizerItemDetail::DetailType detail)
{
if (m_detail != detail) {
m_detail = detail;
@@ -409,21 +516,21 @@ void QDeclarativeOrganizerItemDetailFilter::setDetail(QDeclarativeOrganizerItemD
}
/*!
- \qmlproperty enum DetailFilter::field
+ \qmlproperty enum DetailFieldFilter::field
- This property holds the detail field type of which the detail filter will be matched to. The
+ This property holds the detail field type of which the detail field filter will be matched to. The
value should be the filld enumeration value defined in each detail element.
\sa EventTime, JournalTime, TodoTime, TodoProgress, Reminder, AudibleReminder, VisualReminder,
EmailReminder, Comment, Description, DisplayLabel, Guid, Location, Parent, Priority, Recurrence,
Timestamp, ItemType, Tag
*/
-int QDeclarativeOrganizerItemDetailFilter::field() const
+int QDeclarativeOrganizerItemDetailFieldFilter::field() const
{
return m_field;
}
-void QDeclarativeOrganizerItemDetailFilter::setField(int field)
+void QDeclarativeOrganizerItemDetailFieldFilter::setField(int field)
{
if (field != m_field) {
m_field = field;
@@ -433,16 +540,16 @@ void QDeclarativeOrganizerItemDetailFilter::setField(int field)
}
/*!
- \qmlproperty variant DetailFilter::value
+ \qmlproperty variant DetailFieldFilter::value
- This property holds the value criterion of the detail filter.
+ This property holds the value criterion of the detail field filter.
*/
-QVariant QDeclarativeOrganizerItemDetailFilter::value() const
+QVariant QDeclarativeOrganizerItemDetailFieldFilter::value() const
{
return d.value();
}
-void QDeclarativeOrganizerItemDetailFilter::setValue(const QVariant &newValue)
+void QDeclarativeOrganizerItemDetailFieldFilter::setValue(const QVariant &newValue)
{
if (newValue != value()) {
if (QVariant::DateTime == newValue.type()) {
@@ -456,7 +563,7 @@ void QDeclarativeOrganizerItemDetailFilter::setValue(const QVariant &newValue)
}
/*!
- \qmlproperty enumeration DetailFilter::matchFlags
+ \qmlproperty enumeration DetailFieldFilter::matchFlags
This property holds the semantics of the value matching criterion. The valid match flags include:
\list
@@ -468,14 +575,14 @@ void QDeclarativeOrganizerItemDetailFilter::setValue(const QVariant &newValue)
\li MatchCaseSensitive - The search is case sensitive.
\endlist
*/
-QDeclarativeOrganizerItemFilter::MatchFlags QDeclarativeOrganizerItemDetailFilter::matchFlags() const
+QDeclarativeOrganizerItemFilter::MatchFlags QDeclarativeOrganizerItemDetailFieldFilter::matchFlags() const
{
QDeclarativeOrganizerItemFilter::MatchFlags newFlags;
newFlags = ~newFlags & (int)d.matchFlags();
return newFlags;
}
-void QDeclarativeOrganizerItemDetailFilter::setMatchFlags(QDeclarativeOrganizerItemFilter::MatchFlags flags)
+void QDeclarativeOrganizerItemDetailFieldFilter::setMatchFlags(QDeclarativeOrganizerItemFilter::MatchFlags flags)
{
QOrganizerItemFilter::MatchFlags newFlags;
newFlags = ~newFlags & (int)flags;
@@ -488,7 +595,7 @@ void QDeclarativeOrganizerItemDetailFilter::setMatchFlags(QDeclarativeOrganizerI
/*!
\internal
*/
-QOrganizerItemFilter QDeclarativeOrganizerItemDetailFilter::filter() const
+QOrganizerItemFilter QDeclarativeOrganizerItemDetailFieldFilter::filter() const
{
return d;
}
@@ -496,7 +603,7 @@ QOrganizerItemFilter QDeclarativeOrganizerItemDetailFilter::filter() const
/*!
\internal
*/
-void QDeclarativeOrganizerItemDetailFilter::setDetail()
+void QDeclarativeOrganizerItemDetailFieldFilter::setDetail()
{
d.setDetail(static_cast<QOrganizerItemDetail::DetailType>(m_detail), m_field);
emit valueChanged();
@@ -625,7 +732,7 @@ QVariant QDeclarativeOrganizerItemDetailRangeFilter::maxValue() const
\qmlproperty enumeration DetailRangeFilter::matchFlags
This property holds the match flags of the criterion, which define semantics such as case sensitivity, and exact matching.
- \sa DetailFilter::matchFlags
+ \sa DetailFieldFilter::matchFlags
*/
void QDeclarativeOrganizerItemDetailRangeFilter::setMatchFlags(QDeclarativeOrganizerItemFilter::MatchFlags flags)
{