QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
LogDownloadPage.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4import Qt.labs.qmlmodels
5
6import QGroundControl
7import QGroundControl.Controls
8
9AnalyzePage {
10 id: logDownloadPage
11 pageComponent: pageComponent
12 pageDescription: qsTr("Log Download allows you to download binary log files from your vehicle. Click Refresh to get list of available logs.")
13
14 Component {
15 id: pageComponent
16
17 RowLayout {
18 width: availableWidth
19 height: availableHeight
20
21 Component.onCompleted: LogDownloadController.refresh()
22
23 QGCFlickable {
24 Layout.fillWidth: true
25 Layout.fillHeight: true
26 contentWidth: gridLayout.width
27 contentHeight: gridLayout.height
28
29 GridLayout {
30 id: gridLayout
31 rows: LogDownloadController.model.count + 1
32 columns: 5
33 flow: GridLayout.TopToBottom
34 columnSpacing: ScreenTools.defaultFontPixelWidth
35 rowSpacing: 0
36
37 QGCCheckBox {
38 id: headerCheckBox
39 enabled: false
40 }
41
42 Repeater {
43 model: LogDownloadController.model
44
45 QGCCheckBox {
46 Binding on checkState {
47 value: object.selected ? Qt.Checked : Qt.Unchecked
48 }
49
50 onClicked: object.selected = checked
51 }
52 }
53
54 QGCLabel { text: qsTr("Id") }
55
56 Repeater {
57 model: LogDownloadController.model
58
59 QGCLabel { text: object.id }
60 }
61
62 QGCLabel { text: qsTr("Date") }
63
64 Repeater {
65 model: LogDownloadController.model
66
67 QGCLabel {
68 text: {
69 if (!object.received) {
70 return ""
71 }
72
73 if (object.time.getUTCFullYear() < 2010) {
74 return qsTr("Date Unknown")
75 }
76
77 return object.time.toLocaleString(undefined)
78 }
79 }
80 }
81
82 QGCLabel { text: qsTr("Size") }
83
84 Repeater {
85 model: LogDownloadController.model
86
87 QGCLabel { text: object.sizeStr }
88 }
89
90 QGCLabel { text: qsTr("Status") }
91
92 Repeater {
93 model: LogDownloadController.model
94
95 QGCLabel { text: object.status }
96 }
97 }
98 }
99
100 ColumnLayout {
101 spacing: ScreenTools.defaultFontPixelWidth
102 Layout.alignment: Qt.AlignTop
103 Layout.fillWidth: false
104
105 QGCButton {
106 Layout.fillWidth: true
107 enabled: !LogDownloadController.requestingList && !LogDownloadController.downloadingLogs
108 text: qsTr("Refresh")
109
110 onClicked: {
111 if (!QGroundControl.multiVehicleManager.activeVehicle || QGroundControl.multiVehicleManager.activeVehicle.isOfflineEditingVehicle) {
112 QGroundControl.showMessageDialog(logDownloadPage, qsTr("Log Refresh"), qsTr("You must be connected to a vehicle in order to download logs."))
113 return
114 }
115
116 LogDownloadController.refresh()
117 }
118 }
119
120 QGCButton {
121 Layout.fillWidth: true
122 enabled: !LogDownloadController.requestingList && !LogDownloadController.downloadingLogs
123 text: qsTr("Download")
124
125 onClicked: {
126 var logsSelected = false
127 for (var i = 0; i < LogDownloadController.model.count; i++) {
128 if (LogDownloadController.model.get(i).selected) {
129 logsSelected = true
130 break
131 }
132 }
133
134 if (!logsSelected) {
135 QGroundControl.showMessageDialog(logDownloadPage, qsTr("Log Download"), qsTr("You must select at least one log file to download."))
136 return
137 }
138
139 if (ScreenTools.isMobile) {
140 LogDownloadController.download()
141 return
142 }
143
144 fileDialog.title = qsTr("Select save directory")
145 fileDialog.folder = QGroundControl.settingsManager.appSettings.logSavePath
146 fileDialog.selectFolder = true
147 fileDialog.openForLoad()
148 }
149
150 QGCFileDialog {
151 id: fileDialog
152 onAcceptedForLoad: (file) => {
153 LogDownloadController.download(file)
154 close()
155 }
156 }
157 }
158
159 QGCButton {
160 Layout.fillWidth: true
161 enabled: !LogDownloadController.requestingList && !LogDownloadController.downloadingLogs && (LogDownloadController.model.count > 0)
162 text: qsTr("Erase All")
163 onClicked: QGroundControl.showMessageDialog(
164 logDownloadPage,
165 qsTr("Delete All Log Files"),
166 qsTr("All log files will be erased permanently. Is this really what you want?"),
167 Dialog.Yes | Dialog.No,
168 function() { LogDownloadController.eraseAll() }
169 )
170 }
171
172 QGCButton {
173 Layout.fillWidth: true
174 text: qsTr("Cancel")
175 enabled: LogDownloadController.requestingList || LogDownloadController.downloadingLogs
176 onClicked: LogDownloadController.cancel()
177 }
178 }
179 }
180 }
181}