AppMessages.qml 6.96 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.
 *
 ****************************************************************************/
9

10 11
import QtQuick                  2.3
import QtQuick.Controls         1.2
12
import QtQuick.Controls.Styles  1.4
13 14
import QtQuick.Dialogs          1.2

15
import QGroundControl               1.0
16 17
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
18 19
import QGroundControl.FactSystem    1.0
import QGroundControl.FactControls  1.0
20 21 22
import QGroundControl.Controllers   1.0
import QGroundControl.ScreenTools   1.0

23 24 25
QGCView {
    id:         qgcView
    viewPanel:  panel
Nate Weibley's avatar
Nate Weibley committed
26

27 28
    property bool loaded: false

DonLakeFlyer's avatar
DonLakeFlyer committed
29 30
    property var _qgcView: qgcView

31
    QGCPalette { id: qgcPal; colorGroupEnabled: panel.enabled }
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
    Component {
        id: filtersDialogComponent

        QGCViewDialog {
            QGCFlickable {
                anchors.fill:   parent
                contentHeight:  categoryColumn.height
                clip:           true

                Column {
                    id:         categoryColumn
                    spacing:    ScreenTools.defaultFontPixelHeight / 2

                    Repeater {
                        model:      QGroundControl.loggingCategories()

                        QGCCheckBox {
                            text:       modelData
                            checked:    QGroundControl.categoryLoggingOn(modelData)
                            onClicked:  {
                                QGroundControl.setCategoryLoggingOn(modelData, checked)
                                QGroundControl.updateLoggingFilterRules()
                            }
                        }
                    }
58 59
                }
            }
60 61 62 63 64 65
        } // QGCViewDialog
    } // Component - filtersDialogComponent

    QGCViewPanel {
        id:             panel
        anchors.fill:   parent
66 67

        Rectangle {
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
            id:              logwindow
            anchors.fill:    parent
            anchors.margins: ScreenTools.defaultFontPixelWidth
            color:           qgcPal.window

            Connections {
                target: debugMessageModel

                onDataChanged: {
                    // Keep the view in sync if the button is checked
                    if (loaded) {
                        if (followTail.checked) {
                            listview.positionViewAtEnd();
                        }
                    }
                }
84 85
            }

86 87 88 89 90 91 92
            Component {
                id: delegateItem
                Rectangle {
                    color:  index % 2 == 0 ? qgcPal.window : qgcPal.windowShade
                    height: Math.round(ScreenTools.defaultFontPixelHeight * 0.5 + field.height)
                    width:  listview.width

Don Gagne's avatar
Don Gagne committed
93 94 95 96 97
                    QGCLabel {
                        id:         field
                        text:       display
                        width:      parent.width
                        wrapMode:   Text.Wrap
98 99 100 101 102
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
            }

Don Gagne's avatar
Don Gagne committed
103
            QGCListView {
104 105 106 107 108 109 110 111 112 113 114 115 116 117
                Component.onCompleted: {
                    loaded = true
                }
                anchors.top:     parent.top
                anchors.left:    parent.left
                anchors.right:   parent.right
                anchors.bottom:  followTail.top
                anchors.bottomMargin: ScreenTools.defaultFontPixelWidth
                clip:            true
                id:              listview
                model:           debugMessageModel
                delegate:        delegateItem
            }

118
            QGCFileDialog {
119
                id:             writeDialog
120
                folder:         QGroundControl.settingsManager.appSettings.logSavePath
121 122 123
                nameFilters:    [qsTr("Log files (*.txt)"), qsTr("All Files (*)")]
                selectExisting: false
                title:          qsTr("Select log save file")
DonLakeFlyer's avatar
DonLakeFlyer committed
124
                qgcView:        _qgcView
125
                onAcceptedForSave: {
DonLakeFlyer's avatar
DonLakeFlyer committed
126
                    debugMessageModel.writeMessages(file);
127 128 129 130 131 132 133 134 135 136 137 138 139 140
                    visible = false;
                }
            }

            Connections {
                target:          debugMessageModel
                onWriteStarted:  writeButton.enabled = false;
                onWriteFinished: writeButton.enabled = true;
            }

            QGCButton {
                id:              writeButton
                anchors.bottom:  parent.bottom
                anchors.left:    parent.left
141
                onClicked:       writeDialog.openForSave()
142 143 144
                text:            qsTr("Save App Log")
            }

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
            QGCLabel {
                id:                  gstLabel
                anchors.baseline:    gstCombo.baseline
                anchors.right:       gstCombo.left
                anchors.rightMargin: ScreenTools.defaultFontPixelWidth
                text:                "gstreamer debug level:"
            }

            FactComboBox {
                id:                  gstCombo
                anchors.right:       followTail.left
                anchors.rightMargin: ScreenTools.defaultFontPixelWidth*20
                anchors.bottom:      parent.bottom
                width:               ScreenTools.defaultFontPixelWidth*20
                model:               ["disabled", "1", "2", "3", "4", "5", "6", "7", "8"]
                fact:                QGroundControl.settingsManager.appSettings.gstDebug
            }

163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
            BusyIndicator {
                id:              writeBusy
                anchors.bottom:  writeButton.bottom
                anchors.left:    writeButton.right
                height:          writeButton.height
                visible:        !writeButton.enabled
            }

            QGCButton {
                id:                     followTail
                anchors.right:          filterButton.left
                anchors.rightMargin:    ScreenTools.defaultFontPixelWidth
                anchors.bottom:         parent.bottom
                text:                   qsTr("Show Latest")
                checkable:              true
                checked:                true

                onCheckedChanged: {
                    if (checked && loaded) {
                        listview.positionViewAtEnd();
                    }
                }
            }

            QGCButton {
                id:             filterButton
                anchors.bottom: parent.bottom
                anchors.right:  parent.right
                text:           qsTr("Set logging")
                onClicked:      showDialog(filtersDialogComponent, qsTr("Turn on logging categories"), qgcView.showDialogDefaultWidth, StandardButton.Close)
193 194
            }
        }
195 196 197
    } // QGCViewPanel
} // QGCView