aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/logichelper/MinMaxMapper.qml
blob: 76d340744527a96f8b96968e3322c20ae8ff3397 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright (C) 2026 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick 2.10

/*!
    \qmltype MinMaxMapper
    \inqmlmodule QtQuick.Studio.LogicHelper
    \since QtQuick.Studio.LogicHelper 1.0
    \inherits QtObject

    \brief Provides access to values that are out or range.

    The MinMaxMapper type has output values even if the input value is out
    of range or too small or big. This enables applying actions to values
    even if they are out of range, such as changing a color in a state.

    To access the values of a control, the \l input property of the
    minimum-maximum mapper is bound to that of the \c value property
    of the control.

    For example, to restrict the maximum value of a slider to 0.60,
    regardless of the maximum value set in the slider properties,
    we bind the value of the \l input property of the mapper to
    the value of the \c value property of the slider and set the value
    of the \l maximum property to 0.60.

    The \l outOfRange, \l aboveMaximum and \l belowMinimum properties are set to
    \c true if the value of the \l input property is out of range.
    For example, in the context of speed, \l aboveMaximum being \c true
    would mean \e {too fast}, whereas \l belowMinimum being \c true would
    mean \e {too slow}, and \l outOfRange being \c true would mean
    \e {either too fast or too slow}.

    Designers can use the Min Max Mapper type in \QDS instead of writing
    JavaScript expressions.

    \section1 Example Usage

    In the following example, we use the MinMaxMapper type to restrict the
    maximum value of a \l Slider type to 0.60, regardless of the maximum
    value set in the Slider properties:

    \code
    Rectangle {
        Slider {
            id: slider
            value: 0.5
        }
        MinMaxMapper {
            id: minMaxMapper
            input: slider.value
            maximum: 0.6
        }
    }
    \endcode
*/

QtObject {
    id: object

/*!
    The input value.
*/
    property real input: 0

/*!
    Whether \l input is less than \l minimum.
*/
    property bool belowMinimum: object.input < object.minimum

/*!
    Whether \l input is larger than \l maximum.
*/
    property bool aboveMaximum: object.input > object.maximum

/*!
    Whether \l input is out of range. Returns \c true if \l belowMinimum or
    \l aboveMaximum is \c true.
*/
    property bool outOfRange: object.aboveMaximum ||object.belowMinimum

/*!
    The value of \l input. If \l aboveMaximum is \c true, returns the value of
    \l maximum. If \l belowMinimum is \c true, returns the value of \l minimum.
*/
    property real output: {
        if (object.aboveMaximum)
            return object.maximum

        if (object.belowMinimum)
            return object.minimum

        return object.input
    }

/*!
    The minimum value of \l input.
*/
    property real minimum: 0

/*!
    The maximum value of \l input.
*/
    property real maximum: 100
}