Skip to content
AppMessages.qml 8.74 KiB
Newer Older
/****************************************************************************
 *
Gus Grubba's avatar
Gus Grubba committed
 * (c) 2009-2020 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.Controls.Styles  1.4
import QtQuick.Layouts          1.12
import QGroundControl               1.0
import QGroundControl.Palette       1.0
import QGroundControl.Controls      1.0
import QGroundControl.FactSystem    1.0
import QGroundControl.FactControls  1.0
import QGroundControl.Controllers   1.0
import QGroundControl.ScreenTools   1.0

    Component {
        id: filtersDialogComponent
        QGCViewDialog {
                contentHeight:  categoryColumn.height
                clip:           true
                ColumnLayout {
                    anchors.fill: parent
                    RowLayout {
                        spacing: ScreenTools.defaultFontPixelHeight / 2
                        Layout.alignment: Qt.AlignVCenter
                        Layout.fillHeight: true
                        Layout.fillWidth: true

                        QGCLabel {
                            text: qsTr("Search:")
                        }
                        QGCTextField {
                            id: searchText
                            text: ""
                            Layout.fillWidth: true
                            enabled: true
                        }
                        QGCButton {
                            text: qsTr("Clear")
                            onClicked: searchText.text = ""
                        }
                    }
                    Row {
                        spacing:    ScreenTools.defaultFontPixelHeight / 2
                        QGCButton {
                            text: qsTr("Clear All")
                            onClicked: categoryRepeater.setAllLogs(false)
                        }
                    }

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

                        Repeater {
                            id:     categoryRepeater
                            model:  QGroundControl.loggingCategories()

                            function setAllLogs(value) {
                                var logCategories = QGroundControl.loggingCategories()
                                for (var category of logCategories) {
                                    QGroundControl.setCategoryLoggingOn(category, value)
                                }
                                QGroundControl.updateLoggingFilterRules()
                                // Update model for repeater
                                categoryRepeater.model = undefined
                                categoryRepeater.model = QGroundControl.loggingCategories()
                            }

                            QGCCheckBox {
                                text:       modelData
                                visible:    searchText.text ? text.match(`(${searchText.text})`, "i") : true
                                checked:    QGroundControl.categoryLoggingOn(modelData)
                                onClicked:  {
                                    QGroundControl.setCategoryLoggingOn(modelData, checked)
                                    QGroundControl.updateLoggingFilterRules()
                                }
        id:             panel
        anchors.fill:   parent
            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();
                        }
                    }
                }
            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
                    QGCLabel {
                        id:         field
                        text:       display
                        width:      parent.width
                        wrapMode:   Text.Wrap
                        anchors.verticalCenter: parent.verticalCenter
                    }
                }
            }

Don Gagne's avatar
Don Gagne committed
            QGCListView {
                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
            }

            QGCFileDialog {
                folder:         QGroundControl.settingsManager.appSettings.logSavePath
                nameFilters:    [qsTr("Log files (*.txt)"), qsTr("All Files (*)")]
Don Gagne's avatar
 
Don Gagne committed
                fileExtension:  qsTr("txt")
                selectExisting: false
                title:          qsTr("Select log save file")
                onAcceptedForSave: {
DonLakeFlyer's avatar
DonLakeFlyer committed
                    debugMessageModel.writeMessages(file);
                    visible = false;
                }
            }

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

            QGCButton {
                id:              writeButton
                anchors.bottom:  parent.bottom
                anchors.left:    parent.left
                onClicked:       writeDialog.openForSave()
Don Gagne's avatar
 
Don Gagne committed
                id:                 gstLabel
                anchors.left:       writeButton.right
                anchors.leftMargin: ScreenTools.defaultFontPixelWidth
                anchors.baseline:   gstCombo.baseline
                text:               qsTr("GStreamer Debug")
                visible:            QGroundControl.settingsManager.appSettings.gstDebugLevel.visible
Don Gagne's avatar
 
Don Gagne committed
                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
            }

            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
Don Gagne's avatar
 
Don Gagne committed
                text:           qsTr("Set Logging")
                onClicked:      mainWindow.showComponentDialog(filtersDialogComponent, qsTr("Turn on logging categories"), mainWindow.showDialogDefaultWidth, StandardButton.Close)