/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** 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. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
    \title Enginio C++ Examples - Image Gallery
    \example image-gallery-cpp
    \brief This is an example that demonstrates uploading and downloading of files in Enginio.
    \ingroup enginio-examples
    \inmodule enginio-qt

    The user interface consists of a list of images and a button to upload more images.

    \image gallery-example.png

    \section1 Backend Configuration
    The \e Enginio \e backend needs to be set up in order to get this example working.

    Go to the \e {Enginio Dashboard} and create a new backend with the \gui {Image Gallery} template.
    The template will construct a new custom backend by executing these steps:
    \list
        \li Create a new object type \c objects.image (on the \gui {Object Types} page).

            Add two properties to the image object:
            name:"name", type: "String" and name: "file", type: "Ref" with target "files".

        \li Add a file processor by clicking the \c file property.
            Choose \gui {Image processor} and in \gui {Variants} enter:
            \code
            {
                "thumbnail": { "crop":"100x100" }
            }
            \endcode
            This JSON snippet triggers the server to generate thumbnails for all uploaded images.
            In the image gallery, the thumbnails will be used in the list view, and the full image will be shown
            when the thumbnail is clicked.
    \endlist

    Copy the backend id from the Enginio dashboard, and use them when requested.

    \section1 The Example Code

    The example consists of three classes.
    ImageModel is a subclass of \l {EnginioModelCpp}{EnginioModel}
    that exposes the images in the \l Qt::DecorationRole for the list view.
    In the \c {MainWindow}, a normal QListView is used to display the model contents.
    The ImageObject is a class that takes care of the download, and emits a signal
    when an image has been downloaded.


*/
