AppMessages.qml 7.35 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
Item {
    id:         _root
Nate Weibley's avatar
Nate Weibley committed
25

26 27
    property bool loaded: false

28 29 30 31 32 33 34 35 36 37 38
    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
39 40 41 42 43 44 45 46 47 48 49 50
                    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()
                        }
                    }
51
                    Repeater {
DonLakeFlyer's avatar
DonLakeFlyer committed
52 53
                        id:     categoryRepeater
                        model:  QGroundControl.loggingCategories()
54 55 56 57 58 59 60 61 62 63

                        QGCCheckBox {
                            text:       modelData
                            checked:    QGroundControl.categoryLoggingOn(modelData)
                            onClicked:  {
                                QGroundControl.setCategoryLoggingOn(modelData, checked)
                                QGroundControl.updateLoggingFilterRules()
                            }
                        }
                    }
64 65
                }
            }
66 67
        }
    }
68

69
    Item {
70 71
        id:             panel
        anchors.fill:   parent
72 73

        Rectangle {
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
            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();
                        }
                    }
                }
90 91
            }

92 93 94 95 96 97 98
            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
99 100 101 102 103
                    QGCLabel {
                        id:         field
                        text:       display
                        width:      parent.width
                        wrapMode:   Text.Wrap
104 105 106 107 108
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
            }

Don Gagne's avatar
Don Gagne committed
109
            QGCListView {
110 111 112 113 114 115 116 117 118 119 120 121 122 123
                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
            }

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

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

            QGCButton {
                id:              writeButton
                anchors.bottom:  parent.bottom
                anchors.left:    parent.left
147
                onClicked:       writeDialog.openForSave()
148 149 150
                text:            qsTr("Save App Log")
            }

151
            QGCLabel {
152 153 154 155 156 157
                id:                 gstLabel
                anchors.left:       writeButton.right
                anchors.leftMargin: ScreenTools.defaultFontPixelWidth
                anchors.baseline:   gstCombo.baseline
                text:               qsTr("GStreamer Debug")
                visible:            QGroundControl.settingsManager.appSettings.gstDebugLevel.visible
158 159 160
            }

            FactComboBox {
161 162 163 164 165 166 167 168
                id:                 gstCombo
                anchors.left:       gstLabel.right
                anchors.leftMargin: ScreenTools.defaultFontPixelWidth / 2
                anchors.bottom:     parent.bottom
                width:              ScreenTools.defaultFontPixelWidth * 10
                model:              ["Disabled", "1", "2", "3", "4", "5", "6", "7", "8"]
                fact:               QGroundControl.settingsManager.appSettings.gstDebugLevel
                visible:            QGroundControl.settingsManager.appSettings.gstDebugLevel.visible
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
            }

            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
191
                text:           qsTr("Set Logging")
192
                onClicked:      mainWindow.showComponentDialog(filtersDialogComponent, qsTr("Turn on logging categories"), mainWindow.showDialogDefaultWidth, StandardButton.Close)
193 194
            }
        }
195 196
    }
}
197