/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of this
** file.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \group qml-messaging
    \title QML Messaging
    QML Support for the QtMobility Project Messaging API.

*/


/*!
    \page qml-messaging.html

    \title Messaging QML Plugin

    \brief A QML plugin for the QtMobility Project Messaging API.



    \section1 Overview

    The identifying string for this component is \i {"QtMobility.messaging"}.
    Use this in the QML \i {import} statement.

    The Messaging QML plugin supplies filters to search for messages
    with particular values for various properties in the message. The Message itself
    is represented by a model called a \l {MessageModel}.
    This model supplies a rich selection of properties to display or to use
    as filter criteria. We can also construct a series of filters and combine
    them using the \l {MessageIntersectionFilter} and \l {MessageUnionFilter}
    to represent a logical 'and' and 'or' of the results. Other properties also give
    control over the filter logic, such as \l {MessageFilter::negated}
    and the \l {MessageFilter::comparator}{Comparators}.

    \section2 Filters

    A filter query is made of various parts. Below is a list of some of the
    things that may be used to construct a search

    \table
        \header
            \o Component
            \o Description
        \row
            \o \l {MessageModel::filter}{filter}
            \o This property of \l {MessageModel} acts as the container for a constructed \l {MessageFilter}.
        \row
            \o \l {MessageIntersectionFilter}
            \o AND a list of filter conditions together.
        \row
            \o \l {MessageUnionFilter}
            \o OR a list of filter conditions together.
        \row
            \o \l {MessageFilter::comparator}{comparator}
            \o The boolean comparison against a \i value in the conditions e.g. \i {LessThan}
        \row
            \o \l {MessageFilter::type}{type}
            \o Contains a set of message fields including timestamp, folder, priority.
        \row
            \o \l {MessageModel::sortBy}{sortBy}
            \o The message field used as the basis for the sort of a result.
        \row
            \o \l {MessageModel::sortOrder}{sortOrder}
            \o Select Ascending or Descending sort order of the sortBy data.
    \endtable

    As an example consider the follow QML code which has a \l MessageModel element
    containing a filter. The filter is made up of an intersection of
    the message \l {MessageModel::sortBy}{Size} less than 1024 AND a union
    of (\l {MessageModel::sortBy}{Sender} is "martin" AND \l {MessageModel::sortBy}{Subject}
    does not include "re:") OR \l {MessageModel::sortBy}{Sender} includes "don".

    Notice the use of the property \l {MessageFilter::value}{value} which
    contains the tested value. The \l {MessageModel} sets the
    \l {MessageModel::sortBy}{sortBy}
    and \l {MessageModel::sortOrder}{sortOrder} so that the results are
    ordered by Timestamp in DescendingOrder.

    \code
        import QtMobility.messaging 1.1

        model: MessageModel {
            sortBy: MessageModel.Timestamp
            sortOrder: MessageModel.DescendingOrder
            filter: MessageIntersectionFilter {
                MessageFilter {
                    type: MessageFilter.Size
                    value: 1024
                    comparator: MessageFilter.LessThan
                }
                MessageUnionFilter {
                    MessageIntersectionFilter {
                        MessageFilter {
                            type: MessageFilter.Sender
                            value: "martin"
                            comparator: MessageFilter.Includes
                        }
                        MessageFilter {
                            negated: true
                            type: MessageFilter.Subject
                            value: "re:"
                            comparator: MessageFilter.Includes
                        }
                    }
                    MessageFilter {
                        type: MessageFilter.Sender
                        value: "don"
                        comparator: MessageFilter.Includes
                    }
                }
            }
        }
    \endcode



    \section2 The MessageModel Element

    The \l {MessageModel} element provides access to the returned list of
    results allowing both control of the list and access to the data of particular
    messages.

    In the following snippet of code the delegate, of the unshown ListView
    element, accesses various fields of each message in the list to display
    a meaningful list of message items.

    \code

        model: MessageModel {
            sortBy: MessageModel.Timestamp
            sortOrder: MessageModel.DescendingOrder
        }
        delegate: Item {
            id: wrapper
            height: 32; width: list.width
            Text { id: subjText; text: subject; font.pixelSize: 13; x: 3 }
            Text {
                text: sender; color: "gray"; font.pixelSize: 9
                x: 3; width: parent.width-100;
                anchors.top: subjText.bottom; anchors.topMargin: 3
                elide: Text.ElideRight
            }
            Text {
                text: date; color: "gray"; font.pixelSize: 9
                anchors.right: parent.right
                anchors.top: subjText.bottom; anchors.topMargin: 3
            }
        }

    \endcode

    The code displays a list of messages showing the \i {sender} and
    \i {subject} details. The \l MessageModel element also enables the use of
    the platform message display tool so that after a message is selected it
    can be correctly displayed.



    \section1 Elements

    \annotatedlist  qml-messaging

*/


