MavlinkConsolePage.qml 4.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/****************************************************************************
 *
 *   (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.
 *
 ****************************************************************************/

import QtQuick          2.3
import QtQuick.Controls 1.2
import QtQuick.Dialogs  1.2
import QtQuick.Layouts      1.2

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

AnalyzePage {
24 25 26 27 28
    id:              mavlinkConsolePage
    pageComponent:   pageComponent
    pageName:        qsTr("Mavlink Console")
    pageDescription: qsTr("Mavlink Console provides a connection to the vehicle's system shell.")

29
    property bool isLoaded: false
30 31 32 33 34 35 36 37 38

    Component {
        id: pageComponent

        ColumnLayout {
            id:     consoleColumn
            height: availableHeight
            width:  availableWidth

39 40 41 42 43
            Connections {
                target: conController

                onDataChanged: {
                    // Keep the view in sync if the button is checked
44
                    if (isLoaded) {
45 46 47 48 49 50 51 52 53 54 55
                        if (followTail.checked) {
                            listview.positionViewAtEnd();
                        }
                    }
                }
            }

            Component {
                id: delegateItem
                Rectangle {
                    color:  qgcPal.windowShade
56
                    height: Math.round(ScreenTools.defaultFontPixelHeight * 0.1 + field.height)
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
                    width:  listview.width

                    QGCLabel {
                        id:          field
                        text:        display
                        width:       parent.width
                        wrapMode:    Text.NoWrap
                        font.family: ScreenTools.fixedFontFamily
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
            }

            QGCListView {
                Component.onCompleted: {
72
                    isLoaded = true
73
                }
74
                Layout.fillHeight: true
75
                Layout.fillWidth:  true
76 77 78 79
                clip:              true
                id:                listview
                model:             conController
                delegate:          delegateItem
80

81 82 83 84
                // Unsync the view if the user interacts
                onMovementStarted: {
                    followTail.checked = false
                }
85 86
            }

87
            RowLayout {
88
                Layout.fillWidth:   true
89 90 91 92 93 94 95 96
                QGCTextField {
                    id:               command
                    Layout.fillWidth: true
                    placeholderText:  "Enter Commands here..."
                    onAccepted: {
                        conController.sendCommand(text)
                        text = ""
                    }
97 98 99 100 101 102 103 104 105
                    Keys.onPressed: {
                        if (event.key == Qt.Key_Up) {
                            text = conController.historyUp(text);
                            event.accepted = true;
                        } else if (event.key == Qt.Key_Down) {
                            text = conController.historyDown(text);
                            event.accepted = true;
                        }
                    }
106 107 108 109 110 111 112
                }

                QGCButton {
                    id:        followTail
                    text:      qsTr("Show Latest")
                    checkable: true
                    checked:   true
113

114
                    onCheckedChanged: {
115
                        if (checked && isLoaded) {
116 117 118
                            listview.positionViewAtEnd();
                        }
                    }
119 120 121 122 123
                }
            }
        }
    } // Component
} // AnalyzePage