4import Qt.labs.qmlmodels
7import QGroundControl.Controls
11 pageComponent: pageComponent
12 pageDescription: qsTr("Onboard Logs allows you to download binary log files from your vehicle. Click Refresh to get list of available logs.")
19 height: availableHeight
21 Component.onCompleted: OnboardLogController.refresh()
24 Layout.fillWidth: true
25 Layout.fillHeight: true
26 contentWidth: gridLayout.width
27 contentHeight: gridLayout.height
31 rows: OnboardLogController.model.count + 1
33 flow: GridLayout.TopToBottom
34 columnSpacing: ScreenTools.defaultFontPixelWidth
37 Item { } // First column is for checkboxes, so add empty item to align headers with log entries
40 model: OnboardLogController.model
43 Binding on checkState {
44 value: object.selected ? Qt.Checked : Qt.Unchecked
47 onClicked: object.selected = checked
51 QGCLabel { text: qsTr("Id") }
54 model: OnboardLogController.model
56 QGCLabel { text: object.id }
59 QGCLabel { text: qsTr("Date") }
62 model: OnboardLogController.model
66 if (!object.received) {
70 if (object.time.getUTCFullYear() < 2010) {
71 return qsTr("Date Unknown")
74 return object.time.toLocaleString(undefined)
79 QGCLabel { text: qsTr("Size") }
82 model: OnboardLogController.model
84 QGCLabel { text: object.sizeStr }
87 QGCLabel { text: qsTr("Status") }
90 model: OnboardLogController.model
92 QGCLabel { text: object.status }
98 spacing: ScreenTools.defaultFontPixelWidth
99 Layout.alignment: Qt.AlignTop
100 Layout.fillWidth: false
103 Layout.fillWidth: true
104 enabled: !OnboardLogController.requestingList && !OnboardLogController.downloadingLogs
105 text: qsTr("Refresh")
108 if (!QGroundControl.multiVehicleManager.activeVehicle || QGroundControl.multiVehicleManager.activeVehicle.isOfflineEditingVehicle) {
109 QGroundControl.showMessageDialog(onboardLogPage, qsTr("Onboard Log Refresh"), qsTr("You must be connected to a vehicle in order to download onboard logs."))
113 OnboardLogController.refresh()
118 Layout.fillWidth: true
119 enabled: !OnboardLogController.requestingList && !OnboardLogController.downloadingLogs && (OnboardLogController.model.count > 0)
120 text: OnboardLogController.allLogsSelected ? qsTr("Deselect All") : qsTr("Select All")
121 onClicked: OnboardLogController.selectAll(!OnboardLogController.allLogsSelected)
125 Layout.fillWidth: true
126 enabled: !OnboardLogController.requestingList && !OnboardLogController.downloadingLogs
127 text: qsTr("Download")
130 var logsSelected = false
131 for (var i = 0; i < OnboardLogController.model.count; i++) {
132 if (OnboardLogController.model.get(i).selected) {
139 QGroundControl.showMessageDialog(onboardLogPage, qsTr("Onboard Log"), qsTr("You must select at least one onboard log file to download."))
143 if (ScreenTools.isMobile) {
144 OnboardLogController.download()
148 fileDialog.title = qsTr("Select save directory")
149 fileDialog.folder = QGroundControl.settingsManager.appSettings.logSavePath
150 fileDialog.selectFolder = true
151 fileDialog.openForLoad()
156 onAcceptedForLoad: (file) => {
157 OnboardLogController.download(file)
164 Layout.fillWidth: true
165 enabled: !OnboardLogController.requestingList && !OnboardLogController.downloadingLogs && (OnboardLogController.model.count > 1)
166 text: OnboardLogController.sortAscending ? qsTr("Sort Descending") : qsTr("Sort Ascending")
167 onClicked: OnboardLogController.toggleSortByDate()
171 Layout.fillWidth: true
172 enabled: !OnboardLogController.requestingList && !OnboardLogController.downloadingLogs && (OnboardLogController.model.count > 0)
173 text: qsTr("Erase All")
174 onClicked: QGroundControl.showMessageDialog(
176 qsTr("Delete All Onboard Log Files"),
177 qsTr("All onboard log files will be erased permanently. Is this really what you want?"),
178 Dialog.Yes | Dialog.No,
179 function() { OnboardLogController.eraseAll() }
184 Layout.fillWidth: true
186 enabled: OnboardLogController.requestingList || OnboardLogController.downloadingLogs
187 onClicked: OnboardLogController.cancel()