QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
PX4LogFileManager.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Dialogs
4import QtQuick.Layouts
5
6import QGroundControl
7import QGroundControl.Controls
8
9SettingsGroupLayout {
10 Layout.fillWidth: true
11 heading: qsTr("Saved Log Files")
12 visible: QGroundControl.corePlugin.options.showPX4LogTransferOptions
13
14 property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
15 property var _mavlinkLogManager: _activeVehicle ? _activeVehicle.mavlinkLogManager : null
16 property bool _disableDataPersistence: QGroundControl.settingsManager.appSettings.disableAllPersistence.rawValue
17 property int _selectedCount: 0
18 property bool _uploadedSelected: false
19
20 Connections {
21 target: _mavlinkLogManager
22 function onSelectedCountChanged() {
23 _uploadedSelected = false
24 var selected = 0
25 for (var i = 0; i < _mavlinkLogManager.logFiles.count; i++) {
26 var logFile = _mavlinkLogManager.logFiles.get(i)
27 if (logFile.selected) {
28 selected++
29 if (logFile.uploaded) {
30 _uploadedSelected = true
31 }
32 }
33 }
34 _selectedCount = selected
35 }
36 }
37
38 QGCPalette { id: qgcPal }
39
40 Rectangle {
41 Layout.fillWidth: true
42 Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 14
43 color: qgcPal.window
44 border.color: qgcPal.text
45 border.width: 0.5
46
47 QGCListView {
48 anchors.fill: parent
49 anchors.margins: ScreenTools.defaultFontPixelWidth
50 orientation: ListView.Vertical
51 model: _mavlinkLogManager ? _mavlinkLogManager.logFiles : undefined
52 clip: true
53
54 delegate: Rectangle {
55 width: parent ? parent.width : 0
56 height: selectCheck.height
57 color: qgcPal.window
58
59 RowLayout {
60 anchors.fill: parent
61 spacing: ScreenTools.defaultFontPixelWidth
62
63 QGCCheckBox {
64 id: selectCheck
65 checked: object.selected
66 enabled: !object.writing && !object.uploading
67 onClicked: object.selected = checked
68 }
69
70 QGCLabel {
71 text: object.name
72 Layout.fillWidth: true
73 color: object.writing ? qgcPal.warningText : qgcPal.text
74 }
75
76 QGCLabel {
77 text: Number(object.size).toLocaleString(Qt.locale(), 'f', 0)
78 visible: !object.uploading && !object.uploaded
79 color: object.writing ? qgcPal.warningText : qgcPal.text
80 horizontalAlignment: Text.AlignRight
81 Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * 12
82 }
83
84 QGCLabel {
85 text: qsTr("Uploaded")
86 visible: object.uploaded
87 horizontalAlignment: Text.AlignRight
88 Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * 12
89 }
90
91 ProgressBar {
92 visible: object.uploading && !object.uploaded
93 Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * 12
94 height: ScreenTools.defaultFontPixelHeight
95 from: 0
96 to: 100
97 value: object.progress * 100.0
98 }
99 }
100 }
101 }
102 }
103
104 RowLayout {
105 Layout.fillWidth: true
106 spacing: ScreenTools.defaultFontPixelWidth
107
108 QGCButton {
109 text: qsTr("Check All")
110 enabled: _mavlinkLogManager && !_mavlinkLogManager.uploading && !_mavlinkLogManager.logRunning
111 onClicked: {
112 for (var i = 0; i < _mavlinkLogManager.logFiles.count; i++) {
113 _mavlinkLogManager.logFiles.get(i).selected = true
114 }
115 }
116 }
117
118 QGCButton {
119 text: qsTr("Check None")
120 enabled: _mavlinkLogManager && !_mavlinkLogManager.uploading && !_mavlinkLogManager.logRunning
121 onClicked: {
122 for (var i = 0; i < _mavlinkLogManager.logFiles.count; i++) {
123 _mavlinkLogManager.logFiles.get(i).selected = false
124 }
125 }
126 }
127
128 QGCButton {
129 text: qsTr("Delete Selected")
130 enabled: _selectedCount > 0 && _mavlinkLogManager && !_mavlinkLogManager.uploading && !_mavlinkLogManager.logRunning
131 onClicked: deleteDialog.open()
132
133 MessageDialog {
134 id: deleteDialog
135 visible: false
136 buttons: MessageDialog.Yes | MessageDialog.No
137 title: qsTr("Delete Selected Log Files")
138 text: qsTr("Confirm deleting selected log files?")
139 onButtonClicked: function (button, role) {
140 if (button === MessageDialog.Yes)
141 _mavlinkLogManager.deleteLog()
142 }
143 }
144 }
145
146 QGCButton {
147 text: qsTr("Upload Selected")
148 enabled: _selectedCount > 0 && _mavlinkLogManager && !_mavlinkLogManager.uploading && !_mavlinkLogManager.logRunning && !_uploadedSelected
149 visible: !_mavlinkLogManager || !_mavlinkLogManager.uploading
150 onClicked: {
151 if (_mavlinkLogManager.emailAddress === "")
152 emptyEmailDialog.open()
153 else
154 uploadDialog.open()
155 }
156
157 MessageDialog {
158 id: emptyEmailDialog
159 visible: false
160 buttons: MessageDialog.Close
161 title: qsTr("MAVLink Logging")
162 text: qsTr("Please enter an email address before uploading MAVLink log files.")
163 }
164
165 MessageDialog {
166 id: uploadDialog
167 visible: false
168 buttons: MessageDialog.Yes | MessageDialog.No
169 title: qsTr("Upload Selected Log Files")
170 text: qsTr("Confirm uploading selected log files?")
171 onButtonClicked: function (button, role) {
172 if (button === MessageDialog.Yes)
173 _mavlinkLogManager.uploadLog()
174 }
175 }
176 }
177
178 QGCButton {
179 text: qsTr("Cancel")
180 enabled: _mavlinkLogManager && _mavlinkLogManager.uploading && !_mavlinkLogManager.logRunning
181 visible: _mavlinkLogManager && _mavlinkLogManager.uploading
182 onClicked: cancelDialog.open()
183
184 MessageDialog {
185 id: cancelDialog
186 visible: false
187 buttons: MessageDialog.Yes | MessageDialog.No
188 title: qsTr("Cancel Upload")
189 text: qsTr("Confirm canceling the upload process?")
190 onButtonClicked: function (button, role) {
191 if (button === MessageDialog.Yes)
192 _mavlinkLogManager.cancelUpload()
193 }
194 }
195 }
196 }
197}