AppMessages.qml 7.63 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
    Component {
        id: filtersDialogComponent

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

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

DonLakeFlyer's avatar
DonLakeFlyer committed
46 47 48 49 50 51 52 53 54 55 56 57 58
                    QGCButton {
                        text: qsTr("Clear All")
                        onClicked: {
                            var logCats = QGroundControl.loggingCategories()
                            for (var i=0; i<logCats.length; i++) {
                                QGroundControl.setCategoryLoggingOn(logCats[i], false)
                            }
                            QGroundControl.updateLoggingFilterRules()
                            categoryRepeater.model = undefined
                            categoryRepeater.model = QGroundControl.loggingCategories()
                        }
                    }

59
                    Repeater {
DonLakeFlyer's avatar
DonLakeFlyer committed
60 61
                        id:     categoryRepeater
                        model:  QGroundControl.loggingCategories()
62 63 64 65 66 67 68 69 70 71

                        QGCCheckBox {
                            text:       modelData
                            checked:    QGroundControl.categoryLoggingOn(modelData)
                            onClicked:  {
                                QGroundControl.setCategoryLoggingOn(modelData, checked)
                                QGroundControl.updateLoggingFilterRules()
                            }
                        }
                    }
72 73
                }
            }
74 75 76 77 78 79
        } // QGCViewDialog
    } // Component - filtersDialogComponent

    QGCViewPanel {
        id:             panel
        anchors.fill:   parent
80 81

        Rectangle {
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
            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();
                        }
                    }
                }
98 99
            }

100 101 102 103 104 105 106
            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
107 108 109 110 111
                    QGCLabel {
                        id:         field
                        text:       display
                        width:      parent.width
                        wrapMode:   Text.Wrap
112 113 114 115 116
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
            }

Don Gagne's avatar
Don Gagne committed
117
            QGCListView {
118 119 120 121 122 123 124 125 126 127 128 129 130 131
                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
            }

132
            QGCFileDialog {
133
                id:             writeDialog
134
                folder:         QGroundControl.settingsManager.appSettings.logSavePath
135 136 137
                nameFilters:    [qsTr("Log files (*.txt)"), qsTr("All Files (*)")]
                selectExisting: false
                title:          qsTr("Select log save file")
DonLakeFlyer's avatar
DonLakeFlyer committed
138
                qgcView:        _qgcView
139
                onAcceptedForSave: {
DonLakeFlyer's avatar
DonLakeFlyer committed
140
                    debugMessageModel.writeMessages(file);
141 142 143 144 145 146 147 148 149 150 151 152 153 154
                    visible = false;
                }
            }

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

            QGCButton {
                id:              writeButton
                anchors.bottom:  parent.bottom
                anchors.left:    parent.left
155
                onClicked:       writeDialog.openForSave()
156 157 158
                text:            qsTr("Save App Log")
            }

159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
            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
            }

177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
            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)
207 208
            }
        }
209 210 211
    } // QGCViewPanel
} // QGCView