/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://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 https://www.qt.io/terms-conditions. For further
** information use the contact form at https://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: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example graphicsview/basicgraphicslayouts
    \title Basic Graphics Layouts Example
    \ingroup examples-graphicsview-layout
    \brief Demonstrates how to create basic graphics layout.

    The Basic Graphics Layouts example shows how to use the layout classes
    in QGraphicsView: QGraphicsLinearLayout and QGraphicsGridLayout.
    In addition to that it shows how to write your own custom layout item.

    \image basicgraphicslayouts-example.png Screenshot of the Basic Layouts Example

    \section1 Window Class Definition

    The \c Window class is a subclass of QGraphicsWidget. It has a
    constructor with a QGraphicsWidget \a parent as its parameter.

    \snippet graphicsview/basicgraphicslayouts/window.h 0

    \section1 Window Class Implementation

    The constructor of \c Window instantiates a QGraphicsLinearLayout object,
    \c windowLayout, with vertical orientation. We instantiate another
    QGraphicsLinearLayout object, \c linear, whose parent is \c windowLayout.
    Next, we create a \c LayoutItem object, \c item and add it to \c linear
    with the \l{QGraphicsLinearLayout::}{addItem()} function. We also provide
    \c item with a \l{QGraphicsLinearLayout::setStretchFactor()}
    {stretchFactor}.

    \snippet graphicsview/basicgraphicslayouts/window.cpp 0

    We repeat the process:

    \list
        \li create a new \c LayoutItem,
        \li add the item \c linear, and
        \li provide a stretch factor.
    \endlist

    \snippet graphicsview/basicgraphicslayouts/window.cpp 1

    We then add \c linear to \c windowLayout, nesting two
    QGraphicsLinearLayout objects. Apart from the QGraphicsLinearLayout, we
    also use a QGraphicsGridLayout object, \c grid, which is a 4x3 grid with
    some cells spanning to other rows.

    We create seven \c LayoutItem objects and place them into \c grid with
    the \l{QGraphicsGridLayout::}{addItem()} function as shown in the code
    snippet below:

    \snippet graphicsview/basicgraphicslayouts/window.cpp 2

    The first item we add to \c grid is placed in the top left cell,
    spanning four rows. The next two items are placed in the second column,
    and they span two rows. Each item's \l{QGraphicsWidget::}{maximumHeight()}
    and \l{QGraphicsWidget::}{minimumHeight()} are set to be equal so that
    they do not expand vertically. As a result, these items will not
    fit vertically in their cells. So, we specify that they should be
    vertically aligned in the center of the cell using Qt::AlignVCenter.

    Finally, \c grid itself is added to \c windowLayout. Unlike
    QGridLayout::addItem(), QGraphicsGridLayout::addItem() requires a row
    and a column for its argument, specifying which cell the item should be
    positioned in. Also, if the \c rowSpan and \c columnSpan arguments
    are omitted, they will default to 1.

    Note that we do not specify a parent for each \c LayoutItem that we
    construct, as all these items will be added to \c windowLayout. When we
    add an item to a layout, it will be automatically reparented to the widget
    on which the layout is installed.

    \snippet graphicsview/basicgraphicslayouts/window.cpp 3

    Now that we have set up \c grid and added it to \c windowLayout, we
    install \c windowLayout onto the window object using
    QGraphicsWidget::setLayout() and we set the window title.

    \section1 LayoutItem Class Definition

    The \c LayoutItem class is a subclass of QGraphicsLayoutItem and
    QGraphicsItem. It has a constructor, a destructor, and some required
    reimplementations.
    Since it inherits QGraphicsLayoutItem it must reimplement
    {QGraphicsLayoutItem::setGeometry()}{setGeometry()} and
    {QGraphicsLayoutItem::sizeHint()}{sizeHint()}.
    In addition to that it inherits QGraphicsItem, so it must reimplement
    {QGraphicsItem::boundingRect()}{boundingRect()} and
    {QGraphicsItem::paint()}{paint()}.

    \snippet graphicsview/basicgraphicslayouts/layoutitem.h 0

    The \c LayoutItem class also has a private instance of QPixmap, \c m_pix.

    \section1 LayoutItem Class Implementation

    In \c{LayoutItem}'s constructor, \c m_pix is instantiated and the
    \c{block.png} image is loaded into it.

    \snippet graphicsview/basicgraphicslayouts/layoutitem.cpp 0

    We use the Q_UNUSED() macro to prevent the compiler from generating
    warnings regarding unused parameters.

    \snippet graphicsview/basicgraphicslayouts/layoutitem.cpp 1

    The idea behind the \c paint() function is to paint the
    background rect then paint a rect around the pixmap.

    \snippet graphicsview/basicgraphicslayouts/layoutitem.cpp 2

    The reimplementation of \l{QGraphicsItem::}{boundingRect()}
    will set the top left corner at (0,0), and the size of it will be
    the size of the layout items
    \l{QGraphicsLayoutItem::}{geometry()}. This is the area that
    we paint within.

    \snippet graphicsview/basicgraphicslayouts/layoutitem.cpp 3


    The reimplementation of \l{QGraphicsLayoutItem::setGeometry()}{setGeometry()}
    simply calls its baseclass implementation. However, since this will change
    the boundingRect we must also call
    \l{QGraphicsItem::prepareGeometryChange()}{prepareGeometryChange()}.
    Finally, we move the item according to \c geom.topLeft().

    \snippet graphicsview/basicgraphicslayouts/layoutitem.cpp 4


    Since we don't want the size of the item to be smaller than the pixmap, we
    must make sure that we return a size hint that is larger than \c m_pix.
    We also add some extra space around for borders that we will paint later.
    Alternatively, you could scale the pixmap to prevent the item from
    becoming smaller than the pixmap.
    The preferred size is the same as the minimum size hint, while we set
    maximum to be a large value

    \snippet graphicsview/basicgraphicslayouts/layoutitem.cpp 5

*/
