7import QGroundControl.Controls
8import QGroundControl.FactControls
12 property var _linkManager: QGroundControl.linkManager
13 property var _autoConnectSettings: QGroundControl.settingsManager.autoConnectSettings
16 heading: qsTr("AutoConnect")
17 visible: _autoConnectSettings.visible
20 id: autoConnectRepeater
23 _autoConnectSettings.autoConnectPixhawk,
24 _autoConnectSettings.autoConnectSiKRadio,
25 _autoConnectSettings.autoConnectLibrePilot,
26 _autoConnectSettings.autoConnectUDP,
27 _autoConnectSettings.autoConnectZeroConf,
28 _autoConnectSettings.autoConnectRTKGPS,
31 property var names: [ qsTr("Pixhawk"), qsTr("SiK Radio"), qsTr("LibrePilot"), qsTr("UDP"), qsTr("Zero-Conf"), qsTr("RTK") ]
34 Layout.fillWidth: true
35 text: autoConnectRepeater.names[index]
37 visible: modelData.visible
43 heading: qsTr("NMEA GPS")
44 visible: QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.visible && QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.visible
52 onActivated: (index) => {
54 QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.value = comboBox.textAt(index);
58 Component.onCompleted: {
61 model.push(qsTr("Disabled"))
62 model.push(qsTr("UDP Port"))
64 if (QGroundControl.linkManager.serialPorts.length === 0) {
65 model.push(qsTr("Serial <none available>"))
67 for (var i in QGroundControl.linkManager.serialPorts) {
68 model.push(QGroundControl.linkManager.serialPorts[i])
71 nmeaPortCombo.model = model
73 const index = nmeaPortCombo.comboBox.find(QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaPort.valueString);
74 nmeaPortCombo.currentIndex = index;
80 visible: (nmeaPortCombo.currentText !== "UDP Port") && (nmeaPortCombo.currentText !== "Disabled")
81 label: qsTr("Baudrate")
82 model: QGroundControl.linkManager.serialBaudRates
84 onActivated: (index) => {
86 QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.value = parseInt(comboBox.textAt(index));
90 Component.onCompleted: {
91 const index = nmeaBaudCombo.comboBox.find(QGroundControl.settingsManager.autoConnectSettings.autoConnectNmeaBaud.valueString);
92 nmeaBaudCombo.currentIndex = index;
96 LabelledFactTextField {
97 visible: nmeaPortCombo.currentText === "UDP Port"
98 label: qsTr("NMEA stream UDP port")
99 fact: QGroundControl.settingsManager.autoConnectSettings.nmeaUdpPort
103 SettingsGroupLayout {
104 heading: qsTr("Links")
107 model: _linkManager.linkConfigurations
110 Layout.fillWidth: true
111 visible: !object.dynamic
114 Layout.fillWidth: true
118 height: ScreenTools.minTouchPixels
120 sourceSize.height: height
121 fillMode: Image.PreserveAspectFit
124 color: qgcPalEdit.text
125 source: "/res/pencil.svg"
126 enabled: !object.link
130 colorGroupEnabled: parent.enabled
136 var editingConfig = _linkManager.startConfigurationEditing(object)
137 linkDialogFactory.open({ editingConfig: editingConfig, originalConfig: object })
142 height: ScreenTools.minTouchPixels
144 sourceSize.height: height
145 fillMode: Image.PreserveAspectFit
148 color: qgcPalDelete.text
149 source: "/res/TrashDelete.svg"
153 colorGroupEnabled: parent.enabled
158 onClicked: QGroundControl.showMessageDialog(
161 qsTr("Are you sure you want to delete '%1'?").arg(object.name),
162 Dialog.Ok | Dialog.Cancel,
164 _linkManager.removeConfiguration(object)
169 text: object.link ? qsTr("Disconnect") : qsTr("Connect")
172 object.link.disconnect()
174 _linkManager.createConnectedLink(object)
182 label: qsTr("Add New Link")
183 buttonText: qsTr("Add")
186 var editingConfig = _linkManager.createConfiguration(ScreenTools.isSerialAvailable ? LinkConfiguration.TypeSerial : LinkConfiguration.TypeUdp, "")
187 linkDialogFactory.open({ editingConfig: editingConfig, originalConfig: null })
192 QGCPopupDialogFactory {
193 id: linkDialogFactory
195 dialogComponent: linkDialogComponent
199 id: linkDialogComponent
202 title: originalConfig ? qsTr("Edit Link") : qsTr("Add New Link")
203 buttons: Dialog.Save | Dialog.Cancel
204 acceptButtonEnabled: nameField.text !== ""
206 property var originalConfig
207 property var editingConfig
210 linkSettingsLoader.item.saveSettings()
211 editingConfig.name = nameField.text
212 if (originalConfig) {
213 _linkManager.endConfigurationEditing(originalConfig, editingConfig)
215 // If it was edited, it's no longer "dynamic"
216 editingConfig.dynamic = false
217 _linkManager.endCreateConfiguration(editingConfig)
221 onRejected: _linkManager.cancelConfigurationEditing(editingConfig)
224 spacing: ScreenTools.defaultFontPixelHeight / 2
227 Layout.fillWidth: true
228 spacing: ScreenTools.defaultFontPixelWidth
230 QGCLabel { text: qsTr("Name") }
233 Layout.fillWidth: true
234 text: editingConfig.name
235 placeholderText: qsTr("Enter name")
240 Layout.fillWidth: true
241 text: qsTr("Automatically Connect on Start")
242 checked: editingConfig.autoConnect
243 onCheckedChanged: editingConfig.autoConnect = checked
247 Layout.fillWidth: true
248 text: qsTr("High Latency")
249 checked: editingConfig.highLatency
250 onCheckedChanged: editingConfig.highLatency = checked
255 enabled: originalConfig == null
256 model: _linkManager.linkTypeStrings
257 Component.onCompleted: comboBox.currentIndex = editingConfig.linkType
259 onActivated: (index) => {
260 if (index !== editingConfig.linkType) {
262 var name = nameField.text
263 // Create new link configuration
264 editingConfig = _linkManager.createConfiguration(index, name)
270 id: linkSettingsLoader
271 source: editingConfig && editingConfig.settingsURL ? editingConfig.settingsURL : ""
274 property var subEditConfig: editingConfig
275 property int _firstColumnWidth: ScreenTools.defaultFontPixelWidth * 12
276 property int _secondColumnWidth: ScreenTools.defaultFontPixelWidth * 30
277 property int _rowSpacing: ScreenTools.defaultFontPixelHeight / 2
278 property int _colSpacing: ScreenTools.defaultFontPixelWidth / 2
281 if (status === Loader.Error) {
282 console.warn("Failed to load link settings page:", source)