feat(FlightMap): add mission item grouping and improve map usability#14623
Open
rubenp02 wants to merge 6 commits into
Open
feat(FlightMap): add mission item grouping and improve map usability#14623rubenp02 wants to merge 6 commits into
rubenp02 wants to merge 6 commits into
Conversation
Newly inserted simple mission items, such as waypoints created with the plus button shown on mission legs, could become current before their asynchronous map indicator finished loading, leaving their drag area unusable until the item was selected again. Drag areas now wait for their indicator to load, making new items immediately draggable.
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 on top, ensuring the active navigation target can always be identified during flight.
Contributor
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. |
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.
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.
rubenp02
force-pushed
the
feature/mission-item-map-usability
branch
from
July 17, 2026 17:27
88998d2 to
b9557c5
Compare
Contributor
|
See the Build Results workflow run for details. |
Contributor
|
Can you move the bugs which should go into 5.1 into their own pull? |
Comment on lines
+18
to
+22
| readonly property bool _isCurrentItem: missionItem ? missionItem.isCurrentItem || missionItem.hasCurrentChildItem : false | ||
| readonly property bool _usesAbbreviation: missionItem && missionItem.abbreviation.length > 0 | ||
| readonly property var _group: indicatorGroup ? indicatorGroup.groupForItem(missionItem) : null | ||
| readonly property bool _isGrouped: _group && _group.items.length > 1 | ||
| readonly property bool _isGroupRepresentative: !_group || _group.representative === missionItem |
Comment on lines
+233
to
+236
| required property var modelData | ||
|
|
||
| readonly property bool _usesAbbreviation: modelData.abbreviation.length > 0 | ||
| readonly property string _supplementaryLabel: !_usesAbbreviation ? "" : `${modelData.abbreviation} (${modelData.sequenceNumber})` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
A variety of bugfixes and a new mission item grouping feature to improve mission map usability.
fix(PlanView): make new mission items draggable
Newly inserted simple mission items, such as waypoints created with the plus button shown on mission legs, could become current before their asynchronous map indicator finished loading, leaving their drag area unusable until the item was selected again.
Drag areas now wait for their indicator to load, making new items immediately draggable.
fix(FlightMap): draw current mission item on top
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 on top, 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).