import QtQuick 2.3 import QtQuick.Controls 2.4 import QtQuick.Layouts 1.11 import QtQuick.Dialogs 1.2 import QGroundControl 1.0 import QGroundControl.Palette 1.0 import QGroundControl.ScreenTools 1.0 Rectangle { height: visible ? (rowLayout.height + (_margins * 2)) : 0 color: qgcPal.window property real _margins: ScreenTools.defaultFontPixelHeight / 4 property var _logReplayLink: null function pickLogFile() { if (mainWindow.activeVehicle) { mainWindow.showMessageDialog(qsTr("Log Replay"), qsTr("You must close all connections prior to replaying a log.")) return } filePicker.openForLoad() } QGCPalette { id: qgcPal } QGCFileDialog { id: filePicker title: qsTr("Select Telemetery Log") nameFilters: [qsTr("Telemetry Logs (*.%1)").arg(_logFileExtension), qsTr("All Files (*)")] fileExtension: _logFileExtension selectExisting: true folder: QGroundControl.settingsManager.appSettings.telemetrySavePath onAcceptedForLoad: { controller.link = QGroundControl.linkManager.startLogReplay(file) close() } property string _logFileExtension: QGroundControl.settingsManager.appSettings.telemetryFileExtension } LogReplayLinkController { id: controller onPercentCompleteChanged: slider.updatePercentComplete(percentComplete) } RowLayout { id: rowLayout anchors.margins: _margins anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right QGCButton { text: controller.isPlaying ? qsTr("Pause") : qsTr("Play") enabled: controller.link onClicked: controller.isPlaying = !controller.isPlaying } QGCComboBox { textRole: "text" currentIndex: 3 model: ListModel { ListElement { text: "0.1"; value: 0.1 } ListElement { text: "0.25"; value: 0.25 } ListElement { text: "0.5"; value: 0.5 } ListElement { text: "1x"; value: 1 } ListElement { text: "2x"; value: 2 } ListElement { text: "5x"; value: 5 } } onActivated: controller.playbackSpeed = model.get(currentIndex).value } QGCLabel { text: controller.playheadTime } Slider { id: slider Layout.fillWidth: true from: 0 to: 100 enabled: controller.link property bool manualUpdate: false function updatePercentComplete(percentComplete) { manualUpdate = true value = percentComplete manualUpdate = false } onValueChanged: { if (!manualUpdate) { controller.percentComplete = value } } } QGCLabel { text: controller.totalTime } QGCButton { text: qsTr("Load Telemetry Log") onClicked: pickLogFile() visible: !controller.link } QGCButton { text: qsTr("Close") onClicked: { var activeVehicle = QGroundControl.multiVehicleManager.activeVehicle if (activeVehicle) { activeVehicle.disconnectInactiveVehicle() } QGroundControl.settingsManager.flyViewSettings.showLogReplayStatusBar.rawValue = false } } } }