Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
b91627d
Fix text color
DonLakeFlyer Feb 27, 2026
0f04675
Back out concept of raw value not being set
DonLakeFlyer Feb 27, 2026
e96b75e
Bump rollup in the npm_and_yarn group across 1 directory
dependabot[bot] Feb 26, 2026
e8664a2
Vehicle: require COMMAND_ACK before advancing REQUEST_MESSAGE
DonLakeFlyer Feb 28, 2026
1db914a
Vehicle: reduce default MAV_CMD ACK timeout to 1200ms
DonLakeFlyer Feb 28, 2026
95d91e7
Request _HASH_CHECK before PARAM_REQUEST_LIST for PX4
DonLakeFlyer Feb 27, 2026
f830bce
Add HashCheckTest for _HASH_CHECK parameter cache scenarios
DonLakeFlyer Feb 27, 2026
5f53233
FactSystem: bind delayed load progress reset to QObject lifetime
DonLakeFlyer Mar 1, 2026
121c7a5
PlanMasterController dirty state cleanup and signal consistency
DonLakeFlyer Mar 1, 2026
cc29733
Promote guard-condition logs to qCCritical across plan controllers
DonLakeFlyer Mar 1, 2026
0cfc799
Fix transient dirtyForUpload toggling in _loadRallyPointsComplete
DonLakeFlyer Mar 1, 2026
0ccf0d8
PlanView: Replace direct map-click and right-click with toolstrip tog…
DonLakeFlyer Mar 1, 2026
f1fd993
docs: Update fly_view_toolbar.md with missing indicator sections and …
DonLakeFlyer Mar 1, 2026
fb529db
Plan toolbar: add currentPlanFileName property and improve toolbar UX
DonLakeFlyer Mar 2, 2026
5df1755
ComponentInformation: improve metadata loading diagnostics
DonLakeFlyer Mar 4, 2026
ed273a3
New Crowdin translations by GitHub Action
crowdin-bot Mar 1, 2026
350410e
FlightMap: zoom mouse wheel around cursor position
DonLakeFlyer Mar 5, 2026
9cf9652
Revert "FlightMap: zoom mouse wheel around cursor position"
DonLakeFlyer Mar 5, 2026
29c7356
fix: update shields.io release badge to current endpoint
DonLakeFlyer Mar 5, 2026
0e18681
RC Calibration: improve error messages for insufficient channels
DonLakeFlyer Mar 5, 2026
1609ce5
MockLink: Add per-message-ID no-response injection for testing
DonLakeFlyer Feb 27, 2026
bf9ca84
QGCLogging: Add test log capture infrastructure
DonLakeFlyer Feb 27, 2026
6806487
UnitTest: Install log capture handler during test execution
DonLakeFlyer Feb 27, 2026
61d5b29
QGCStateMachine: Promote programming errors to critical
DonLakeFlyer Feb 27, 2026
b540d54
InitialConnectTest: Add timeout fallthrough tests and log validation
DonLakeFlyer Feb 27, 2026
34564bb
Fix ComponentInformationManager double-start on timeout retry
DonLakeFlyer Feb 27, 2026
c5887c8
Address PR review: fix MockLink thread-safety, spy wait ordering, and…
DonLakeFlyer Mar 4, 2026
70dc74e
QGCTabBar: filter non-button children from ButtonGroup
DonLakeFlyer Mar 5, 2026
427ecae
PlanView: Replace flat mission item list with collapsible TreeView
DonLakeFlyer Mar 6, 2026
9d3ce2d
Add unit tests for PlanTreeView model classes
DonLakeFlyer Mar 6, 2026
0f30c72
Fix MAVLink message bounds validation vulnerabilities
DonLakeFlyer Mar 5, 2026
def99b9
Docs: clarify logging level guidelines in CODING_STYLE.md
DonLakeFlyer Mar 6, 2026
ecaef66
Plan: add Plan File and Defaults tree nodes, slim MissionSettingsEditor
DonLakeFlyer Mar 6, 2026
308ebdf
Plan: add file name management to PlanMasterController
DonLakeFlyer Mar 6, 2026
15befe4
Tests: add file name and tree model tests for PlanView changes
DonLakeFlyer Mar 6, 2026
45c45f8
Plan: add layer switcher control for Mission/GeoFence/Rally
DonLakeFlyer Mar 6, 2026
a9d8dc0
Plan: add layer switcher control for Mission/GeoFence/Rally
DonLakeFlyer Mar 6, 2026
be4f556
Enforce log hygiene in all unit tests
DonLakeFlyer Mar 6, 2026
1aa096f
USBBoardInfo: add new ARK board entries and regex fallbacks
AlexKlimaj Mar 5, 2026
3fc3c33
Make entryCoordinate explicit in VisualMissionItem
rubenp02 Dec 23, 2025
042cf64
Add editableAlt getter to VisualMissionItem
rubenp02 Jan 8, 2026
fbe2d4f
Implement setCoordinate for complex scan items
rubenp02 Mar 2, 2026
5f3e5c3
Add mission item bulk displacement utilities
rubenp02 Jan 8, 2026
78466ba
Add hamburger menu with mission-wide transforms
rubenp02 Jan 8, 2026
483da2c
Fix EditPositionDialog init reposition
rubenp02 Mar 2, 2026
563eec5
Add mission item bulk displacement unit tests
rubenp02 Mar 2, 2026
b054932
Refactor: Extract vehicle support properties into VehicleSupports class
DonLakeFlyer Mar 7, 2026
0760cdc
Refactor PlanView TreeView: QPersistentModelIndex, independent expand…
DonLakeFlyer Mar 7, 2026
8d2c9fc
Reduce compile time: Vehicle.h forward declarations, PCH optimization…
DonLakeFlyer Mar 8, 2026
9f93a11
Plan View: move mission transforms to inline tree editor
DonLakeFlyer Mar 8, 2026
13e87fe
New Crowdin translations by GitHub Action
crowdin-bot Mar 8, 2026
2e1918d
Extract PlanView and Toolbar QML modules from QmlControls
DonLakeFlyer Mar 8, 2026
a0a77ab
Clean up unit test artifacts on shutdown
DonLakeFlyer Mar 8, 2026
31cbfc8
CI: run unit tests in Linux Debug build, disable broken jobs
DonLakeFlyer Mar 8, 2026
0604780
Plan View: home position tracks map center, terrain-driven altitude, …
DonLakeFlyer Mar 8, 2026
28eee00
Plan View: tree separator role, rally point editor rework
DonLakeFlyer Mar 9, 2026
15238a0
docs: Update Plan View documentation to match current UI
DonLakeFlyer Mar 10, 2026
f72abdc
docs: Fix image references in translated plan_view docs
DonLakeFlyer Mar 10, 2026
84a8345
docs: Address review feedback - fix menu symbol and home alt description
DonLakeFlyer Mar 10, 2026
2a11bac
Fix random docs upload workflow failure
HTRamsey Mar 11, 2026
f59763d
boards: Add CUAV X25-MEGA board
cuav-zhang3 Mar 9, 2026
2998d59
fix(linux): Preload system GIO alongside GLib to prevent GstGIO segfault
HTRamsey Mar 11, 2026
c33bfd3
CI: update ccache to 4.13.1 and fix build cache misses
HTRamsey Mar 11, 2026
301a0a7
Refactor AnalyzeView
HTRamsey Feb 15, 2026
4ce9447
ci: overhaul CI workflows, rewrite shell scripts to Python, consolida…
HTRamsey Mar 11, 2026
5066dc0
Refactor GStreamer CMake: rename find module, fix bugs, add helpers
HTRamsey Mar 11, 2026
ec20b48
ci(deps): bump the github-actions group across 1 directory with 4 upd…
dependabot[bot] Mar 11, 2026
311c038
Rename home position label from 'Launch' to 'Home'
DonLakeFlyer Mar 11, 2026
12a9cb9
Rename AltitudeMode to AltitudeFrame throughout codebase
DonLakeFlyer Mar 11, 2026
7e83d28
Guard _visualItems.get(0) against empty model during initialization
DonLakeFlyer Mar 11, 2026
1bad343
QGCTabBar: reset to first tab when becoming visible
DonLakeFlyer Mar 11, 2026
2103580
feat(ntrip): rewrite NTRIP subsystem with transport abstraction and s…
HTRamsey Feb 6, 2026
3040988
Refactor GStreamer integration, auto-download SDKs, and CI hardening
HTRamsey Mar 11, 2026
f9ea96e
Usb video fixes (#13961)
gillamkid Mar 12, 2026
6e28575
Pre-compile QRegularExpression in BoardRegExpFallback_t (#14045)
DieBorr Mar 12, 2026
c236f7f
Compass: fix label positioning, readability in lock nose-up mode, and…
DieBorr Mar 12, 2026
e5cce9a
Remote ID: Fix zero and negative GCS GPS altitude being invalid (#13378)
jnomikos Mar 12, 2026
b0a357c
Async GStreamer init, CI tooling cleanup, and GstVideoReceiver fixes
HTRamsey Mar 12, 2026
48e3c9a
Consolidate CI actions: convert bash to Python, deduplicate helpers
HTRamsey Mar 12, 2026
238a217
Fix BatteryIndicator QML resource path (Controls → Toolbar)
admin01-afk Mar 12, 2026
a722dbb
APM: Add camera capture commands to supported mission commands
DonLakeFlyer Mar 12, 2026
f9bad01
Rename MavlinkCameraControl to MavlinkCameraControlInterface
DonLakeFlyer Mar 12, 2026
b47066a
Replace magic numbers with MAVLink enums in tracking handler
DonLakeFlyer Mar 12, 2026
2f6b634
Remove duplicate-suppression guards from startTracking
DonLakeFlyer Mar 12, 2026
330125e
docs(api_reference): Add Doxygen docs to sidebar and link in docs
hamishwillee Mar 12, 2026
d75f0a7
Update docs/en/qgc-dev-guide/navigating_source.md
hamishwillee Mar 12, 2026
e0363ab
Update docs/en/qgc-dev-guide/navigating_source.md
hamishwillee Mar 12, 2026
0a460b9
Standardize ComponentSummary QML layout pattern
DonLakeFlyer Mar 13, 2026
03b10b6
guidedModeGotoLocation: return bool to indicate failure
DonLakeFlyer Mar 13, 2026
8e12b37
PlanMasterController: fix false dirty state on empty vehicle connect
DonLakeFlyer Mar 13, 2026
3d87bd2
PlanMasterControllerTest: add download dirty-flag scenarios
DonLakeFlyer Mar 13, 2026
e1fa3f6
chore: add daily CI workflow to sync PX4 metadata (#14127)
Copilot Mar 13, 2026
9cef2d1
Move misplaced QML files back to their proper modules
DonLakeFlyer Mar 13, 2026
45f282b
Optimize polygon/polyline drag performance with dual-signal architecture
DonLakeFlyer Mar 14, 2026
29f93f8
QGCMapPolygon: use surveyor's formula for centroid calculation
DonLakeFlyer Mar 14, 2026
da50d7b
QGCMapPolygonTest: add centroid calculation tests
DonLakeFlyer Mar 14, 2026
ca791dc
PX4: Power summary show all batteries
DonLakeFlyer Mar 14, 2026
0d1b9b5
Remove windowTransparentText from palette
DonLakeFlyer Mar 14, 2026
2ca4fc7
Add unit test for CalcAboveTerrain save/load roundtrip
DonLakeFlyer Mar 15, 2026
19d3c04
PlanView QML: Use setSource() and required properties to fix null war…
DonLakeFlyer Mar 14, 2026
7224f82
Fix model correctness in QmlObjectTreeModel and QmlObjectListModel
DonLakeFlyer Mar 14, 2026
47de17d
MissionController: Improve tree sync with row-level signals and renames
DonLakeFlyer Mar 14, 2026
2eada81
EditPositionDialog: refactor and add altitude support
DonLakeFlyer Mar 15, 2026
973c9af
FlyView: Add left margin to MapScale from toolstrip
DonLakeFlyer Mar 15, 2026
a7476b2
Fix PID tuning sliders showing wrong params for each axis
DonLakeFlyer Mar 14, 2026
7d3613d
Rename MAVLinkLog to OnboardLog in AnalyzeView
DonLakeFlyer Mar 15, 2026
53f47f9
Support ArduPilot 4.7 parameter renames
DonLakeFlyer Mar 15, 2026
0e4e29b
chore: update PX4 metadata
HTRamsey Mar 16, 2026
504c2ec
PX4: Rename RC Loss to RC/Joystick Loss in safety UI
DonLakeFlyer Mar 16, 2026
0b99d8b
Fix lupdate JSON path and add weekly schedule
DonLakeFlyer Mar 16, 2026
b93f4c6
Refactor camera tracking and on-screen gimbal support
DonLakeFlyer Mar 17, 2026
d92bc90
Fix MissionController takedown sequencing for Qt 6 TreeView
DonLakeFlyer Mar 18, 2026
2e29496
MissionController: remove dead legacy .mission file loader code
DonLakeFlyer Mar 19, 2026
7e3b6cc
Extract MissionFlightStatusCalculator from MissionController
DonLakeFlyer Mar 19, 2026
f80ae3b
MissionController: Collapse 10 plan-view signals into planViewStateCh…
DonLakeFlyer Mar 19, 2026
3c44d4a
Vehicle: filter additional message handlers by component ID
DonLakeFlyer Mar 15, 2026
561feaf
Add MAVLink 2 message signing support
DonLakeFlyer Mar 19, 2026
f586f8e
APM: add Servo Outputs setup page with live output bars
AhmWael Mar 19, 2026
ad6539c
Vehicle: map SERVO_OUTPUT_RAW servo1..servo16 directly
AhmWael Mar 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ SpacesInSquareBrackets: false
SortIncludes: CaseSensitive
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '^<Q.*>' # Qt headers
- Regex: '^<[a-z].*>' # System/STL headers
Priority: 1
- Regex: '^<.*>' # System/STL headers
- Regex: '^<Q.*>' # Qt headers
Priority: 2
- Regex: '.*' # Project headers
- Regex: '.*' # Project headers
Priority: 3

# Alignment
Expand Down
7 changes: 5 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,8 @@
# *.qml @DonLakeFlyer

# Build system
# CMakeLists.txt @HTRamsey
# /cmake/ @HTRamsey
CMakeLists.txt @HTRamsey
/cmake/ @HTRamsey

# CI/CD
/.github/ @HTRamsey
59 changes: 2 additions & 57 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ QGroundControl uses [Crowdin](https://crowdin.com/project/qgroundcontrol) for co

```bash
git add .
git commit -m "Add feature: brief description"
git commit -m "feat: brief description"
```

6. **Push to your fork**
Expand All @@ -104,62 +104,7 @@ QGroundControl uses [Crowdin](https://crowdin.com/project/qgroundcontrol) for co

## Coding Standards

For the complete coding style guide with examples, see [CODING_STYLE.md](../CODING_STYLE.md).

### C++ Guidelines

- **Standard**: C++20
- **Framework**: Qt 6 guidelines
- **Naming Conventions**:
- Classes: `PascalCase`
- Methods/functions: `camelCase`
- Private members: `_leadingUnderscore`
- Constants: `ALL_CAPS` or `kPascalCase`

- **Always use braces** for if/else/for/while statements

```cpp
// Good
if (condition) {
doSomething();
}

// Bad
if (condition) doSomething();
```

- **Defensive coding**:
- Always null-check pointers before use
- Validate all inputs
- Use Q_ASSERT for debug-build development checks only (compiled out in release builds)
- Always use defensive error handling in production code paths (never rely on Q_ASSERT)
- Handle errors gracefully in production code

- **Code formatting**:
- Run `clang-format` before committing
- Follow `.clang-format`, `.clang-tidy`, `.editorconfig` in repo root
- See `CodingStyle.h`, `CodingStyle.cc`, `CodingStyle.qml` for examples
- 4 spaces for indentation (no tabs)

### QML Guidelines

- Follow Qt QML coding conventions
- Use type annotations
- Prefer declarative over imperative code
- See `src/QmlControls/QGCButton.qml` for examples

### Logging

Use Qt logging categories:

```cpp
Q_DECLARE_LOGGING_CATEGORY(MyComponentLog)
QGC_LOGGING_CATEGORY(MyComponentLog, "qgc.component.name")

qCDebug(MyComponentLog) << "Debug message:" << value;
qCWarning(MyComponentLog) << "Warning message";
qCCritical(MyComponentLog) << "Critical error";
```
Follow [CODING_STYLE.md](../CODING_STYLE.md) for naming, formatting, C++20 features, QML style, and logging conventions. Run `clang-format` and `pre-commit run` before committing.

### Architecture Patterns

Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ body:
label: System Information
description: |
Please include the following information:
- QGC Version: [e.g. 4.4.0]
- QGC Version: [e.g. 5.0.0]
- QGC build: [e.g. daily, stable, self-built from source, etc...]
- Operating System: [e.g. Windows 11, Ubuntu 22.04, macOS 15, iOS 17 ]
- Flight Controller: [e.g. CubePilot Cube Orange, Pixhawk 6X, etc.]
Expand Down
59 changes: 59 additions & 0 deletions .github/actions/attest-and-upload/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Attest and Upload
description: Generate SBOM attestation and upload build artifact

inputs:
artifact-name:
description: 'Artifact filename (e.g. QGroundControl.AppImage)'
required: true
package-name:
description: 'Package name for GitHub artifact'
required: true
scan-path:
description: 'Path to scan for SBOM (defaults to build dir)'
required: false
default: ''
subject-name:
description: 'SBOM subject name (defaults to package-name)'
required: false
default: ''
aws-role-arn:
description: 'AWS IAM role ARN for OIDC authentication'
required: false
default: ''
aws-key-id:
description: 'AWS access key ID'
required: false
default: ''
aws-secret-access-key:
description: 'AWS secret access key'
required: false
default: ''
aws-distribution-id:
description: 'AWS CloudFront distribution ID'
required: false
default: ''
upload-aws:
description: 'Upload artifact to AWS'
required: false
default: 'true'

runs:
using: composite
steps:
- name: Attest Build with SBOM
uses: ./.github/actions/attest-sbom
with:
subject-path: ${{ runner.temp }}/build/${{ inputs.artifact-name }}
subject-name: ${{ inputs.subject-name || inputs.package-name }}
scan-path: ${{ inputs.scan-path || format('{0}/build', runner.temp) }}

- name: Upload Build File
uses: ./.github/actions/upload
with:
artifact-name: ${{ inputs.artifact-name }}
package-name: ${{ inputs.package-name }}
aws-role-arn: ${{ inputs.aws-role-arn }}
aws-key-id: ${{ inputs.aws-key-id }}
aws-secret-access-key: ${{ inputs.aws-secret-access-key }}
aws-distribution-id: ${{ inputs.aws-distribution-id }}
upload-aws: ${{ inputs.upload-aws }}
55 changes: 0 additions & 55 deletions .github/actions/attest-condition/action.yml

This file was deleted.

49 changes: 13 additions & 36 deletions .github/actions/attest-sbom/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,52 +25,29 @@ outputs:
runs:
using: composite
steps:
- name: Check attestation conditions
- name: Check attestation conditions and resolve paths
id: check
uses: ./.github/actions/attest-condition
with:
subject-path: ${{ inputs.subject-path }}

- name: Determine scan path
id: paths
if: steps.check.outputs.skip != 'true'
shell: bash
env:
SUBJECT_PATH: ${{ inputs.subject-path }}
SCAN_PATH: ${{ inputs.scan-path }}
SBOM_FORMAT: ${{ inputs.sbom-format }}
RUNNER_TEMP_DIR: ${{ runner.temp }}
SUBJECT_NAME: ${{ inputs.subject-name }}
EVENT_NAME: ${{ github.event_name }}
PR_REPO: ${{ github.event.pull_request.head.repo.full_name }}
THIS_REPO: ${{ github.repository }}
run: |
set -euo pipefail

subject_path="${SUBJECT_PATH}"
scan_path="${SCAN_PATH}"

if [[ -z "${scan_path}" ]]; then
scan_path="$(dirname "${subject_path}")"
fi

if [[ "${SBOM_FORMAT}" == "cyclonedx-json" ]]; then
suffix="cdx.json"
else
suffix="spdx.json"
fi
sbom_path="${RUNNER_TEMP_DIR}/${SUBJECT_NAME}.sbom.${suffix}"

echo "scan-path=${scan_path}" >> "${GITHUB_OUTPUT}"
echo "sbom-path=${sbom_path}" >> "${GITHUB_OUTPUT}"
echo "Scan path: ${scan_path}"
echo "SBOM path: ${sbom_path}"
python3 "${GITHUB_WORKSPACE}/.github/scripts/attest_helper.py" \
--subject-path "${{ inputs.subject-path }}" \
--subject-name "${{ inputs.subject-name }}" \
--scan-path "${{ inputs.scan-path }}" \
--sbom-format "${{ inputs.sbom-format }}" \
--runner-temp "${{ runner.temp }}"

- name: Generate SBOM
id: sbom
if: steps.check.outputs.skip != 'true'
uses: anchore/sbom-action@v0
with:
path: ${{ steps.paths.outputs.scan-path }}
path: ${{ steps.check.outputs.scan-path }}
format: ${{ inputs.sbom-format }}
output-file: ${{ steps.paths.outputs.sbom-path }}
output-file: ${{ steps.check.outputs.sbom-path }}
upload-artifact: true
upload-artifact-retention: 30
artifact-name: sbom-${{ inputs.subject-name }}
Expand All @@ -86,4 +63,4 @@ runs:
uses: actions/attest-sbom@v3
with:
subject-path: ${{ inputs.subject-path }}
sbom-path: ${{ steps.paths.outputs.sbom-path }}
sbom-path: ${{ steps.check.outputs.sbom-path }}
Loading
Loading