diff options
author | Cristiano di Flora <cristiano.di-flora@nokia.com> | 2012-05-18 13:22:50 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-05 15:07:03 +0200 |
commit | c31771eed9ac35970a86795b1051a8c60843fe37 (patch) | |
tree | 767d53a932ca6760bf712516ebd1ae7454b8ec5d /src/imports/organizer/qdeclarativeorganizeritemfilter.cpp | |
parent | 0adbe2e255b59d2dfd5ceba0be531cb8fff067af (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.cpp | 153 |
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) { |