/****************************************************************************
**
** 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/lineedits
    \title Line Edits Example
    \ingroup examples-widgets
    \brief The Line Edits example demonstrates the many ways that QLineEdit
    can be used, and shows the effects of various properties and validators
    on the input and output supplied by the user.


    \borderedimage lineedits-example.png

    The example consists of a single \c Window class, containing a selection of
    line edits with different input constraints and display properties that can be
    changed by selecting items from comboboxes. Presenting these together helps
    developers choose suitable properties to use with line edits, and makes it easy
    to compare the effects of each validator on user input.

    \section1 Window Class Definition

    The \c Window class inherits QWidget and contains a constructor and several
    slots:

    \snippet widgets/lineedits/window.h 0

    The slots are used to update the type of validator used for a given line edit when
    a new validator has been selected in the associated combobox. The line edits
    are stored in the window for use in these slots.

    \section1 Window Class Implementation

    The \c Window constructor is used to set up the line edits, validators,
    and comboboxes, connect signals from the comboboxes to slots in the \c Window
    class, and arrange the child widgets in layouts.

    We begin by constructing a \l{QGroupBox}{group box} to hold a label, combobox,
    and line edit so that we can demonstrate the QLineEdit::echoMode property:

    \snippet widgets/lineedits/window.cpp 0

    At this point, none of these widgets have been arranged in layouts. Eventually,
    the \c echoLabel, \c echoComboBox, and \c echoLineEdit will be placed in a
    vertical layout inside the \c echoGroup group box.

    Similarly, we construct group boxes and collections of widgets to show the
    effects of QIntValidator and QDoubleValidator on a line edit's contents:

    \snippet widgets/lineedits/window.cpp 1

    Text alignment is demonstrated by another group of widgets:

    \snippet widgets/lineedits/window.cpp 2

    QLineEdit supports the use of \l{QLineEdit::inputMask}{input masks}.
    These only allow the user to type characters into the line edit that
    follow a simple specification. We construct a group of widgets to
    demonstrate a selection of predefined masks:

    \snippet widgets/lineedits/window.cpp 3

    Another useful feature of QLineEdit is its ability to make its contents
    read-only. This property is used to control access to a line edit in the
    following group of widgets:

    \snippet widgets/lineedits/window.cpp 4

    Now that all the child widgets have been constructed, we connect signals
    from the comboboxes to slots in the \c Window object:

    \snippet widgets/lineedits/window.cpp 5

    Each of these connections use the QComboBox::activated() signal that
    supplies an integer to the slot. This will be used to efficiently
    make changes to the appropriate line edit in each slot.

    We place each combobox, line edit, and label in a layout for each group
    box, beginning with the layout for the \c echoGroup group box:

    \snippet widgets/lineedits/window.cpp 6

    The other layouts are constructed in the same way:

    \snippet widgets/lineedits/window.cpp 7

    Finally, we place each group box in a grid layout for the \c Window object
    and set the window title:

    \snippet widgets/lineedits/window.cpp 8

    The slots respond to signals emitted when the comboboxes are changed by the
    user.

    When the combobox for the \uicontrol{Echo} group box is changed, the \c echoChanged()
    slot is called:

    \snippet widgets/lineedits/window.cpp 9

    The slot updates the line edit in the same group box to use an echo mode that
    corresponds to the entry described in the combobox.

    When the combobox for the \uicontrol{Validator} group box is changed, the
    \c validatorChanged() slot is called:

    \snippet widgets/lineedits/window.cpp 10

    The slot either creates a new validator for the line edit to use, or it removes
    the validator in use by calling QLineEdit::setValidator() with a zero pointer.
    We clear the line edit in this case to ensure that the new validator is
    initially given valid input to work with.

    When the combobox for the \uicontrol{Alignment} group box is changed, the
    \c alignmentChanged() slot is called:

    \snippet widgets/lineedits/window.cpp 11

    This changes the way that text is displayed in the line edit to correspond with
    the description selected in the combobox.

    The \c inputMaskChanged() slot handles changes to the combobox in the
    \uicontrol{Input Mask} group box:

    \snippet widgets/lineedits/window.cpp 12

    Each entry in the relevant combobox is associated with an input mask. We set
    a new mask by calling the QLineEdit::setInputMask() function with a suitable string;
    the mask is disabled if an empty string is used.

    The \c accessChanged() slot handles changes to the combobox in the
    \uicontrol{Access} group box:

    \snippet widgets/lineedits/window.cpp 13

    Here, we simply associate the \uicontrol{False} and \uicontrol{True} entries in the combobox
    with \c false and \c true values to be passed to QLineEdit::setReadOnly(). This
    allows the user to enable and disable input to the line edit.
*/
