6import QGroundControl.Controls
7import QGroundControl.FactControls
11 heading: qsTr("Links")
13 property var _linkManager: QGroundControl.linkManager
16 model: _linkManager.linkConfigurations
19 Layout.fillWidth: true
20 visible: !object.dynamic
23 Layout.fillWidth: true
27 height: ScreenTools.minTouchPixels
29 sourceSize.height: height
30 fillMode: Image.PreserveAspectFit
33 color: qgcPalEdit.text
34 source: "/res/pencil.svg"
39 colorGroupEnabled: parent.enabled
45 var editingConfig = _linkManager.startConfigurationEditing(object)
46 linkDialogFactory.open({ editingConfig: editingConfig, originalConfig: object })
51 height: ScreenTools.minTouchPixels
53 sourceSize.height: height
54 fillMode: Image.PreserveAspectFit
57 color: qgcPalDelete.text
58 source: "/res/TrashDelete.svg"
62 colorGroupEnabled: parent.enabled
67 onClicked: QGroundControl.showMessageDialog(
70 qsTr("Are you sure you want to delete '%1'?").arg(object.name),
71 Dialog.Ok | Dialog.Cancel,
73 _linkManager.removeConfiguration(object)
78 text: object.link ? qsTr("Disconnect") : qsTr("Connect")
81 object.link.disconnect()
83 _linkManager.createConnectedLink(object)
91 label: qsTr("Add New Link")
92 buttonText: qsTr("Add")
95 var editingConfig = _linkManager.createConfiguration(ScreenTools.isSerialAvailable ? LinkConfiguration.TypeSerial : LinkConfiguration.TypeUdp, "")
96 linkDialogFactory.open({ editingConfig: editingConfig, originalConfig: null })
100 QGCPopupDialogFactory {
101 id: linkDialogFactory
103 dialogComponent: linkDialogComponent
107 id: linkDialogComponent
110 title: originalConfig ? qsTr("Edit Link") : qsTr("Add New Link")
111 buttons: Dialog.Save | Dialog.Cancel
112 acceptButtonEnabled: nameField.text !== ""
114 property var originalConfig
115 property var editingConfig
118 linkSettingsLoader.item.saveSettings()
119 editingConfig.name = nameField.text
120 if (originalConfig) {
121 _linkManager.endConfigurationEditing(originalConfig, editingConfig)
123 editingConfig.dynamic = false
124 _linkManager.endCreateConfiguration(editingConfig)
128 onRejected: _linkManager.cancelConfigurationEditing(editingConfig)
131 spacing: ScreenTools.defaultFontPixelHeight / 2
134 Layout.fillWidth: true
135 spacing: ScreenTools.defaultFontPixelWidth
137 QGCLabel { text: qsTr("Name") }
140 Layout.fillWidth: true
141 text: editingConfig.name
142 placeholderText: qsTr("Enter name")
147 Layout.fillWidth: true
148 text: qsTr("Automatically Connect on Start")
149 checked: editingConfig.autoConnect
150 onCheckedChanged: editingConfig.autoConnect = checked
154 Layout.fillWidth: true
155 text: qsTr("High Latency")
156 checked: editingConfig.highLatency
157 onCheckedChanged: editingConfig.highLatency = checked
162 enabled: originalConfig == null
163 model: _linkManager.linkTypeStrings
164 Component.onCompleted: comboBox.currentIndex = editingConfig.linkType
166 onActivated: (index) => {
167 if (index !== editingConfig.linkType) {
168 var name = nameField.text
169 editingConfig = _linkManager.createConfiguration(index, name)
175 id: linkSettingsLoader
176 source: editingConfig && editingConfig.settingsURL ? editingConfig.settingsURL : ""
179 property var subEditConfig: editingConfig
180 property int _firstColumnWidth: ScreenTools.defaultFontPixelWidth * 12
181 property int _secondColumnWidth: ScreenTools.defaultFontPixelWidth * 30
182 property int _rowSpacing: ScreenTools.defaultFontPixelHeight / 2
183 property int _colSpacing: ScreenTools.defaultFontPixelWidth / 2
186 if (status === Loader.Error) {
187 console.warn("Failed to load link settings page:", source)