/****************************************************************************
**
** 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 widgets/elidedlabel
    \title Elided Label Example

    \brief This example creates a widget similar to QLabel, that elides the last
    visible line, if the text is too long to fit the widget's geometry.

    \image elidedlabel-example.png Elided Label example on XPressMusic 5800

    When text of varying length has to be displayed in a uniformly sized
    area, for instance within a list or grid view where all list items have the
    same size, it can be useful to give the user a visual clue when not all
    text is visible. QLabel can elide text that doesn't fit within it, but only
    in one line. The \c ElidedLabel widget shown in this example word wraps its
    text by its width, and elides the last visible line if some text is left
    out. \c TestWidget gives control to the features of \c ElidedWidget and
    forms the example application.


    \section1 ElidedLabel Class Definition

    Like QLabel, \c ElidedLabel inherits from QFrame. Here's the definition of
    the \c ElidedLabel class:


    \snippet widgets/elidedlabel/elidedlabel.h 0

    The \c isElided property depends the font, text content and geometry of the
    widget. Whenever any of these change, the \c elisionChanged() signal might
    trigger. We cache the current elision value in \c elided, so that it
    doesn't have to be recomputed every time it's asked for.


    \section1 ElidedLabel Class Implementation

    Except for initializing the member variables, the constructor sets the size
    policy to be horizontally expanding, since it's meant to fill the width of
    its container and grow vertically.

    \snippet widgets/elidedlabel/elidedlabel.cpp 0

    Changing the \c content require a repaint of the widget.

    \snippet widgets/elidedlabel/elidedlabel.cpp 1

    QTextLayout is used in the \c paintEvent() to divide the \c content into
    lines, that wrap on word boundaries. Each line, except the last visible
    one, is drawn \c lineSpacing pixels below the previous one. The \c draw()
    method of QTextLine will draw the line using the coordinate point as the
    top left corner.

    \snippet widgets/elidedlabel/elidedlabel.cpp 2

    Unfortunately, QTextLayout does not elide text, so the last visible line
    has to be treated differently. This last line is elided if it is too wide.
    The \c drawText() method of QPainter draws the text starting from the base
    line, which is \c ascecnt() pixels below the last drawn line.

    Finally, one more line is created to see if everything fit on this line.

    \snippet widgets/elidedlabel/elidedlabel.cpp 3

    If the text was elided and wasn't before or vice versa, cache it in
    \c elided and emit the change.

    \snippet widgets/elidedlabel/elidedlabel.cpp 4


    \section1 TestWidget Class Definition

    \c TestWidget is a QWidget and is the main window of the example. It
    contains an \c ElidedLabel which can be resized with two QSlider widgets.

    \snippet widgets/elidedlabel/testwidget.h 0

    \section1 TestWidget Class Implementation

    The constructor initializes the whole widget. Strings of different length
    are stored in \c textSamples. The user is able to switch between these.

    \snippet widgets/elidedlabel/testwidget.cpp 0

    An \c ElidedLabel is created to contain the first of the sample strings.
    The frame is made visible to make it easier to see the actual size of the
    widget.

    \snippet widgets/elidedlabel/testwidget.cpp 1

    The buttons and the elision label are created. By connecting the
    \c elisionChanged() signal to the \c setVisible() slot of the \c label,
    it will act as an indicator to when the text is elided or not. This signal
    could, for instance, be used to make a "More" button visible, or similar.

    \snippet widgets/elidedlabel/testwidget.cpp 2

    The \c widthSlider and \c heightSlider specify the size of the
    \c elidedText. Since the y-axis is inverted, the \c heightSlider has to be
    inverted to act appropriately.

    \snippet widgets/elidedlabel/testwidget.cpp 3

    The components are all stored in a QGridLayout, which is made the layout of
    the \c TestWidget.

    \snippet widgets/elidedlabel/testwidget.cpp 4

    The \c widthSlider and \c heightSlider have the exact same length as the
    dimensions of the \c elidedText. The maximum value for both of them is
    thus their lengths, and each tick indicates one pixel.

    \snippet widgets/elidedlabel/testwidget.cpp 6

    The \c switchText() slot simply cycles through all the available sample
    texts.

    \snippet widgets/elidedlabel/testwidget.cpp 7

    These slots set the width and height of the \c elided text, in response to
    changes in the sliders.

    \section1 The \c main() Function

    The \c main() function creates an instance of \c TestWidget fullscreen and
    enters the message loop.

    \snippet widgets/elidedlabel/main.cpp 0
*/

