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

10 11
import QtQuick          2.3
import QtQuick.Controls 1.2
Don Gagne's avatar
Don Gagne committed
12 13 14 15 16 17 18 19 20 21 22
import QtQuick.Dialogs  1.2

import QGroundControl               1.0
import QGroundControl.Controls      1.0
import QGroundControl.FactSystem    1.0
import QGroundControl.ScreenTools   1.0

SetupPage {
    id:             motorPage
    pageComponent:  pageComponent

23 24 25 26
    readonly property int _barHeight:           10
    readonly property int _barWidth:            5
    readonly property int _sliderHeight:        10
    readonly property int _motorTimeoutSecs:    3
Don Gagne's avatar
Don Gagne committed
27 28 29 30 31 32 33 34 35

    FactPanelController {
        id:             controller
    }

    Component {
        id: pageComponent

        Column {
36 37 38 39 40 41 42
            spacing: ScreenTools.defaultFontPixelHeight

            QGCLabel {
                text:       qsTr("Warning: Unable to determine motor count")
                color:      qgcPal.warningText
                visible:    controller.vehicle.motorCount == -1
            }
Don Gagne's avatar
Don Gagne committed
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

            Row {
                id:         motorSliders
                enabled:    safetySwitch.checked
                spacing:    ScreenTools.defaultFontPixelWidth * 4

                Repeater {
                    id:         sliderRepeater
                    model:      controller.vehicle.motorCount == -1 ? 8 : controller.vehicle.motorCount

                    Column {
                        property alias motorSlider: slider

                        QGCLabel {
                            anchors.horizontalCenter:   parent.horizontalCenter
                            text:                       index + 1
                        }

                        QGCSlider {
                            id:                         slider
                            height:                     ScreenTools.defaultFontPixelHeight * _sliderHeight
                            orientation:                Qt.Vertical
65
                            minimumValue:               0
Don Gagne's avatar
Don Gagne committed
66
                            maximumValue:               100
67
                            stepSize:                   1
Don Gagne's avatar
Don Gagne committed
68
                            value:                      0
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
                            updateValueWhileDragging:   false

                            onValueChanged: {
                                controller.vehicle.motorTest(index + 1, value, value == 0 ? 0 : _motorTimeoutSecs)
                                if (value != 0) {
                                    motorTimer.restart()
                                }
                            }

                            Timer {
                                id:             motorTimer
                                interval:       _motorTimeoutSecs * 1000
                                repeat:         false
                                running:        false

                                onTriggered: {
                                    allSlider.value = 0
                                    slider.value = 0
                                }
                            }
Don Gagne's avatar
Don Gagne committed
89 90 91 92 93 94 95 96 97 98 99 100 101 102
                        }
                    } // Column
                } // Repeater

                Column {
                    QGCLabel {
                        anchors.horizontalCenter:   parent.horizontalCenter
                        text:                       qsTr("All")
                    }

                    QGCSlider {
                        id:                         allSlider
                        height:                     ScreenTools.defaultFontPixelHeight * _sliderHeight
                        orientation:                Qt.Vertical
103
                        minimumValue:               0
Don Gagne's avatar
Don Gagne committed
104
                        maximumValue:               100
105
                        stepSize:                   1
Don Gagne's avatar
Don Gagne committed
106
                        value:                      0
107
                        updateValueWhileDragging:   false
Don Gagne's avatar
Don Gagne committed
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141

                        onValueChanged: {
                            for (var sliderIndex=0; sliderIndex<sliderRepeater.count; sliderIndex++) {
                                sliderRepeater.itemAt(sliderIndex).motorSlider.value = allSlider.value
                            }
                        }
                    }
                } // Column
            } // Row

            QGCLabel {
                anchors.left:   parent.left
                anchors.right:  parent.right
                wrapMode:       Text.WordWrap
                text:           qsTr("Moving the sliders will causes the motors to spin. Make sure you remove all props.")
            }

            Row {
                spacing: ScreenTools.defaultFontPixelWidth

                Switch {
                    id: safetySwitch
                    onClicked: {
                        if (!checked) {
                            for (var sliderIndex=0; sliderIndex<sliderRepeater.count; sliderIndex++) {
                                sliderRepeater.itemAt(sliderIndex).motorSlider.value = 0
                            }
                            allSlider.value = 0
                        }
                    }
                }

                QGCLabel {
                    color:  qgcPal.warningText
142
                    text:   safetySwitch.checked ? qsTr("Careful: Motor sliders are enabled") : qsTr("Propellers are removed - Enable motor sliders")
Don Gagne's avatar
Don Gagne committed
143 144 145 146 147
                }
            } // Row
        } // Column
    } // Component
} // SetupPahe