RCChannelMonitor.qml 4.72 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/
Don Gagne's avatar
Don Gagne committed
9 10


11 12
import QtQuick          2.3
import QtQuick.Controls 1.2
Don Gagne's avatar
Don Gagne committed
13
import QtQuick.Dialogs  1.2
Don Gagne's avatar
Don Gagne committed
14
import QtQuick.Layouts  1.11
Don Gagne's avatar
Don Gagne committed
15 16 17 18 19 20 21 22 23 24 25 26

import QGroundControl               1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FactControls  1.0
import QGroundControl.ScreenTools   1.0
import QGroundControl.Controllers   1.0

FactPanel {
    id:     _root
    height: monitorColumn.height

Don Gagne's avatar
Don Gagne committed
27 28
    property bool twoColumn: false

29 30 31 32
    readonly property int _pwmMin:      800
    readonly property int _pwmMax:      2200
    readonly property int _pwmRange:    _pwmMax - _pwmMin

33
    QGCPalette { id: qgcPal; colorGroupEnabled: _root.enabled }
Don Gagne's avatar
Don Gagne committed
34 35 36 37 38 39 40 41 42 43 44

    RCChannelMonitorController {
        id:             controller
        factPanel:      _root
    }

    // Live channel monitor control component
    Component {
        id: channelMonitorDisplayComponent

        Item {
Don Gagne's avatar
Don Gagne committed
45 46
            height: ScreenTools.defaultFontPixelHeight

Don Gagne's avatar
Don Gagne committed
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
            property int    rcValue:    1500

            property int            __lastRcValue:      1500
            readonly property int   __rcValueMaxJitter: 2
            property color          __barColor:         qgcPal.windowShade

            // Bar
            Rectangle {
                id:                     bar
                anchors.verticalCenter: parent.verticalCenter
                width:                  parent.width
                height:                 parent.height / 2
                color:                  __barColor
            }

            // Center point
            Rectangle {
                anchors.horizontalCenter:   parent.horizontalCenter
                width:                      ScreenTools.defaultTextWidth / 2
                height:                     parent.height
                color:                      qgcPal.window
            }

            // Indicator
            Rectangle {
                anchors.verticalCenter: parent.verticalCenter
                width:                  parent.height * 0.75
                height:                 width
75
                x:                      (((reversed ? _pwmMax - rcValue : rcValue - _pwmMin) / _pwmRange) * parent.width) - (width / 2)
Don Gagne's avatar
Don Gagne committed
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
                radius:                 width / 2
                color:                  qgcPal.text
                visible:                mapped
            }

            QGCLabel {
                anchors.fill:           parent
                horizontalAlignment:    Text.AlignHCenter
                verticalAlignment:      Text.AlignVCenter
                text:                   "Not Mapped"
                visible:                !mapped
            }

            ColorAnimation {
                id:         barAnimation
                target:     bar
                property:   "color"
                from:       "yellow"
                to:         __barColor
                duration:   1500
            }
        }
    } // Component - channelMonitorDisplayComponent

Don Gagne's avatar
Don Gagne committed
100
    GridLayout {
Don Gagne's avatar
Don Gagne committed
101 102
        id:         monitorColumn
        width:      parent.width
Don Gagne's avatar
Don Gagne committed
103
        columns:    twoColumn ? 2 : 1
Don Gagne's avatar
Don Gagne committed
104

Don Gagne's avatar
Don Gagne committed
105 106 107 108
        QGCLabel {
            Layout.columnSpan:  parent.columns
            text:               "Channel Monitor"
        }
Don Gagne's avatar
Don Gagne committed
109 110 111 112 113 114 115 116 117 118 119 120

        Connections {
            target: controller

            onChannelRCValueChanged: {
                if (channelMonitorRepeater.itemAt(channel)) {
                    channelMonitorRepeater.itemAt(channel).loader.item.rcValue = rcValue
                }
            }
        }

        Repeater {
Don Gagne's avatar
Don Gagne committed
121 122
            id:     channelMonitorRepeater
            model:  controller.channelCount
Don Gagne's avatar
Don Gagne committed
123

Don Gagne's avatar
Don Gagne committed
124
            RowLayout {
Don Gagne's avatar
Don Gagne committed
125 126 127 128 129 130 131 132 133
                // Need this to get to loader from Connections above
                property Item loader: theLoader

                QGCLabel {
                    id:     channelLabel
                    text:   modelData + 1
                }

                Loader {
Don Gagne's avatar
Don Gagne committed
134 135 136 137
                    id:                 theLoader
                    Layout.fillWidth:   true
                    //height:                 ScreenTools.defaultFontPixelHeight
                    //width:                  parent.width - anchors.leftMargin - ScreenTools.defaultFontPixelWidth
Don Gagne's avatar
Don Gagne committed
138 139 140 141 142 143 144 145 146
                    sourceComponent:        channelMonitorDisplayComponent

                    property bool mapped:               true
                    readonly property bool reversed:    false
                }
            }
        }
    }
}