5import QGroundControl.Controls
10 z: QGroundControl.zOrderTopMost
12 readonly property real _defaultTextHeight: ScreenTools.defaultFontPixelHeight
13 readonly property real _defaultTextWidth: ScreenTools.defaultFontPixelWidth
14 readonly property real _horizontalMargin: _defaultTextWidth / 2
15 readonly property real _verticalMargin: _defaultTextHeight / 2
17 property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
18 property var _currentPage: null
19 property var _currentItem: null
20 // Destroy the in-panel page item while panelContainer is still alive, before the
21 // loader clears the source and tears down this component.
22 Component.onDestruction: mainWindow.destroyInPanelAnalyzePage()
24 function _loadPage(source) {
25 // Clear reference before calling mainWindow.createAnalyzePage (which destroys the old item).
28 // mainWindow creates and owns the item (QObject parent = mainWindow) so it
29 // survives AnalyzeView being unloaded in the popped-out case.
30 // anchors.fill: parent in AnalyzePage.qml automatically fills panelContainer.
31 _currentItem = mainWindow.createAnalyzePage(source)
33 _currentItem.parent = panelContainer
36 mainWindow.destroyInPanelAnalyzePage()
40 function _updatePanelSource() {
42 if (_currentPage.requiresVehicle && !_activeVehicle) {
45 _loadPage(_currentPage.url)
50 on_ActiveVehicleChanged: {
51 if (_currentPage && _currentPage.requiresVehicle) {
54 Qt.callLater(_updatePanelSource)
59 // This need to block click event leakage to underlying map.
66 width: buttonColumn.width
67 anchors.topMargin: _defaultTextHeight / 2
68 anchors.top: parent.top
69 anchors.bottom: parent.bottom
70 anchors.leftMargin: _horizontalMargin
71 anchors.left: parent.left
72 contentHeight: buttonColumn.height
73 flickableDirection: Flickable.VerticalFlick
78 width: _maxButtonWidth
79 spacing: _defaultTextHeight / 2
81 property real _maxButtonWidth: {
83 for (var i = 0; i < buttonRepeater.count; i++) {
84 var item = buttonRepeater.itemAt(i)
85 if (item) maxW = Math.max(maxW, item.implicitWidth)
92 model: QGroundControl.corePlugin ? QGroundControl.corePlugin.analyzePages : []
94 Component.onCompleted: {
96 itemAt(0).checked = true
97 _currentPage = QGroundControl.corePlugin.analyzePages[0]
98 panelContainer.title = _currentPage.title
104 imageResource: modelData.icon
106 text: modelData.title
107 width: buttonColumn._maxButtonWidth
110 _currentPage = modelData
111 panelContainer.title = modelData.title
122 anchors.topMargin: _verticalMargin
123 anchors.bottomMargin: _verticalMargin
124 anchors.leftMargin: _horizontalMargin
125 anchors.left: buttonScroll.right
126 anchors.top: parent.top
127 anchors.bottom: parent.bottom
129 color: qgcPal.windowShade
134 anchors.topMargin: _verticalMargin
135 anchors.bottomMargin: _verticalMargin
136 anchors.leftMargin: _horizontalMargin
137 anchors.rightMargin: _horizontalMargin
138 anchors.left: divider.right
139 anchors.right: parent.right
140 anchors.top: parent.top
141 anchors.bottom: parent.bottom
143 property string title
148 function onPopout() {
149 var existingItem = _currentItem
150 var pageTitle = panelContainer.title
151 var pageSource = _currentPage.url
152 var requiresVehicle = _currentPage ? _currentPage.requiresVehicle : false
153 // Clear references before handing item to the popup window.
155 // Tell mainWindow this item has moved to a popup so it is not destroyed
156 // when AnalyzeView is torn down.
157 mainWindow.analyzePageMovedToPopup()
158 existingItem.visible = false
159 // Hand the existing item to the popout window.
160 mainWindow.createWindowedAnalyzePage(pageTitle, pageSource, requiresVehicle, existingItem)
161 // Create a fresh in-panel instance.
162 _loadPage(pageSource)
168 anchors.centerIn: panelContainer
169 text: qsTr("Requires a connected vehicle")
170 visible: _currentPage && _currentPage.requiresVehicle && !_activeVehicle