QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
NtripMountpointBrowser.qml
Go to the documentation of this file.
1import QtQuick
2import QtQuick.Controls
3import QtQuick.Layouts
4
5import QGroundControl
6import QGroundControl.Controls
7import QGroundControl.FactControls
8
9SettingsGroupLayout {
10 Layout.fillWidth: true
11 heading: qsTr("Mountpoint")
12 visible: _ntrip.ntripMountpoint.userVisible
13
14 QGCPalette { id: qgcPal }
15
16 property var _ntrip: QGroundControl.settingsManager.ntripSettings
17 property var _ntripMgr: QGroundControl.ntripManager
18 property bool _isActive: _ntrip.ntripServerConnectEnabled.rawValue
19 property bool _hasHost: _ntrip.ntripServerHostAddress.rawValue !== ""
20 property real _textFieldWidth: ScreenTools.defaultFontPixelWidth * 30
21
22 RowLayout {
23 Layout.fillWidth: true
24 spacing: ScreenTools.defaultFontPixelWidth
25
26 LabelledFactTextField {
27 Layout.fillWidth: true
28 textFieldPreferredWidth: _textFieldWidth
29 label: fact.shortDescription
30 fact: _ntrip.ntripMountpoint
31 enabled: !_isActive
32 }
33
34 QGCButton {
35 text: qsTr("Browse")
36 enabled: !_isActive && _hasHost &&
37 _ntripMgr.mountpointFetchStatus !== NTRIPManager.FetchInProgress
38 onClicked: _ntripMgr.fetchMountpoints()
39 }
40 }
41
42 QGCLabel {
43 Layout.fillWidth: true
44 visible: _ntripMgr.mountpointFetchStatus === NTRIPManager.FetchInProgress
45 text: qsTr("Fetching mountpoints…")
46 color: qgcPal.colorOrange
47 }
48
49 QGCLabel {
50 Layout.fillWidth: true
51 visible: _ntripMgr.mountpointFetchStatus === NTRIPManager.FetchError
52 text: _ntripMgr.mountpointFetchError
53 color: qgcPal.colorRed
54 wrapMode: Text.WordWrap
55 }
56
57 QGCListView {
58 Layout.fillWidth: true
59 Layout.preferredHeight: Math.min(contentHeight, ScreenTools.defaultFontPixelHeight * 20)
60 visible: _ntripMgr.mountpointModel && _ntripMgr.mountpointModel.count > 0
61 model: _ntripMgr.mountpointModel
62 spacing: ScreenTools.defaultFontPixelHeight * 0.25
63
64 delegate: Rectangle {
65 required property int index
66 required property var object
67
68 width: ListView.view.width
69 height: mountRow.height + ScreenTools.defaultFontPixelHeight * 0.5
70 radius: ScreenTools.defaultFontPixelHeight * 0.25
71 color: {
72 if (object.mountpoint === _ntrip.ntripMountpoint.rawValue)
73 return qgcPal.buttonHighlight
74 return index % 2 === 0 ? qgcPal.windowShade : qgcPal.window
75 }
76
77 RowLayout {
78 id: mountRow
79 anchors.left: parent.left
80 anchors.right: parent.right
81 anchors.verticalCenter: parent.verticalCenter
82 anchors.margins: ScreenTools.defaultFontPixelWidth
83
84 ColumnLayout {
85 Layout.fillWidth: true
86 spacing: 0
87
88 RowLayout {
89 spacing: ScreenTools.defaultFontPixelWidth
90
91 QGCLabel {
92 text: object.mountpoint
93 font.bold: true
94 color: object.mountpoint === _ntrip.ntripMountpoint.rawValue
95 ? qgcPal.buttonHighlightText : qgcPal.text
96 }
97 QGCLabel {
98 visible: object.mountpoint === _ntrip.ntripMountpoint.rawValue
99 text: qsTr("(selected)")
100 font.pointSize: ScreenTools.smallFontPointSize
101 color: qgcPal.buttonHighlightText
102 }
103 }
104
105 QGCLabel {
106 text: {
107 var parts = []
108 if (object.format) parts.push(object.format)
109 if (object.navSystem) parts.push(object.navSystem)
110 if (object.country) parts.push(object.country)
111 if (object.bitrate > 0) parts.push(object.bitrate + " bps")
112 if (object.distanceKm >= 0) parts.push(object.distanceKm.toFixed(1) + " km")
113 return parts.join(" · ")
114 }
115 font.pointSize: ScreenTools.smallFontPointSize
116 color: object.mountpoint === _ntrip.ntripMountpoint.rawValue
117 ? qgcPal.buttonHighlightText : qgcPal.colorGrey
118 }
119 }
120
121 QGCButton {
122 text: object.mountpoint === _ntrip.ntripMountpoint.rawValue
123 ? qsTr("Selected") : qsTr("Select")
124 enabled: object.mountpoint !== _ntrip.ntripMountpoint.rawValue
125 onClicked: _ntripMgr.selectMountpoint(object.mountpoint)
126 }
127 }
128 }
129 }
130}