5import QGroundControl.Controls
7/// Displays the value of a single channel as an indicator within a value range bar
10 RawValue, // Display raw channel value
11 MappedValue // Channel goes through a mapping process and can be reversed
14 required property int channelValueMin
15 required property int channelValueMax
16 required property int mode ///< Mode of display using Mode enum values
17 property bool channelMapped: false
18 property int channelValue: _valueBarRange / 2 + _valueBarMin
19 property int deadbandValue: 0
20 property bool deadbandEnabled: false
23 implicitHeight: ScreenTools.defaultFontPixelHeight
25 readonly property real _valueRangeBarOvershootPercent: 0.2 // Pct overshoot on each end of display so indicator doesn't go right to edge
26 readonly property int _halfRange: (channelValueMax - channelValueMin) / 2
27 readonly property int _valueBarMin: channelValueMin - (_halfRange * _valueRangeBarOvershootPercent)
28 readonly property int _valueBarMax: channelValueMax + (_halfRange * _valueRangeBarOvershootPercent)
29 readonly property int _valueBarRange: _valueBarMax - _valueBarMin
31 Component.onCompleted: {
32 if (mode === RemoteControlChannelValueDisplay.RawValue) {
34 console.warn("RemoteControlChannelValueDisplay: channelMapped should not be true in Raw Value mode")
40 QGCPalette { id: qgcPal; colorGroupEnabled: control.enabled }
44 anchors.verticalCenter: parent.verticalCenter
46 height: parent.height / 2
47 color: qgcPal.windowShade
52 anchors.verticalCenter: parent.verticalCenter
56 radius: ScreenTools.defaultFontPixelHeight / 4
57 color: qgcPal.buttonHighlight
59 visible: control.deadbandEnabled && control.deadbandValue > 0
60 readonly property real _rangeSpan: Math.max(1, control.channelValueMax - control.channelValueMin)
61 readonly property real _usableWidth: parent.width / (1 + control._valueRangeBarOvershootPercent)
62 readonly property real _deadbandWidth: Math.min(1, (control.deadbandValue * 2) / _rangeSpan) * _usableWidth
63 readonly property real _deadbandOffset: (parent.width - _usableWidth) / 2 + (_usableWidth - _deadbandWidth) / 2
67 id: centerPointDisplay
68 anchors.horizontalCenter: parent.horizontalCenter
76 anchors.centerIn: parent
77 text: qsTr("Not Mapped")
78 visible: control.mode === RemoteControlChannelValueDisplay.MappedValue && !control.channelMapped
83 anchors.verticalCenter: parent.verticalCenter
84 width: parent.height * 0.75
87 const clampedValue = Math.max(control._valueBarMin, Math.min(control._valueBarMax, control.channelValue))
88 const normalized = (clampedValue - control._valueBarMin) / control._valueBarRange
89 return (normalized * parent.width) - (width / 2)
93 visible: control.mode === RemoteControlChannelValueDisplay.RawValue || control.channelMapped