feat(FlightMap): add mission item grouping and improve map usability - #14623
feat(FlightMap): add mission item grouping and improve map usability#14623rubenp02 wants to merge 5 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
This PR improves mission map usability across PlanView and FlyView by introducing a screen-space grouping mechanism for overlapping simple mission item indicators, while also addressing several interaction/visibility issues (drag readiness, z-ordering, arrow visibility).
Changes:
- Added
MissionItemIndicatorGroupto cluster overlapping simple mission item indicators and provide an in-place selector for choosing among grouped items. - Updated mission item visuals to integrate with grouping and to ensure newly-created items are immediately draggable once their indicator finishes loading.
- Disabled mission-item auto-fade and hid direction arrows / split handles when the corresponding leg is too short at the current zoom.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/PlanView/TransectStyleMapVisuals.qml | Passes map control into MapLineArrow after it became an explicit dependency. |
| src/PlanView/TakeoffItemMapVisual.qml | Hooks takeoff indicator into the new indicator grouping system and interactive gating. |
| src/PlanView/SimpleItemMapVisual.qml | Passes indicator-group and visibility/interaction flags into MissionItemIndicator. |
| src/PlanView/PlanView.qml | Instantiates the grouping component in PlanView and hides split UI for too-short legs at current zoom. |
| src/PlanView/MissionItemMapVisualBase.qml | Fixes drag-area readiness by waiting for the async indicator to be loaded; routes clicks via indicator activation when available. |
| src/PlanView/MissionItemMapVisual.qml | Plumbs indicatorGroup into simple-item visuals at load time. |
| src/PlanView/MissionItemIndexLabel.qml | Adds “medium” sizing and optional sub/supplementary text to support group indicators and selector labels. |
| src/FlightMap/MapItems/PlanMapItems.qml | Instantiates grouping in FlyView’s plan overlays and passes it into mission item visuals; updates arrows for new MapLineArrow API. |
| src/FlightMap/MapItems/MissionItemIndicatorGroup.qml | New: performs screen-space grouping and shows a non-modal horizontal selector panel for grouped items. |
| src/FlightMap/MapItems/MissionItemIndicator.qml | Integrates grouping (representative visibility, activation behavior, z-ordering, disabling auto-fade). |
| src/FlightMap/MapItems/MapLineArrow.qml | Adds explicit mapControl dependency and hides arrows when legs are shorter than the arrow canvas at current zoom. |
| src/FlightMap/CMakeLists.txt | Registers the new MissionItemIndicatorGroup.qml in the FlightMap QML module. |
88998d2 to
b9557c5
Compare
Build ResultsPlatform Status
All builds passed. Pre-commit
Pre-commit hooks: 2 passed, 75 failed, 7 skipped. Test Resultslinux-coverage-integration: 51 passed, 0 skipped Code CoverageCoverage: 70.6% No baseline available for comparison Artifact Sizes
Updated: 2026-09-01 13:27:43 UTC • Commit: d834e78 • Triggered by: Linux |
|
Can you move the bugs which should go into 5.1 into their own pull? |
b9557c5 to
45833cb
Compare
Done @ #14670. I'll update this one to remove duplicate commits once that one goes in. |
48d0f81 to
ab880d4
Compare
|
@DonLakeFlyer Updated to drop the fix that already got merged and to address the issues you identified @ #14670. |
CI Failure AnalysisBoth failing jobs (Test + Coverage linux_gcc_64 Debug and Custom Plugin Test Debug) fail for the same root cause. The failing tests (identical in both jobs):
All actual test assertions pass (e.g. AppCloseWarningUITest: 19 passed). The tests fail only on strict-mode unexpected-log-message checking, triggered by this runtime QML warning: Root causeLine 21 of the new readonly property bool _isGrouped: _group && _group.items.length > 1Chain of undefined:
The same latent hazard exists on line 19 ( Suggested fixCoerce the bindings to real booleans, e.g.: readonly property bool _usesAbbreviation: missionItem ? missionItem.abbreviation.charAt(0) > 'A' && missionItem.abbreviation.charAt(0) < 'z' : false
readonly property bool _isGrouped: _group ? _group.items.length > 1 : false(A ternary always produces a boolean, unlike The skipped |
When multiple simple mission items shared the same position, later items could partially cover the current target, including its number. The current item is now drawn above other mission item indicators, ensuring the active navigation target can always be identified during flight.
Direction arrows could become larger on screen than their underlying mission legs, obscuring rather than clarifying the route. They now hide whenever a leg's projected length is shorter than the 30-pixel width of the arrow canvas.
ab880d4 to
7791646
Compare
|
@DonLakeFlyer fixed |
Simple mission items can share coordinates or become close enough at the current map scale for their indicators to overlap. Only the topmost indicator could then be reliably identified or selected, particularly on touchscreens. They are now combined into a single group indicator with direct access to every grouped item. Key changes: - Groups items in screen space and updates the groups when the map scale or item positions change. Indicators remain separate while they can still be selected individually. - Shows the current item's normal marker label when the group contains it, or that of the lowest-sequence item otherwise. A new intermediate marker size and an ellipsis below the label distinguish groups from individual items. - Opens a non-modal horizontal selector when a group is selected in Plan or Fly view. The selector grows with its contents up to a viewport-relative limit while keeping every member directly accessible. Command-specific labels preserve their normal abbreviations and include sequence numbers to distinguish repeated items. - Keeps each simple mission item independently loaded. This preserves mission legs, loiter circles, dragging, and other associated map visuals. Complex items do not interact with the grouping system.
MapQuickItem's default auto-fade hides simple mission indicators at low zoom levels, removing mission context when several items occupy a small area. Grouped indicators manage that density without losing access to any item. Automatic fading is therefore disabled, allowing simple mission markers to remain visible and selectable at every zoom level.
The split handle remained visible on legs whose midpoint was too close to either endpoint for an inserted item to remain separately selectable. It now hides whenever the resulting item would join the same indicator group.
7791646 to
d834e78
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #14623 +/- ##
==========================================
+ Coverage 25.47% 34.51% +9.04%
==========================================
Files 769 945 +176
Lines 65912 85586 +19674
Branches 30495 39446 +8951
==========================================
+ Hits 16788 29539 +12751
+ Misses 37285 36419 -866
- Partials 11839 19628 +7789
Flags with carried forward coverage won't be shown. Click here to find out more. Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
Description
A variety of bugfixes and a new mission item grouping feature to improve mission map usability.
fix(FlightMap): show current item above others
When multiple simple mission items shared the same position, later items could partially cover the current target, including its number. The current item is now drawn above other mission item indicators, ensuring the active navigation target can always be identified during flight.
feat(FlightMap): group overlapping mission items
Simple mission items can share coordinates or become close enough at the current map scale for their indicators to overlap. Only the topmost indicator could then be reliably identified or selected, particularly on touchscreens.
They are now combined into a single group indicator with direct access to every grouped item.
Key changes:
fix(FlightMap): keep items visible at all zooms
MapQuickItem's default auto-fade hides simple mission indicators at low zoom levels, removing mission context when several items occupy a small area.
Grouped indicators manage that density without losing access to any item. Automatic fading is therefore disabled, allowing simple mission markers to remain visible and selectable at every zoom level.
fix(PlanView): hide split handles on short legs
The split handle remained visible on legs whose midpoint was too close to either endpoint for an inserted item to remain separately selectable.
It now hides whenever the resulting item would join the same indicator group.
fix(FlightMap): hide arrows on short legs
Direction arrows could become larger on screen than their underlying mission legs, obscuring rather than clarifying the route.
They now hide whenever a leg's projected length is shorter than the 30-pixel width of the arrow canvas.
Type of Change
Testing
Platforms Tested
Flight Stacks Tested
Screenshots
Checklist
Related Issues
Closes #8728
By submitting this pull request, I confirm that my contribution is made under the terms of the project's dual license (Apache 2.0 and GPL v3).