feat(Settings): allow custom builds to extend generated settings pages - #15026
Merged
DonLakeFlyer merged 1 commit intoSep 2, 2026
Merged
Conversation
DonLakeFlyer
force-pushed
the
custom-build-settings-pages
branch
from
September 2, 2026 17:40
5a2c849 to
728793b
Compare
DonLakeFlyer
force-pushed
the
custom-build-settings-pages
branch
from
September 2, 2026 18:07
728793b to
9b4a61d
Compare
DonLakeFlyer
requested
a balanced review from Copilot
and removed request for
HTRamsey
September 2, 2026 18:08
DonLakeFlyer
force-pushed
the
custom-build-settings-pages
branch
from
September 2, 2026 18:19
9b4a61d to
219ed0b
Compare
Custom builds (QGC_CUSTOM_DIR) can now add, replace, reposition, or remove generated settings pages without overriding the stock generated QML: - SettingsPages.json overlay merged at configure time (insertAfter/ insertBefore/replace-by-name/remove) with hard-error validation - Custom *.SettingsUI.json page definitions shadow stock ones - Custom *.SettingsGroup.json fact metadata feeds the generator; accessor collisions with stock SettingsManager Q_PROPERTYs are rejected - SettingsManager now derives from QQmlPropertyMap and exposes registerCustomSettingsGroup (takes ownership; rejected groups deleted), invoked via the new QGCCorePlugin::registerCustomSettings hook - CMake computes the generated output list via the generator's --list-outputs mode when an overlay is active - custom-example includes a complete working example page
DonLakeFlyer
force-pushed
the
custom-build-settings-pages
branch
from
September 2, 2026 18:33
219ed0b to
be37448
Compare
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #15026 +/- ##
==========================================
+ Coverage 25.47% 34.52% +9.05%
==========================================
Files 769 945 +176
Lines 65912 85626 +19714
Branches 30495 39466 +8971
==========================================
+ Hits 16788 29562 +12774
+ Misses 37285 36421 -864
- Partials 11839 19643 +7804
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 661 files with indirect coverage changes Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
DonLakeFlyer
added a commit
to DonLakeFlyer/TagTracker
that referenced
this pull request
Sep 3, 2026
…elink Brings the custom/ overlay and CI up to the upstream qgroundcontrol master merged in the parent commit. Custom overlay - Replace .qrc/exclusion resource machinery with qt_add_resources + qt_add_qml_module (QGroundControl.CustomControls) per the new custom-build contract (CUSTOM_SOURCES/LIBRARIES/INCLUDE_DIRECTORIES/DEFINITIONS) - Add CustomOverrideInterceptor so qrc:/qml/<path> resolves to the custom override under /Custom/qml when one exists - Update QML imports for renamed/removed upstream modules and drop version numbers State machine - Rebase CustomState/CustomStateMachine on upstream QGCState/QGCStateMachine - Remove duplicated DelayState/FunctionState/SendMavlinkCommandState in favour of the upstream implementations Settings - Register CustomSettings through QGCCorePlugin::registerCustomSettings and expose it as settingsManager.customSettings - Add the TagTracker settings page via the SettingsPages.json overlay - Add required label metadata to Custom.SettingsGroup.json Behaviour moved out of upstream files into supported hooks - Default-enable CustomPluginLog in CustomPlugin::init() - EMERGENCY STOP as a toolbar indicator instead of a FlyViewToolBar patch Removed - Herelink core plugin/options and the TAG_TRACKER_HERELINK_BUILD conditionals - Stale custom/android manifest and build.gradle overlay (upstream now covers it) - tunnel-protocol git submodule; fetched via CPMAddPackage instead CI - Rewrite macOS and Android workflows on the upstream composite actions, artifacts via upload-artifact, no S3/attestation/Play Store - Trigger on sync-upstream-master; cancel-in-progress only for pull requests Refs mavlink/qgroundcontrol#15026
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
Custom builds (
QGC_CUSTOM_DIR) can now add, replace, reposition, or remove generated settings pages without overriding the stock generated QML.How it works
<custom>/src/AppSettings/pages/SettingsPages.jsonis merged into the stock page list at configure time. Overlay entries supportinsertAfter/insertBefore, replace-in-place (matchingname), and{ "remove": "<name>" }. All malformed overlays (unknown keys, unknown anchors, duplicate qml outputs, missing names, missing page definitions) are hard configure errors.*.SettingsUI.jsonfiles shadow stock definitions of the same name.*.SettingsGroup.jsonfact metadata feeds the generator; a custom stem colliding with a stockSettingsManageraccessor is rejected.SettingsManagernow derives fromQQmlPropertyMapand exposesregisterCustomSettingsGroup(accessor, group)(takes ownership; rejected groups are deleted). Called from the newQGCCorePlugin::registerCustomSettingshook so generated pages resolveQGroundControl.settingsManager.<accessor>.<fact>.--list-outputsmode instead of the hardcoded list.Example
custom-exampleincludes a complete working example: an overlay inserting a "Custom" page, its page definition, fact metadata,SettingsGroupsubclass, and plugin registration.Testing
--list-outputs/generationSettingsManagerTestC++ unit test covering registration, rejection paths, and ownership (rejected groups deleted)