Compare commits

...

101 Commits

Author SHA1 Message Date
Jean Felder
5029b328b0
Merge c84954481637e139d1817456e7f40ea93eb40226 into b927df884feb840b67724af5c82c8088a9d20bfe 2025-07-02 13:17:38 +02:00
Loïc Bartoletti
b927df884f
Merge pull request #62484 from jef-n/fix-62478
fix #62478 (followup eac401c009)
2025-07-02 06:09:23 +02:00
qgis-bot
fe299930cd auto sipify 🍺 2025-07-01 23:40:57 +00:00
Mathieu Pellerin
8c7edbeec2 Rename rotation enum keys 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
ce2c8ac21f Address review 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
faf4afcba7 Fix case warning 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
4bad76d876 Where did my pre-commit hook go? 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
1f6c1277dd Lock rotation handle UI/UX behind an enabled boolean 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
ae463d8b75 Implement a ctrl modifier to snap to common angles when rotating item(s) 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
fb0d20942d Show rotation (delta) value in status bar 2025-07-02 11:38:05 +12:00
Mathieu Pellerin
1680a6cd2e [layouts] Brand new layout item rotation handles 2025-07-02 11:38:05 +12:00
Juergen E. Fischer
6fd32d92fd fix #62478 (followup eac401c009) 2025-07-01 17:54:58 +02:00
Juergen E. Fischer
74549aad26 Reapply "Allow free naming of project properties (#60855)"
This reverts commit fb11239112adfc321b3bbacbb20da888a7a37c23.
2025-07-01 09:08:44 +00:00
Juergen E. Fischer
eac401c009 if a plugin supports qt6 it should also support QGIS4 (fixes #62359) 2025-07-01 09:07:26 +00:00
Loïc Bartoletti
1f0166d35e
Merge pull request #62365 from benoitdm-oslandia/fix/cgibin_dir
fix: update default cgi-bin installation paths according to OS
2025-07-01 07:26:25 +02:00
Loïc Bartoletti
ada589bb1d
Merge pull request #62052 from martin-s42/visitPointsByRegularDistance-segfault-fix
fix segfault due to calling qgsDoubleNear with tollerance that can ne…
2025-07-01 06:59:03 +02:00
Alexander Bruy
08dd318614
Merge pull request #62463 from qgis/m-kuhn-patch-2
Add qtimageformats
2025-06-30 12:19:41 +01:00
Nyall Dawson
ac9051e2b6 Update src/core/CMakeLists.txt 2025-06-30 14:03:24 +12:00
Nyall Dawson
a940543035 Fix a number of warnings when building in c++20 mode 2025-06-30 14:03:24 +12:00
qgis-bot
d1528ee83d auto sipify 🍺 2025-06-29 23:10:34 +00:00
Mathieu Pellerin
d49bfa66ee Disable bogus lint warnings 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
d31b74c0ae Address review 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
231929e6e3 Make the feature filter provider thread friendly, relocate old filter classes back into server 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
8133424f5e Address review 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
d8d7d5480e Fix rebase conflict 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
42e2fbfc09 Add test masks 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
6c9e71fae2 Sipify, again! 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
d2377a0c48 Sipify 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
432e29a504 Add test coverage 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
cc17d79bd7 [layout] Add an atlas option to limit coverage layer rendering to the current feature only 2025-06-30 11:07:37 +12:00
Mathieu Pellerin
cbee242034 Move QgsFeatureFilter and QgsFeatureFilterProviderGroup from server into core 2025-06-30 11:07:37 +12:00
github-actions[bot]
e5ee5686c1 auto-fix pre-commit issues 2025-06-29 23:04:38 +00:00
Harrissou Sant-anna
8c0a4221e1 Add more methods to the Processing script template 2025-06-30 11:03:42 +12:00
David Koňařík
174c548d40 Improve camera XML format per review suggestion 2025-06-29 19:44:56 +02:00
David Koňařík
19ded7be74 Fix saving/loading 3D map view viewpoint
Previously the point was saved in origin-relative coordinates. Now since
we pick the origin automatically, it can be changed by various
initialisation routines, so the coordinates will be interpreted relative
to the wrong origin.

This commit changes the format to use map coordinates instead, and saves
the "original" origin from the XML for interpreting older projects.
2025-06-29 19:44:56 +02:00
Matthias Kuhn
89dbd40b8f
Add qtimageformats 2025-06-29 13:02:03 +02:00
Germán Carrillo
429500187c [tests] Add more tests for extent parameter in Package Layers algorithm 2025-06-29 09:00:21 +12:00
Germán Carrillo
cd7a0f9ce4 [tests] Tests for extent parameter in Package Layers algorithm 2025-06-29 09:00:21 +12:00
Germán Carrillo
700ba50d15 [feature] Add optional extent parameter for Package Layers alg., to only export features that intersect a given extent 2025-06-29 09:00:21 +12:00
Alexander Bruy
4edb67501a
Merge pull request #62438 from uclaros/fix-vtiles-longint
Fix overflow in vector tile long int attributes
2025-06-27 15:38:04 +01:00
bdm-oslandia
b1c8ef3265 fixup! fix: update default cgi-bin installation paths according to OS 2025-06-27 09:35:48 +02:00
Alessandro Pasotti
b32ddd8972
Merge pull request #62429 from dvdkon/fix-exit-crash
Fix crash when exiting QGIS
2025-06-27 08:15:13 +02:00
Nyall Dawson
e388375c71 Bump workflow python versions 2025-06-27 16:18:55 +12:00
Nyall Dawson
e13978d61f Bump minimum Python version to 3.11 2025-06-27 16:18:55 +12:00
Matthias Kuhn
852d84a8c8
Merge pull request #62433 from m-kuhn/network-comm
[macos] Local network communication
2025-06-27 05:52:00 +02:00
uclaros
7e1d3bb944 Fix overflow in vector tile long int attributes 2025-06-26 16:58:11 +03:00
Matthias Kuhn
c36d211e8b Local network communication 2025-06-26 11:49:46 +02:00
David Koňařík
4a0477af3c Fix crash when exiting QGIS
The handler was being called when the QgsAuthConfigurationStorageDb
object had been already destroyed.
2025-06-26 09:58:56 +02:00
Alessandro Pasotti
c637e42516
Merge pull request #62394 from elpaso/server-wfs-3d-z-gml-part-2-server
[server] Server WFS Z gml transactional support
2025-06-26 09:19:40 +02:00
Nyall Dawson
ea4fa041e8 Update README 2025-06-26 11:49:00 +12:00
Nyall Dawson
b9c2611153 Remove xca project folder
Keys are now generated with a script
2025-06-26 11:49:00 +12:00
Nyall Dawson
b3920f056f Revert "[Tests] Disable 7 tests that break due to expired certificate"
This reverts commit 47576382adeea10d5392bd36d1fcc277d6172496.
2025-06-26 11:49:00 +12:00
Nyall Dawson
e06fec0084 Add script to regenerate auth certificates 2025-06-26 11:49:00 +12:00
Martin Dobias
37449ae90f More robust way to pick zoom level of a scene layer (2D)
For world-wide datasets like google 3d tiles or quantized mesh terrains,
when zoomed full, the 2D map canvas would fetch tiles at a much more
detailed zoom level than I would expect. It turned out this was because
of ellipsoidal distance calculation on full extent width, where we would
often calculate much shorter distances than we should.

To make it more robust, we use only one pixel distance at the center
of the map, which should avoid these issues.
2025-06-26 10:33:04 +12:00
Matthias Kuhn
85637da1f1
Remove spaces from master build ids 2025-06-25 20:22:17 +02:00
Matthias Kuhn
ced6fd5280
Use filename instead of display-name 2025-06-25 18:49:54 +02:00
Matthias Kuhn
2b1c9fe053
Fix ccache id for macos 2025-06-25 16:08:44 +02:00
Matthias Kuhn
4fa4a323ff
Merge pull request #62407 from qgis/py-duckdb
Add py-duckdb and fix master builds of mac packages
2025-06-25 15:40:03 +02:00
Matthias Kuhn
244746fde0 Fixed target name and configurable executable name 2025-06-25 09:52:05 +02:00
Matthias Kuhn
99ff547e69 vcpkg-diff: graceful with * at the start of the line 2025-06-25 09:23:53 +02:00
Matthias Kuhn
ae81584a3f Add py-duckdb 2025-06-25 08:56:01 +02:00
bdm-oslandia
f4cf09d4b0 fixup! fix: update default cgi-bin installation paths according to OS 2025-06-25 08:29:52 +02:00
bdm-oslandia
9db58e3726 fixup! fix: update default cgi-bin installation paths according to OS 2025-06-24 17:37:57 +02:00
Alessandro Pasotti
379a3ee48b Add server tests for Z WFS transactions 2025-06-24 10:45:38 +02:00
Alessandro Pasotti
755fe2dec0 Restore patch from julien 2025-06-24 10:36:33 +02:00
Alessandro Pasotti
0a5242ac96 Server WFS: GML Z transaction support 2025-06-24 10:36:33 +02:00
bdm-oslandia
551aa20f20 fix: update default cgi-bin installation paths according to OS 2025-06-23 10:44:49 +02:00
Jean Felder
c849544816
tests: Update test_core_layoutmanualtable masks for qt 6.9 2025-06-17 22:10:55 +02:00
Jean Felder
42dc01b772
tests: Update test_core_layoutlabel masks for qt 6.9 2025-06-17 22:10:54 +02:00
Jean Felder
0632f2edbb
tests: Update test_core_layouttable tests for qt 6.9 2025-06-17 22:10:54 +02:00
Jean Felder
b2538d2259
tests: Update test_core_legendrenderer tests for qt 6.9 2025-06-17 22:10:54 +02:00
Jean Felder
8f16dcfa73
tests: Update test_core_datadefinedsizelegend masks for qt 6.9 2025-06-17 22:10:53 +02:00
Jean Felder
4f1f3056b6
tests: Update PyQgsTextRenderer masks for qt 6.9 2025-06-17 22:10:53 +02:00
Jean Felder
a6c084fb17
tests: Update PyQgsServerWMSGetPrintOutputs tests for qt 6.9 2025-06-17 21:46:21 +02:00
Jean Felder
b357daacd5
tests: Update PyQgsServerWMSGetPrintExtra masks for qt 6.9 2025-06-17 21:46:20 +02:00
Jean Felder
a116c74164
tests: Update PyQgsServerWMSGetPrint masks for qt 6.9 2025-06-17 21:46:20 +02:00
Jean Felder
2380db7f18
tests: Update PyQgsServerWMSGetMap masks for qt 6.9 2025-06-17 21:46:19 +02:00
Jean Felder
8f86f2e22e
tests: Update PyQgsServerWMSGetLegendGraphic masks for qt 6.9 2025-06-17 21:46:19 +02:00
Jean Felder
caf413d3ad
tests: Update PyQgsProfileSourceRegistry masks for qt 6.9 2025-06-17 21:46:18 +02:00
Jean Felder
707b54f739
tests: Update PyQgsMeshLayerLabeling masks for qt 6.9 2025-06-17 21:46:18 +02:00
Jean Felder
0c45184799
tests: Update PyQgsLayoutMap masks for qt 6.9 2025-06-17 21:46:17 +02:00
Jean Felder
d4b0cc7819
tests: Update PyQgsLayoutLegend masks for qt 6.9 2025-06-17 21:46:17 +02:00
Jean Felder
f89c2b0364
tests: Update PyQgsRasterLabeling masks for qt 6.9 2025-06-17 21:46:16 +02:00
Jean Felder
62f0f5c94e
tests: Update elevation profile masks for qt 6.9 2025-06-17 21:46:16 +02:00
Jean Felder
dadbf039ea
tests: Update test_core_maprendererjob masks for qt 6.9 2025-06-17 21:45:55 +02:00
Jean Felder
fb449b1cfc
tests: Update test_core_layoutscalebar masks for qt 6.9 2025-06-16 18:43:10 +02:00
Jean Felder
2a7a329347
tests: Update PyQgsLayoutAtlas masks for qt 6.9 2025-06-16 18:43:10 +02:00
Jean Felder
31e6fe6906
tests: Update PyQgsColorRampLegendNode masks for qt 6.9 2025-06-16 18:43:09 +02:00
Jean Felder
5a17c9c7bc
tests: Update maprotation masks for qt 6.9 2025-06-16 18:43:09 +02:00
Jean Felder
a97bc042d5
tests: Update pallabeling masks for qt 6.9 2025-06-16 18:43:08 +02:00
Jean Felder
98adc45f3b
tests: Update core_callout masks for qt 6.9 2025-06-16 18:43:08 +02:00
Jean Felder
c3b62d98b9
chore(ci): Upgrade to fedora 42 2025-06-16 10:40:10 +02:00
Jean Felder
a160613e9b
tests: Update selective masking masks for qt 6.9 2025-06-16 10:40:10 +02:00
Jean Felder
cdc03196db
tests: Update qgswebengine masks for qt 6.9 2025-06-12 19:46:43 +02:00
Jean Felder
37be88f82c
tests: Update svg cache masks for qt 6.9 2025-06-12 19:46:42 +02:00
Jean Felder
0cb2a6573b
tests: Update annotation picture item masks for qt 6.9 2025-06-12 19:46:42 +02:00
Jean Felder
f57367d269
tests: Update svg marker masks for qt 6.9 2025-06-12 19:46:42 +02:00
Jean Felder
1973267cb3
tests: Update composer label masks for qt 6.9 2025-06-12 19:46:41 +02:00
Jean Felder
b426450728
tests(hillshade): Update hash for fedora 42 2025-06-12 19:46:41 +02:00
Jean Felder
b6798e1d92
test(grass): Update hash for fedora 42 2025-06-12 19:46:41 +02:00
Martin Siegert
a156c43f7b
fix segfault due to calling qgsDoubleNear with tollerance that can never been reached
see issue #60772: function interpolatePoint in qgsabstractprofilesurfacegenerator.cpp:157 can return a nullpointer causing a segfault because qgsDoubleNear in visitPointsByRegularDistance in qgslinestring.cpp is called with a tolerance that is too small so that qgsDoubleNear always returns false. Solution: scale epsilon by the size of the numbers to be compared.
2025-05-29 13:37:03 -07:00
926 changed files with 7604 additions and 4649 deletions

View File

@ -1,4 +1,4 @@
ARG DISTRO_VERSION=39 ARG DISTRO_VERSION=42
FROM fedora:${DISTRO_VERSION} AS binary-for-oracle FROM fedora:${DISTRO_VERSION} AS binary-for-oracle
LABEL org.opencontainers.image.authors="Matthias Kuhn <matthias@opengis.ch>" LABEL org.opencontainers.image.authors="Matthias Kuhn <matthias@opengis.ch>"

1
.gitattributes vendored
View File

@ -1,2 +1,3 @@
*.sip export-subst *.sip export-subst
*.py export-subst *.py export-subst
tests/testdata/auth_system/certs_keys/donald_key_DSA_crlf.pem text eol=crlf

View File

@ -26,7 +26,7 @@ runs:
SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7) SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)
BRANCH_NAME=${GITHUB_REF#refs/heads/} BRANCH_NAME=${GITHUB_REF#refs/heads/}
ID="$BRANCH_NAME-$SHORT_SHA" ID="$BRANCH_NAME-$SHORT_SHA"
DISPLAY_ID="$BRANCH_NAME build $SHORT_SHA" DISPLAY_ID="$BRANCH_NAME-$SHORT_SHA"
fi fi
# Set outputs # Set outputs

View File

@ -10,7 +10,7 @@ def extract_packages(data):
for line in lines: for line in lines:
# Regex to match the package format and capture features inside brackets # Regex to match the package format and capture features inside brackets
match = re.match( match = re.match(
r"\s*\*\s+([^\[\]:]+)(?:\[(.*?)\])?:([^\[\]@]+)@([^\s]+)\s+--", line r"\s*\*?\s+([^\[\]:]+)(?:\[(.*?)\])?:([^\[\]@]+)@([^\s]+)\s+--", line
) )
if match: if match:
package_name = match.group(1) package_name = match.group(1)

View File

@ -67,8 +67,8 @@ jobs:
uses: hendrikmuhs/ccache-action@v1.2 uses: hendrikmuhs/ccache-action@v1.2
with: with:
max-size: 500M max-size: 500M
key: build-ccache-win64-qt6-${{ github.event.pull_request.base.ref || github.ref_name }} key: build-ccache-${{ matrix.triplet }}-qt6-${{ github.event.pull_request.base.ref || github.ref_name }}
# save: ${{ github.event_name == 'push' }} save: ${{ github.event_name == 'push' }}
- name: 🛍️ Tune ccache configuration - name: 🛍️ Tune ccache configuration
shell: bash shell: bash
@ -136,14 +136,14 @@ jobs:
- name: Archive app - name: Archive app
run: | run: |
gtar -cpvzf qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-${{ matrix.triplet }}.tar.gz ./build/_CPack_Packages/Darwin/External/*/*.app gtar -cpvzf qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-${{ matrix.triplet }}.tar.gz ./build/_CPack_Packages/Darwin/External/*/*.app
- name: 📤 Upload app - name: 📤 Upload app
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-${{ matrix.triplet }} name: qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-${{ matrix.triplet }}
path: | path: |
qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-${{ matrix.triplet }}.tar.gz qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-${{ matrix.triplet }}.tar.gz
schedule_download_comment: schedule_download_comment:
name: Create dmg name: Create dmg
@ -165,16 +165,16 @@ jobs:
- name: 📤 Download app - name: 📤 Download app
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
pattern: qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-* pattern: qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-*
path: | path: |
artifacts artifacts
- name: Create universal app - name: Create universal app
run: | run: |
mkdir -p x64 mkdir -p x64
gtar --strip-components=5 -zxf ./artifacts/qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-x64-osx-dynamic-release/qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-x64-osx-dynamic-release.tar.gz -C x64 gtar --strip-components=5 -zxf ./artifacts/qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-x64-osx-dynamic-release/qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-x64-osx-dynamic-release.tar.gz -C x64
mkdir -p arm64 mkdir -p arm64
gtar --strip-components=5 -zxf ./artifacts/qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-arm64-osx-dynamic-release/qgis-app-${{steps.workflow-artifact-ids.outputs.display-name}}-arm64-osx-dynamic-release.tar.gz -C arm64 gtar --strip-components=5 -zxf ./artifacts/qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-arm64-osx-dynamic-release/qgis-app-${{steps.workflow-artifact-ids.outputs.filename}}-arm64-osx-dynamic-release.tar.gz -C arm64
pip install lipomerge pip install lipomerge
lipomerge ./x64 ./arm64 universal lipomerge ./x64 ./arm64 universal
@ -198,7 +198,7 @@ jobs:
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
id: artifact-mac-qt6 id: artifact-mac-qt6
with: with:
name: qgis-${{steps.workflow-artifact-ids.outputs.display-name}}-dmg name: qgis-${{steps.workflow-artifact-ids.outputs.filename}}-dmg
path: | path: |
*.dmg *.dmg

View File

@ -24,10 +24,10 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Set up Python 3.10 - name: Set up Python
uses: actions/setup-python@v5 uses: actions/setup-python@v5
with: with:
python-version: '3.10' python-version: '3.13'
- name: Install requirements - name: Install requirements
run: | run: |
wget https://www.doxygen.nl/files/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz wget https://www.doxygen.nl/files/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz
@ -176,10 +176,10 @@ jobs:
sip_check: sip_check:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Set up Python 3.12 - name: Set up Python
uses: actions/setup-python@v5 uses: actions/setup-python@v5
with: with:
python-version: '3.12' python-version: '3.13'
- name: Install Requirements - name: Install Requirements
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
@ -214,6 +214,6 @@ jobs:
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v5 uses: actions/setup-python@v5
with: with:
python-version: '3.12' python-version: '3.13'
- name: Run Check - name: Run Check
run: python3 scripts/includemocs.py src --dry-run run: python3 scripts/includemocs.py src --dry-run

View File

@ -59,7 +59,7 @@ jobs:
experimental: false experimental: false
unity-builds: ON unity-builds: ON
- distro-version: '39' - distro-version: '42'
qt-version: 6 qt-version: 6
run-tests: true run-tests: true
with-qt6: ON with-qt6: ON
@ -251,7 +251,7 @@ jobs:
docker-target: binary-only docker-target: binary-only
- qt-version: 6 - qt-version: 6
distro-version: 39 distro-version: 42
docker-target: binary-only docker-target: binary-only
- qt-version: 5 - qt-version: 5

View File

@ -14,7 +14,7 @@ jobs:
- uses: actions/setup-python@v5 - uses: actions/setup-python@v5
with: with:
python-version: '3.12' python-version: '3.13'
- name: Install Requirements - name: Install Requirements
run: pip install nose2 mock termcolor pyyaml run: pip install nose2 mock termcolor pyyaml

View File

@ -67,11 +67,7 @@ set(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINO
set(RELEASE_NAME "Master") set(RELEASE_NAME "Master")
project(qgis VERSION ${COMPLETE_VERSION}) project(qgis VERSION ${COMPLETE_VERSION})
if (APPLE) set(QGIS_APP_NAME "qgis" CACHE STRING "The main app name and bundle name")
set(QGIS_APP_NAME "QGIS" CACHE STRING "The main app name and bundle name")
else()
set(QGIS_APP_NAME "qgis")
endif()
# Note the version no is Mmmpp for Major/minor/patch, 0-padded, thus '10100' for 1.1.0 # Note the version no is Mmmpp for Major/minor/patch, 0-padded, thus '10100' for 1.1.0
math(EXPR QGIS_VERSION_INT "${CPACK_PACKAGE_VERSION_MAJOR}*10000+${CPACK_PACKAGE_VERSION_MINOR}*100+${CPACK_PACKAGE_VERSION_PATCH}") math(EXPR QGIS_VERSION_INT "${CPACK_PACKAGE_VERSION_MAJOR}*10000+${CPACK_PACKAGE_VERSION_MINOR}*100+${CPACK_PACKAGE_VERSION_PATCH}")
@ -899,7 +895,7 @@ if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" ST
include("cmake/modules/linker.cmake") include("cmake/modules/linker.cmake")
endif() endif()
set(MIN_PYTHON_VERSION "3.9") set(MIN_PYTHON_VERSION "3.11")
set(Python_FIND_FRAMEWORK "LAST") set(Python_FIND_FRAMEWORK "LAST")
if (WITH_BINDINGS) if (WITH_BINDINGS)
@ -983,7 +979,31 @@ if (WITH_CORE)
else() else()
# UNIX # UNIX
set (DEFAULT_BIN_SUBDIR bin) set (DEFAULT_BIN_SUBDIR bin)
set (DEFAULT_CGIBIN_SUBDIR bin)
# From https://www.cyberciti.biz/faq/how-do-i-find-the-url-for-my-cgi-bin/
execute_process(COMMAND lsb_release -a OUTPUT_VARIABLE LSB_RELEASE_A)
if(EXISTS "/etc/fedora-release")
# in /var/www/cgi-bin
set (DEFAULT_CGIBIN_SUBDIR www/cgi-bin)
elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "FreeBSD")
# in /usr/local/www/cgi-bin/
set (DEFAULT_CGIBIN_SUBDIR www/cgi-bin)
elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "BSD")
# in /usr/local/libexec/cgi-bin/
set (DEFAULT_CGIBIN_SUBDIR libexec/cgi-bin)
elseif ("${LSB_RELEASE_A}" MATCHES "Ubuntu" OR "${LSB_RELEASE_A}" MATCHES "Debian" OR "${LSB_RELEASE_A}" MATCHES "Mint")
# in /usr/lib/cgi-bin/
set (DEFAULT_CGIBIN_SUBDIR lib/cgi-bin)
else()
# others: Red Hat/CentOS/Rocky/Alma Linux
# in /var/www/cgi-bin/
set (DEFAULT_CGIBIN_SUBDIR www/cgi-bin)
endif()
set (DEFAULT_LIB_SUBDIR lib${LIB_SUFFIX}) set (DEFAULT_LIB_SUBDIR lib${LIB_SUFFIX})
set (DEFAULT_DATA_SUBDIR share/qgis) set (DEFAULT_DATA_SUBDIR share/qgis)
set (DEFAULT_LIBEXEC_SUBDIR lib${LIB_SUFFIX}/qgis) set (DEFAULT_LIBEXEC_SUBDIR lib${LIB_SUFFIX}/qgis)

View File

@ -102,7 +102,7 @@ Required build tools:
* CMake >= 3.12.0 * CMake >= 3.12.0
* Flex >= 2.5.6 * Flex >= 2.5.6
* Bison >= 2.4 * Bison >= 2.4
* Python >= 3.7 * Python >= 3.11
Required build dependencies: Required build dependencies:

View File

@ -4,7 +4,7 @@ set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BundleConfig.cmake")
add_custom_target(bundle add_custom_target(bundle
COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake" "--verbose" COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake" "--verbose"
COMMENT "Running CPACK. Please wait..." COMMENT "Running CPACK. Please wait..."
DEPENDS "${QGIS_APP_NAME}") DEPENDS qgis)
if(WIN32 AND NOT UNIX) if(WIN32 AND NOT UNIX)
set (CREATE_NSIS FALSE CACHE BOOL "Create an installer using NSIS") set (CREATE_NSIS FALSE CACHE BOOL "Create an installer using NSIS")

View File

@ -52,7 +52,7 @@ add_custom_target (translations ALL DEPENDS ${QM_FILES} ${MD_FILES})
# first compile sources, then compile translations # first compile sources, then compile translations
if (WITH_DESKTOP) if (WITH_DESKTOP)
add_dependencies (translations ${QGIS_APP_NAME}) add_dependencies (translations qgis)
endif() endif()
install (FILES ${QM_FILES} install (FILES ${QM_FILES}

View File

@ -336,14 +336,11 @@
<string>zh_CN</string> <string>zh_CN</string>
<string>zh_TW</string> <string>zh_TW</string>
</array> </array>
<key>LSEnvironment</key>
<dict>
<key>QT_AUTO_SCREEN_SCALE_FACTOR</key>
<string>1</string>
</dict>
<key>NSPrincipalClass</key> <key>NSPrincipalClass</key>
<string>NSApplication</string> <string>NSApplication</string>
<key>NSHighResolutionCapable</key> <key>NSHighResolutionCapable</key>
<string>True</string> <string>True</string>
<key>NSLocalNetworkUsageDescription</key>
<string>QGIS needs local network access to communicate with devices on your network.</string>
</dict> </dict>
</plist> </plist>

View File

@ -62,7 +62,7 @@ Returns intensity of the light
Sets intensity of the light Sets intensity of the light
%End %End
bool operator==( const QgsDirectionalLightSettings &other ); bool operator==( const QgsDirectionalLightSettings &other ) const;
}; };

View File

@ -95,7 +95,7 @@ Returns quadratic attenuation (A_2)
Sets quadratic attenuation (A_2) Sets quadratic attenuation (A_2)
%End %End
bool operator==( const QgsPointLightSettings &other ); bool operator==( const QgsPointLightSettings &other ) const;
}; };

View File

@ -153,7 +153,7 @@ pointing towards north. The angle should range from 0 to 360.
%Docstring %Docstring
Writes camera configuration to the given DOM element Writes camera configuration to the given DOM element
%End %End
void readXml( const QDomElement &elem ); void readXml( const QDomElement &elem, QgsVector3D savedOrigin );
%Docstring %Docstring
Reads camera configuration from the given DOM element Reads camera configuration from the given DOM element
%End %End

View File

@ -62,7 +62,7 @@ Returns intensity of the light
Sets intensity of the light Sets intensity of the light
%End %End
bool operator==( const QgsDirectionalLightSettings &other ); bool operator==( const QgsDirectionalLightSettings &other ) const;
}; };

View File

@ -95,7 +95,7 @@ Returns quadratic attenuation (A_2)
Sets quadratic attenuation (A_2) Sets quadratic attenuation (A_2)
%End %End
bool operator==( const QgsPointLightSettings &other ); bool operator==( const QgsPointLightSettings &other ) const;
}; };

View File

@ -153,7 +153,7 @@ pointing towards north. The angle should range from 0 to 360.
%Docstring %Docstring
Writes camera configuration to the given DOM element Writes camera configuration to the given DOM element
%End %End
void readXml( const QDomElement &elem ); void readXml( const QDomElement &elem, QgsVector3D savedOrigin );
%Docstring %Docstring
Reads camera configuration from the given DOM element Reads camera configuration from the given DOM element
%End %End

View File

@ -10135,6 +10135,9 @@ QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks = Qgis.LayoutRenderFlag.AlwaysUs
QgsLayoutRenderContext.Flag.FlagAlwaysUseGlobalMasks = Qgis.LayoutRenderFlag.AlwaysUseGlobalMasks QgsLayoutRenderContext.Flag.FlagAlwaysUseGlobalMasks = Qgis.LayoutRenderFlag.AlwaysUseGlobalMasks
QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.is_monkey_patched = True QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.is_monkey_patched = True
QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.__doc__ = "When applying clipping paths for selective masking, always use global (\"entire map\") paths, instead of calculating local clipping paths per rendered feature. This results in considerably more complex layout exports in all current Qt versions. This flag only applies to vector layout exports. \n.. versionadded:: 3.38" QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.__doc__ = "When applying clipping paths for selective masking, always use global (\"entire map\") paths, instead of calculating local clipping paths per rendered feature. This results in considerably more complex layout exports in all current Qt versions. This flag only applies to vector layout exports. \n.. versionadded:: 3.38"
QgsLayoutRenderContext.LimitCoverageLayerRenderToCurrentFeature = Qgis.LayoutRenderFlag.LimitCoverageLayerRenderToCurrentFeature
QgsLayoutRenderContext.LimitCoverageLayerRenderToCurrentFeature.is_monkey_patched = True
QgsLayoutRenderContext.LimitCoverageLayerRenderToCurrentFeature.__doc__ = "Limit coverage layer rendering to the current atlas feature. \n.. versionadded:: 4.0"
Qgis.LayoutRenderFlag.__doc__ = """Flags for controlling how a layout is rendered. Qgis.LayoutRenderFlag.__doc__ = """Flags for controlling how a layout is rendered.
.. note:: .. note::
@ -10200,6 +10203,10 @@ Qgis.LayoutRenderFlag.__doc__ = """Flags for controlling how a layout is rendere
Available as ``QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks`` in older QGIS releases. Available as ``QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks`` in older QGIS releases.
* ``LimitCoverageLayerRenderToCurrentFeature``: Limit coverage layer rendering to the current atlas feature.
.. versionadded:: 4.0
""" """
# -- # --
@ -11498,6 +11505,10 @@ Qgis.MouseHandlesAction.ResizeLeftUp.__doc__ = "Resize left up (Top left handle)
Qgis.MouseHandlesAction.ResizeRightUp.__doc__ = "Resize right up (Top right handle)" Qgis.MouseHandlesAction.ResizeRightUp.__doc__ = "Resize right up (Top right handle)"
Qgis.MouseHandlesAction.ResizeLeftDown.__doc__ = "Resize left down (Bottom left handle)" Qgis.MouseHandlesAction.ResizeLeftDown.__doc__ = "Resize left down (Bottom left handle)"
Qgis.MouseHandlesAction.ResizeRightDown.__doc__ = "Resize right down (Bottom right handle)" Qgis.MouseHandlesAction.ResizeRightDown.__doc__ = "Resize right down (Bottom right handle)"
Qgis.MouseHandlesAction.RotateTopLeft.__doc__ = "Rotate from top left handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.RotateTopRight.__doc__ = "Rotate from top right handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.RotateBottomLeft.__doc__ = "Rotate from bottom left handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.RotateBottomRight.__doc__ = "Rotate right bottom right handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.SelectItem.__doc__ = "Select item" Qgis.MouseHandlesAction.SelectItem.__doc__ = "Select item"
Qgis.MouseHandlesAction.NoAction.__doc__ = "No action" Qgis.MouseHandlesAction.NoAction.__doc__ = "No action"
Qgis.MouseHandlesAction.__doc__ = """Action to be performed by the mouse handles Qgis.MouseHandlesAction.__doc__ = """Action to be performed by the mouse handles
@ -11513,6 +11524,22 @@ Qgis.MouseHandlesAction.__doc__ = """Action to be performed by the mouse handles
* ``ResizeRightUp``: Resize right up (Top right handle) * ``ResizeRightUp``: Resize right up (Top right handle)
* ``ResizeLeftDown``: Resize left down (Bottom left handle) * ``ResizeLeftDown``: Resize left down (Bottom left handle)
* ``ResizeRightDown``: Resize right down (Bottom right handle) * ``ResizeRightDown``: Resize right down (Bottom right handle)
* ``RotateTopLeft``: Rotate from top left handle.
.. versionadded:: 4.0
* ``RotateTopRight``: Rotate from top right handle.
.. versionadded:: 4.0
* ``RotateBottomLeft``: Rotate from bottom left handle.
.. versionadded:: 4.0
* ``RotateBottomRight``: Rotate right bottom right handle.
.. versionadded:: 4.0
* ``SelectItem``: Select item * ``SelectItem``: Select item
* ``NoAction``: No action * ``NoAction``: No action

View File

@ -0,0 +1,5 @@
# The following has been generated automatically from src/core/qgsfeatureexpressionfilterprovider.h
try:
QgsFeatureExpressionFilterProvider.__overridden_methods__ = ['filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError):
pass

View File

@ -1,5 +1,6 @@
# The following has been generated automatically from src/core/qgsfeaturefilterprovider.h # The following has been generated automatically from src/core/qgsfeaturefilterprovider.h
try: try:
QgsFeatureFilterProvider.__abstract_methods__ = ['filterFeatures', 'layerAttributes', 'clone'] QgsFeatureFilterProvider.__virtual_methods__ = ['isFilterThreadSafe', 'filterFeatures']
QgsFeatureFilterProvider.__abstract_methods__ = ['layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -0,0 +1,5 @@
# The following has been generated automatically from src/core/qgsgroupedfeaturefilterprovider.h
try:
QgsGroupedFeatureFilterProvider.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError):
pass

View File

@ -73,6 +73,26 @@ Sets whether the coverage layer should be hidden in map items in the
layouts. layouts.
.. seealso:: :py:func:`hideCoverage` .. seealso:: :py:func:`hideCoverage`
%End
bool limitCoverageLayerRenderToCurrentFeature() const;
%Docstring
Returns ``True`` if the atlas is set to limit rendering on the coverage
layer to the current feature.
.. seealso:: :py:func:`setHideCoverage`
.. versionadded:: 4.0
%End
void setLimitCoverageLayerRenderToCurrentFeature( bool limit );
%Docstring
Sets whether the rendering of the coverage layer should be limited to
the current feature.
.. seealso:: :py:func:`hideCoverage`
.. versionadded:: 4.0
%End %End
QString filenameExpression() const; QString filenameExpression() const;

View File

@ -2912,6 +2912,7 @@ The development version
LosslessImageRendering, LosslessImageRendering,
SynchronousLegendGraphics, SynchronousLegendGraphics,
AlwaysUseGlobalMasks, AlwaysUseGlobalMasks,
LimitCoverageLayerRenderToCurrentFeature,
}; };
typedef QFlags<Qgis::LayoutRenderFlag> LayoutRenderFlags; typedef QFlags<Qgis::LayoutRenderFlag> LayoutRenderFlags;
@ -3346,6 +3347,10 @@ The development version
ResizeRightUp, ResizeRightUp,
ResizeLeftDown, ResizeLeftDown,
ResizeRightDown, ResizeRightDown,
RotateTopLeft,
RotateTopRight,
RotateBottomLeft,
RotateBottomRight,
SelectItem, SelectItem,
NoAction NoAction
}; };

View File

@ -0,0 +1,57 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeatureexpressionfilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsFeatureExpressionFilterProvider : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A feature filter provider allowing to set filter expressions on a
per-layer basis.
.. versionadded:: 4.0
%End
%TypeHeaderCode
#include "qgsfeatureexpressionfilterprovider.h"
%End
public:
QgsFeatureExpressionFilterProvider();
%Docstring
Constructor
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated/;
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureExpressionFilterProvider *clone() const /Factory/;
void setFilter( const QString &layerId, const QgsExpression &expression );
%Docstring
Set a filter for the given layer.
:param layerId: the layer to filter
:param expression: the filter expression
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeatureexpressionfilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -0,0 +1,93 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilter.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsFeatureFilter : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A feature filter provider allowing to set filter expressions on a
per-layer basis.
%End
%TypeHeaderCode
#include "qgsfeaturefilter.h"
%End
public:
QgsFeatureFilter();
%Docstring
Constructor
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring
Filter the features of the layer
:param layer: the layer to control
:param filterFeatures: the request to fill
.. deprecated:: 4.0
Use the layer ID variant.
%End
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer
:param layerId: the layer ID to control
:param filterFeatures: the request to fill
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
void setFilter( const QgsVectorLayer *layer, const QgsExpression &expression ) /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring
Set a filter for the given layer.
:param layer: the layer to filter
:param expression: the filter expression
.. deprecated:: 4.0
Use the layer ID variant.
%End
void setFilter( const QString &layerId, const QgsExpression &expression );
%Docstring
Set a filter for the given layer.
:param layerId: the layer to filter
:param expression: the filter expression
.. versionadded:: 4.0
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilter.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -30,7 +30,17 @@ also available.
public: public:
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &featureRequest ) const = 0; virtual bool isFilterThreadSafe() const /Deprecated="Since 4.0. "/;
%Docstring
Returns ``True`` if the filterFeature function is thread safe, which
will lead to reliance on layer ID instead of the raw layer pointer.
.. versionadded:: 4.0
.. deprecated:: 4.0
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &featureRequest ) const /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring %Docstring
Add additional filters to the feature request to further restrict the Add additional filters to the feature request to further restrict the
features returned by the request. Derived classes must implement this features returned by the request. Derived classes must implement this
@ -38,6 +48,22 @@ method.
:param layer: the layer to filter :param layer: the layer to filter
:param featureRequest: the feature request to update :param featureRequest: the feature request to update
.. deprecated:: 4.0
Use the layer ID variant.
%End
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &featureRequest ) const;
%Docstring
Add additional filters to the feature request to further restrict the
features returned by the request. Derived classes must implement this
method.
:param layerId: the layer ID to filter
:param featureRequest: the feature request to update
.. versionadded:: 4.0
%End %End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const = 0; virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const = 0;

View File

@ -0,0 +1,81 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilterprovidergroup.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsFeatureFilterProviderGroup : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A filter filter provider grouping several filter providers.
%End
%TypeHeaderCode
#include "qgsfeaturefilterprovidergroup.h"
%End
public:
QgsFeatureFilterProviderGroup();
%Docstring
Constructor
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring
Filter the features of the layer.
:param layer: the layer to control
:param filterFeatures: the request to fill
.. deprecated:: 4.0
Use the layer ID variant.
%End
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer.
:param layerId: the layer ID to control
:param filterFeatures: the request to fill
.. versionadded:: 4.0
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
QgsFeatureFilterProviderGroup &addProvider( const QgsFeatureFilterProvider *provider );
%Docstring
Add another filter provider to the group
:param provider: The provider to add
:return: itself
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilterprovidergroup.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -0,0 +1,60 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsgroupedfeaturefilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsGroupedFeatureFilterProvider : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A filter filter provider grouping several filter providers.
.. versionadded:: 4.0
%End
%TypeHeaderCode
#include "qgsgroupedfeaturefilterprovider.h"
%End
public:
QgsGroupedFeatureFilterProvider();
%Docstring
Constructor
%End
virtual bool isFilterThreadSafe() const /Deprecated/;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated/;
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsGroupedFeatureFilterProvider *clone() const /Factory/;
QgsGroupedFeatureFilterProvider &addProvider( const QgsFeatureFilterProvider *provider );
%Docstring
Add another filter provider to the group
:param provider: The provider to add
:return: itself
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsgroupedfeaturefilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -1,14 +1,14 @@
Qgis.defaultProjectScales: src/core/qgis.h#L6067 Qgis.defaultProjectScales: src/core/qgis.h#L6072
Qgis.devVersion: src/core/qgis.h#L89 Qgis.devVersion: src/core/qgis.h#L89
Qgis.geoNone: src/core/qgis.h#L6112 Qgis.geoNone: src/core/qgis.h#L6117
Qgis.geoProj4: src/core/qgis.h#L6142 Qgis.geoProj4: src/core/qgis.h#L6147
Qgis.geoWkt: src/core/qgis.h#L6133 Qgis.geoWkt: src/core/qgis.h#L6138
Qgis.geographicCrsAuthId: src/core/qgis.h#L6122 Qgis.geographicCrsAuthId: src/core/qgis.h#L6127
Qgis.geosVersion: src/core/qgis.h#L6102 Qgis.geosVersion: src/core/qgis.h#L6107
Qgis.geosVersionInt: src/core/qgis.h#L6074 Qgis.geosVersionInt: src/core/qgis.h#L6079
Qgis.geosVersionMajor: src/core/qgis.h#L6081 Qgis.geosVersionMajor: src/core/qgis.h#L6086
Qgis.geosVersionMinor: src/core/qgis.h#L6088 Qgis.geosVersionMinor: src/core/qgis.h#L6093
Qgis.geosVersionPatch: src/core/qgis.h#L6095 Qgis.geosVersionPatch: src/core/qgis.h#L6100
Qgis.releaseName: src/core/qgis.h#L79 Qgis.releaseName: src/core/qgis.h#L79
Qgis.version: src/core/qgis.h#L65 Qgis.version: src/core/qgis.h#L65
Qgis.versionInt: src/core/qgis.h#L72 Qgis.versionInt: src/core/qgis.h#L72
@ -4268,6 +4268,12 @@ QgsFeature.setGeometry: src/core/qgsfeature.h#L873
QgsFeature.setId: src/core/qgsfeature.h#L530 QgsFeature.setId: src/core/qgsfeature.h#L530
QgsFeature.setValid: src/core/qgsfeature.h#L813 QgsFeature.setValid: src/core/qgsfeature.h#L813
QgsFeature: src/core/qgsfeature.h#L57 QgsFeature: src/core/qgsfeature.h#L57
QgsFeatureExpressionFilterProvider.clone: src/core/qgsfeatureexpressionfilterprovider.h#L43
QgsFeatureExpressionFilterProvider.filterFeatures: src/core/qgsfeatureexpressionfilterprovider.h#L40
QgsFeatureExpressionFilterProvider.filterFeatures: src/core/qgsfeatureexpressionfilterprovider.h#L41
QgsFeatureExpressionFilterProvider.layerAttributes: src/core/qgsfeatureexpressionfilterprovider.h#L42
QgsFeatureExpressionFilterProvider.setFilter: src/core/qgsfeatureexpressionfilterprovider.h#L50
QgsFeatureExpressionFilterProvider: src/core/qgsfeatureexpressionfilterprovider.h#L34
QgsFeatureFilterModel.QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L48 QgsFeatureFilterModel.QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L48
QgsFeatureFilterModel.extraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L85 QgsFeatureFilterModel.extraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L85
QgsFeatureFilterModel.extraIdentifierValuesChanged: src/core/qgsfeaturefiltermodel.h#L107 QgsFeatureFilterModel.extraIdentifierValuesChanged: src/core/qgsfeaturefiltermodel.h#L107
@ -4279,9 +4285,11 @@ QgsFeatureFilterModel.setExtraIdentifierValueToNull: src/core/qgsfeaturefiltermo
QgsFeatureFilterModel.setExtraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L92 QgsFeatureFilterModel.setExtraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L92
QgsFeatureFilterModel.setIdentifierFields: src/core/qgsfeaturefiltermodel.h#L71 QgsFeatureFilterModel.setIdentifierFields: src/core/qgsfeaturefiltermodel.h#L71
QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L27 QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L27
QgsFeatureFilterProvider.clone: src/core/qgsfeaturefilterprovider.h#L71 QgsFeatureFilterProvider.clone: src/core/qgsfeaturefilterprovider.h#L97
QgsFeatureFilterProvider.filterFeatures: src/core/qgsfeaturefilterprovider.h#L59 QgsFeatureFilterProvider.filterFeatures: src/core/qgsfeaturefilterprovider.h#L72
QgsFeatureFilterProvider.layerAttributes: src/core/qgsfeaturefilterprovider.h#L65 QgsFeatureFilterProvider.filterFeatures: src/core/qgsfeaturefilterprovider.h#L85
QgsFeatureFilterProvider.isFilterThreadSafe: src/core/qgsfeaturefilterprovider.h#L59
QgsFeatureFilterProvider.layerAttributes: src/core/qgsfeaturefilterprovider.h#L91
QgsFeatureFilterProvider: src/core/qgsfeaturefilterprovider.h#L41 QgsFeatureFilterProvider: src/core/qgsfeaturefilterprovider.h#L41
QgsFeatureIterator.__iter__: src/core/qgsfeatureiterator.h#L294 QgsFeatureIterator.__iter__: src/core/qgsfeatureiterator.h#L294
QgsFeatureIterator.__next__: src/core/qgsfeatureiterator.h#L299 QgsFeatureIterator.__next__: src/core/qgsfeatureiterator.h#L299
@ -5762,6 +5770,12 @@ QgsGroupLayer.setTransformContext: src/core/qgsgrouplayer.h#L87
QgsGroupLayer.writeSymbology: src/core/qgsgrouplayer.h#L90 QgsGroupLayer.writeSymbology: src/core/qgsgrouplayer.h#L90
QgsGroupLayer.writeXml: src/core/qgsgrouplayer.h#L89 QgsGroupLayer.writeXml: src/core/qgsgrouplayer.h#L89
QgsGroupLayer: src/core/qgsgrouplayer.h#L41 QgsGroupLayer: src/core/qgsgrouplayer.h#L41
QgsGroupedFeatureFilterProvider.clone: src/core/qgsgroupedfeaturefilterprovider.h#L43
QgsGroupedFeatureFilterProvider.filterFeatures: src/core/qgsgroupedfeaturefilterprovider.h#L40
QgsGroupedFeatureFilterProvider.filterFeatures: src/core/qgsgroupedfeaturefilterprovider.h#L41
QgsGroupedFeatureFilterProvider.isFilterThreadSafe: src/core/qgsgroupedfeaturefilterprovider.h#L38
QgsGroupedFeatureFilterProvider.layerAttributes: src/core/qgsgroupedfeaturefilterprovider.h#L42
QgsGroupedFeatureFilterProvider: src/core/qgsgroupedfeaturefilterprovider.h#L32
QgsHashedLineSymbolLayer.clone: src/core/symbology/qgslinesymbollayer.h#L1040 QgsHashedLineSymbolLayer.clone: src/core/symbology/qgslinesymbollayer.h#L1040
QgsHashedLineSymbolLayer.color: src/core/symbology/qgslinesymbollayer.h#L1042 QgsHashedLineSymbolLayer.color: src/core/symbology/qgslinesymbollayer.h#L1042
QgsHashedLineSymbolLayer.create: src/core/symbology/qgslinesymbollayer.h#L1034 QgsHashedLineSymbolLayer.create: src/core/symbology/qgslinesymbollayer.h#L1034
@ -6780,53 +6794,55 @@ QgsLayoutAligner.alignItems: src/core/layout/qgslayoutaligner.h#L79
QgsLayoutAligner.distributeItems: src/core/layout/qgslayoutaligner.h#L86 QgsLayoutAligner.distributeItems: src/core/layout/qgslayoutaligner.h#L86
QgsLayoutAligner.resizeItems: src/core/layout/qgslayoutaligner.h#L93 QgsLayoutAligner.resizeItems: src/core/layout/qgslayoutaligner.h#L93
QgsLayoutAligner: src/core/layout/qgslayoutaligner.h#L35 QgsLayoutAligner: src/core/layout/qgslayoutaligner.h#L35
QgsLayoutAtlas.beginRender: src/core/layout/qgslayoutatlas.h#L245 QgsLayoutAtlas.beginRender: src/core/layout/qgslayoutatlas.h#L261
QgsLayoutAtlas.changed: src/core/layout/qgslayoutatlas.h#L314 QgsLayoutAtlas.changed: src/core/layout/qgslayoutatlas.h#L330
QgsLayoutAtlas.count: src/core/layout/qgslayoutatlas.h#L247 QgsLayoutAtlas.count: src/core/layout/qgslayoutatlas.h#L263
QgsLayoutAtlas.coverageLayer: src/core/layout/qgslayoutatlas.h#L115 QgsLayoutAtlas.coverageLayer: src/core/layout/qgslayoutatlas.h#L131
QgsLayoutAtlas.coverageLayerChanged: src/core/layout/qgslayoutatlas.h#L320 QgsLayoutAtlas.coverageLayerChanged: src/core/layout/qgslayoutatlas.h#L336
QgsLayoutAtlas.createExpressionContext: src/core/layout/qgslayoutatlas.h#L255 QgsLayoutAtlas.createExpressionContext: src/core/layout/qgslayoutatlas.h#L271
QgsLayoutAtlas.currentFeatureNumber: src/core/layout/qgslayoutatlas.h#L253 QgsLayoutAtlas.currentFeatureNumber: src/core/layout/qgslayoutatlas.h#L269
QgsLayoutAtlas.currentFilename: src/core/layout/qgslayoutatlas.h#L109 QgsLayoutAtlas.currentFilename: src/core/layout/qgslayoutatlas.h#L125
QgsLayoutAtlas.enabled: src/core/layout/qgslayoutatlas.h#L66 QgsLayoutAtlas.enabled: src/core/layout/qgslayoutatlas.h#L66
QgsLayoutAtlas.endRender: src/core/layout/qgslayoutatlas.h#L246 QgsLayoutAtlas.endRender: src/core/layout/qgslayoutatlas.h#L262
QgsLayoutAtlas.featureChanged: src/core/layout/qgslayoutatlas.h#L331 QgsLayoutAtlas.featureChanged: src/core/layout/qgslayoutatlas.h#L347
QgsLayoutAtlas.filePath: src/core/layout/qgslayoutatlas.h#L248 QgsLayoutAtlas.filePath: src/core/layout/qgslayoutatlas.h#L264
QgsLayoutAtlas.filenameExpression: src/core/layout/qgslayoutatlas.h#L92 QgsLayoutAtlas.filenameExpression: src/core/layout/qgslayoutatlas.h#L108
QgsLayoutAtlas.filterExpression: src/core/layout/qgslayoutatlas.h#L224 QgsLayoutAtlas.filterExpression: src/core/layout/qgslayoutatlas.h#L240
QgsLayoutAtlas.filterFeatures: src/core/layout/qgslayoutatlas.h#L207 QgsLayoutAtlas.filterFeatures: src/core/layout/qgslayoutatlas.h#L223
QgsLayoutAtlas.first: src/core/layout/qgslayoutatlas.h#L286 QgsLayoutAtlas.first: src/core/layout/qgslayoutatlas.h#L302
QgsLayoutAtlas.hideCoverage: src/core/layout/qgslayoutatlas.h#L78 QgsLayoutAtlas.hideCoverage: src/core/layout/qgslayoutatlas.h#L78
QgsLayoutAtlas.last: src/core/layout/qgslayoutatlas.h#L277 QgsLayoutAtlas.last: src/core/layout/qgslayoutatlas.h#L293
QgsLayoutAtlas.layout: src/core/layout/qgslayoutatlas.h#L51 QgsLayoutAtlas.layout: src/core/layout/qgslayoutatlas.h#L51
QgsLayoutAtlas.messagePushed: src/core/layout/qgslayoutatlas.h#L323 QgsLayoutAtlas.limitCoverageLayerRenderToCurrentFeature: src/core/layout/qgslayoutatlas.h#L92
QgsLayoutAtlas.nameForPage: src/core/layout/qgslayoutatlas.h#L140 QgsLayoutAtlas.messagePushed: src/core/layout/qgslayoutatlas.h#L339
QgsLayoutAtlas.next: src/core/layout/qgslayoutatlas.h#L259 QgsLayoutAtlas.nameForPage: src/core/layout/qgslayoutatlas.h#L156
QgsLayoutAtlas.numberFeaturesChanged: src/core/layout/qgslayoutatlas.h#L328 QgsLayoutAtlas.next: src/core/layout/qgslayoutatlas.h#L275
QgsLayoutAtlas.pageNameExpression: src/core/layout/qgslayoutatlas.h#L128 QgsLayoutAtlas.numberFeaturesChanged: src/core/layout/qgslayoutatlas.h#L344
QgsLayoutAtlas.previous: src/core/layout/qgslayoutatlas.h#L268 QgsLayoutAtlas.pageNameExpression: src/core/layout/qgslayoutatlas.h#L144
QgsLayoutAtlas.previous: src/core/layout/qgslayoutatlas.h#L284
QgsLayoutAtlas.readXml: src/core/layout/qgslayoutatlas.h#L60 QgsLayoutAtlas.readXml: src/core/layout/qgslayoutatlas.h#L60
QgsLayoutAtlas.refreshCurrentFeature: src/core/layout/qgslayoutatlas.h#L309 QgsLayoutAtlas.refreshCurrentFeature: src/core/layout/qgslayoutatlas.h#L325
QgsLayoutAtlas.renderBegun: src/core/layout/qgslayoutatlas.h#L334 QgsLayoutAtlas.renderBegun: src/core/layout/qgslayoutatlas.h#L350
QgsLayoutAtlas.renderEnded: src/core/layout/qgslayoutatlas.h#L337 QgsLayoutAtlas.renderEnded: src/core/layout/qgslayoutatlas.h#L353
QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L295 QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L311
QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L304 QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L320
QgsLayoutAtlas.setCoverageLayer: src/core/layout/qgslayoutatlas.h#L121 QgsLayoutAtlas.setCoverageLayer: src/core/layout/qgslayoutatlas.h#L137
QgsLayoutAtlas.setEnabled: src/core/layout/qgslayoutatlas.h#L72 QgsLayoutAtlas.setEnabled: src/core/layout/qgslayoutatlas.h#L72
QgsLayoutAtlas.setFilenameExpression: src/core/layout/qgslayoutatlas.h#L102 QgsLayoutAtlas.setFilenameExpression: src/core/layout/qgslayoutatlas.h#L118
QgsLayoutAtlas.setFilterExpression: src/core/layout/qgslayoutatlas.h#L237 QgsLayoutAtlas.setFilterExpression: src/core/layout/qgslayoutatlas.h#L253
QgsLayoutAtlas.setFilterFeatures: src/core/layout/qgslayoutatlas.h#L214 QgsLayoutAtlas.setFilterFeatures: src/core/layout/qgslayoutatlas.h#L230
QgsLayoutAtlas.setHideCoverage: src/core/layout/qgslayoutatlas.h#L84 QgsLayoutAtlas.setHideCoverage: src/core/layout/qgslayoutatlas.h#L84
QgsLayoutAtlas.setPageNameExpression: src/core/layout/qgslayoutatlas.h#L134 QgsLayoutAtlas.setLimitCoverageLayerRenderToCurrentFeature: src/core/layout/qgslayoutatlas.h#L100
QgsLayoutAtlas.setSortAscending: src/core/layout/qgslayoutatlas.h#L178 QgsLayoutAtlas.setPageNameExpression: src/core/layout/qgslayoutatlas.h#L150
QgsLayoutAtlas.setSortExpression: src/core/layout/qgslayoutatlas.h#L200 QgsLayoutAtlas.setSortAscending: src/core/layout/qgslayoutatlas.h#L194
QgsLayoutAtlas.setSortFeatures: src/core/layout/qgslayoutatlas.h#L156 QgsLayoutAtlas.setSortExpression: src/core/layout/qgslayoutatlas.h#L216
QgsLayoutAtlas.sortAscending: src/core/layout/qgslayoutatlas.h#L167 QgsLayoutAtlas.setSortFeatures: src/core/layout/qgslayoutatlas.h#L172
QgsLayoutAtlas.sortExpression: src/core/layout/qgslayoutatlas.h#L189 QgsLayoutAtlas.sortAscending: src/core/layout/qgslayoutatlas.h#L183
QgsLayoutAtlas.sortFeatures: src/core/layout/qgslayoutatlas.h#L148 QgsLayoutAtlas.sortExpression: src/core/layout/qgslayoutatlas.h#L205
QgsLayoutAtlas.sortFeatures: src/core/layout/qgslayoutatlas.h#L164
QgsLayoutAtlas.stringType: src/core/layout/qgslayoutatlas.h#L50 QgsLayoutAtlas.stringType: src/core/layout/qgslayoutatlas.h#L50
QgsLayoutAtlas.toggled: src/core/layout/qgslayoutatlas.h#L317 QgsLayoutAtlas.toggled: src/core/layout/qgslayoutatlas.h#L333
QgsLayoutAtlas.updateFeatures: src/core/layout/qgslayoutatlas.h#L243 QgsLayoutAtlas.updateFeatures: src/core/layout/qgslayoutatlas.h#L259
QgsLayoutAtlas.writeXml: src/core/layout/qgslayoutatlas.h#L59 QgsLayoutAtlas.writeXml: src/core/layout/qgslayoutatlas.h#L59
QgsLayoutAtlas: src/core/layout/qgslayoutatlas.h#L40 QgsLayoutAtlas: src/core/layout/qgslayoutatlas.h#L40
QgsLayoutChecker.setSize: src/core/qgsmultirenderchecker.h#L209 QgsLayoutChecker.setSize: src/core/qgsmultirenderchecker.h#L209
@ -7310,119 +7326,119 @@ QgsLayoutItemManualTable.type: src/core/layout/qgslayoutitemmanualtable.h#L46
QgsLayoutItemManualTable.verticalAlignmentForCell: src/core/layout/qgslayoutitemmanualtable.h#L145 QgsLayoutItemManualTable.verticalAlignmentForCell: src/core/layout/qgslayoutitemmanualtable.h#L145
QgsLayoutItemManualTable.writePropertiesToElement: src/core/layout/qgslayoutitemmanualtable.h#L139 QgsLayoutItemManualTable.writePropertiesToElement: src/core/layout/qgslayoutitemmanualtable.h#L139
QgsLayoutItemManualTable: src/core/layout/qgslayoutitemmanualtable.h#L31 QgsLayoutItemManualTable: src/core/layout/qgslayoutitemmanualtable.h#L31
QgsLayoutItemMap.QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L361 QgsLayoutItemMap.QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L362
QgsLayoutItemMap.accept: src/core/layout/qgslayoutitemmap.h#L828 QgsLayoutItemMap.accept: src/core/layout/qgslayoutitemmap.h#L829
QgsLayoutItemMap.addLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L785 QgsLayoutItemMap.addLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L786
QgsLayoutItemMap.addRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L842 QgsLayoutItemMap.addRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L843
QgsLayoutItemMap.assignFreeId: src/core/layout/qgslayoutitemmap.h#L385 QgsLayoutItemMap.assignFreeId: src/core/layout/qgslayoutitemmap.h#L386
QgsLayoutItemMap.atlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L862 QgsLayoutItemMap.atlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L863
QgsLayoutItemMap.atlasDriven: src/core/layout/qgslayoutitemmap.h#L643 QgsLayoutItemMap.atlasDriven: src/core/layout/qgslayoutitemmap.h#L644
QgsLayoutItemMap.atlasMargin: src/core/layout/qgslayoutitemmap.h#L685 QgsLayoutItemMap.atlasMargin: src/core/layout/qgslayoutitemmap.h#L686
QgsLayoutItemMap.atlasScalingMode: src/core/layout/qgslayoutitemmap.h#L662 QgsLayoutItemMap.atlasScalingMode: src/core/layout/qgslayoutitemmap.h#L663
QgsLayoutItemMap.boundingRect: src/core/layout/qgslayoutitemmap.h#L928 QgsLayoutItemMap.boundingRect: src/core/layout/qgslayoutitemmap.h#L929
QgsLayoutItemMap.containsAdvancedEffects: src/core/layout/qgslayoutitemmap.h#L604 QgsLayoutItemMap.containsAdvancedEffects: src/core/layout/qgslayoutitemmap.h#L605
QgsLayoutItemMap.containsWmsLayer: src/core/layout/qgslayoutitemmap.h#L601 QgsLayoutItemMap.containsWmsLayer: src/core/layout/qgslayoutitemmap.h#L602
QgsLayoutItemMap.create: src/core/layout/qgslayoutitemmap.h#L395 QgsLayoutItemMap.create: src/core/layout/qgslayoutitemmap.h#L396
QgsLayoutItemMap.createExpressionContext: src/core/layout/qgslayoutitemmap.h#L748 QgsLayoutItemMap.createExpressionContext: src/core/layout/qgslayoutitemmap.h#L749
QgsLayoutItemMap.crs: src/core/layout/qgslayoutitemmap.h#L471 QgsLayoutItemMap.crs: src/core/layout/qgslayoutitemmap.h#L472
QgsLayoutItemMap.crsChanged: src/core/layout/qgslayoutitemmap.h#L981 QgsLayoutItemMap.crsChanged: src/core/layout/qgslayoutitemmap.h#L982
QgsLayoutItemMap.displayName: src/core/layout/qgslayoutitemmap.h#L388 QgsLayoutItemMap.displayName: src/core/layout/qgslayoutitemmap.h#L389
QgsLayoutItemMap.draw: src/core/layout/qgslayoutitemmap.h#L919 QgsLayoutItemMap.draw: src/core/layout/qgslayoutitemmap.h#L920
QgsLayoutItemMap.drawAnnotations: src/core/layout/qgslayoutitemmap.h#L634 QgsLayoutItemMap.drawAnnotations: src/core/layout/qgslayoutitemmap.h#L635
QgsLayoutItemMap.estimatedFrameBleed: src/core/layout/qgslayoutitemmap.h#L915 QgsLayoutItemMap.estimatedFrameBleed: src/core/layout/qgslayoutitemmap.h#L916
QgsLayoutItemMap.exportLayerBehavior: src/core/layout/qgslayoutitemmap.h#L408 QgsLayoutItemMap.exportLayerBehavior: src/core/layout/qgslayoutitemmap.h#L409
QgsLayoutItemMap.exportLayerDetails: src/core/layout/qgslayoutitemmap.h#L409 QgsLayoutItemMap.exportLayerDetails: src/core/layout/qgslayoutitemmap.h#L410
QgsLayoutItemMap.extent: src/core/layout/qgslayoutitemmap.h#L451 QgsLayoutItemMap.extent: src/core/layout/qgslayoutitemmap.h#L452
QgsLayoutItemMap.extentChanged: src/core/layout/qgslayoutitemmap.h#L948 QgsLayoutItemMap.extentChanged: src/core/layout/qgslayoutitemmap.h#L949
QgsLayoutItemMap.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L766 QgsLayoutItemMap.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L767
QgsLayoutItemMap.followVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L570 QgsLayoutItemMap.followVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L571
QgsLayoutItemMap.followVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L584 QgsLayoutItemMap.followVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L585
QgsLayoutItemMap.framePath: src/core/layout/qgslayoutitemmap.h#L922 QgsLayoutItemMap.framePath: src/core/layout/qgslayoutitemmap.h#L923
QgsLayoutItemMap.grid: src/core/layout/qgslayoutitemmap.h#L707 QgsLayoutItemMap.grid: src/core/layout/qgslayoutitemmap.h#L708
QgsLayoutItemMap.grids: src/core/layout/qgslayoutitemmap.h#L701 QgsLayoutItemMap.grids: src/core/layout/qgslayoutitemmap.h#L702
QgsLayoutItemMap.icon: src/core/layout/qgslayoutitemmap.h#L365 QgsLayoutItemMap.icon: src/core/layout/qgslayoutitemmap.h#L366
QgsLayoutItemMap.invalidateCache: src/core/layout/qgslayoutitemmap.h#L994 QgsLayoutItemMap.invalidateCache: src/core/layout/qgslayoutitemmap.h#L995
QgsLayoutItemMap.isDrawing: src/core/layout/qgslayoutitemmap.h#L925 QgsLayoutItemMap.isDrawing: src/core/layout/qgslayoutitemmap.h#L926
QgsLayoutItemMap.isLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L811 QgsLayoutItemMap.isLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L812
QgsLayoutItemMap.itemClippingSettings: src/core/layout/qgslayoutitemmap.h#L869 QgsLayoutItemMap.itemClippingSettings: src/core/layout/qgslayoutitemmap.h#L870
QgsLayoutItemMap.itemFlags: src/core/layout/qgslayoutitemmap.h#L366 QgsLayoutItemMap.itemFlags: src/core/layout/qgslayoutitemmap.h#L367
QgsLayoutItemMap.keepLayerSet: src/core/layout/qgslayoutitemmap.h#L500 QgsLayoutItemMap.keepLayerSet: src/core/layout/qgslayoutitemmap.h#L501
QgsLayoutItemMap.keepLayerStyles: src/core/layout/qgslayoutitemmap.h#L535 QgsLayoutItemMap.keepLayerStyles: src/core/layout/qgslayoutitemmap.h#L536
QgsLayoutItemMap.labelMargin: src/core/layout/qgslayoutitemmap.h#L734 QgsLayoutItemMap.labelMargin: src/core/layout/qgslayoutitemmap.h#L735
QgsLayoutItemMap.layerStyleOverridesChanged: src/core/layout/qgslayoutitemmap.h#L964 QgsLayoutItemMap.layerStyleOverridesChanged: src/core/layout/qgslayoutitemmap.h#L965
QgsLayoutItemMap.layoutToMapCoordsTransform: src/core/layout/qgslayoutitemmap.h#L855 QgsLayoutItemMap.layoutToMapCoordsTransform: src/core/layout/qgslayoutitemmap.h#L856
QgsLayoutItemMap.mapFlags: src/core/layout/qgslayoutitemmap.h#L373 QgsLayoutItemMap.mapFlags: src/core/layout/qgslayoutitemmap.h#L374
QgsLayoutItemMap.mapRotation: src/core/layout/qgslayoutitemmap.h#L622 QgsLayoutItemMap.mapRotation: src/core/layout/qgslayoutitemmap.h#L623
QgsLayoutItemMap.mapRotationChanged: src/core/layout/qgslayoutitemmap.h#L955 QgsLayoutItemMap.mapRotationChanged: src/core/layout/qgslayoutitemmap.h#L956
QgsLayoutItemMap.mapSettings: src/core/layout/qgslayoutitemmap.h#L764 QgsLayoutItemMap.mapSettings: src/core/layout/qgslayoutitemmap.h#L765
QgsLayoutItemMap.mapToItemCoords: src/core/layout/qgslayoutitemmap.h#L934 QgsLayoutItemMap.mapToItemCoords: src/core/layout/qgslayoutitemmap.h#L935
QgsLayoutItemMap.mapUnitsToLayoutUnits: src/core/layout/qgslayoutitemmap.h#L755 QgsLayoutItemMap.mapUnitsToLayoutUnits: src/core/layout/qgslayoutitemmap.h#L756
QgsLayoutItemMap.moveContent: src/core/layout/qgslayoutitemmap.h#L594 QgsLayoutItemMap.moveContent: src/core/layout/qgslayoutitemmap.h#L595
QgsLayoutItemMap.nextExportPart: src/core/layout/qgslayoutitemmap.h#L407 QgsLayoutItemMap.nextExportPart: src/core/layout/qgslayoutitemmap.h#L408
QgsLayoutItemMap.numberExportLayers: src/core/layout/qgslayoutitemmap.h#L403 QgsLayoutItemMap.numberExportLayers: src/core/layout/qgslayoutitemmap.h#L404
QgsLayoutItemMap.overview: src/core/layout/qgslayoutitemmap.h#L722 QgsLayoutItemMap.overview: src/core/layout/qgslayoutitemmap.h#L723
QgsLayoutItemMap.overviews: src/core/layout/qgslayoutitemmap.h#L715 QgsLayoutItemMap.overviews: src/core/layout/qgslayoutitemmap.h#L716
QgsLayoutItemMap.paint: src/core/layout/qgslayoutitemmap.h#L398 QgsLayoutItemMap.paint: src/core/layout/qgslayoutitemmap.h#L399
QgsLayoutItemMap.preparedForAtlas: src/core/layout/qgslayoutitemmap.h#L958 QgsLayoutItemMap.preparedForAtlas: src/core/layout/qgslayoutitemmap.h#L959
QgsLayoutItemMap.presetCrs: src/core/layout/qgslayoutitemmap.h#L481 QgsLayoutItemMap.presetCrs: src/core/layout/qgslayoutitemmap.h#L482
QgsLayoutItemMap.previewLabelingResults: src/core/layout/qgslayoutitemmap.h#L826 QgsLayoutItemMap.previewLabelingResults: src/core/layout/qgslayoutitemmap.h#L827
QgsLayoutItemMap.previewRefreshed: src/core/layout/qgslayoutitemmap.h#L988 QgsLayoutItemMap.previewRefreshed: src/core/layout/qgslayoutitemmap.h#L989
QgsLayoutItemMap.readPropertiesFromElement: src/core/layout/qgslayoutitemmap.h#L921 QgsLayoutItemMap.readPropertiesFromElement: src/core/layout/qgslayoutitemmap.h#L922
QgsLayoutItemMap.refresh: src/core/layout/qgslayoutitemmap.h#L992 QgsLayoutItemMap.refresh: src/core/layout/qgslayoutitemmap.h#L993
QgsLayoutItemMap.refreshDataDefinedProperty: src/core/layout/qgslayoutitemmap.h#L999 QgsLayoutItemMap.refreshDataDefinedProperty: src/core/layout/qgslayoutitemmap.h#L1000
QgsLayoutItemMap.removeLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L798 QgsLayoutItemMap.removeLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L799
QgsLayoutItemMap.removeRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L850 QgsLayoutItemMap.removeRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L851
QgsLayoutItemMap.renderingErrors: src/core/layout/qgslayoutitemmap.h#L817 QgsLayoutItemMap.renderingErrors: src/core/layout/qgslayoutitemmap.h#L818
QgsLayoutItemMap.requestedExtent: src/core/layout/qgslayoutitemmap.h#L939 QgsLayoutItemMap.requestedExtent: src/core/layout/qgslayoutitemmap.h#L940
QgsLayoutItemMap.requiresRasterization: src/core/layout/qgslayoutitemmap.h#L603 QgsLayoutItemMap.requiresRasterization: src/core/layout/qgslayoutitemmap.h#L604
QgsLayoutItemMap.scale: src/core/layout/qgslayoutitemmap.h#L417 QgsLayoutItemMap.scale: src/core/layout/qgslayoutitemmap.h#L418
QgsLayoutItemMap.setAtlasDriven: src/core/layout/qgslayoutitemmap.h#L651 QgsLayoutItemMap.setAtlasDriven: src/core/layout/qgslayoutitemmap.h#L652
QgsLayoutItemMap.setAtlasMargin: src/core/layout/qgslayoutitemmap.h#L694 QgsLayoutItemMap.setAtlasMargin: src/core/layout/qgslayoutitemmap.h#L695
QgsLayoutItemMap.setAtlasScalingMode: src/core/layout/qgslayoutitemmap.h#L673 QgsLayoutItemMap.setAtlasScalingMode: src/core/layout/qgslayoutitemmap.h#L674
QgsLayoutItemMap.setCrs: src/core/layout/qgslayoutitemmap.h#L490 QgsLayoutItemMap.setCrs: src/core/layout/qgslayoutitemmap.h#L491
QgsLayoutItemMap.setDrawAnnotations: src/core/layout/qgslayoutitemmap.h#L628 QgsLayoutItemMap.setDrawAnnotations: src/core/layout/qgslayoutitemmap.h#L629
QgsLayoutItemMap.setExtent: src/core/layout/qgslayoutitemmap.h#L435 QgsLayoutItemMap.setExtent: src/core/layout/qgslayoutitemmap.h#L436
QgsLayoutItemMap.setFollowVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L575 QgsLayoutItemMap.setFollowVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L576
QgsLayoutItemMap.setFollowVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L592 QgsLayoutItemMap.setFollowVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L593
QgsLayoutItemMap.setFrameStrokeWidth: src/core/layout/qgslayoutitemmap.h#L410 QgsLayoutItemMap.setFrameStrokeWidth: src/core/layout/qgslayoutitemmap.h#L411
QgsLayoutItemMap.setKeepLayerSet: src/core/layout/qgslayoutitemmap.h#L510 QgsLayoutItemMap.setKeepLayerSet: src/core/layout/qgslayoutitemmap.h#L511
QgsLayoutItemMap.setKeepLayerStyles: src/core/layout/qgslayoutitemmap.h#L541 QgsLayoutItemMap.setKeepLayerStyles: src/core/layout/qgslayoutitemmap.h#L542
QgsLayoutItemMap.setLabelMargin: src/core/layout/qgslayoutitemmap.h#L746 QgsLayoutItemMap.setLabelMargin: src/core/layout/qgslayoutitemmap.h#L747
QgsLayoutItemMap.setLayerStyleOverrides: src/core/layout/qgslayoutitemmap.h#L553 QgsLayoutItemMap.setLayerStyleOverrides: src/core/layout/qgslayoutitemmap.h#L554
QgsLayoutItemMap.setLayers: src/core/layout/qgslayoutitemmap.h#L529 QgsLayoutItemMap.setLayers: src/core/layout/qgslayoutitemmap.h#L530
QgsLayoutItemMap.setMapFlags: src/core/layout/qgslayoutitemmap.h#L380 QgsLayoutItemMap.setMapFlags: src/core/layout/qgslayoutitemmap.h#L381
QgsLayoutItemMap.setMapRotation: src/core/layout/qgslayoutitemmap.h#L612 QgsLayoutItemMap.setMapRotation: src/core/layout/qgslayoutitemmap.h#L613
QgsLayoutItemMap.setMoveContentPreviewOffset: src/core/layout/qgslayoutitemmap.h#L595 QgsLayoutItemMap.setMoveContentPreviewOffset: src/core/layout/qgslayoutitemmap.h#L596
QgsLayoutItemMap.setScale: src/core/layout/qgslayoutitemmap.h#L426 QgsLayoutItemMap.setScale: src/core/layout/qgslayoutitemmap.h#L427
QgsLayoutItemMap.setZRange: src/core/layout/qgslayoutitemmap.h#L912 QgsLayoutItemMap.setZRange: src/core/layout/qgslayoutitemmap.h#L913
QgsLayoutItemMap.setZRangeEnabled: src/core/layout/qgslayoutitemmap.h#L878 QgsLayoutItemMap.setZRangeEnabled: src/core/layout/qgslayoutitemmap.h#L879
QgsLayoutItemMap.startLayeredExport: src/core/layout/qgslayoutitemmap.h#L405 QgsLayoutItemMap.startLayeredExport: src/core/layout/qgslayoutitemmap.h#L406
QgsLayoutItemMap.stopLayeredExport: src/core/layout/qgslayoutitemmap.h#L406 QgsLayoutItemMap.stopLayeredExport: src/core/layout/qgslayoutitemmap.h#L407
QgsLayoutItemMap.storeCurrentLayerStyles: src/core/layout/qgslayoutitemmap.h#L558 QgsLayoutItemMap.storeCurrentLayerStyles: src/core/layout/qgslayoutitemmap.h#L559
QgsLayoutItemMap.themeChanged: src/core/layout/qgslayoutitemmap.h#L974 QgsLayoutItemMap.themeChanged: src/core/layout/qgslayoutitemmap.h#L975
QgsLayoutItemMap.transformedMapPolygon: src/core/layout/qgslayoutitemmap.h#L931 QgsLayoutItemMap.transformedMapPolygon: src/core/layout/qgslayoutitemmap.h#L932
QgsLayoutItemMap.type: src/core/layout/qgslayoutitemmap.h#L364 QgsLayoutItemMap.type: src/core/layout/qgslayoutitemmap.h#L365
QgsLayoutItemMap.updateBoundingRect: src/core/layout/qgslayoutitemmap.h#L997 QgsLayoutItemMap.updateBoundingRect: src/core/layout/qgslayoutitemmap.h#L998
QgsLayoutItemMap.visibleExtentPolygon: src/core/layout/qgslayoutitemmap.h#L461 QgsLayoutItemMap.visibleExtentPolygon: src/core/layout/qgslayoutitemmap.h#L462
QgsLayoutItemMap.writePropertiesToElement: src/core/layout/qgslayoutitemmap.h#L920 QgsLayoutItemMap.writePropertiesToElement: src/core/layout/qgslayoutitemmap.h#L921
QgsLayoutItemMap.zRange: src/core/layout/qgslayoutitemmap.h#L900 QgsLayoutItemMap.zRange: src/core/layout/qgslayoutitemmap.h#L901
QgsLayoutItemMap.zRangeEnabled: src/core/layout/qgslayoutitemmap.h#L888 QgsLayoutItemMap.zRangeEnabled: src/core/layout/qgslayoutitemmap.h#L889
QgsLayoutItemMap.zoomContent: src/core/layout/qgslayoutitemmap.h#L597 QgsLayoutItemMap.zoomContent: src/core/layout/qgslayoutitemmap.h#L598
QgsLayoutItemMap.zoomToExtent: src/core/layout/qgslayoutitemmap.h#L444 QgsLayoutItemMap.zoomToExtent: src/core/layout/qgslayoutitemmap.h#L445
QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L317 QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L318
QgsLayoutItemMapAtlasClippingSettings.changed: src/core/layout/qgslayoutitemmap.h#L148 QgsLayoutItemMapAtlasClippingSettings.changed: src/core/layout/qgslayoutitemmap.h#L149
QgsLayoutItemMapAtlasClippingSettings.enabled: src/core/layout/qgslayoutitemmap.h#L56 QgsLayoutItemMapAtlasClippingSettings.enabled: src/core/layout/qgslayoutitemmap.h#L57
QgsLayoutItemMapAtlasClippingSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L70 QgsLayoutItemMapAtlasClippingSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L71
QgsLayoutItemMapAtlasClippingSettings.forceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L84 QgsLayoutItemMapAtlasClippingSettings.forceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L85
QgsLayoutItemMapAtlasClippingSettings.readXml: src/core/layout/qgslayoutitemmap.h#L141 QgsLayoutItemMapAtlasClippingSettings.readXml: src/core/layout/qgslayoutitemmap.h#L142
QgsLayoutItemMapAtlasClippingSettings.restrictToLayers: src/core/layout/qgslayoutitemmap.h#L99 QgsLayoutItemMapAtlasClippingSettings.restrictToLayers: src/core/layout/qgslayoutitemmap.h#L100
QgsLayoutItemMapAtlasClippingSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L63 QgsLayoutItemMapAtlasClippingSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L64
QgsLayoutItemMapAtlasClippingSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L77 QgsLayoutItemMapAtlasClippingSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L78
QgsLayoutItemMapAtlasClippingSettings.setForceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L91 QgsLayoutItemMapAtlasClippingSettings.setForceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L92
QgsLayoutItemMapAtlasClippingSettings.setLayersToClip: src/core/layout/qgslayoutitemmap.h#L127 QgsLayoutItemMapAtlasClippingSettings.setLayersToClip: src/core/layout/qgslayoutitemmap.h#L128
QgsLayoutItemMapAtlasClippingSettings.setRestrictToLayers: src/core/layout/qgslayoutitemmap.h#L107 QgsLayoutItemMapAtlasClippingSettings.setRestrictToLayers: src/core/layout/qgslayoutitemmap.h#L108
QgsLayoutItemMapAtlasClippingSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L134 QgsLayoutItemMapAtlasClippingSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L135
QgsLayoutItemMapAtlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L40 QgsLayoutItemMapAtlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L41
QgsLayoutItemMapGrid.accept: src/core/layout/qgslayoutitemmapgrid.h#L1005 QgsLayoutItemMapGrid.accept: src/core/layout/qgslayoutitemmapgrid.h#L1005
QgsLayoutItemMapGrid.annotationDirection: src/core/layout/qgslayoutitemmapgrid.h#L701 QgsLayoutItemMapGrid.annotationDirection: src/core/layout/qgslayoutitemmapgrid.h#L701
QgsLayoutItemMapGrid.annotationDisplay: src/core/layout/qgslayoutitemmapgrid.h#L656 QgsLayoutItemMapGrid.annotationDisplay: src/core/layout/qgslayoutitemmapgrid.h#L656
@ -7553,23 +7569,23 @@ QgsLayoutItemMapItem.stackingPosition: src/core/layout/qgslayoutitemmapitem.h#L1
QgsLayoutItemMapItem.usesAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L128 QgsLayoutItemMapItem.usesAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L128
QgsLayoutItemMapItem.writeXml: src/core/layout/qgslayoutitemmapitem.h#L65 QgsLayoutItemMapItem.writeXml: src/core/layout/qgslayoutitemmapitem.h#L65
QgsLayoutItemMapItem: src/core/layout/qgslayoutitemmapitem.h#L32 QgsLayoutItemMapItem: src/core/layout/qgslayoutitemmapitem.h#L32
QgsLayoutItemMapItemClipPathSettings.changed: src/core/layout/qgslayoutitemmap.h#L297 QgsLayoutItemMapItemClipPathSettings.changed: src/core/layout/qgslayoutitemmap.h#L298
QgsLayoutItemMapItemClipPathSettings.clipPathInMapItemCoordinates: src/core/layout/qgslayoutitemmap.h#L219 QgsLayoutItemMapItemClipPathSettings.clipPathInMapItemCoordinates: src/core/layout/qgslayoutitemmap.h#L220
QgsLayoutItemMapItemClipPathSettings.clippedMapExtent: src/core/layout/qgslayoutitemmap.h#L208 QgsLayoutItemMapItemClipPathSettings.clippedMapExtent: src/core/layout/qgslayoutitemmap.h#L209
QgsLayoutItemMapItemClipPathSettings.enabled: src/core/layout/qgslayoutitemmap.h#L194 QgsLayoutItemMapItemClipPathSettings.enabled: src/core/layout/qgslayoutitemmap.h#L195
QgsLayoutItemMapItemClipPathSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L248 QgsLayoutItemMapItemClipPathSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L249
QgsLayoutItemMapItemClipPathSettings.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L290 QgsLayoutItemMapItemClipPathSettings.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L291
QgsLayoutItemMapItemClipPathSettings.forceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L262 QgsLayoutItemMapItemClipPathSettings.forceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L263
QgsLayoutItemMapItemClipPathSettings.isActive: src/core/layout/qgslayoutitemmap.h#L187 QgsLayoutItemMapItemClipPathSettings.isActive: src/core/layout/qgslayoutitemmap.h#L188
QgsLayoutItemMapItemClipPathSettings.readXml: src/core/layout/qgslayoutitemmap.h#L284 QgsLayoutItemMapItemClipPathSettings.readXml: src/core/layout/qgslayoutitemmap.h#L285
QgsLayoutItemMapItemClipPathSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L201 QgsLayoutItemMapItemClipPathSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L202
QgsLayoutItemMapItemClipPathSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L255 QgsLayoutItemMapItemClipPathSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L256
QgsLayoutItemMapItemClipPathSettings.setForceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L269 QgsLayoutItemMapItemClipPathSettings.setForceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L270
QgsLayoutItemMapItemClipPathSettings.setSourceItem: src/core/layout/qgslayoutitemmap.h#L233 QgsLayoutItemMapItemClipPathSettings.setSourceItem: src/core/layout/qgslayoutitemmap.h#L234
QgsLayoutItemMapItemClipPathSettings.sourceItem: src/core/layout/qgslayoutitemmap.h#L241 QgsLayoutItemMapItemClipPathSettings.sourceItem: src/core/layout/qgslayoutitemmap.h#L242
QgsLayoutItemMapItemClipPathSettings.toMapClippingRegion: src/core/layout/qgslayoutitemmap.h#L224 QgsLayoutItemMapItemClipPathSettings.toMapClippingRegion: src/core/layout/qgslayoutitemmap.h#L225
QgsLayoutItemMapItemClipPathSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L276 QgsLayoutItemMapItemClipPathSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L277
QgsLayoutItemMapItemClipPathSettings: src/core/layout/qgslayoutitemmap.h#L170 QgsLayoutItemMapItemClipPathSettings: src/core/layout/qgslayoutitemmap.h#L171
QgsLayoutItemMapItemStack.addItem: src/core/layout/qgslayoutitemmapitem.h#L306 QgsLayoutItemMapItemStack.addItem: src/core/layout/qgslayoutitemmapitem.h#L306
QgsLayoutItemMapItemStack.containsAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L282 QgsLayoutItemMapItemStack.containsAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L282
QgsLayoutItemMapItemStack.drawItems: src/core/layout/qgslayoutitemmapitem.h#L276 QgsLayoutItemMapItemStack.drawItems: src/core/layout/qgslayoutitemmapitem.h#L276

View File

@ -51,6 +51,7 @@
%Include auto_generated/qgsexpressioncontextscopegenerator.sip %Include auto_generated/qgsexpressioncontextscopegenerator.sip
%Include auto_generated/qgsexpressionfieldbuffer.sip %Include auto_generated/qgsexpressionfieldbuffer.sip
%Include auto_generated/qgsfeature.sip %Include auto_generated/qgsfeature.sip
%Include auto_generated/qgsfeatureexpressionfilterprovider.sip
%Include auto_generated/qgsfeaturepickermodel.sip %Include auto_generated/qgsfeaturepickermodel.sip
%Include auto_generated/qgsfeaturepickermodelbase.sip %Include auto_generated/qgsfeaturepickermodelbase.sip
%Include auto_generated/qgsfeaturefiltermodel.sip %Include auto_generated/qgsfeaturefiltermodel.sip
@ -77,6 +78,7 @@
%Include auto_generated/qgsgeometryvalidator.sip %Include auto_generated/qgsgeometryvalidator.sip
%Include auto_generated/qgsgml.sip %Include auto_generated/qgsgml.sip
%Include auto_generated/qgsgmlschema.sip %Include auto_generated/qgsgmlschema.sip
%Include auto_generated/qgsgroupedfeaturefilterprovider.sip
%Include auto_generated/qgsgrouplayer.sip %Include auto_generated/qgsgrouplayer.sip
%Include auto_generated/qgshistogram.sip %Include auto_generated/qgshistogram.sip
%Include auto_generated/qgshstoreutils.sip %Include auto_generated/qgshstoreutils.sip

View File

@ -1,5 +1,5 @@
# The following has been generated automatically from src/server/qgsaccesscontrol.h # The following has been generated automatically from src/server/qgsaccesscontrol.h
try: try:
QgsAccessControl.__overridden_methods__ = ['filterFeatures', 'clone', 'layerAttributes'] QgsAccessControl.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -1,5 +1,5 @@
# The following has been generated automatically from src/server/qgsfeaturefilter.h # The following has been generated automatically from src/server/qgsfeaturefilter.h
try: try:
QgsFeatureFilter.__overridden_methods__ = ['filterFeatures', 'layerAttributes', 'clone'] QgsFeatureFilter.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -1,5 +1,5 @@
# The following has been generated automatically from src/server/qgsfeaturefilterprovidergroup.h # The following has been generated automatically from src/server/qgsfeaturefilterprovidergroup.h
try: try:
QgsFeatureFilterProviderGroup.__overridden_methods__ = ['filterFeatures', 'layerAttributes', 'clone'] QgsFeatureFilterProviderGroup.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -35,6 +35,15 @@ Constructor
~QgsAccessControl(); ~QgsAccessControl();
virtual bool isFilterThreadSafe() const;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsAccessControl *clone() const /Factory/;
void resolveFilterFeatures( const QList<QgsMapLayer *> &layers ); void resolveFilterFeatures( const QList<QgsMapLayer *> &layers );
%Docstring %Docstring
Resolve features' filter of layers The method fetch filter's expressions Resolve features' filter of layers The method fetch filter's expressions
@ -49,23 +58,6 @@ for efficiency; between each requests, the cache must be cleared using
void unresolveFilterFeatures(); void unresolveFilterFeatures();
%Docstring %Docstring
Clear expression's cache computed from `resolveFilterFeatures` Clear expression's cache computed from `resolveFilterFeatures`
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer
:param layer: the layer to control
:param filterFeatures: the request to fill
%End
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End %End
QString extraSubsetString( const QgsVectorLayer *layer ) const; QString extraSubsetString( const QgsVectorLayer *layer ) const;
@ -111,17 +103,6 @@ Returns the layer delete right
:param layer: the layer to control :param layer: the layer to control
:return: ``True`` if we can do a delete :return: ``True`` if we can do a delete
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
%Docstring
Returns the authorized layer attributes
:param layer: the layer to control
:param attributes: the list of attribute
:return: the list of visible attributes
%End %End
bool allowToEdit( const QgsVectorLayer *layer, const QgsFeature &feature ) const; bool allowToEdit( const QgsVectorLayer *layer, const QgsFeature &feature ) const;

View File

@ -16,6 +16,10 @@ class QgsFeatureFilter : QgsFeatureFilterProvider
%Docstring(signature="appended") %Docstring(signature="appended")
A feature filter provider allowing to set filter expressions on a A feature filter provider allowing to set filter expressions on a
per-layer basis. per-layer basis.
.. deprecated:: 3.4
Use :py:class:`QgsFeatureExpressionFilterProvider`
%End %End
%TypeHeaderCode %TypeHeaderCode
@ -27,25 +31,14 @@ per-layer basis.
Constructor Constructor
%End %End
virtual bool isFilterThreadSafe() const;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const; virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer
:param layer: the layer to control
:param filterFeatures: the request to fill
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const; virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProvider *clone() const /Factory/; virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
void setFilter( const QgsVectorLayer *layer, const QgsExpression &expression ); void setFilter( const QgsVectorLayer *layer, const QgsExpression &expression );
%Docstring %Docstring

View File

@ -14,6 +14,10 @@ class QgsFeatureFilterProviderGroup : QgsFeatureFilterProvider
{ {
%Docstring(signature="appended") %Docstring(signature="appended")
A filter filter provider grouping several filter providers. A filter filter provider grouping several filter providers.
.. deprecated:: 3.4
Use :py:class:`QgsGroupedFeatureFilterProvider`
%End %End
%TypeHeaderCode %TypeHeaderCode
@ -25,25 +29,14 @@ A filter filter provider grouping several filter providers.
Constructor Constructor
%End %End
virtual bool isFilterThreadSafe() const;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const; virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer.
:param layer: the layer to control
:param filterFeatures: the request to fill
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const; virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProviderGroup *clone() const /Factory/;
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
QgsFeatureFilterProviderGroup &addProvider( const QgsFeatureFilterProvider *provider ); QgsFeatureFilterProviderGroup &addProvider( const QgsFeatureFilterProvider *provider );
%Docstring %Docstring

View File

@ -1,16 +1,17 @@
QgsAccessControl.allowToEdit: src/server/qgsaccesscontrol.h#L152 QgsAccessControl.allowToEdit: src/server/qgsaccesscontrol.h#L137
QgsAccessControl.clone: src/server/qgsaccesscontrol.h#L101 QgsAccessControl.clone: src/server/qgsaccesscontrol.h#L78
QgsAccessControl.extraSubsetString: src/server/qgsaccesscontrol.h#L108 QgsAccessControl.extraSubsetString: src/server/qgsaccesscontrol.h#L101
QgsAccessControl.fillCacheKey: src/server/qgsaccesscontrol.h#L158 QgsAccessControl.fillCacheKey: src/server/qgsaccesscontrol.h#L143
QgsAccessControl.filterFeatures: src/server/qgsaccesscontrol.h#L95 QgsAccessControl.filterFeatures: src/server/qgsaccesscontrol.h#L76
QgsAccessControl.layerAttributes: src/server/qgsaccesscontrol.h#L144 QgsAccessControl.isFilterThreadSafe: src/server/qgsaccesscontrol.h#L74
QgsAccessControl.layerDeletePermission: src/server/qgsaccesscontrol.h#L136 QgsAccessControl.layerAttributes: src/server/qgsaccesscontrol.h#L77
QgsAccessControl.layerInsertPermission: src/server/qgsaccesscontrol.h#L122 QgsAccessControl.layerDeletePermission: src/server/qgsaccesscontrol.h#L129
QgsAccessControl.layerReadPermission: src/server/qgsaccesscontrol.h#L115 QgsAccessControl.layerInsertPermission: src/server/qgsaccesscontrol.h#L115
QgsAccessControl.layerUpdatePermission: src/server/qgsaccesscontrol.h#L129 QgsAccessControl.layerReadPermission: src/server/qgsaccesscontrol.h#L108
QgsAccessControl.registerAccessControl: src/server/qgsaccesscontrol.h#L165 QgsAccessControl.layerUpdatePermission: src/server/qgsaccesscontrol.h#L122
QgsAccessControl.resolveFilterFeatures: src/server/qgsaccesscontrol.h#L83 QgsAccessControl.registerAccessControl: src/server/qgsaccesscontrol.h#L150
QgsAccessControl.unresolveFilterFeatures: src/server/qgsaccesscontrol.h#L88 QgsAccessControl.resolveFilterFeatures: src/server/qgsaccesscontrol.h#L89
QgsAccessControl.unresolveFilterFeatures: src/server/qgsaccesscontrol.h#L94
QgsAccessControl: src/server/qgsaccesscontrol.h#L35 QgsAccessControl: src/server/qgsaccesscontrol.h#L35
QgsAccessControlFilter.allowToEdit: src/server/qgsaccesscontrolfilter.h#L109 QgsAccessControlFilter.allowToEdit: src/server/qgsaccesscontrolfilter.h#L109
QgsAccessControlFilter.authorizedLayerAttributes: src/server/qgsaccesscontrolfilter.h#L101 QgsAccessControlFilter.authorizedLayerAttributes: src/server/qgsaccesscontrolfilter.h#L101
@ -54,15 +55,17 @@ QgsFcgiServerRequest.data: src/server/qgsfcgiserverrequest.h#L36
QgsFcgiServerRequest.hasError: src/server/qgsfcgiserverrequest.h#L41 QgsFcgiServerRequest.hasError: src/server/qgsfcgiserverrequest.h#L41
QgsFcgiServerRequest.header: src/server/qgsfcgiserverrequest.h#L49 QgsFcgiServerRequest.header: src/server/qgsfcgiserverrequest.h#L49
QgsFcgiServerRequest: src/server/qgsfcgiserverrequest.h#L31 QgsFcgiServerRequest: src/server/qgsfcgiserverrequest.h#L31
QgsFeatureFilter.clone: src/server/qgsfeaturefilter.h#L52 QgsFeatureFilter.clone: src/server/qgsfeaturefilter.h#L44
QgsFeatureFilter.filterFeatures: src/server/qgsfeaturefilter.h#L44 QgsFeatureFilter.filterFeatures: src/server/qgsfeaturefilter.h#L42
QgsFeatureFilter.layerAttributes: src/server/qgsfeaturefilter.h#L46 QgsFeatureFilter.isFilterThreadSafe: src/server/qgsfeaturefilter.h#L40
QgsFeatureFilter.setFilter: src/server/qgsfeaturefilter.h#L59 QgsFeatureFilter.layerAttributes: src/server/qgsfeaturefilter.h#L43
QgsFeatureFilter: src/server/qgsfeaturefilter.h#L33 QgsFeatureFilter.setFilter: src/server/qgsfeaturefilter.h#L51
QgsFeatureFilterProviderGroup.clone: src/server/qgsfeaturefilterprovidergroup.h#L50 QgsFeatureFilter: src/server/qgsfeaturefilter.h#L34
QgsFeatureFilterProviderGroup.filterFeatures: src/server/qgsfeaturefilterprovidergroup.h#L42 QgsFeatureFilterProviderGroup.clone: src/server/qgsfeaturefilterprovidergroup.h#L42
QgsFeatureFilterProviderGroup.layerAttributes: src/server/qgsfeaturefilterprovidergroup.h#L44 QgsFeatureFilterProviderGroup.filterFeatures: src/server/qgsfeaturefilterprovidergroup.h#L40
QgsFeatureFilterProviderGroup: src/server/qgsfeaturefilterprovidergroup.h#L31 QgsFeatureFilterProviderGroup.isFilterThreadSafe: src/server/qgsfeaturefilterprovidergroup.h#L38
QgsFeatureFilterProviderGroup.layerAttributes: src/server/qgsfeaturefilterprovidergroup.h#L41
QgsFeatureFilterProviderGroup: src/server/qgsfeaturefilterprovidergroup.h#L32
QgsOgcServiceException.code: src/server/qgsserverexception.h#L94 QgsOgcServiceException.code: src/server/qgsserverexception.h#L94
QgsOgcServiceException.formatResponse: src/server/qgsserverexception.h#L102 QgsOgcServiceException.formatResponse: src/server/qgsserverexception.h#L102
QgsOgcServiceException.locator: src/server/qgsserverexception.h#L97 QgsOgcServiceException.locator: src/server/qgsserverexception.h#L97

View File

@ -10055,6 +10055,9 @@ QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks = Qgis.LayoutRenderFlag.AlwaysUs
QgsLayoutRenderContext.Flag.FlagAlwaysUseGlobalMasks = Qgis.LayoutRenderFlag.AlwaysUseGlobalMasks QgsLayoutRenderContext.Flag.FlagAlwaysUseGlobalMasks = Qgis.LayoutRenderFlag.AlwaysUseGlobalMasks
QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.is_monkey_patched = True QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.is_monkey_patched = True
QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.__doc__ = "When applying clipping paths for selective masking, always use global (\"entire map\") paths, instead of calculating local clipping paths per rendered feature. This results in considerably more complex layout exports in all current Qt versions. This flag only applies to vector layout exports. \n.. versionadded:: 3.38" QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks.__doc__ = "When applying clipping paths for selective masking, always use global (\"entire map\") paths, instead of calculating local clipping paths per rendered feature. This results in considerably more complex layout exports in all current Qt versions. This flag only applies to vector layout exports. \n.. versionadded:: 3.38"
QgsLayoutRenderContext.LimitCoverageLayerRenderToCurrentFeature = Qgis.LayoutRenderFlag.LimitCoverageLayerRenderToCurrentFeature
QgsLayoutRenderContext.LimitCoverageLayerRenderToCurrentFeature.is_monkey_patched = True
QgsLayoutRenderContext.LimitCoverageLayerRenderToCurrentFeature.__doc__ = "Limit coverage layer rendering to the current atlas feature. \n.. versionadded:: 4.0"
Qgis.LayoutRenderFlag.__doc__ = """Flags for controlling how a layout is rendered. Qgis.LayoutRenderFlag.__doc__ = """Flags for controlling how a layout is rendered.
.. note:: .. note::
@ -10120,6 +10123,10 @@ Qgis.LayoutRenderFlag.__doc__ = """Flags for controlling how a layout is rendere
Available as ``QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks`` in older QGIS releases. Available as ``QgsLayoutRenderContext.FlagAlwaysUseGlobalMasks`` in older QGIS releases.
* ``LimitCoverageLayerRenderToCurrentFeature``: Limit coverage layer rendering to the current atlas feature.
.. versionadded:: 4.0
""" """
# -- # --
@ -11404,6 +11411,10 @@ Qgis.MouseHandlesAction.ResizeLeftUp.__doc__ = "Resize left up (Top left handle)
Qgis.MouseHandlesAction.ResizeRightUp.__doc__ = "Resize right up (Top right handle)" Qgis.MouseHandlesAction.ResizeRightUp.__doc__ = "Resize right up (Top right handle)"
Qgis.MouseHandlesAction.ResizeLeftDown.__doc__ = "Resize left down (Bottom left handle)" Qgis.MouseHandlesAction.ResizeLeftDown.__doc__ = "Resize left down (Bottom left handle)"
Qgis.MouseHandlesAction.ResizeRightDown.__doc__ = "Resize right down (Bottom right handle)" Qgis.MouseHandlesAction.ResizeRightDown.__doc__ = "Resize right down (Bottom right handle)"
Qgis.MouseHandlesAction.RotateTopLeft.__doc__ = "Rotate from top left handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.RotateTopRight.__doc__ = "Rotate from top right handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.RotateBottomLeft.__doc__ = "Rotate from bottom left handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.RotateBottomRight.__doc__ = "Rotate right bottom right handle. \n.. versionadded:: 4.0"
Qgis.MouseHandlesAction.SelectItem.__doc__ = "Select item" Qgis.MouseHandlesAction.SelectItem.__doc__ = "Select item"
Qgis.MouseHandlesAction.NoAction.__doc__ = "No action" Qgis.MouseHandlesAction.NoAction.__doc__ = "No action"
Qgis.MouseHandlesAction.__doc__ = """Action to be performed by the mouse handles Qgis.MouseHandlesAction.__doc__ = """Action to be performed by the mouse handles
@ -11419,6 +11430,22 @@ Qgis.MouseHandlesAction.__doc__ = """Action to be performed by the mouse handles
* ``ResizeRightUp``: Resize right up (Top right handle) * ``ResizeRightUp``: Resize right up (Top right handle)
* ``ResizeLeftDown``: Resize left down (Bottom left handle) * ``ResizeLeftDown``: Resize left down (Bottom left handle)
* ``ResizeRightDown``: Resize right down (Bottom right handle) * ``ResizeRightDown``: Resize right down (Bottom right handle)
* ``RotateTopLeft``: Rotate from top left handle.
.. versionadded:: 4.0
* ``RotateTopRight``: Rotate from top right handle.
.. versionadded:: 4.0
* ``RotateBottomLeft``: Rotate from bottom left handle.
.. versionadded:: 4.0
* ``RotateBottomRight``: Rotate right bottom right handle.
.. versionadded:: 4.0
* ``SelectItem``: Select item * ``SelectItem``: Select item
* ``NoAction``: No action * ``NoAction``: No action

View File

@ -0,0 +1,5 @@
# The following has been generated automatically from src/core/qgsfeatureexpressionfilterprovider.h
try:
QgsFeatureExpressionFilterProvider.__overridden_methods__ = ['filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError):
pass

View File

@ -1,5 +1,6 @@
# The following has been generated automatically from src/core/qgsfeaturefilterprovider.h # The following has been generated automatically from src/core/qgsfeaturefilterprovider.h
try: try:
QgsFeatureFilterProvider.__abstract_methods__ = ['filterFeatures', 'layerAttributes', 'clone'] QgsFeatureFilterProvider.__virtual_methods__ = ['isFilterThreadSafe', 'filterFeatures']
QgsFeatureFilterProvider.__abstract_methods__ = ['layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -0,0 +1,5 @@
# The following has been generated automatically from src/core/qgsgroupedfeaturefilterprovider.h
try:
QgsGroupedFeatureFilterProvider.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError):
pass

View File

@ -73,6 +73,26 @@ Sets whether the coverage layer should be hidden in map items in the
layouts. layouts.
.. seealso:: :py:func:`hideCoverage` .. seealso:: :py:func:`hideCoverage`
%End
bool limitCoverageLayerRenderToCurrentFeature() const;
%Docstring
Returns ``True`` if the atlas is set to limit rendering on the coverage
layer to the current feature.
.. seealso:: :py:func:`setHideCoverage`
.. versionadded:: 4.0
%End
void setLimitCoverageLayerRenderToCurrentFeature( bool limit );
%Docstring
Sets whether the rendering of the coverage layer should be limited to
the current feature.
.. seealso:: :py:func:`hideCoverage`
.. versionadded:: 4.0
%End %End
QString filenameExpression() const; QString filenameExpression() const;

View File

@ -2912,6 +2912,7 @@ The development version
LosslessImageRendering, LosslessImageRendering,
SynchronousLegendGraphics, SynchronousLegendGraphics,
AlwaysUseGlobalMasks, AlwaysUseGlobalMasks,
LimitCoverageLayerRenderToCurrentFeature,
}; };
typedef QFlags<Qgis::LayoutRenderFlag> LayoutRenderFlags; typedef QFlags<Qgis::LayoutRenderFlag> LayoutRenderFlags;
@ -3346,6 +3347,10 @@ The development version
ResizeRightUp, ResizeRightUp,
ResizeLeftDown, ResizeLeftDown,
ResizeRightDown, ResizeRightDown,
RotateTopLeft,
RotateTopRight,
RotateBottomLeft,
RotateBottomRight,
SelectItem, SelectItem,
NoAction NoAction
}; };

View File

@ -0,0 +1,57 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeatureexpressionfilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsFeatureExpressionFilterProvider : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A feature filter provider allowing to set filter expressions on a
per-layer basis.
.. versionadded:: 4.0
%End
%TypeHeaderCode
#include "qgsfeatureexpressionfilterprovider.h"
%End
public:
QgsFeatureExpressionFilterProvider();
%Docstring
Constructor
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated/;
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureExpressionFilterProvider *clone() const /Factory/;
void setFilter( const QString &layerId, const QgsExpression &expression );
%Docstring
Set a filter for the given layer.
:param layerId: the layer to filter
:param expression: the filter expression
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeatureexpressionfilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -0,0 +1,93 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilter.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsFeatureFilter : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A feature filter provider allowing to set filter expressions on a
per-layer basis.
%End
%TypeHeaderCode
#include "qgsfeaturefilter.h"
%End
public:
QgsFeatureFilter();
%Docstring
Constructor
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring
Filter the features of the layer
:param layer: the layer to control
:param filterFeatures: the request to fill
.. deprecated:: 4.0
Use the layer ID variant.
%End
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer
:param layerId: the layer ID to control
:param filterFeatures: the request to fill
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
void setFilter( const QgsVectorLayer *layer, const QgsExpression &expression ) /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring
Set a filter for the given layer.
:param layer: the layer to filter
:param expression: the filter expression
.. deprecated:: 4.0
Use the layer ID variant.
%End
void setFilter( const QString &layerId, const QgsExpression &expression );
%Docstring
Set a filter for the given layer.
:param layerId: the layer to filter
:param expression: the filter expression
.. versionadded:: 4.0
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilter.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -30,7 +30,17 @@ also available.
public: public:
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &featureRequest ) const = 0; virtual bool isFilterThreadSafe() const /Deprecated="Since 4.0. "/;
%Docstring
Returns ``True`` if the filterFeature function is thread safe, which
will lead to reliance on layer ID instead of the raw layer pointer.
.. versionadded:: 4.0
.. deprecated:: 4.0
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &featureRequest ) const /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring %Docstring
Add additional filters to the feature request to further restrict the Add additional filters to the feature request to further restrict the
features returned by the request. Derived classes must implement this features returned by the request. Derived classes must implement this
@ -38,6 +48,22 @@ method.
:param layer: the layer to filter :param layer: the layer to filter
:param featureRequest: the feature request to update :param featureRequest: the feature request to update
.. deprecated:: 4.0
Use the layer ID variant.
%End
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &featureRequest ) const;
%Docstring
Add additional filters to the feature request to further restrict the
features returned by the request. Derived classes must implement this
method.
:param layerId: the layer ID to filter
:param featureRequest: the feature request to update
.. versionadded:: 4.0
%End %End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const = 0; virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const = 0;

View File

@ -0,0 +1,81 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilterprovidergroup.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsFeatureFilterProviderGroup : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A filter filter provider grouping several filter providers.
%End
%TypeHeaderCode
#include "qgsfeaturefilterprovidergroup.h"
%End
public:
QgsFeatureFilterProviderGroup();
%Docstring
Constructor
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated="Since 4.0. Use the layer ID variant."/;
%Docstring
Filter the features of the layer.
:param layer: the layer to control
:param filterFeatures: the request to fill
.. deprecated:: 4.0
Use the layer ID variant.
%End
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer.
:param layerId: the layer ID to control
:param filterFeatures: the request to fill
.. versionadded:: 4.0
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
QgsFeatureFilterProviderGroup &addProvider( const QgsFeatureFilterProvider *provider );
%Docstring
Add another filter provider to the group
:param provider: The provider to add
:return: itself
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsfeaturefilterprovidergroup.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -0,0 +1,60 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsgroupedfeaturefilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/
class QgsGroupedFeatureFilterProvider : QgsFeatureFilterProvider
{
%Docstring(signature="appended")
A filter filter provider grouping several filter providers.
.. versionadded:: 4.0
%End
%TypeHeaderCode
#include "qgsgroupedfeaturefilterprovider.h"
%End
public:
QgsGroupedFeatureFilterProvider();
%Docstring
Constructor
%End
virtual bool isFilterThreadSafe() const /Deprecated/;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const /Deprecated/;
virtual void filterFeatures( const QString &layerId, QgsFeatureRequest &filterFeatures ) const;
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsGroupedFeatureFilterProvider *clone() const /Factory/;
QgsGroupedFeatureFilterProvider &addProvider( const QgsFeatureFilterProvider *provider );
%Docstring
Add another filter provider to the group
:param provider: The provider to add
:return: itself
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/qgsgroupedfeaturefilterprovider.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.py again *
************************************************************************/

View File

@ -1,14 +1,14 @@
Qgis.defaultProjectScales: src/core/qgis.h#L6067 Qgis.defaultProjectScales: src/core/qgis.h#L6072
Qgis.devVersion: src/core/qgis.h#L89 Qgis.devVersion: src/core/qgis.h#L89
Qgis.geoNone: src/core/qgis.h#L6112 Qgis.geoNone: src/core/qgis.h#L6117
Qgis.geoProj4: src/core/qgis.h#L6142 Qgis.geoProj4: src/core/qgis.h#L6147
Qgis.geoWkt: src/core/qgis.h#L6133 Qgis.geoWkt: src/core/qgis.h#L6138
Qgis.geographicCrsAuthId: src/core/qgis.h#L6122 Qgis.geographicCrsAuthId: src/core/qgis.h#L6127
Qgis.geosVersion: src/core/qgis.h#L6102 Qgis.geosVersion: src/core/qgis.h#L6107
Qgis.geosVersionInt: src/core/qgis.h#L6074 Qgis.geosVersionInt: src/core/qgis.h#L6079
Qgis.geosVersionMajor: src/core/qgis.h#L6081 Qgis.geosVersionMajor: src/core/qgis.h#L6086
Qgis.geosVersionMinor: src/core/qgis.h#L6088 Qgis.geosVersionMinor: src/core/qgis.h#L6093
Qgis.geosVersionPatch: src/core/qgis.h#L6095 Qgis.geosVersionPatch: src/core/qgis.h#L6100
Qgis.releaseName: src/core/qgis.h#L79 Qgis.releaseName: src/core/qgis.h#L79
Qgis.version: src/core/qgis.h#L65 Qgis.version: src/core/qgis.h#L65
Qgis.versionInt: src/core/qgis.h#L72 Qgis.versionInt: src/core/qgis.h#L72
@ -4268,6 +4268,12 @@ QgsFeature.setGeometry: src/core/qgsfeature.h#L873
QgsFeature.setId: src/core/qgsfeature.h#L530 QgsFeature.setId: src/core/qgsfeature.h#L530
QgsFeature.setValid: src/core/qgsfeature.h#L813 QgsFeature.setValid: src/core/qgsfeature.h#L813
QgsFeature: src/core/qgsfeature.h#L57 QgsFeature: src/core/qgsfeature.h#L57
QgsFeatureExpressionFilterProvider.clone: src/core/qgsfeatureexpressionfilterprovider.h#L43
QgsFeatureExpressionFilterProvider.filterFeatures: src/core/qgsfeatureexpressionfilterprovider.h#L40
QgsFeatureExpressionFilterProvider.filterFeatures: src/core/qgsfeatureexpressionfilterprovider.h#L41
QgsFeatureExpressionFilterProvider.layerAttributes: src/core/qgsfeatureexpressionfilterprovider.h#L42
QgsFeatureExpressionFilterProvider.setFilter: src/core/qgsfeatureexpressionfilterprovider.h#L50
QgsFeatureExpressionFilterProvider: src/core/qgsfeatureexpressionfilterprovider.h#L34
QgsFeatureFilterModel.QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L48 QgsFeatureFilterModel.QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L48
QgsFeatureFilterModel.extraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L85 QgsFeatureFilterModel.extraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L85
QgsFeatureFilterModel.extraIdentifierValuesChanged: src/core/qgsfeaturefiltermodel.h#L107 QgsFeatureFilterModel.extraIdentifierValuesChanged: src/core/qgsfeaturefiltermodel.h#L107
@ -4279,9 +4285,11 @@ QgsFeatureFilterModel.setExtraIdentifierValueToNull: src/core/qgsfeaturefiltermo
QgsFeatureFilterModel.setExtraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L92 QgsFeatureFilterModel.setExtraIdentifierValues: src/core/qgsfeaturefiltermodel.h#L92
QgsFeatureFilterModel.setIdentifierFields: src/core/qgsfeaturefiltermodel.h#L71 QgsFeatureFilterModel.setIdentifierFields: src/core/qgsfeaturefiltermodel.h#L71
QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L27 QgsFeatureFilterModel: src/core/qgsfeaturefiltermodel.h#L27
QgsFeatureFilterProvider.clone: src/core/qgsfeaturefilterprovider.h#L71 QgsFeatureFilterProvider.clone: src/core/qgsfeaturefilterprovider.h#L97
QgsFeatureFilterProvider.filterFeatures: src/core/qgsfeaturefilterprovider.h#L59 QgsFeatureFilterProvider.filterFeatures: src/core/qgsfeaturefilterprovider.h#L72
QgsFeatureFilterProvider.layerAttributes: src/core/qgsfeaturefilterprovider.h#L65 QgsFeatureFilterProvider.filterFeatures: src/core/qgsfeaturefilterprovider.h#L85
QgsFeatureFilterProvider.isFilterThreadSafe: src/core/qgsfeaturefilterprovider.h#L59
QgsFeatureFilterProvider.layerAttributes: src/core/qgsfeaturefilterprovider.h#L91
QgsFeatureFilterProvider: src/core/qgsfeaturefilterprovider.h#L41 QgsFeatureFilterProvider: src/core/qgsfeaturefilterprovider.h#L41
QgsFeatureIterator.__iter__: src/core/qgsfeatureiterator.h#L294 QgsFeatureIterator.__iter__: src/core/qgsfeatureiterator.h#L294
QgsFeatureIterator.__next__: src/core/qgsfeatureiterator.h#L299 QgsFeatureIterator.__next__: src/core/qgsfeatureiterator.h#L299
@ -5762,6 +5770,12 @@ QgsGroupLayer.setTransformContext: src/core/qgsgrouplayer.h#L87
QgsGroupLayer.writeSymbology: src/core/qgsgrouplayer.h#L90 QgsGroupLayer.writeSymbology: src/core/qgsgrouplayer.h#L90
QgsGroupLayer.writeXml: src/core/qgsgrouplayer.h#L89 QgsGroupLayer.writeXml: src/core/qgsgrouplayer.h#L89
QgsGroupLayer: src/core/qgsgrouplayer.h#L41 QgsGroupLayer: src/core/qgsgrouplayer.h#L41
QgsGroupedFeatureFilterProvider.clone: src/core/qgsgroupedfeaturefilterprovider.h#L43
QgsGroupedFeatureFilterProvider.filterFeatures: src/core/qgsgroupedfeaturefilterprovider.h#L40
QgsGroupedFeatureFilterProvider.filterFeatures: src/core/qgsgroupedfeaturefilterprovider.h#L41
QgsGroupedFeatureFilterProvider.isFilterThreadSafe: src/core/qgsgroupedfeaturefilterprovider.h#L38
QgsGroupedFeatureFilterProvider.layerAttributes: src/core/qgsgroupedfeaturefilterprovider.h#L42
QgsGroupedFeatureFilterProvider: src/core/qgsgroupedfeaturefilterprovider.h#L32
QgsHashedLineSymbolLayer.clone: src/core/symbology/qgslinesymbollayer.h#L1040 QgsHashedLineSymbolLayer.clone: src/core/symbology/qgslinesymbollayer.h#L1040
QgsHashedLineSymbolLayer.color: src/core/symbology/qgslinesymbollayer.h#L1042 QgsHashedLineSymbolLayer.color: src/core/symbology/qgslinesymbollayer.h#L1042
QgsHashedLineSymbolLayer.create: src/core/symbology/qgslinesymbollayer.h#L1034 QgsHashedLineSymbolLayer.create: src/core/symbology/qgslinesymbollayer.h#L1034
@ -6780,53 +6794,55 @@ QgsLayoutAligner.alignItems: src/core/layout/qgslayoutaligner.h#L79
QgsLayoutAligner.distributeItems: src/core/layout/qgslayoutaligner.h#L86 QgsLayoutAligner.distributeItems: src/core/layout/qgslayoutaligner.h#L86
QgsLayoutAligner.resizeItems: src/core/layout/qgslayoutaligner.h#L93 QgsLayoutAligner.resizeItems: src/core/layout/qgslayoutaligner.h#L93
QgsLayoutAligner: src/core/layout/qgslayoutaligner.h#L35 QgsLayoutAligner: src/core/layout/qgslayoutaligner.h#L35
QgsLayoutAtlas.beginRender: src/core/layout/qgslayoutatlas.h#L245 QgsLayoutAtlas.beginRender: src/core/layout/qgslayoutatlas.h#L261
QgsLayoutAtlas.changed: src/core/layout/qgslayoutatlas.h#L314 QgsLayoutAtlas.changed: src/core/layout/qgslayoutatlas.h#L330
QgsLayoutAtlas.count: src/core/layout/qgslayoutatlas.h#L247 QgsLayoutAtlas.count: src/core/layout/qgslayoutatlas.h#L263
QgsLayoutAtlas.coverageLayer: src/core/layout/qgslayoutatlas.h#L115 QgsLayoutAtlas.coverageLayer: src/core/layout/qgslayoutatlas.h#L131
QgsLayoutAtlas.coverageLayerChanged: src/core/layout/qgslayoutatlas.h#L320 QgsLayoutAtlas.coverageLayerChanged: src/core/layout/qgslayoutatlas.h#L336
QgsLayoutAtlas.createExpressionContext: src/core/layout/qgslayoutatlas.h#L255 QgsLayoutAtlas.createExpressionContext: src/core/layout/qgslayoutatlas.h#L271
QgsLayoutAtlas.currentFeatureNumber: src/core/layout/qgslayoutatlas.h#L253 QgsLayoutAtlas.currentFeatureNumber: src/core/layout/qgslayoutatlas.h#L269
QgsLayoutAtlas.currentFilename: src/core/layout/qgslayoutatlas.h#L109 QgsLayoutAtlas.currentFilename: src/core/layout/qgslayoutatlas.h#L125
QgsLayoutAtlas.enabled: src/core/layout/qgslayoutatlas.h#L66 QgsLayoutAtlas.enabled: src/core/layout/qgslayoutatlas.h#L66
QgsLayoutAtlas.endRender: src/core/layout/qgslayoutatlas.h#L246 QgsLayoutAtlas.endRender: src/core/layout/qgslayoutatlas.h#L262
QgsLayoutAtlas.featureChanged: src/core/layout/qgslayoutatlas.h#L331 QgsLayoutAtlas.featureChanged: src/core/layout/qgslayoutatlas.h#L347
QgsLayoutAtlas.filePath: src/core/layout/qgslayoutatlas.h#L248 QgsLayoutAtlas.filePath: src/core/layout/qgslayoutatlas.h#L264
QgsLayoutAtlas.filenameExpression: src/core/layout/qgslayoutatlas.h#L92 QgsLayoutAtlas.filenameExpression: src/core/layout/qgslayoutatlas.h#L108
QgsLayoutAtlas.filterExpression: src/core/layout/qgslayoutatlas.h#L224 QgsLayoutAtlas.filterExpression: src/core/layout/qgslayoutatlas.h#L240
QgsLayoutAtlas.filterFeatures: src/core/layout/qgslayoutatlas.h#L207 QgsLayoutAtlas.filterFeatures: src/core/layout/qgslayoutatlas.h#L223
QgsLayoutAtlas.first: src/core/layout/qgslayoutatlas.h#L286 QgsLayoutAtlas.first: src/core/layout/qgslayoutatlas.h#L302
QgsLayoutAtlas.hideCoverage: src/core/layout/qgslayoutatlas.h#L78 QgsLayoutAtlas.hideCoverage: src/core/layout/qgslayoutatlas.h#L78
QgsLayoutAtlas.last: src/core/layout/qgslayoutatlas.h#L277 QgsLayoutAtlas.last: src/core/layout/qgslayoutatlas.h#L293
QgsLayoutAtlas.layout: src/core/layout/qgslayoutatlas.h#L51 QgsLayoutAtlas.layout: src/core/layout/qgslayoutatlas.h#L51
QgsLayoutAtlas.messagePushed: src/core/layout/qgslayoutatlas.h#L323 QgsLayoutAtlas.limitCoverageLayerRenderToCurrentFeature: src/core/layout/qgslayoutatlas.h#L92
QgsLayoutAtlas.nameForPage: src/core/layout/qgslayoutatlas.h#L140 QgsLayoutAtlas.messagePushed: src/core/layout/qgslayoutatlas.h#L339
QgsLayoutAtlas.next: src/core/layout/qgslayoutatlas.h#L259 QgsLayoutAtlas.nameForPage: src/core/layout/qgslayoutatlas.h#L156
QgsLayoutAtlas.numberFeaturesChanged: src/core/layout/qgslayoutatlas.h#L328 QgsLayoutAtlas.next: src/core/layout/qgslayoutatlas.h#L275
QgsLayoutAtlas.pageNameExpression: src/core/layout/qgslayoutatlas.h#L128 QgsLayoutAtlas.numberFeaturesChanged: src/core/layout/qgslayoutatlas.h#L344
QgsLayoutAtlas.previous: src/core/layout/qgslayoutatlas.h#L268 QgsLayoutAtlas.pageNameExpression: src/core/layout/qgslayoutatlas.h#L144
QgsLayoutAtlas.previous: src/core/layout/qgslayoutatlas.h#L284
QgsLayoutAtlas.readXml: src/core/layout/qgslayoutatlas.h#L60 QgsLayoutAtlas.readXml: src/core/layout/qgslayoutatlas.h#L60
QgsLayoutAtlas.refreshCurrentFeature: src/core/layout/qgslayoutatlas.h#L309 QgsLayoutAtlas.refreshCurrentFeature: src/core/layout/qgslayoutatlas.h#L325
QgsLayoutAtlas.renderBegun: src/core/layout/qgslayoutatlas.h#L334 QgsLayoutAtlas.renderBegun: src/core/layout/qgslayoutatlas.h#L350
QgsLayoutAtlas.renderEnded: src/core/layout/qgslayoutatlas.h#L337 QgsLayoutAtlas.renderEnded: src/core/layout/qgslayoutatlas.h#L353
QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L295 QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L311
QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L304 QgsLayoutAtlas.seekTo: src/core/layout/qgslayoutatlas.h#L320
QgsLayoutAtlas.setCoverageLayer: src/core/layout/qgslayoutatlas.h#L121 QgsLayoutAtlas.setCoverageLayer: src/core/layout/qgslayoutatlas.h#L137
QgsLayoutAtlas.setEnabled: src/core/layout/qgslayoutatlas.h#L72 QgsLayoutAtlas.setEnabled: src/core/layout/qgslayoutatlas.h#L72
QgsLayoutAtlas.setFilenameExpression: src/core/layout/qgslayoutatlas.h#L102 QgsLayoutAtlas.setFilenameExpression: src/core/layout/qgslayoutatlas.h#L118
QgsLayoutAtlas.setFilterExpression: src/core/layout/qgslayoutatlas.h#L237 QgsLayoutAtlas.setFilterExpression: src/core/layout/qgslayoutatlas.h#L253
QgsLayoutAtlas.setFilterFeatures: src/core/layout/qgslayoutatlas.h#L214 QgsLayoutAtlas.setFilterFeatures: src/core/layout/qgslayoutatlas.h#L230
QgsLayoutAtlas.setHideCoverage: src/core/layout/qgslayoutatlas.h#L84 QgsLayoutAtlas.setHideCoverage: src/core/layout/qgslayoutatlas.h#L84
QgsLayoutAtlas.setPageNameExpression: src/core/layout/qgslayoutatlas.h#L134 QgsLayoutAtlas.setLimitCoverageLayerRenderToCurrentFeature: src/core/layout/qgslayoutatlas.h#L100
QgsLayoutAtlas.setSortAscending: src/core/layout/qgslayoutatlas.h#L178 QgsLayoutAtlas.setPageNameExpression: src/core/layout/qgslayoutatlas.h#L150
QgsLayoutAtlas.setSortExpression: src/core/layout/qgslayoutatlas.h#L200 QgsLayoutAtlas.setSortAscending: src/core/layout/qgslayoutatlas.h#L194
QgsLayoutAtlas.setSortFeatures: src/core/layout/qgslayoutatlas.h#L156 QgsLayoutAtlas.setSortExpression: src/core/layout/qgslayoutatlas.h#L216
QgsLayoutAtlas.sortAscending: src/core/layout/qgslayoutatlas.h#L167 QgsLayoutAtlas.setSortFeatures: src/core/layout/qgslayoutatlas.h#L172
QgsLayoutAtlas.sortExpression: src/core/layout/qgslayoutatlas.h#L189 QgsLayoutAtlas.sortAscending: src/core/layout/qgslayoutatlas.h#L183
QgsLayoutAtlas.sortFeatures: src/core/layout/qgslayoutatlas.h#L148 QgsLayoutAtlas.sortExpression: src/core/layout/qgslayoutatlas.h#L205
QgsLayoutAtlas.sortFeatures: src/core/layout/qgslayoutatlas.h#L164
QgsLayoutAtlas.stringType: src/core/layout/qgslayoutatlas.h#L50 QgsLayoutAtlas.stringType: src/core/layout/qgslayoutatlas.h#L50
QgsLayoutAtlas.toggled: src/core/layout/qgslayoutatlas.h#L317 QgsLayoutAtlas.toggled: src/core/layout/qgslayoutatlas.h#L333
QgsLayoutAtlas.updateFeatures: src/core/layout/qgslayoutatlas.h#L243 QgsLayoutAtlas.updateFeatures: src/core/layout/qgslayoutatlas.h#L259
QgsLayoutAtlas.writeXml: src/core/layout/qgslayoutatlas.h#L59 QgsLayoutAtlas.writeXml: src/core/layout/qgslayoutatlas.h#L59
QgsLayoutAtlas: src/core/layout/qgslayoutatlas.h#L40 QgsLayoutAtlas: src/core/layout/qgslayoutatlas.h#L40
QgsLayoutChecker.setSize: src/core/qgsmultirenderchecker.h#L209 QgsLayoutChecker.setSize: src/core/qgsmultirenderchecker.h#L209
@ -7310,119 +7326,119 @@ QgsLayoutItemManualTable.type: src/core/layout/qgslayoutitemmanualtable.h#L46
QgsLayoutItemManualTable.verticalAlignmentForCell: src/core/layout/qgslayoutitemmanualtable.h#L145 QgsLayoutItemManualTable.verticalAlignmentForCell: src/core/layout/qgslayoutitemmanualtable.h#L145
QgsLayoutItemManualTable.writePropertiesToElement: src/core/layout/qgslayoutitemmanualtable.h#L139 QgsLayoutItemManualTable.writePropertiesToElement: src/core/layout/qgslayoutitemmanualtable.h#L139
QgsLayoutItemManualTable: src/core/layout/qgslayoutitemmanualtable.h#L31 QgsLayoutItemManualTable: src/core/layout/qgslayoutitemmanualtable.h#L31
QgsLayoutItemMap.QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L361 QgsLayoutItemMap.QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L362
QgsLayoutItemMap.accept: src/core/layout/qgslayoutitemmap.h#L828 QgsLayoutItemMap.accept: src/core/layout/qgslayoutitemmap.h#L829
QgsLayoutItemMap.addLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L785 QgsLayoutItemMap.addLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L786
QgsLayoutItemMap.addRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L842 QgsLayoutItemMap.addRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L843
QgsLayoutItemMap.assignFreeId: src/core/layout/qgslayoutitemmap.h#L385 QgsLayoutItemMap.assignFreeId: src/core/layout/qgslayoutitemmap.h#L386
QgsLayoutItemMap.atlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L862 QgsLayoutItemMap.atlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L863
QgsLayoutItemMap.atlasDriven: src/core/layout/qgslayoutitemmap.h#L643 QgsLayoutItemMap.atlasDriven: src/core/layout/qgslayoutitemmap.h#L644
QgsLayoutItemMap.atlasMargin: src/core/layout/qgslayoutitemmap.h#L685 QgsLayoutItemMap.atlasMargin: src/core/layout/qgslayoutitemmap.h#L686
QgsLayoutItemMap.atlasScalingMode: src/core/layout/qgslayoutitemmap.h#L662 QgsLayoutItemMap.atlasScalingMode: src/core/layout/qgslayoutitemmap.h#L663
QgsLayoutItemMap.boundingRect: src/core/layout/qgslayoutitemmap.h#L928 QgsLayoutItemMap.boundingRect: src/core/layout/qgslayoutitemmap.h#L929
QgsLayoutItemMap.containsAdvancedEffects: src/core/layout/qgslayoutitemmap.h#L604 QgsLayoutItemMap.containsAdvancedEffects: src/core/layout/qgslayoutitemmap.h#L605
QgsLayoutItemMap.containsWmsLayer: src/core/layout/qgslayoutitemmap.h#L601 QgsLayoutItemMap.containsWmsLayer: src/core/layout/qgslayoutitemmap.h#L602
QgsLayoutItemMap.create: src/core/layout/qgslayoutitemmap.h#L395 QgsLayoutItemMap.create: src/core/layout/qgslayoutitemmap.h#L396
QgsLayoutItemMap.createExpressionContext: src/core/layout/qgslayoutitemmap.h#L748 QgsLayoutItemMap.createExpressionContext: src/core/layout/qgslayoutitemmap.h#L749
QgsLayoutItemMap.crs: src/core/layout/qgslayoutitemmap.h#L471 QgsLayoutItemMap.crs: src/core/layout/qgslayoutitemmap.h#L472
QgsLayoutItemMap.crsChanged: src/core/layout/qgslayoutitemmap.h#L981 QgsLayoutItemMap.crsChanged: src/core/layout/qgslayoutitemmap.h#L982
QgsLayoutItemMap.displayName: src/core/layout/qgslayoutitemmap.h#L388 QgsLayoutItemMap.displayName: src/core/layout/qgslayoutitemmap.h#L389
QgsLayoutItemMap.draw: src/core/layout/qgslayoutitemmap.h#L919 QgsLayoutItemMap.draw: src/core/layout/qgslayoutitemmap.h#L920
QgsLayoutItemMap.drawAnnotations: src/core/layout/qgslayoutitemmap.h#L634 QgsLayoutItemMap.drawAnnotations: src/core/layout/qgslayoutitemmap.h#L635
QgsLayoutItemMap.estimatedFrameBleed: src/core/layout/qgslayoutitemmap.h#L915 QgsLayoutItemMap.estimatedFrameBleed: src/core/layout/qgslayoutitemmap.h#L916
QgsLayoutItemMap.exportLayerBehavior: src/core/layout/qgslayoutitemmap.h#L408 QgsLayoutItemMap.exportLayerBehavior: src/core/layout/qgslayoutitemmap.h#L409
QgsLayoutItemMap.exportLayerDetails: src/core/layout/qgslayoutitemmap.h#L409 QgsLayoutItemMap.exportLayerDetails: src/core/layout/qgslayoutitemmap.h#L410
QgsLayoutItemMap.extent: src/core/layout/qgslayoutitemmap.h#L451 QgsLayoutItemMap.extent: src/core/layout/qgslayoutitemmap.h#L452
QgsLayoutItemMap.extentChanged: src/core/layout/qgslayoutitemmap.h#L948 QgsLayoutItemMap.extentChanged: src/core/layout/qgslayoutitemmap.h#L949
QgsLayoutItemMap.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L766 QgsLayoutItemMap.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L767
QgsLayoutItemMap.followVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L570 QgsLayoutItemMap.followVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L571
QgsLayoutItemMap.followVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L584 QgsLayoutItemMap.followVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L585
QgsLayoutItemMap.framePath: src/core/layout/qgslayoutitemmap.h#L922 QgsLayoutItemMap.framePath: src/core/layout/qgslayoutitemmap.h#L923
QgsLayoutItemMap.grid: src/core/layout/qgslayoutitemmap.h#L707 QgsLayoutItemMap.grid: src/core/layout/qgslayoutitemmap.h#L708
QgsLayoutItemMap.grids: src/core/layout/qgslayoutitemmap.h#L701 QgsLayoutItemMap.grids: src/core/layout/qgslayoutitemmap.h#L702
QgsLayoutItemMap.icon: src/core/layout/qgslayoutitemmap.h#L365 QgsLayoutItemMap.icon: src/core/layout/qgslayoutitemmap.h#L366
QgsLayoutItemMap.invalidateCache: src/core/layout/qgslayoutitemmap.h#L994 QgsLayoutItemMap.invalidateCache: src/core/layout/qgslayoutitemmap.h#L995
QgsLayoutItemMap.isDrawing: src/core/layout/qgslayoutitemmap.h#L925 QgsLayoutItemMap.isDrawing: src/core/layout/qgslayoutitemmap.h#L926
QgsLayoutItemMap.isLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L811 QgsLayoutItemMap.isLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L812
QgsLayoutItemMap.itemClippingSettings: src/core/layout/qgslayoutitemmap.h#L869 QgsLayoutItemMap.itemClippingSettings: src/core/layout/qgslayoutitemmap.h#L870
QgsLayoutItemMap.itemFlags: src/core/layout/qgslayoutitemmap.h#L366 QgsLayoutItemMap.itemFlags: src/core/layout/qgslayoutitemmap.h#L367
QgsLayoutItemMap.keepLayerSet: src/core/layout/qgslayoutitemmap.h#L500 QgsLayoutItemMap.keepLayerSet: src/core/layout/qgslayoutitemmap.h#L501
QgsLayoutItemMap.keepLayerStyles: src/core/layout/qgslayoutitemmap.h#L535 QgsLayoutItemMap.keepLayerStyles: src/core/layout/qgslayoutitemmap.h#L536
QgsLayoutItemMap.labelMargin: src/core/layout/qgslayoutitemmap.h#L734 QgsLayoutItemMap.labelMargin: src/core/layout/qgslayoutitemmap.h#L735
QgsLayoutItemMap.layerStyleOverridesChanged: src/core/layout/qgslayoutitemmap.h#L964 QgsLayoutItemMap.layerStyleOverridesChanged: src/core/layout/qgslayoutitemmap.h#L965
QgsLayoutItemMap.layoutToMapCoordsTransform: src/core/layout/qgslayoutitemmap.h#L855 QgsLayoutItemMap.layoutToMapCoordsTransform: src/core/layout/qgslayoutitemmap.h#L856
QgsLayoutItemMap.mapFlags: src/core/layout/qgslayoutitemmap.h#L373 QgsLayoutItemMap.mapFlags: src/core/layout/qgslayoutitemmap.h#L374
QgsLayoutItemMap.mapRotation: src/core/layout/qgslayoutitemmap.h#L622 QgsLayoutItemMap.mapRotation: src/core/layout/qgslayoutitemmap.h#L623
QgsLayoutItemMap.mapRotationChanged: src/core/layout/qgslayoutitemmap.h#L955 QgsLayoutItemMap.mapRotationChanged: src/core/layout/qgslayoutitemmap.h#L956
QgsLayoutItemMap.mapSettings: src/core/layout/qgslayoutitemmap.h#L764 QgsLayoutItemMap.mapSettings: src/core/layout/qgslayoutitemmap.h#L765
QgsLayoutItemMap.mapToItemCoords: src/core/layout/qgslayoutitemmap.h#L934 QgsLayoutItemMap.mapToItemCoords: src/core/layout/qgslayoutitemmap.h#L935
QgsLayoutItemMap.mapUnitsToLayoutUnits: src/core/layout/qgslayoutitemmap.h#L755 QgsLayoutItemMap.mapUnitsToLayoutUnits: src/core/layout/qgslayoutitemmap.h#L756
QgsLayoutItemMap.moveContent: src/core/layout/qgslayoutitemmap.h#L594 QgsLayoutItemMap.moveContent: src/core/layout/qgslayoutitemmap.h#L595
QgsLayoutItemMap.nextExportPart: src/core/layout/qgslayoutitemmap.h#L407 QgsLayoutItemMap.nextExportPart: src/core/layout/qgslayoutitemmap.h#L408
QgsLayoutItemMap.numberExportLayers: src/core/layout/qgslayoutitemmap.h#L403 QgsLayoutItemMap.numberExportLayers: src/core/layout/qgslayoutitemmap.h#L404
QgsLayoutItemMap.overview: src/core/layout/qgslayoutitemmap.h#L722 QgsLayoutItemMap.overview: src/core/layout/qgslayoutitemmap.h#L723
QgsLayoutItemMap.overviews: src/core/layout/qgslayoutitemmap.h#L715 QgsLayoutItemMap.overviews: src/core/layout/qgslayoutitemmap.h#L716
QgsLayoutItemMap.paint: src/core/layout/qgslayoutitemmap.h#L398 QgsLayoutItemMap.paint: src/core/layout/qgslayoutitemmap.h#L399
QgsLayoutItemMap.preparedForAtlas: src/core/layout/qgslayoutitemmap.h#L958 QgsLayoutItemMap.preparedForAtlas: src/core/layout/qgslayoutitemmap.h#L959
QgsLayoutItemMap.presetCrs: src/core/layout/qgslayoutitemmap.h#L481 QgsLayoutItemMap.presetCrs: src/core/layout/qgslayoutitemmap.h#L482
QgsLayoutItemMap.previewLabelingResults: src/core/layout/qgslayoutitemmap.h#L826 QgsLayoutItemMap.previewLabelingResults: src/core/layout/qgslayoutitemmap.h#L827
QgsLayoutItemMap.previewRefreshed: src/core/layout/qgslayoutitemmap.h#L988 QgsLayoutItemMap.previewRefreshed: src/core/layout/qgslayoutitemmap.h#L989
QgsLayoutItemMap.readPropertiesFromElement: src/core/layout/qgslayoutitemmap.h#L921 QgsLayoutItemMap.readPropertiesFromElement: src/core/layout/qgslayoutitemmap.h#L922
QgsLayoutItemMap.refresh: src/core/layout/qgslayoutitemmap.h#L992 QgsLayoutItemMap.refresh: src/core/layout/qgslayoutitemmap.h#L993
QgsLayoutItemMap.refreshDataDefinedProperty: src/core/layout/qgslayoutitemmap.h#L999 QgsLayoutItemMap.refreshDataDefinedProperty: src/core/layout/qgslayoutitemmap.h#L1000
QgsLayoutItemMap.removeLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L798 QgsLayoutItemMap.removeLabelBlockingItem: src/core/layout/qgslayoutitemmap.h#L799
QgsLayoutItemMap.removeRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L850 QgsLayoutItemMap.removeRenderedFeatureHandler: src/core/layout/qgslayoutitemmap.h#L851
QgsLayoutItemMap.renderingErrors: src/core/layout/qgslayoutitemmap.h#L817 QgsLayoutItemMap.renderingErrors: src/core/layout/qgslayoutitemmap.h#L818
QgsLayoutItemMap.requestedExtent: src/core/layout/qgslayoutitemmap.h#L939 QgsLayoutItemMap.requestedExtent: src/core/layout/qgslayoutitemmap.h#L940
QgsLayoutItemMap.requiresRasterization: src/core/layout/qgslayoutitemmap.h#L603 QgsLayoutItemMap.requiresRasterization: src/core/layout/qgslayoutitemmap.h#L604
QgsLayoutItemMap.scale: src/core/layout/qgslayoutitemmap.h#L417 QgsLayoutItemMap.scale: src/core/layout/qgslayoutitemmap.h#L418
QgsLayoutItemMap.setAtlasDriven: src/core/layout/qgslayoutitemmap.h#L651 QgsLayoutItemMap.setAtlasDriven: src/core/layout/qgslayoutitemmap.h#L652
QgsLayoutItemMap.setAtlasMargin: src/core/layout/qgslayoutitemmap.h#L694 QgsLayoutItemMap.setAtlasMargin: src/core/layout/qgslayoutitemmap.h#L695
QgsLayoutItemMap.setAtlasScalingMode: src/core/layout/qgslayoutitemmap.h#L673 QgsLayoutItemMap.setAtlasScalingMode: src/core/layout/qgslayoutitemmap.h#L674
QgsLayoutItemMap.setCrs: src/core/layout/qgslayoutitemmap.h#L490 QgsLayoutItemMap.setCrs: src/core/layout/qgslayoutitemmap.h#L491
QgsLayoutItemMap.setDrawAnnotations: src/core/layout/qgslayoutitemmap.h#L628 QgsLayoutItemMap.setDrawAnnotations: src/core/layout/qgslayoutitemmap.h#L629
QgsLayoutItemMap.setExtent: src/core/layout/qgslayoutitemmap.h#L435 QgsLayoutItemMap.setExtent: src/core/layout/qgslayoutitemmap.h#L436
QgsLayoutItemMap.setFollowVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L575 QgsLayoutItemMap.setFollowVisibilityPreset: src/core/layout/qgslayoutitemmap.h#L576
QgsLayoutItemMap.setFollowVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L592 QgsLayoutItemMap.setFollowVisibilityPresetName: src/core/layout/qgslayoutitemmap.h#L593
QgsLayoutItemMap.setFrameStrokeWidth: src/core/layout/qgslayoutitemmap.h#L410 QgsLayoutItemMap.setFrameStrokeWidth: src/core/layout/qgslayoutitemmap.h#L411
QgsLayoutItemMap.setKeepLayerSet: src/core/layout/qgslayoutitemmap.h#L510 QgsLayoutItemMap.setKeepLayerSet: src/core/layout/qgslayoutitemmap.h#L511
QgsLayoutItemMap.setKeepLayerStyles: src/core/layout/qgslayoutitemmap.h#L541 QgsLayoutItemMap.setKeepLayerStyles: src/core/layout/qgslayoutitemmap.h#L542
QgsLayoutItemMap.setLabelMargin: src/core/layout/qgslayoutitemmap.h#L746 QgsLayoutItemMap.setLabelMargin: src/core/layout/qgslayoutitemmap.h#L747
QgsLayoutItemMap.setLayerStyleOverrides: src/core/layout/qgslayoutitemmap.h#L553 QgsLayoutItemMap.setLayerStyleOverrides: src/core/layout/qgslayoutitemmap.h#L554
QgsLayoutItemMap.setLayers: src/core/layout/qgslayoutitemmap.h#L529 QgsLayoutItemMap.setLayers: src/core/layout/qgslayoutitemmap.h#L530
QgsLayoutItemMap.setMapFlags: src/core/layout/qgslayoutitemmap.h#L380 QgsLayoutItemMap.setMapFlags: src/core/layout/qgslayoutitemmap.h#L381
QgsLayoutItemMap.setMapRotation: src/core/layout/qgslayoutitemmap.h#L612 QgsLayoutItemMap.setMapRotation: src/core/layout/qgslayoutitemmap.h#L613
QgsLayoutItemMap.setMoveContentPreviewOffset: src/core/layout/qgslayoutitemmap.h#L595 QgsLayoutItemMap.setMoveContentPreviewOffset: src/core/layout/qgslayoutitemmap.h#L596
QgsLayoutItemMap.setScale: src/core/layout/qgslayoutitemmap.h#L426 QgsLayoutItemMap.setScale: src/core/layout/qgslayoutitemmap.h#L427
QgsLayoutItemMap.setZRange: src/core/layout/qgslayoutitemmap.h#L912 QgsLayoutItemMap.setZRange: src/core/layout/qgslayoutitemmap.h#L913
QgsLayoutItemMap.setZRangeEnabled: src/core/layout/qgslayoutitemmap.h#L878 QgsLayoutItemMap.setZRangeEnabled: src/core/layout/qgslayoutitemmap.h#L879
QgsLayoutItemMap.startLayeredExport: src/core/layout/qgslayoutitemmap.h#L405 QgsLayoutItemMap.startLayeredExport: src/core/layout/qgslayoutitemmap.h#L406
QgsLayoutItemMap.stopLayeredExport: src/core/layout/qgslayoutitemmap.h#L406 QgsLayoutItemMap.stopLayeredExport: src/core/layout/qgslayoutitemmap.h#L407
QgsLayoutItemMap.storeCurrentLayerStyles: src/core/layout/qgslayoutitemmap.h#L558 QgsLayoutItemMap.storeCurrentLayerStyles: src/core/layout/qgslayoutitemmap.h#L559
QgsLayoutItemMap.themeChanged: src/core/layout/qgslayoutitemmap.h#L974 QgsLayoutItemMap.themeChanged: src/core/layout/qgslayoutitemmap.h#L975
QgsLayoutItemMap.transformedMapPolygon: src/core/layout/qgslayoutitemmap.h#L931 QgsLayoutItemMap.transformedMapPolygon: src/core/layout/qgslayoutitemmap.h#L932
QgsLayoutItemMap.type: src/core/layout/qgslayoutitemmap.h#L364 QgsLayoutItemMap.type: src/core/layout/qgslayoutitemmap.h#L365
QgsLayoutItemMap.updateBoundingRect: src/core/layout/qgslayoutitemmap.h#L997 QgsLayoutItemMap.updateBoundingRect: src/core/layout/qgslayoutitemmap.h#L998
QgsLayoutItemMap.visibleExtentPolygon: src/core/layout/qgslayoutitemmap.h#L461 QgsLayoutItemMap.visibleExtentPolygon: src/core/layout/qgslayoutitemmap.h#L462
QgsLayoutItemMap.writePropertiesToElement: src/core/layout/qgslayoutitemmap.h#L920 QgsLayoutItemMap.writePropertiesToElement: src/core/layout/qgslayoutitemmap.h#L921
QgsLayoutItemMap.zRange: src/core/layout/qgslayoutitemmap.h#L900 QgsLayoutItemMap.zRange: src/core/layout/qgslayoutitemmap.h#L901
QgsLayoutItemMap.zRangeEnabled: src/core/layout/qgslayoutitemmap.h#L888 QgsLayoutItemMap.zRangeEnabled: src/core/layout/qgslayoutitemmap.h#L889
QgsLayoutItemMap.zoomContent: src/core/layout/qgslayoutitemmap.h#L597 QgsLayoutItemMap.zoomContent: src/core/layout/qgslayoutitemmap.h#L598
QgsLayoutItemMap.zoomToExtent: src/core/layout/qgslayoutitemmap.h#L444 QgsLayoutItemMap.zoomToExtent: src/core/layout/qgslayoutitemmap.h#L445
QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L317 QgsLayoutItemMap: src/core/layout/qgslayoutitemmap.h#L318
QgsLayoutItemMapAtlasClippingSettings.changed: src/core/layout/qgslayoutitemmap.h#L148 QgsLayoutItemMapAtlasClippingSettings.changed: src/core/layout/qgslayoutitemmap.h#L149
QgsLayoutItemMapAtlasClippingSettings.enabled: src/core/layout/qgslayoutitemmap.h#L56 QgsLayoutItemMapAtlasClippingSettings.enabled: src/core/layout/qgslayoutitemmap.h#L57
QgsLayoutItemMapAtlasClippingSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L70 QgsLayoutItemMapAtlasClippingSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L71
QgsLayoutItemMapAtlasClippingSettings.forceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L84 QgsLayoutItemMapAtlasClippingSettings.forceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L85
QgsLayoutItemMapAtlasClippingSettings.readXml: src/core/layout/qgslayoutitemmap.h#L141 QgsLayoutItemMapAtlasClippingSettings.readXml: src/core/layout/qgslayoutitemmap.h#L142
QgsLayoutItemMapAtlasClippingSettings.restrictToLayers: src/core/layout/qgslayoutitemmap.h#L99 QgsLayoutItemMapAtlasClippingSettings.restrictToLayers: src/core/layout/qgslayoutitemmap.h#L100
QgsLayoutItemMapAtlasClippingSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L63 QgsLayoutItemMapAtlasClippingSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L64
QgsLayoutItemMapAtlasClippingSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L77 QgsLayoutItemMapAtlasClippingSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L78
QgsLayoutItemMapAtlasClippingSettings.setForceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L91 QgsLayoutItemMapAtlasClippingSettings.setForceLabelsInsideFeature: src/core/layout/qgslayoutitemmap.h#L92
QgsLayoutItemMapAtlasClippingSettings.setLayersToClip: src/core/layout/qgslayoutitemmap.h#L127 QgsLayoutItemMapAtlasClippingSettings.setLayersToClip: src/core/layout/qgslayoutitemmap.h#L128
QgsLayoutItemMapAtlasClippingSettings.setRestrictToLayers: src/core/layout/qgslayoutitemmap.h#L107 QgsLayoutItemMapAtlasClippingSettings.setRestrictToLayers: src/core/layout/qgslayoutitemmap.h#L108
QgsLayoutItemMapAtlasClippingSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L134 QgsLayoutItemMapAtlasClippingSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L135
QgsLayoutItemMapAtlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L40 QgsLayoutItemMapAtlasClippingSettings: src/core/layout/qgslayoutitemmap.h#L41
QgsLayoutItemMapGrid.accept: src/core/layout/qgslayoutitemmapgrid.h#L1005 QgsLayoutItemMapGrid.accept: src/core/layout/qgslayoutitemmapgrid.h#L1005
QgsLayoutItemMapGrid.annotationDirection: src/core/layout/qgslayoutitemmapgrid.h#L701 QgsLayoutItemMapGrid.annotationDirection: src/core/layout/qgslayoutitemmapgrid.h#L701
QgsLayoutItemMapGrid.annotationDisplay: src/core/layout/qgslayoutitemmapgrid.h#L656 QgsLayoutItemMapGrid.annotationDisplay: src/core/layout/qgslayoutitemmapgrid.h#L656
@ -7553,23 +7569,23 @@ QgsLayoutItemMapItem.stackingPosition: src/core/layout/qgslayoutitemmapitem.h#L1
QgsLayoutItemMapItem.usesAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L128 QgsLayoutItemMapItem.usesAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L128
QgsLayoutItemMapItem.writeXml: src/core/layout/qgslayoutitemmapitem.h#L65 QgsLayoutItemMapItem.writeXml: src/core/layout/qgslayoutitemmapitem.h#L65
QgsLayoutItemMapItem: src/core/layout/qgslayoutitemmapitem.h#L32 QgsLayoutItemMapItem: src/core/layout/qgslayoutitemmapitem.h#L32
QgsLayoutItemMapItemClipPathSettings.changed: src/core/layout/qgslayoutitemmap.h#L297 QgsLayoutItemMapItemClipPathSettings.changed: src/core/layout/qgslayoutitemmap.h#L298
QgsLayoutItemMapItemClipPathSettings.clipPathInMapItemCoordinates: src/core/layout/qgslayoutitemmap.h#L219 QgsLayoutItemMapItemClipPathSettings.clipPathInMapItemCoordinates: src/core/layout/qgslayoutitemmap.h#L220
QgsLayoutItemMapItemClipPathSettings.clippedMapExtent: src/core/layout/qgslayoutitemmap.h#L208 QgsLayoutItemMapItemClipPathSettings.clippedMapExtent: src/core/layout/qgslayoutitemmap.h#L209
QgsLayoutItemMapItemClipPathSettings.enabled: src/core/layout/qgslayoutitemmap.h#L194 QgsLayoutItemMapItemClipPathSettings.enabled: src/core/layout/qgslayoutitemmap.h#L195
QgsLayoutItemMapItemClipPathSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L248 QgsLayoutItemMapItemClipPathSettings.featureClippingType: src/core/layout/qgslayoutitemmap.h#L249
QgsLayoutItemMapItemClipPathSettings.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L290 QgsLayoutItemMapItemClipPathSettings.finalizeRestoreFromXml: src/core/layout/qgslayoutitemmap.h#L291
QgsLayoutItemMapItemClipPathSettings.forceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L262 QgsLayoutItemMapItemClipPathSettings.forceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L263
QgsLayoutItemMapItemClipPathSettings.isActive: src/core/layout/qgslayoutitemmap.h#L187 QgsLayoutItemMapItemClipPathSettings.isActive: src/core/layout/qgslayoutitemmap.h#L188
QgsLayoutItemMapItemClipPathSettings.readXml: src/core/layout/qgslayoutitemmap.h#L284 QgsLayoutItemMapItemClipPathSettings.readXml: src/core/layout/qgslayoutitemmap.h#L285
QgsLayoutItemMapItemClipPathSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L201 QgsLayoutItemMapItemClipPathSettings.setEnabled: src/core/layout/qgslayoutitemmap.h#L202
QgsLayoutItemMapItemClipPathSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L255 QgsLayoutItemMapItemClipPathSettings.setFeatureClippingType: src/core/layout/qgslayoutitemmap.h#L256
QgsLayoutItemMapItemClipPathSettings.setForceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L269 QgsLayoutItemMapItemClipPathSettings.setForceLabelsInsideClipPath: src/core/layout/qgslayoutitemmap.h#L270
QgsLayoutItemMapItemClipPathSettings.setSourceItem: src/core/layout/qgslayoutitemmap.h#L233 QgsLayoutItemMapItemClipPathSettings.setSourceItem: src/core/layout/qgslayoutitemmap.h#L234
QgsLayoutItemMapItemClipPathSettings.sourceItem: src/core/layout/qgslayoutitemmap.h#L241 QgsLayoutItemMapItemClipPathSettings.sourceItem: src/core/layout/qgslayoutitemmap.h#L242
QgsLayoutItemMapItemClipPathSettings.toMapClippingRegion: src/core/layout/qgslayoutitemmap.h#L224 QgsLayoutItemMapItemClipPathSettings.toMapClippingRegion: src/core/layout/qgslayoutitemmap.h#L225
QgsLayoutItemMapItemClipPathSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L276 QgsLayoutItemMapItemClipPathSettings.writeXml: src/core/layout/qgslayoutitemmap.h#L277
QgsLayoutItemMapItemClipPathSettings: src/core/layout/qgslayoutitemmap.h#L170 QgsLayoutItemMapItemClipPathSettings: src/core/layout/qgslayoutitemmap.h#L171
QgsLayoutItemMapItemStack.addItem: src/core/layout/qgslayoutitemmapitem.h#L306 QgsLayoutItemMapItemStack.addItem: src/core/layout/qgslayoutitemmapitem.h#L306
QgsLayoutItemMapItemStack.containsAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L282 QgsLayoutItemMapItemStack.containsAdvancedEffects: src/core/layout/qgslayoutitemmapitem.h#L282
QgsLayoutItemMapItemStack.drawItems: src/core/layout/qgslayoutitemmapitem.h#L276 QgsLayoutItemMapItemStack.drawItems: src/core/layout/qgslayoutitemmapitem.h#L276

View File

@ -51,6 +51,7 @@
%Include auto_generated/qgsexpressioncontextscopegenerator.sip %Include auto_generated/qgsexpressioncontextscopegenerator.sip
%Include auto_generated/qgsexpressionfieldbuffer.sip %Include auto_generated/qgsexpressionfieldbuffer.sip
%Include auto_generated/qgsfeature.sip %Include auto_generated/qgsfeature.sip
%Include auto_generated/qgsfeatureexpressionfilterprovider.sip
%Include auto_generated/qgsfeaturepickermodel.sip %Include auto_generated/qgsfeaturepickermodel.sip
%Include auto_generated/qgsfeaturepickermodelbase.sip %Include auto_generated/qgsfeaturepickermodelbase.sip
%Include auto_generated/qgsfeaturefiltermodel.sip %Include auto_generated/qgsfeaturefiltermodel.sip
@ -77,6 +78,7 @@
%Include auto_generated/qgsgeometryvalidator.sip %Include auto_generated/qgsgeometryvalidator.sip
%Include auto_generated/qgsgml.sip %Include auto_generated/qgsgml.sip
%Include auto_generated/qgsgmlschema.sip %Include auto_generated/qgsgmlschema.sip
%Include auto_generated/qgsgroupedfeaturefilterprovider.sip
%Include auto_generated/qgsgrouplayer.sip %Include auto_generated/qgsgrouplayer.sip
%Include auto_generated/qgshistogram.sip %Include auto_generated/qgshistogram.sip
%Include auto_generated/qgshstoreutils.sip %Include auto_generated/qgshstoreutils.sip

View File

@ -327,6 +327,7 @@ tests:
- 61d6cea43ff284ea8909f071b3f13344e146430b7754ad25321a05af - 61d6cea43ff284ea8909f071b3f13344e146430b7754ad25321a05af
- 702e4fbf8f35d9c4759f1a1e437c2680b45a84d5175d862d92db1f06 - 702e4fbf8f35d9c4759f1a1e437c2680b45a84d5175d862d92db1f06
- 8082737b192683878f415dd28bd8988e64e74198668c4c5b477ad1b8 - 8082737b192683878f415dd28bd8988e64e74198668c4c5b477ad1b8
- 2f1b12a7f0c2da87c8ffde15a45207b1660f5bd15ce41b397900ec8a
type: rasterhash type: rasterhash
- algorithm: grass7:r.info - algorithm: grass7:r.info

View File

@ -79,13 +79,21 @@ class ExampleProcessingAlgorithm(QgsProcessingAlgorithm):
""" """
return "examplescripts" return "examplescripts"
def shortDescription(self) -> str:
"""
Returns an optional translated short description of the algorithm, displayed
on hover in Processing Toolbox. This should be at most a single sentence, e.g.,
Converts 2D features to 3D by sampling a DEM raster.
"""
return "Example algorithm short description on hover"
def shortHelpString(self) -> str: def shortHelpString(self) -> str:
""" """
Returns a localised short helper string for the algorithm. This string Returns a localised helper string for the algorithm displayed in the dialog.
should provide a basic description about what the algorithm does and the This string should provide a basic description about what the algorithm does and the
parameters and outputs associated with it. parameters and outputs associated with it.
""" """
return "Example algorithm short description" return "Example algorithm description"
def initAlgorithm(self, config: Optional[dict[str, Any]] = None): def initAlgorithm(self, config: Optional[dict[str, Any]] = None):
""" """
@ -95,13 +103,16 @@ class ExampleProcessingAlgorithm(QgsProcessingAlgorithm):
# We add the input vector features source. It can have any kind of # We add the input vector features source. It can have any kind of
# geometry. # geometry.
self.addParameter(
QgsProcessingParameterFeatureSource( input_layer = QgsProcessingParameterFeatureSource(
self.INPUT, self.INPUT,
"Input layer", "Input layer",
[QgsProcessing.SourceType.TypeVectorAnyGeometry], [QgsProcessing.SourceType.TypeVectorAnyGeometry],
) )
input_layer.setHelp(
"A descriptive, translated string explaining the parameters behavior and use in depth."
) )
self.addParameter(input_layer)
# We add a feature sink in which to store our processed features (this # We add a feature sink in which to store our processed features (this
# usually takes the form of a newly created vector layer when the # usually takes the form of a newly created vector layer when the

View File

@ -2395,6 +2395,7 @@ tests:
- 8f59f545b5df01f213b7a2233eb364d05b5801676d1f4285ad1225a1 - 8f59f545b5df01f213b7a2233eb364d05b5801676d1f4285ad1225a1
- 360a66711d38a77e79c69aa1a42d620090024011582c4518cfd24178 - 360a66711d38a77e79c69aa1a42d620090024011582c4518cfd24178
- dada50c7bf8aa705bac0bbfc9a295f3c0e2f83cb1877545105279d75 - dada50c7bf8aa705bac0bbfc9a295f3c0e2f83cb1877545105279d75
- 188f828595fc929281590faf0e8fdfcaf263b7c7ed37d6eed41623b6
type: rasterhash type: rasterhash
- algorithm: qgis:relief - algorithm: qgis:relief

View File

@ -658,7 +658,13 @@ class Repositories(QObject):
.text() .text()
.strip() .strip()
) )
supports_qt6 = pluginNodes.item(i).firstChildElement(
"supports_qt6"
).text().strip().upper() in ["TRUE", "YES"]
if not qgisMaximumVersion: if not qgisMaximumVersion:
if qgisMinimumVersion[0] == "3" and supports_qt6:
qgisMaximumVersion = "4.99"
else:
qgisMaximumVersion = qgisMinimumVersion[0] + ".99" qgisMaximumVersion = qgisMinimumVersion[0] + ".99"
# if compatible, add the plugin to the list # if compatible, add the plugin to the list
if not pluginNodes.item(i).firstChildElement( if not pluginNodes.item(i).firstChildElement(
@ -845,6 +851,9 @@ class Plugins(QObject):
qgisMinimumVersion = "0" qgisMinimumVersion = "0"
qgisMaximumVersion = pluginMetadata("qgisMaximumVersion").strip() qgisMaximumVersion = pluginMetadata("qgisMaximumVersion").strip()
if not qgisMaximumVersion: if not qgisMaximumVersion:
if qgisMinimumVersion[0] == "3" and supports_qt6:
qgisMaximumVersion = "4.99"
else:
qgisMaximumVersion = qgisMinimumVersion[0] + ".99" qgisMaximumVersion = qgisMinimumVersion[0] + ".99"
# if compatible, add the plugin to the list # if compatible, add the plugin to the list
if not isCompatible( if not isCompatible(

View File

@ -1,5 +1,5 @@
# The following has been generated automatically from src/server/qgsaccesscontrol.h # The following has been generated automatically from src/server/qgsaccesscontrol.h
try: try:
QgsAccessControl.__overridden_methods__ = ['filterFeatures', 'clone', 'layerAttributes'] QgsAccessControl.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -1,5 +1,5 @@
# The following has been generated automatically from src/server/qgsfeaturefilter.h # The following has been generated automatically from src/server/qgsfeaturefilter.h
try: try:
QgsFeatureFilter.__overridden_methods__ = ['filterFeatures', 'layerAttributes', 'clone'] QgsFeatureFilter.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -1,5 +1,5 @@
# The following has been generated automatically from src/server/qgsfeaturefilterprovidergroup.h # The following has been generated automatically from src/server/qgsfeaturefilterprovidergroup.h
try: try:
QgsFeatureFilterProviderGroup.__overridden_methods__ = ['filterFeatures', 'layerAttributes', 'clone'] QgsFeatureFilterProviderGroup.__overridden_methods__ = ['isFilterThreadSafe', 'filterFeatures', 'layerAttributes', 'clone']
except (NameError, AttributeError): except (NameError, AttributeError):
pass pass

View File

@ -35,6 +35,15 @@ Constructor
~QgsAccessControl(); ~QgsAccessControl();
virtual bool isFilterThreadSafe() const;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsAccessControl *clone() const /Factory/;
void resolveFilterFeatures( const QList<QgsMapLayer *> &layers ); void resolveFilterFeatures( const QList<QgsMapLayer *> &layers );
%Docstring %Docstring
Resolve features' filter of layers The method fetch filter's expressions Resolve features' filter of layers The method fetch filter's expressions
@ -49,23 +58,6 @@ for efficiency; between each requests, the cache must be cleared using
void unresolveFilterFeatures(); void unresolveFilterFeatures();
%Docstring %Docstring
Clear expression's cache computed from `resolveFilterFeatures` Clear expression's cache computed from `resolveFilterFeatures`
%End
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer
:param layer: the layer to control
:param filterFeatures: the request to fill
%End
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End %End
QString extraSubsetString( const QgsVectorLayer *layer ) const; QString extraSubsetString( const QgsVectorLayer *layer ) const;
@ -111,17 +103,6 @@ Returns the layer delete right
:param layer: the layer to control :param layer: the layer to control
:return: ``True`` if we can do a delete :return: ``True`` if we can do a delete
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
%Docstring
Returns the authorized layer attributes
:param layer: the layer to control
:param attributes: the list of attribute
:return: the list of visible attributes
%End %End
bool allowToEdit( const QgsVectorLayer *layer, const QgsFeature &feature ) const; bool allowToEdit( const QgsVectorLayer *layer, const QgsFeature &feature ) const;

View File

@ -16,6 +16,10 @@ class QgsFeatureFilter : QgsFeatureFilterProvider
%Docstring(signature="appended") %Docstring(signature="appended")
A feature filter provider allowing to set filter expressions on a A feature filter provider allowing to set filter expressions on a
per-layer basis. per-layer basis.
.. deprecated:: 3.4
Use :py:class:`QgsFeatureExpressionFilterProvider`
%End %End
%TypeHeaderCode %TypeHeaderCode
@ -27,25 +31,14 @@ per-layer basis.
Constructor Constructor
%End %End
virtual bool isFilterThreadSafe() const;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const; virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer
:param layer: the layer to control
:param filterFeatures: the request to fill
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const; virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProvider *clone() const /Factory/; virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
void setFilter( const QgsVectorLayer *layer, const QgsExpression &expression ); void setFilter( const QgsVectorLayer *layer, const QgsExpression &expression );
%Docstring %Docstring

View File

@ -14,6 +14,10 @@ class QgsFeatureFilterProviderGroup : QgsFeatureFilterProvider
{ {
%Docstring(signature="appended") %Docstring(signature="appended")
A filter filter provider grouping several filter providers. A filter filter provider grouping several filter providers.
.. deprecated:: 3.4
Use :py:class:`QgsGroupedFeatureFilterProvider`
%End %End
%TypeHeaderCode %TypeHeaderCode
@ -25,25 +29,14 @@ A filter filter provider grouping several filter providers.
Constructor Constructor
%End %End
virtual bool isFilterThreadSafe() const;
virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const; virtual void filterFeatures( const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures ) const;
%Docstring
Filter the features of the layer.
:param layer: the layer to control
:param filterFeatures: the request to fill
%End
virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const; virtual QStringList layerAttributes( const QgsVectorLayer *layer, const QStringList &attributes ) const;
virtual QgsFeatureFilterProviderGroup *clone() const /Factory/;
virtual QgsFeatureFilterProvider *clone() const /Factory/;
%Docstring
Returns a clone of the object
:return: A clone
%End
QgsFeatureFilterProviderGroup &addProvider( const QgsFeatureFilterProvider *provider ); QgsFeatureFilterProviderGroup &addProvider( const QgsFeatureFilterProvider *provider );
%Docstring %Docstring

View File

@ -1,16 +1,17 @@
QgsAccessControl.allowToEdit: src/server/qgsaccesscontrol.h#L152 QgsAccessControl.allowToEdit: src/server/qgsaccesscontrol.h#L137
QgsAccessControl.clone: src/server/qgsaccesscontrol.h#L101 QgsAccessControl.clone: src/server/qgsaccesscontrol.h#L78
QgsAccessControl.extraSubsetString: src/server/qgsaccesscontrol.h#L108 QgsAccessControl.extraSubsetString: src/server/qgsaccesscontrol.h#L101
QgsAccessControl.fillCacheKey: src/server/qgsaccesscontrol.h#L158 QgsAccessControl.fillCacheKey: src/server/qgsaccesscontrol.h#L143
QgsAccessControl.filterFeatures: src/server/qgsaccesscontrol.h#L95 QgsAccessControl.filterFeatures: src/server/qgsaccesscontrol.h#L76
QgsAccessControl.layerAttributes: src/server/qgsaccesscontrol.h#L144 QgsAccessControl.isFilterThreadSafe: src/server/qgsaccesscontrol.h#L74
QgsAccessControl.layerDeletePermission: src/server/qgsaccesscontrol.h#L136 QgsAccessControl.layerAttributes: src/server/qgsaccesscontrol.h#L77
QgsAccessControl.layerInsertPermission: src/server/qgsaccesscontrol.h#L122 QgsAccessControl.layerDeletePermission: src/server/qgsaccesscontrol.h#L129
QgsAccessControl.layerReadPermission: src/server/qgsaccesscontrol.h#L115 QgsAccessControl.layerInsertPermission: src/server/qgsaccesscontrol.h#L115
QgsAccessControl.layerUpdatePermission: src/server/qgsaccesscontrol.h#L129 QgsAccessControl.layerReadPermission: src/server/qgsaccesscontrol.h#L108
QgsAccessControl.registerAccessControl: src/server/qgsaccesscontrol.h#L165 QgsAccessControl.layerUpdatePermission: src/server/qgsaccesscontrol.h#L122
QgsAccessControl.resolveFilterFeatures: src/server/qgsaccesscontrol.h#L83 QgsAccessControl.registerAccessControl: src/server/qgsaccesscontrol.h#L150
QgsAccessControl.unresolveFilterFeatures: src/server/qgsaccesscontrol.h#L88 QgsAccessControl.resolveFilterFeatures: src/server/qgsaccesscontrol.h#L89
QgsAccessControl.unresolveFilterFeatures: src/server/qgsaccesscontrol.h#L94
QgsAccessControl: src/server/qgsaccesscontrol.h#L35 QgsAccessControl: src/server/qgsaccesscontrol.h#L35
QgsAccessControlFilter.allowToEdit: src/server/qgsaccesscontrolfilter.h#L109 QgsAccessControlFilter.allowToEdit: src/server/qgsaccesscontrolfilter.h#L109
QgsAccessControlFilter.authorizedLayerAttributes: src/server/qgsaccesscontrolfilter.h#L101 QgsAccessControlFilter.authorizedLayerAttributes: src/server/qgsaccesscontrolfilter.h#L101
@ -54,15 +55,17 @@ QgsFcgiServerRequest.data: src/server/qgsfcgiserverrequest.h#L36
QgsFcgiServerRequest.hasError: src/server/qgsfcgiserverrequest.h#L41 QgsFcgiServerRequest.hasError: src/server/qgsfcgiserverrequest.h#L41
QgsFcgiServerRequest.header: src/server/qgsfcgiserverrequest.h#L49 QgsFcgiServerRequest.header: src/server/qgsfcgiserverrequest.h#L49
QgsFcgiServerRequest: src/server/qgsfcgiserverrequest.h#L31 QgsFcgiServerRequest: src/server/qgsfcgiserverrequest.h#L31
QgsFeatureFilter.clone: src/server/qgsfeaturefilter.h#L52 QgsFeatureFilter.clone: src/server/qgsfeaturefilter.h#L44
QgsFeatureFilter.filterFeatures: src/server/qgsfeaturefilter.h#L44 QgsFeatureFilter.filterFeatures: src/server/qgsfeaturefilter.h#L42
QgsFeatureFilter.layerAttributes: src/server/qgsfeaturefilter.h#L46 QgsFeatureFilter.isFilterThreadSafe: src/server/qgsfeaturefilter.h#L40
QgsFeatureFilter.setFilter: src/server/qgsfeaturefilter.h#L59 QgsFeatureFilter.layerAttributes: src/server/qgsfeaturefilter.h#L43
QgsFeatureFilter: src/server/qgsfeaturefilter.h#L33 QgsFeatureFilter.setFilter: src/server/qgsfeaturefilter.h#L51
QgsFeatureFilterProviderGroup.clone: src/server/qgsfeaturefilterprovidergroup.h#L50 QgsFeatureFilter: src/server/qgsfeaturefilter.h#L34
QgsFeatureFilterProviderGroup.filterFeatures: src/server/qgsfeaturefilterprovidergroup.h#L42 QgsFeatureFilterProviderGroup.clone: src/server/qgsfeaturefilterprovidergroup.h#L42
QgsFeatureFilterProviderGroup.layerAttributes: src/server/qgsfeaturefilterprovidergroup.h#L44 QgsFeatureFilterProviderGroup.filterFeatures: src/server/qgsfeaturefilterprovidergroup.h#L40
QgsFeatureFilterProviderGroup: src/server/qgsfeaturefilterprovidergroup.h#L31 QgsFeatureFilterProviderGroup.isFilterThreadSafe: src/server/qgsfeaturefilterprovidergroup.h#L38
QgsFeatureFilterProviderGroup.layerAttributes: src/server/qgsfeaturefilterprovidergroup.h#L41
QgsFeatureFilterProviderGroup: src/server/qgsfeaturefilterprovidergroup.h#L32
QgsOgcServiceException.code: src/server/qgsserverexception.h#L94 QgsOgcServiceException.code: src/server/qgsserverexception.h#L94
QgsOgcServiceException.formatResponse: src/server/qgsserverexception.h#L102 QgsOgcServiceException.formatResponse: src/server/qgsserverexception.h#L102
QgsOgcServiceException.locator: src/server/qgsserverexception.h#L97 QgsOgcServiceException.locator: src/server/qgsserverexception.h#L97

View File

@ -64,7 +64,7 @@ void QgsDirectionalLightSettings::readXml( const QDomElement &elem, const QgsRea
mIntensity = elem.attribute( QStringLiteral( "intensity" ) ).toFloat(); mIntensity = elem.attribute( QStringLiteral( "intensity" ) ).toFloat();
} }
bool QgsDirectionalLightSettings::operator==( const QgsDirectionalLightSettings &other ) bool QgsDirectionalLightSettings::operator==( const QgsDirectionalLightSettings &other ) const
{ {
return mDirection == other.mDirection && mColor == other.mColor && mIntensity == other.mIntensity; return mDirection == other.mDirection && mColor == other.mColor && mIntensity == other.mIntensity;
} }

View File

@ -58,7 +58,7 @@ class _3D_EXPORT QgsDirectionalLightSettings : public QgsLightSource
void setIntensity( float intensity ) { mIntensity = intensity; } void setIntensity( float intensity ) { mIntensity = intensity; }
// TODO c++20 - replace with = default // TODO c++20 - replace with = default
bool operator==( const QgsDirectionalLightSettings &other ); bool operator==( const QgsDirectionalLightSettings &other ) const;
private: private:
QgsVector3D mDirection { -0.32, 0.27, -0.91 }; QgsVector3D mDirection { -0.32, 0.27, -0.91 };

View File

@ -107,7 +107,7 @@ void QgsPointLightSettings::readXml( const QDomElement &elem, const QgsReadWrite
mQuadraticAttenuation = elem.attribute( QStringLiteral( "attenuation-2" ) ).toDouble(); mQuadraticAttenuation = elem.attribute( QStringLiteral( "attenuation-2" ) ).toDouble();
} }
bool QgsPointLightSettings::operator==( const QgsPointLightSettings &other ) bool QgsPointLightSettings::operator==( const QgsPointLightSettings &other ) const
{ {
return mPosition == other.mPosition && mColor == other.mColor && mIntensity == other.mIntensity && mConstantAttenuation == other.mConstantAttenuation && mLinearAttenuation == other.mLinearAttenuation && mQuadraticAttenuation == other.mQuadraticAttenuation; return mPosition == other.mPosition && mColor == other.mColor && mIntensity == other.mIntensity && mConstantAttenuation == other.mConstantAttenuation && mLinearAttenuation == other.mLinearAttenuation && mQuadraticAttenuation == other.mQuadraticAttenuation;
} }

View File

@ -79,7 +79,7 @@ class _3D_EXPORT QgsPointLightSettings : public QgsLightSource
void setQuadraticAttenuation( float value ) { mQuadraticAttenuation = value; } void setQuadraticAttenuation( float value ) { mQuadraticAttenuation = value; }
// TODO c++20 - replace with = default // TODO c++20 - replace with = default
bool operator==( const QgsPointLightSettings &other ); bool operator==( const QgsPointLightSettings &other ) const;
private: private:
QgsVector3D mPosition { 0, 0, 1000 }; QgsVector3D mPosition { 0, 0, 1000 };

View File

@ -66,7 +66,7 @@ Qgs3DMapCanvas::Qgs3DMapCanvas()
const QgsSettings setting; const QgsSettings setting;
mEngine = new QgsWindow3DEngine( this ); mEngine = new QgsWindow3DEngine( this );
connect( mEngine, &QgsAbstract3DEngine::imageCaptured, this, [=]( const QImage &image ) { connect( mEngine, &QgsAbstract3DEngine::imageCaptured, this, [this]( const QImage &image ) {
if ( image.save( mCaptureFileName, mCaptureFileFormat.toLocal8Bit().data() ) ) if ( image.save( mCaptureFileName, mCaptureFileFormat.toLocal8Bit().data() ) )
{ {
emit savedAsImage( mCaptureFileName ); emit savedAsImage( mCaptureFileName );
@ -169,7 +169,7 @@ void Qgs3DMapCanvas::setMapSettings( Qgs3DMapSettings *mapSettings )
resetView(); resetView();
connect( cameraController(), &QgsCameraController::setCursorPosition, this, [=]( QPoint point ) { connect( cameraController(), &QgsCameraController::setCursorPosition, this, [this]( QPoint point ) {
QCursor::setPos( mapToGlobal( point ) ); QCursor::setPos( mapToGlobal( point ) );
} ); } );
connect( cameraController(), &QgsCameraController::cameraMovementSpeedChanged, mMapSettings, &Qgs3DMapSettings::setCameraMovementSpeed ); connect( cameraController(), &QgsCameraController::cameraMovementSpeedChanged, mMapSettings, &Qgs3DMapSettings::setCameraMovementSpeed );
@ -216,7 +216,7 @@ void Qgs3DMapCanvas::saveAsImage( const QString &fileName, const QString &fileFo
Qt3DLogic::QFrameAction *screenCaptureFrameAction = new Qt3DLogic::QFrameAction; Qt3DLogic::QFrameAction *screenCaptureFrameAction = new Qt3DLogic::QFrameAction;
mScene->addComponent( screenCaptureFrameAction ); mScene->addComponent( screenCaptureFrameAction );
// Wait to have the render capture enabled in the next frame // Wait to have the render capture enabled in the next frame
connect( screenCaptureFrameAction, &Qt3DLogic::QFrameAction::triggered, this, [=]( float ) { connect( screenCaptureFrameAction, &Qt3DLogic::QFrameAction::triggered, this, [this, screenCaptureFrameAction]( float ) {
mEngine->requestCaptureImage(); mEngine->requestCaptureImage();
mScene->removeComponent( screenCaptureFrameAction ); mScene->removeComponent( screenCaptureFrameAction );
screenCaptureFrameAction->deleteLater(); screenCaptureFrameAction->deleteLater();
@ -232,7 +232,7 @@ void Qgs3DMapCanvas::captureDepthBuffer()
Qt3DLogic::QFrameAction *screenCaptureFrameAction = new Qt3DLogic::QFrameAction; Qt3DLogic::QFrameAction *screenCaptureFrameAction = new Qt3DLogic::QFrameAction;
mScene->addComponent( screenCaptureFrameAction ); mScene->addComponent( screenCaptureFrameAction );
// Wait to have the render capture enabled in the next frame // Wait to have the render capture enabled in the next frame
connect( screenCaptureFrameAction, &Qt3DLogic::QFrameAction::triggered, this, [=]( float ) { connect( screenCaptureFrameAction, &Qt3DLogic::QFrameAction::triggered, this, [this, screenCaptureFrameAction]( float ) {
mEngine->requestDepthBufferCapture(); mEngine->requestDepthBufferCapture();
mScene->removeComponent( screenCaptureFrameAction ); mScene->removeComponent( screenCaptureFrameAction );
screenCaptureFrameAction->deleteLater(); screenCaptureFrameAction->deleteLater();

View File

@ -159,7 +159,7 @@ Qgs3DMapScene::Qgs3DMapScene( Qgs3DMapSettings &map, QgsAbstract3DEngine *engine
connect( &map, &Qgs3DMapSettings::originChanged, this, &Qgs3DMapScene::onOriginChanged ); connect( &map, &Qgs3DMapSettings::originChanged, this, &Qgs3DMapScene::onOriginChanged );
connect( QgsApplication::sourceCache(), &QgsSourceCache::remoteSourceFetched, this, [=]( const QString &url ) { connect( QgsApplication::sourceCache(), &QgsSourceCache::remoteSourceFetched, this, [this]( const QString &url ) {
const QList<QgsMapLayer *> modelVectorLayers = mModelVectorLayers; const QList<QgsMapLayer *> modelVectorLayers = mModelVectorLayers;
for ( QgsMapLayer *layer : modelVectorLayers ) for ( QgsMapLayer *layer : modelVectorLayers )
{ {

View File

@ -33,7 +33,7 @@ void QgsAbstract3DEngine::requestCaptureImage()
mFrameGraph->setRenderCaptureEnabled( true ); mFrameGraph->setRenderCaptureEnabled( true );
captureReply = mFrameGraph->renderCapture()->requestCapture(); captureReply = mFrameGraph->renderCapture()->requestCapture();
connect( captureReply, &Qt3DRender::QRenderCaptureReply::completed, this, [=] { connect( captureReply, &Qt3DRender::QRenderCaptureReply::completed, this, [this, captureReply] {
emit imageCaptured( captureReply->image() ); emit imageCaptured( captureReply->image() );
captureReply->deleteLater(); captureReply->deleteLater();
mFrameGraph->setRenderCaptureEnabled( false ); mFrameGraph->setRenderCaptureEnabled( false );
@ -45,7 +45,7 @@ void QgsAbstract3DEngine::requestDepthBufferCapture()
Qt3DRender::QRenderCaptureReply *captureReply; Qt3DRender::QRenderCaptureReply *captureReply;
captureReply = mFrameGraph->depthRenderCapture()->requestCapture(); captureReply = mFrameGraph->depthRenderCapture()->requestCapture();
connect( captureReply, &Qt3DRender::QRenderCaptureReply::completed, this, [=] { connect( captureReply, &Qt3DRender::QRenderCaptureReply::completed, this, [this, captureReply] {
emit depthBufferCaptured( captureReply->image() ); emit depthBufferCaptured( captureReply->image() );
captureReply->deleteLater(); captureReply->deleteLater();
} ); } );

View File

@ -264,38 +264,41 @@ void QgsCameraController::setCameraPose( const QgsCameraPose &camPose, bool forc
QDomElement QgsCameraController::writeXml( QDomDocument &doc ) const QDomElement QgsCameraController::writeXml( QDomDocument &doc ) const
{ {
QDomElement elemCamera = doc.createElement( QStringLiteral( "camera" ) ); QDomElement elemCamera = doc.createElement( QStringLiteral( "camera" ) );
QgsVector3D centerPoint;
switch ( mScene->mapSettings()->sceneMode() )
{
case Qgis::SceneMode::Local:
centerPoint = mCameraPose.centerPoint();
break;
case Qgis::SceneMode::Globe:
// Save center point in map coordinates, since our world origin won't be // Save center point in map coordinates, since our world origin won't be
// the same on loading // the same on loading
centerPoint = mCameraPose.centerPoint() + mOrigin; QgsVector3D centerPoint = mCameraPose.centerPoint() + mOrigin;
break; elemCamera.setAttribute( QStringLiteral( "xMap" ), centerPoint.x() );
} elemCamera.setAttribute( QStringLiteral( "yMap" ), centerPoint.y() );
elemCamera.setAttribute( QStringLiteral( "x" ), centerPoint.x() ); elemCamera.setAttribute( QStringLiteral( "zMap" ), centerPoint.z() );
elemCamera.setAttribute( QStringLiteral( "y" ), centerPoint.z() );
elemCamera.setAttribute( QStringLiteral( "elev" ), centerPoint.y() );
elemCamera.setAttribute( QStringLiteral( "dist" ), mCameraPose.distanceFromCenterPoint() ); elemCamera.setAttribute( QStringLiteral( "dist" ), mCameraPose.distanceFromCenterPoint() );
elemCamera.setAttribute( QStringLiteral( "pitch" ), mCameraPose.pitchAngle() ); elemCamera.setAttribute( QStringLiteral( "pitch" ), mCameraPose.pitchAngle() );
elemCamera.setAttribute( QStringLiteral( "yaw" ), mCameraPose.headingAngle() ); elemCamera.setAttribute( QStringLiteral( "yaw" ), mCameraPose.headingAngle() );
return elemCamera; return elemCamera;
} }
void QgsCameraController::readXml( const QDomElement &elem ) void QgsCameraController::readXml( const QDomElement &elem, QgsVector3D savedOrigin )
{ {
const float x = elem.attribute( QStringLiteral( "x" ) ).toFloat();
const float y = elem.attribute( QStringLiteral( "y" ) ).toFloat();
const float elev = elem.attribute( QStringLiteral( "elev" ) ).toFloat();
const float dist = elem.attribute( QStringLiteral( "dist" ) ).toFloat(); const float dist = elem.attribute( QStringLiteral( "dist" ) ).toFloat();
const float pitch = elem.attribute( QStringLiteral( "pitch" ) ).toFloat(); const float pitch = elem.attribute( QStringLiteral( "pitch" ) ).toFloat();
const float yaw = elem.attribute( QStringLiteral( "yaw" ) ).toFloat(); const float yaw = elem.attribute( QStringLiteral( "yaw" ) ).toFloat();
QgsVector3D centerPoint( x, elev, y );
if ( mScene->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) QgsVector3D centerPoint;
centerPoint = centerPoint - mOrigin; if ( elem.hasAttribute( "xMap" ) )
{
// Prefer newer point saved in map coordinates ...
const double x = elem.attribute( QStringLiteral( "xMap" ) ).toDouble();
const double y = elem.attribute( QStringLiteral( "yMap" ) ).toDouble();
const double z = elem.attribute( QStringLiteral( "zMap" ) ).toDouble();
centerPoint = QgsVector3D( x, y, z ) - mOrigin;
}
else
{
// ... but allow use of older origin-relative coordinates.
const double x = elem.attribute( QStringLiteral( "x" ) ).toDouble();
const double y = elem.attribute( QStringLiteral( "y" ) ).toDouble();
const double elev = elem.attribute( QStringLiteral( "elev" ) ).toDouble();
centerPoint = QgsVector3D( x, elev, y ) - savedOrigin + mOrigin;
}
setLookingAtPoint( centerPoint, dist, pitch, yaw ); setLookingAtPoint( centerPoint, dist, pitch, yaw );
} }
@ -519,8 +522,8 @@ void QgsCameraController::onPositionChangedTerrainNavigation( Qt3DInput::QMouseE
const int dx = mouse->x() - mMousePos.x(); const int dx = mouse->x() - mMousePos.x();
const int dy = mouse->y() - mMousePos.y(); const int dy = mouse->y() - mMousePos.y();
const bool hasShift = ( mouse->modifiers() & Qt::ShiftModifier ); const bool hasShift = ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ShiftModifier );
const bool hasCtrl = ( mouse->modifiers() & Qt::ControlModifier ); const bool hasCtrl = ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ControlModifier );
const bool hasLeftButton = ( mouse->buttons() & Qt::LeftButton ); const bool hasLeftButton = ( mouse->buttons() & Qt::LeftButton );
const bool hasMiddleButton = ( mouse->buttons() & Qt::MiddleButton ); const bool hasMiddleButton = ( mouse->buttons() & Qt::MiddleButton );
const bool hasRightButton = ( mouse->buttons() & Qt::RightButton ); const bool hasRightButton = ( mouse->buttons() & Qt::RightButton );
@ -673,8 +676,8 @@ void QgsCameraController::onPositionChangedTerrainNavigation( Qt3DInput::QMouseE
void QgsCameraController::onPositionChangedGlobeTerrainNavigation( Qt3DInput::QMouseEvent *mouse ) void QgsCameraController::onPositionChangedGlobeTerrainNavigation( Qt3DInput::QMouseEvent *mouse )
{ {
const bool hasShift = ( mouse->modifiers() & Qt::ShiftModifier ); const bool hasShift = ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ShiftModifier );
const bool hasCtrl = ( mouse->modifiers() & Qt::ControlModifier ); const bool hasCtrl = ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ControlModifier );
const bool hasLeftButton = ( mouse->buttons() & Qt::LeftButton ); const bool hasLeftButton = ( mouse->buttons() & Qt::LeftButton );
const bool hasMiddleButton = ( mouse->buttons() & Qt::MiddleButton ); const bool hasMiddleButton = ( mouse->buttons() & Qt::MiddleButton );
@ -812,7 +815,7 @@ void QgsCameraController::onWheel( Qt3DInput::QWheelEvent *wheel )
{ {
case Qgis::NavigationMode::Walk: case Qgis::NavigationMode::Walk:
{ {
const float scaling = ( ( wheel->modifiers() & Qt::ControlModifier ) != 0 ? 0.1f : 1.0f ) / 1000.f; const float scaling = ( ( wheel->modifiers() & Qt3DInput::QWheelEvent::Modifiers::ControlModifier ) != 0 ? 0.1f : 1.0f ) / 1000.f;
setCameraMovementSpeed( mCameraMovementSpeed + mCameraMovementSpeed * scaling * wheel->angleDelta().y() ); setCameraMovementSpeed( mCameraMovementSpeed + mCameraMovementSpeed * scaling * wheel->angleDelta().y() );
break; break;
} }
@ -821,7 +824,7 @@ void QgsCameraController::onWheel( Qt3DInput::QWheelEvent *wheel )
{ {
// Scale our variable to roughly "number of normal steps", with Ctrl // Scale our variable to roughly "number of normal steps", with Ctrl
// increasing granularity 10x // increasing granularity 10x
const double scaling = ( 1.0 / 120.0 ) * ( ( wheel->modifiers() & Qt::ControlModifier ) != 0 ? 0.1 : 1.0 ); const double scaling = ( 1.0 / 120.0 ) * ( ( wheel->modifiers() & Qt3DInput::QWheelEvent::Modifiers::ControlModifier ) != 0 ? 0.1 : 1.0 );
// Apparently angleDelta needs to be accumulated // Apparently angleDelta needs to be accumulated
// see: https://doc.qt.io/qt-5/qwheelevent.html#angleDelta // see: https://doc.qt.io/qt-5/qwheelevent.html#angleDelta
@ -858,7 +861,7 @@ void QgsCameraController::onMousePressed( Qt3DInput::QMouseEvent *mouse )
mKeyboardHandler->setFocus( true ); mKeyboardHandler->setFocus( true );
if ( mouse->button() == Qt3DInput::QMouseEvent::MiddleButton || ( ( mouse->modifiers() & Qt::ShiftModifier ) != 0 && mouse->button() == Qt3DInput::QMouseEvent::LeftButton ) || ( ( mouse->modifiers() & Qt::ControlModifier ) != 0 && mouse->button() == Qt3DInput::QMouseEvent::LeftButton ) ) if ( mouse->button() == Qt3DInput::QMouseEvent::MiddleButton || ( ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ShiftModifier ) != 0 && mouse->button() == Qt3DInput::QMouseEvent::LeftButton ) || ( ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ControlModifier ) != 0 && mouse->button() == Qt3DInput::QMouseEvent::LeftButton ) )
{ {
mMousePos = QPoint( mouse->x(), mouse->y() ); mMousePos = QPoint( mouse->x(), mouse->y() );
@ -866,7 +869,7 @@ void QgsCameraController::onMousePressed( Qt3DInput::QMouseEvent *mouse )
mIgnoreNextMouseMove = true; mIgnoreNextMouseMove = true;
const MouseOperation operation { const MouseOperation operation {
( mouse->modifiers() & Qt::ControlModifier ) != 0 && mouse->button() == Qt3DInput::QMouseEvent::LeftButton ? MouseOperation::RotationCamera : MouseOperation::RotationCenter ( mouse->modifiers() & Qt3DInput::QMouseEvent::Modifiers::ControlModifier ) != 0 && mouse->button() == Qt3DInput::QMouseEvent::LeftButton ? MouseOperation::RotationCamera : MouseOperation::RotationCenter
}; };
setMouseParameters( operation, mMousePos ); setMouseParameters( operation, mMousePos );
} }

View File

@ -174,7 +174,7 @@ class _3D_EXPORT QgsCameraController : public QObject
//! Writes camera configuration to the given DOM element //! Writes camera configuration to the given DOM element
QDomElement writeXml( QDomDocument &doc ) const; QDomElement writeXml( QDomDocument &doc ) const;
//! Reads camera configuration from the given DOM element //! Reads camera configuration from the given DOM element
void readXml( const QDomElement &elem ); void readXml( const QDomElement &elem, QgsVector3D savedOrigin );
//! Zoom the map by \a factor //! Zoom the map by \a factor
void zoom( float factor ); void zoom( float factor );

View File

@ -278,7 +278,7 @@ class QgsGlobeChunkLoader : public QgsChunkLoader
, mTextureGenerator( textureGenerator ) , mTextureGenerator( textureGenerator )
, mGlobeCrsToLatLon( globeCrsToLatLon ) , mGlobeCrsToLatLon( globeCrsToLatLon )
{ {
connect( mTextureGenerator, &QgsTerrainTextureGenerator::tileReady, this, [=]( int job, const QImage &img ) { connect( mTextureGenerator, &QgsTerrainTextureGenerator::tileReady, this, [this]( int job, const QImage &img ) {
if ( job == mJobId ) if ( job == mJobId )
{ {
mTexture = img; mTexture = img;
@ -436,7 +436,7 @@ class QgsGlobeMapUpdateJob : public QgsChunkQueueJob
QgsTerrainTextureImage *terrainTexImage = qobject_cast<QgsTerrainTextureImage *>( texImages[0] ); QgsTerrainTextureImage *terrainTexImage = qobject_cast<QgsTerrainTextureImage *>( texImages[0] );
Q_ASSERT( terrainTexImage ); Q_ASSERT( terrainTexImage );
connect( textureGenerator, &QgsTerrainTextureGenerator::tileReady, this, [=]( int jobId, const QImage &image ) { connect( textureGenerator, &QgsTerrainTextureGenerator::tileReady, this, [this, terrainTexImage]( int jobId, const QImage &image ) {
if ( mJobId == jobId ) if ( mJobId == jobId )
{ {
terrainTexImage->setImage( image ); terrainTexImage->setImage( image );
@ -487,7 +487,7 @@ class QgsGlobeMapUpdateJobFactory : public QgsChunkQueueJobFactory
QgsGlobeEntity::QgsGlobeEntity( Qgs3DMapSettings *mapSettings ) QgsGlobeEntity::QgsGlobeEntity( Qgs3DMapSettings *mapSettings )
: QgsChunkedEntity( mapSettings, mapSettings->terrainSettings()->maximumScreenError(), new QgsGlobeChunkLoaderFactory( mapSettings ), true ) : QgsChunkedEntity( mapSettings, mapSettings->terrainSettings()->maximumScreenError(), new QgsGlobeChunkLoaderFactory( mapSettings ), true )
{ {
connect( mapSettings, &Qgs3DMapSettings::showTerrainBoundingBoxesChanged, this, [=] { connect( mapSettings, &Qgs3DMapSettings::showTerrainBoundingBoxesChanged, this, [this, mapSettings] {
setShowBoundingBoxes( mapSettings->showTerrainBoundingBoxes() ); setShowBoundingBoxes( mapSettings->showTerrainBoundingBoxes() );
} ); } );
connect( mapSettings, &Qgs3DMapSettings::showTerrainTilesInfoChanged, this, &QgsGlobeEntity::invalidateMapImages ); connect( mapSettings, &Qgs3DMapSettings::showTerrainTilesInfoChanged, this, &QgsGlobeEntity::invalidateMapImages );

View File

@ -135,7 +135,7 @@ bool QgsVectorWarperTask::run()
QgsVectorWarper warper( mMethod, mPoints, mDestinationCrs ); QgsVectorWarper warper( mMethod, mPoints, mDestinationCrs );
connect( mFeedback.get(), &QgsFeedback::processedCountChanged, this, [=]( long long count ) { connect( mFeedback.get(), &QgsFeedback::processedCountChanged, this, [this]( long long count ) {
const double newProgress = 100.0 * count / mFeatureCount; const double newProgress = 100.0 * count / mFeatureCount;
// avoid flooding with too many events // avoid flooding with too many events
if ( static_cast<int>( newProgress * 10 ) != static_cast<int>( mLastProgress * 10 ) ) if ( static_cast<int>( newProgress * 10 ) != static_cast<int>( mLastProgress * 10 ) )

View File

@ -73,10 +73,10 @@ QVariantMap QgsPdalInformationAlgorithm::processAlgorithm( const QVariantMap &pa
QStringList commandOutput; QStringList commandOutput;
QgsBlockingProcess wrenchProcess( wrenchPath, processArgs ); QgsBlockingProcess wrenchProcess( wrenchPath, processArgs );
wrenchProcess.setStdErrHandler( [=]( const QByteArray &ba ) { wrenchProcess.setStdErrHandler( [feedback]( const QByteArray &ba ) {
feedback->reportError( ba.trimmed() ); feedback->reportError( ba.trimmed() );
} ); } );
wrenchProcess.setStdOutHandler( [=, &commandOutput]( const QByteArray &ba ) { wrenchProcess.setStdOutHandler( [feedback, &commandOutput]( const QByteArray &ba ) {
feedback->pushConsoleInfo( ba.trimmed() ); feedback->pushConsoleInfo( ba.trimmed() );
commandOutput << ba; commandOutput << ba;
} ); } );

View File

@ -189,10 +189,10 @@ QVariantMap QgsPdalAlgorithmBase::processAlgorithm( const QVariantMap &parameter
QString buffer; QString buffer;
QgsBlockingProcess wrenchProcess( wrenchPath, processArgs ); QgsBlockingProcess wrenchProcess( wrenchPath, processArgs );
wrenchProcess.setStdErrHandler( [=]( const QByteArray &ba ) { wrenchProcess.setStdErrHandler( [feedback]( const QByteArray &ba ) {
feedback->reportError( ba.trimmed() ); feedback->reportError( ba.trimmed() );
} ); } );
wrenchProcess.setStdOutHandler( [=, &progress, &buffer]( const QByteArray &ba ) { wrenchProcess.setStdOutHandler( [feedback, &progress, &buffer]( const QByteArray &ba ) {
QString data( ba ); QString data( ba );
QRegularExpression re( "\\.*(\\d+)?\\.*$" ); QRegularExpression re( "\\.*(\\d+)?\\.*$" );

View File

@ -137,7 +137,7 @@ QgsFeatureList QgsDrapeAlgorithmBase::processFeature( const QgsFeature &feature,
// a pointless iteration over all vertices // a pointless iteration over all vertices
if ( !mRasterExtent.isNull() && geometry.boundingBoxIntersects( mRasterExtent ) ) if ( !mRasterExtent.isNull() && geometry.boundingBoxIntersects( mRasterExtent ) )
{ {
geometry.transformVertices( [=]( const QgsPoint &p ) -> QgsPoint { geometry.transformVertices( [this, nodata, scale, offset, feedback, &f]( const QgsPoint &p ) -> QgsPoint {
QgsPointXY t; QgsPointXY t;
double val = nodata; double val = nodata;
try try

View File

@ -111,10 +111,10 @@ QVariantMap QgsConvertGpxFeatureTypeAlgorithm::processAlgorithm( const QVariantM
feedback->pushCommandInfo( QObject::tr( "Conversion command: " ) + babelPath + ' ' + logArgs.join( ' ' ) ); feedback->pushCommandInfo( QObject::tr( "Conversion command: " ) + babelPath + ' ' + logArgs.join( ' ' ) );
QgsBlockingProcess babelProcess( babelPath, processArgs ); QgsBlockingProcess babelProcess( babelPath, processArgs );
babelProcess.setStdErrHandler( [=]( const QByteArray &ba ) { babelProcess.setStdErrHandler( [feedback]( const QByteArray &ba ) {
feedback->reportError( ba ); feedback->reportError( ba );
} ); } );
babelProcess.setStdOutHandler( [=]( const QByteArray &ba ) { babelProcess.setStdOutHandler( [feedback]( const QByteArray &ba ) {
feedback->pushDebugInfo( ba ); feedback->pushDebugInfo( ba );
} ); } );
@ -355,10 +355,10 @@ QVariantMap QgsConvertGpsDataAlgorithm::processAlgorithm( const QVariantMap &par
feedback->pushCommandInfo( QObject::tr( "Conversion command: " ) + logCommand.join( ' ' ) ); feedback->pushCommandInfo( QObject::tr( "Conversion command: " ) + logCommand.join( ' ' ) );
QgsBlockingProcess babelProcess( processCommand.value( 0 ), processCommand.mid( 1 ) ); QgsBlockingProcess babelProcess( processCommand.value( 0 ), processCommand.mid( 1 ) );
babelProcess.setStdErrHandler( [=]( const QByteArray &ba ) { babelProcess.setStdErrHandler( [feedback]( const QByteArray &ba ) {
feedback->reportError( ba ); feedback->reportError( ba );
} ); } );
babelProcess.setStdOutHandler( [=]( const QByteArray &ba ) { babelProcess.setStdOutHandler( [feedback]( const QByteArray &ba ) {
feedback->pushDebugInfo( ba ); feedback->pushDebugInfo( ba );
} ); } );
@ -576,10 +576,10 @@ QVariantMap QgsDownloadGpsDataAlgorithm::processAlgorithm( const QVariantMap &pa
feedback->pushCommandInfo( QObject::tr( "Download command: " ) + logCommand.join( ' ' ) ); feedback->pushCommandInfo( QObject::tr( "Download command: " ) + logCommand.join( ' ' ) );
QgsBlockingProcess babelProcess( processCommand.value( 0 ), processCommand.mid( 1 ) ); QgsBlockingProcess babelProcess( processCommand.value( 0 ), processCommand.mid( 1 ) );
babelProcess.setStdErrHandler( [=]( const QByteArray &ba ) { babelProcess.setStdErrHandler( [feedback]( const QByteArray &ba ) {
feedback->reportError( ba ); feedback->reportError( ba );
} ); } );
babelProcess.setStdOutHandler( [=]( const QByteArray &ba ) { babelProcess.setStdOutHandler( [feedback]( const QByteArray &ba ) {
feedback->pushDebugInfo( ba ); feedback->pushDebugInfo( ba );
} ); } );
@ -796,10 +796,10 @@ QVariantMap QgsUploadGpsDataAlgorithm::processAlgorithm( const QVariantMap &para
feedback->pushCommandInfo( QObject::tr( "Upload command: " ) + logCommand.join( ' ' ) ); feedback->pushCommandInfo( QObject::tr( "Upload command: " ) + logCommand.join( ' ' ) );
QgsBlockingProcess babelProcess( processCommand.value( 0 ), processCommand.mid( 1 ) ); QgsBlockingProcess babelProcess( processCommand.value( 0 ), processCommand.mid( 1 ) );
babelProcess.setStdErrHandler( [=]( const QByteArray &ba ) { babelProcess.setStdErrHandler( [feedback]( const QByteArray &ba ) {
feedback->reportError( ba ); feedback->reportError( ba );
} ); } );
babelProcess.setStdOutHandler( [=]( const QByteArray &ba ) { babelProcess.setStdOutHandler( [feedback]( const QByteArray &ba ) {
feedback->pushDebugInfo( ba ); feedback->pushDebugInfo( ba );
} ); } );

View File

@ -61,6 +61,9 @@ void QgsPackageAlgorithm::initAlgorithm( const QVariantMap & )
addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "SAVE_METADATA" ), QObject::tr( "Save layer metadata into GeoPackage" ), true ) ); addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "SAVE_METADATA" ), QObject::tr( "Save layer metadata into GeoPackage" ), true ) );
addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "SELECTED_FEATURES_ONLY" ), QObject::tr( "Save only selected features" ), false ) ); addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "SELECTED_FEATURES_ONLY" ), QObject::tr( "Save only selected features" ), false ) );
addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "EXPORT_RELATED_LAYERS" ), QObject::tr( "Export related layers following relations defined in the project" ), false ) ); addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "EXPORT_RELATED_LAYERS" ), QObject::tr( "Export related layers following relations defined in the project" ), false ) );
auto extentParam = std::make_unique<QgsProcessingParameterExtent>( QStringLiteral( "EXTENT" ), QObject::tr( "Extent" ), QVariant(), true );
extentParam->setHelp( QObject::tr( "Limit exported features to those with geometries intersecting the provided extent" ) );
addParameter( extentParam.release() );
addOutput( new QgsProcessingOutputMultipleLayers( QStringLiteral( "OUTPUT_LAYERS" ), QObject::tr( "Layers within new package" ) ) ); addOutput( new QgsProcessingOutputMultipleLayers( QStringLiteral( "OUTPUT_LAYERS" ), QObject::tr( "Layers within new package" ) ) );
} }
@ -139,7 +142,7 @@ QVariantMap QgsPackageAlgorithm::processAlgorithm( const QVariantMap &parameters
int recursionGuard { 0 }; int recursionGuard { 0 };
// This function recursively finds referenced layers // This function recursively finds referenced layers
const auto findReferenced = [=, &project, &feedback, &recursionGuard, &layers]( const QgsVectorLayer *vLayer, bool onlySaveSelected, auto &&findReferenced ) -> void { const auto findReferenced = [this, &project, &feedback, &recursionGuard, &layers]( const QgsVectorLayer *vLayer, bool onlySaveSelected, auto &&findReferenced ) -> void {
const QgsVectorLayer *originalLayer { qobject_cast<QgsVectorLayer *>( project->mapLayer( mClonedLayerIds.value( vLayer->id(), vLayer->id() ) ) ) }; const QgsVectorLayer *originalLayer { qobject_cast<QgsVectorLayer *>( project->mapLayer( mClonedLayerIds.value( vLayer->id(), vLayer->id() ) ) ) };
Q_ASSERT( originalLayer ); Q_ASSERT( originalLayer );
const QList<QgsRelation> relations { project->relationManager()->referencingRelations( originalLayer ) }; const QList<QgsRelation> relations { project->relationManager()->referencingRelations( originalLayer ) };
@ -205,7 +208,7 @@ QVariantMap QgsPackageAlgorithm::processAlgorithm( const QVariantMap &parameters
}; };
// This function recursively finds referencing layers // This function recursively finds referencing layers
const auto findReferencing = [=, &project, &feedback, &recursionGuard, &layers]( const QgsVectorLayer *vLayer, bool onlySaveSelected, auto &&findReferencing ) -> void { const auto findReferencing = [this, &project, &feedback, &recursionGuard, &layers]( const QgsVectorLayer *vLayer, bool onlySaveSelected, auto &&findReferencing ) -> void {
const QgsVectorLayer *originalLayer { qobject_cast<QgsVectorLayer *>( project->mapLayer( mClonedLayerIds.value( vLayer->id(), vLayer->id() ) ) ) }; const QgsVectorLayer *originalLayer { qobject_cast<QgsVectorLayer *>( project->mapLayer( mClonedLayerIds.value( vLayer->id(), vLayer->id() ) ) ) };
Q_ASSERT( originalLayer ); Q_ASSERT( originalLayer );
const QList<QgsRelation> relations { project->relationManager()->referencedRelations( originalLayer ) }; const QList<QgsRelation> relations { project->relationManager()->referencedRelations( originalLayer ) };
@ -309,6 +312,7 @@ QVariantMap QgsPackageAlgorithm::processAlgorithm( const QVariantMap &parameters
throw QgsProcessingException( QObject::tr( "Opening database %1 failed (OGR error: %2)" ).arg( packagePath, QString::fromUtf8( CPLGetLastErrorMsg() ) ) ); throw QgsProcessingException( QObject::tr( "Opening database %1 failed (OGR error: %2)" ).arg( packagePath, QString::fromUtf8( CPLGetLastErrorMsg() ) ) );
} }
const bool validExtent = parameters.value( QStringLiteral( "EXTENT" ) ).isValid();
bool errored = false; bool errored = false;
@ -335,12 +339,25 @@ QVariantMap QgsPackageAlgorithm::processAlgorithm( const QVariantMap &parameters
feedback->pushInfo( QObject::tr( "Packaging layer %1/%2: %3" ).arg( i ).arg( mLayers.size() ).arg( layer ? layer->name() : QString() ) ); feedback->pushInfo( QObject::tr( "Packaging layer %1/%2: %3" ).arg( i ).arg( mLayers.size() ).arg( layer ? layer->name() : QString() ) );
QgsRectangle extent;
switch ( layer->type() ) switch ( layer->type() )
{ {
case Qgis::LayerType::Vector: case Qgis::LayerType::Vector:
{ {
QgsVectorLayer *vectorLayer = qobject_cast<QgsVectorLayer *>( layer.get() ); QgsVectorLayer *vectorLayer = qobject_cast<QgsVectorLayer *>( layer.get() );
if ( !packageVectorLayer( vectorLayer, packagePath, context, &multiStepFeedback, saveStyles, saveMetadata, selectedFeaturesOnly ) )
if ( validExtent )
{
if ( vectorLayer->hasSpatialIndex() == Qgis::SpatialIndexPresence::NotPresent )
{
feedback->pushWarning( QObject::tr( "No spatial index exists for layer %1, performance will be severely degraded" ).arg( vectorLayer->name() ) );
}
extent = parameterAsExtent( parameters, QStringLiteral( "EXTENT" ), context, layer->crs() );
}
if ( !packageVectorLayer( vectorLayer, packagePath, context, &multiStepFeedback, saveStyles, saveMetadata, selectedFeaturesOnly, extent ) )
errored = true; errored = true;
else else
outputLayers.append( QStringLiteral( "%1|layername=%2" ).arg( packagePath, layer->name() ) ); outputLayers.append( QStringLiteral( "%1|layername=%2" ).arg( packagePath, layer->name() ) );
@ -408,7 +425,7 @@ QVariantMap QgsPackageAlgorithm::processAlgorithm( const QVariantMap &parameters
return outputs; return outputs;
} }
bool QgsPackageAlgorithm::packageVectorLayer( QgsVectorLayer *layer, const QString &path, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool saveStyles, bool saveMetadata, bool selectedFeaturesOnly ) bool QgsPackageAlgorithm::packageVectorLayer( QgsVectorLayer *layer, const QString &path, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool saveStyles, bool saveMetadata, bool selectedFeaturesOnly, const QgsRectangle &extent )
{ {
QgsVectorFileWriter::SaveVectorOptions options; QgsVectorFileWriter::SaveVectorOptions options;
options.driverName = QStringLiteral( "GPKG" ); options.driverName = QStringLiteral( "GPKG" );
@ -450,6 +467,11 @@ bool QgsPackageAlgorithm::packageVectorLayer( QgsVectorLayer *layer, const QStri
options.skipAttributeCreation = true; options.skipAttributeCreation = true;
} }
if ( !extent.isNull() )
{
options.filterExtent = extent;
}
QString error; QString error;
QString newFilename; QString newFilename;
QString newLayer; QString newLayer;

View File

@ -49,7 +49,7 @@ class QgsPackageAlgorithm : public QgsProcessingAlgorithm
QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
private: private:
bool packageVectorLayer( QgsVectorLayer *layer, const QString &path, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool saveStyles, bool saveMetadata, bool selectedFeaturesOnly ); bool packageVectorLayer( QgsVectorLayer *layer, const QString &path, QgsProcessingContext &context, QgsProcessingFeedback *feedback, bool saveStyles, bool saveMetadata, bool selectedFeaturesOnly, const QgsRectangle &extent );
std::vector<std::unique_ptr<QgsMapLayer>> mLayers; std::vector<std::unique_ptr<QgsMapLayer>> mLayers;
QMap<QString, QString> mClonedLayerIds; QMap<QString, QString> mClonedLayerIds;

View File

@ -179,7 +179,7 @@ QVariantMap QgsRasterBooleanLogicAlgorithmBase::processAlgorithm( const QVariant
QgsRasterLogicalOrAlgorithm::QgsRasterLogicalOrAlgorithm() QgsRasterLogicalOrAlgorithm::QgsRasterLogicalOrAlgorithm()
{ {
mExtractValFunc = [=]( const std::vector<std::unique_ptr<QgsRasterBlock>> &inputs, bool &res, bool &resIsNoData, int row, int column, bool treatNoDataAsFalse ) { mExtractValFunc = []( const std::vector<std::unique_ptr<QgsRasterBlock>> &inputs, bool &res, bool &resIsNoData, int row, int column, bool treatNoDataAsFalse ) {
res = false; res = false;
resIsNoData = false; resIsNoData = false;
bool isNoData = false; bool isNoData = false;
@ -252,7 +252,7 @@ QgsRasterLogicalOrAlgorithm *QgsRasterLogicalOrAlgorithm::createInstance() const
QgsRasterLogicalAndAlgorithm::QgsRasterLogicalAndAlgorithm() QgsRasterLogicalAndAlgorithm::QgsRasterLogicalAndAlgorithm()
{ {
mExtractValFunc = [=]( const std::vector<std::unique_ptr<QgsRasterBlock>> &inputs, bool &res, bool &resIsNoData, int row, int column, bool treatNoDataAsFalse ) { mExtractValFunc = []( const std::vector<std::unique_ptr<QgsRasterBlock>> &inputs, bool &res, bool &resIsNoData, int row, int column, bool treatNoDataAsFalse ) {
res = true; res = true;
resIsNoData = false; resIsNoData = false;
bool isNoData = false; bool isNoData = false;

View File

@ -40,7 +40,7 @@ Qgs3DAnimationExportDialog::Qgs3DAnimationExportDialog()
QValidator *validator = new QRegularExpressionValidator( rx, this ); QValidator *validator = new QRegularExpressionValidator( rx, this );
mTemplateLineEdit->setValidator( validator ); mTemplateLineEdit->setValidator( validator );
connect( mTemplateLineEdit, &QLineEdit::textChanged, this, [=] { connect( mTemplateLineEdit, &QLineEdit::textChanged, this, [this] {
QgsSettings settings; QgsSettings settings;
settings.setValue( QStringLiteral( "Export3DAnimation/fileNameTemplate" ), mTemplateLineEdit->text() ); settings.setValue( QStringLiteral( "Export3DAnimation/fileNameTemplate" ), mTemplateLineEdit->text() );
} ); } );
@ -51,30 +51,30 @@ Qgs3DAnimationExportDialog::Qgs3DAnimationExportDialog()
mOutputDirFileWidget->setDefaultRoot( settings.value( QStringLiteral( "Export3DAnimation/lastDir" ), QString(), QgsSettings::App ).toString() ); mOutputDirFileWidget->setDefaultRoot( settings.value( QStringLiteral( "Export3DAnimation/lastDir" ), QString(), QgsSettings::App ).toString() );
mOutputDirFileWidget->setFilePath( settings.value( QStringLiteral( "Export3DAnimation/lastDir" ), QString(), QgsSettings::App ).toString() ); mOutputDirFileWidget->setFilePath( settings.value( QStringLiteral( "Export3DAnimation/lastDir" ), QString(), QgsSettings::App ).toString() );
connect( mOutputDirFileWidget, &QgsFileWidget::fileChanged, this, [=] { connect( mOutputDirFileWidget, &QgsFileWidget::fileChanged, this, [this] {
QgsSettings settings; QgsSettings settings;
settings.setValue( QStringLiteral( "Export3DAnimation/lastDir" ), mOutputDirFileWidget->filePath(), QgsSettings::App ); settings.setValue( QStringLiteral( "Export3DAnimation/lastDir" ), mOutputDirFileWidget->filePath(), QgsSettings::App );
} ); } );
mFpsSpinBox->setValue( settings.value( QStringLiteral( "Export3DAnimation/fps" ), 30 ).toInt() ); mFpsSpinBox->setValue( settings.value( QStringLiteral( "Export3DAnimation/fps" ), 30 ).toInt() );
connect( mFpsSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QgsSpinBox::valueChanged ), this, [=] { connect( mFpsSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QgsSpinBox::valueChanged ), this, [this] {
QgsSettings settings; QgsSettings settings;
settings.setValue( QStringLiteral( "Export3DAnimation/fps" ), mFpsSpinBox->value() ); settings.setValue( QStringLiteral( "Export3DAnimation/fps" ), mFpsSpinBox->value() );
} ); } );
mWidthSpinBox->setValue( settings.value( QStringLiteral( "Export3DAnimation/width" ), 800 ).toInt() ); mWidthSpinBox->setValue( settings.value( QStringLiteral( "Export3DAnimation/width" ), 800 ).toInt() );
connect( mWidthSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QgsSpinBox::valueChanged ), this, [=] { connect( mWidthSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QgsSpinBox::valueChanged ), this, [this] {
QgsSettings settings; QgsSettings settings;
settings.setValue( QStringLiteral( "Export3DAnimation/width" ), mWidthSpinBox->value() ); settings.setValue( QStringLiteral( "Export3DAnimation/width" ), mWidthSpinBox->value() );
} ); } );
mHeightSpinBox->setValue( settings.value( QStringLiteral( "Export3DAnimation/height" ), 600 ).toInt() ); mHeightSpinBox->setValue( settings.value( QStringLiteral( "Export3DAnimation/height" ), 600 ).toInt() );
connect( mHeightSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QgsSpinBox::valueChanged ), this, [=] { connect( mHeightSpinBox, static_cast<void ( QSpinBox::* )( int )>( &QgsSpinBox::valueChanged ), this, [this] {
QgsSettings settings; QgsSettings settings;
settings.setValue( QStringLiteral( "Export3DAnimation/height" ), mHeightSpinBox->value() ); settings.setValue( QStringLiteral( "Export3DAnimation/height" ), mHeightSpinBox->value() );
} ); } );
connect( mButtonBox, &QDialogButtonBox::helpRequested, this, [=] { connect( mButtonBox, &QDialogButtonBox::helpRequested, this, [] {
QgsHelp::openHelp( QStringLiteral( "map_views/3d_map_view.html#create-animation" ) ); QgsHelp::openHelp( QStringLiteral( "map_views/3d_map_view.html#create-animation" ) );
} ); } );

View File

@ -75,29 +75,29 @@ void Qgs3DDebugWidget::setMapSettings( Qgs3DMapSettings *mapSettings )
whileBlocking( chkStopUpdates )->setChecked( mMap->stopUpdates() ); whileBlocking( chkStopUpdates )->setChecked( mMap->stopUpdates() );
whileBlocking( chkStopOriginShifts )->setChecked( !m3DMapCanvas->scene()->hasSceneOriginShiftEnabled() ); whileBlocking( chkStopOriginShifts )->setChecked( !m3DMapCanvas->scene()->hasSceneOriginShiftEnabled() );
whileBlocking( chkDebugOverlay )->setChecked( mMap->isDebugOverlayEnabled() ); whileBlocking( chkDebugOverlay )->setChecked( mMap->isDebugOverlayEnabled() );
connect( chkShowTileInfo, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setShowTerrainTilesInfo( enabled ); } ); connect( chkShowTileInfo, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setShowTerrainTilesInfo( enabled ); } );
connect( chkShowBoundingBoxes, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setShowTerrainBoundingBoxes( enabled ); } ); connect( chkShowBoundingBoxes, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setShowTerrainBoundingBoxes( enabled ); } );
connect( chkShowCameraViewCenter, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setShowCameraViewCenter( enabled ); } ); connect( chkShowCameraViewCenter, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setShowCameraViewCenter( enabled ); } );
connect( chkShowCameraRotationCenter, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setShowCameraRotationCenter( enabled ); } ); connect( chkShowCameraRotationCenter, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setShowCameraRotationCenter( enabled ); } );
connect( chkShowLightSourceOrigins, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setShowLightSourceOrigins( enabled ); } ); connect( chkShowLightSourceOrigins, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setShowLightSourceOrigins( enabled ); } );
connect( chkStopUpdates, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setStopUpdates( enabled ); } ); connect( chkStopUpdates, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setStopUpdates( enabled ); } );
connect( chkStopOriginShifts, &QCheckBox::toggled, this, [=]( const bool enabled ) { connect( chkStopOriginShifts, &QCheckBox::toggled, this, [this]( const bool enabled ) {
m3DMapCanvas->scene()->setSceneOriginShiftEnabled( !enabled ); m3DMapCanvas->scene()->setSceneOriginShiftEnabled( !enabled );
} ); } );
connect( chkDebugOverlay, &QCheckBox::toggled, this, [=]( const bool enabled ) { mMap->setIsDebugOverlayEnabled( enabled ); } ); connect( chkDebugOverlay, &QCheckBox::toggled, this, [this]( const bool enabled ) { mMap->setIsDebugOverlayEnabled( enabled ); } );
// set up the shadow map block // set up the shadow map block
whileBlocking( mDebugShadowMapGroupBox )->setChecked( mMap->debugShadowMapEnabled() ); whileBlocking( mDebugShadowMapGroupBox )->setChecked( mMap->debugShadowMapEnabled() );
whileBlocking( mDebugShadowMapCornerComboBox )->setCurrentIndex( mMap->debugShadowMapCorner() ); whileBlocking( mDebugShadowMapCornerComboBox )->setCurrentIndex( mMap->debugShadowMapCorner() );
whileBlocking( mDebugShadowMapSizeSpinBox )->setValue( mMap->debugShadowMapSize() ); whileBlocking( mDebugShadowMapSizeSpinBox )->setValue( mMap->debugShadowMapSize() );
// Do not display the shadow debug map if the shadow effect is not enabled. // Do not display the shadow debug map if the shadow effect is not enabled.
connect( mDebugShadowMapGroupBox, &QGroupBox::toggled, this, [=]( const bool enabled ) { connect( mDebugShadowMapGroupBox, &QGroupBox::toggled, this, [this]( const bool enabled ) {
mMap->setDebugShadowMapSettings( enabled && mMap->shadowSettings().renderShadows(), static_cast<Qt::Corner>( mDebugShadowMapCornerComboBox->currentIndex() ), mDebugShadowMapSizeSpinBox->value() ); mMap->setDebugShadowMapSettings( enabled && mMap->shadowSettings().renderShadows(), static_cast<Qt::Corner>( mDebugShadowMapCornerComboBox->currentIndex() ), mDebugShadowMapSizeSpinBox->value() );
} ); } );
connect( mDebugShadowMapCornerComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( const int index ) { connect( mDebugShadowMapCornerComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( const int index ) {
mMap->setDebugShadowMapSettings( mDebugShadowMapGroupBox->isChecked() && mMap->shadowSettings().renderShadows(), static_cast<Qt::Corner>( index ), mDebugShadowMapSizeSpinBox->value() ); mMap->setDebugShadowMapSettings( mDebugShadowMapGroupBox->isChecked() && mMap->shadowSettings().renderShadows(), static_cast<Qt::Corner>( index ), mDebugShadowMapSizeSpinBox->value() );
} ); } );
connect( mDebugShadowMapSizeSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mDebugShadowMapSizeSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
mMap->setDebugShadowMapSettings( mDebugShadowMapGroupBox->isChecked() && mMap->shadowSettings().renderShadows(), static_cast<Qt::Corner>( mDebugShadowMapCornerComboBox->currentIndex() ), value ); mMap->setDebugShadowMapSettings( mDebugShadowMapGroupBox->isChecked() && mMap->shadowSettings().renderShadows(), static_cast<Qt::Corner>( mDebugShadowMapCornerComboBox->currentIndex() ), value );
} ); } );
@ -105,39 +105,39 @@ void Qgs3DDebugWidget::setMapSettings( Qgs3DMapSettings *mapSettings )
whileBlocking( mDebugDepthMapGroupBox )->setChecked( mMap->debugDepthMapEnabled() ); whileBlocking( mDebugDepthMapGroupBox )->setChecked( mMap->debugDepthMapEnabled() );
whileBlocking( mDebugDepthMapCornerComboBox )->setCurrentIndex( mMap->debugDepthMapCorner() ); whileBlocking( mDebugDepthMapCornerComboBox )->setCurrentIndex( mMap->debugDepthMapCorner() );
whileBlocking( mDebugDepthMapSizeSpinBox )->setValue( mMap->debugDepthMapSize() ); whileBlocking( mDebugDepthMapSizeSpinBox )->setValue( mMap->debugDepthMapSize() );
connect( mDebugDepthMapGroupBox, &QGroupBox::toggled, this, [=]( const bool enabled ) { connect( mDebugDepthMapGroupBox, &QGroupBox::toggled, this, [this]( const bool enabled ) {
mMap->setDebugDepthMapSettings( enabled, static_cast<Qt::Corner>( mDebugDepthMapCornerComboBox->currentIndex() ), mDebugDepthMapSizeSpinBox->value() ); mMap->setDebugDepthMapSettings( enabled, static_cast<Qt::Corner>( mDebugDepthMapCornerComboBox->currentIndex() ), mDebugDepthMapSizeSpinBox->value() );
} ); } );
connect( mDebugDepthMapCornerComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( const int index ) { connect( mDebugDepthMapCornerComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( const int index ) {
mMap->setDebugDepthMapSettings( mDebugDepthMapGroupBox->isChecked(), static_cast<Qt::Corner>( index ), mDebugDepthMapSizeSpinBox->value() ); mMap->setDebugDepthMapSettings( mDebugDepthMapGroupBox->isChecked(), static_cast<Qt::Corner>( index ), mDebugDepthMapSizeSpinBox->value() );
} ); } );
connect( mDebugDepthMapSizeSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mDebugDepthMapSizeSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
mMap->setDebugDepthMapSettings( mDebugDepthMapGroupBox->isChecked(), static_cast<Qt::Corner>( mDebugDepthMapCornerComboBox->currentIndex() ), value ); mMap->setDebugDepthMapSettings( mDebugDepthMapGroupBox->isChecked(), static_cast<Qt::Corner>( mDebugDepthMapCornerComboBox->currentIndex() ), value );
} ); } );
// connect the camera info spin boxes with changing functions // connect the camera info spin boxes with changing functions
connect( mNearPlane, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mNearPlane, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
m3DMapCanvas->cameraController()->camera()->setNearPlane( static_cast<float>( value ) ); m3DMapCanvas->cameraController()->camera()->setNearPlane( static_cast<float>( value ) );
} ); } );
connect( mFarPlane, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mFarPlane, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
m3DMapCanvas->cameraController()->camera()->setFarPlane( static_cast<float>( value ) ); m3DMapCanvas->cameraController()->camera()->setFarPlane( static_cast<float>( value ) );
} ); } );
connect( mCameraX, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mCameraX, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
QVector3D newPosition = m3DMapCanvas->cameraController()->camera()->position(); QVector3D newPosition = m3DMapCanvas->cameraController()->camera()->position();
newPosition.setX( static_cast<float>( value ) ); newPosition.setX( static_cast<float>( value ) );
m3DMapCanvas->cameraController()->camera()->setPosition( newPosition ); m3DMapCanvas->cameraController()->camera()->setPosition( newPosition );
} ); } );
connect( mCameraY, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mCameraY, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
QVector3D newPosition = m3DMapCanvas->cameraController()->camera()->position(); QVector3D newPosition = m3DMapCanvas->cameraController()->camera()->position();
newPosition.setY( static_cast<float>( value ) ); newPosition.setY( static_cast<float>( value ) );
m3DMapCanvas->cameraController()->camera()->setPosition( newPosition ); m3DMapCanvas->cameraController()->camera()->setPosition( newPosition );
} ); } );
connect( mCameraZ, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mCameraZ, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
QVector3D newPosition = m3DMapCanvas->cameraController()->camera()->position(); QVector3D newPosition = m3DMapCanvas->cameraController()->camera()->position();
newPosition.setZ( static_cast<float>( value ) ); newPosition.setZ( static_cast<float>( value ) );
m3DMapCanvas->cameraController()->camera()->setPosition( newPosition ); m3DMapCanvas->cameraController()->camera()->setPosition( newPosition );
} ); } );
connect( mLookingX, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mLookingX, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
QgsVector3D newLookingAt = m3DMapCanvas->cameraController()->lookingAtPoint(); QgsVector3D newLookingAt = m3DMapCanvas->cameraController()->lookingAtPoint();
newLookingAt.setX( value ); newLookingAt.setX( value );
m3DMapCanvas->cameraController()->setLookingAtPoint( m3DMapCanvas->cameraController()->setLookingAtPoint(
@ -147,7 +147,7 @@ void Qgs3DDebugWidget::setMapSettings( Qgs3DMapSettings *mapSettings )
m3DMapCanvas->cameraController()->yaw() m3DMapCanvas->cameraController()->yaw()
); );
} ); } );
connect( mLookingY, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mLookingY, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
QgsVector3D newLookingAt = m3DMapCanvas->cameraController()->lookingAtPoint(); QgsVector3D newLookingAt = m3DMapCanvas->cameraController()->lookingAtPoint();
newLookingAt.setY( value ); newLookingAt.setY( value );
m3DMapCanvas->cameraController()->setLookingAtPoint( m3DMapCanvas->cameraController()->setLookingAtPoint(
@ -157,7 +157,7 @@ void Qgs3DDebugWidget::setMapSettings( Qgs3DMapSettings *mapSettings )
m3DMapCanvas->cameraController()->yaw() m3DMapCanvas->cameraController()->yaw()
); );
} ); } );
connect( mLookingZ, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( const double value ) { connect( mLookingZ, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( const double value ) {
QgsVector3D newLookingAt = m3DMapCanvas->cameraController()->lookingAtPoint(); QgsVector3D newLookingAt = m3DMapCanvas->cameraController()->lookingAtPoint();
newLookingAt.setZ( value ); newLookingAt.setZ( value );
m3DMapCanvas->cameraController()->setLookingAtPoint( m3DMapCanvas->cameraController()->setLookingAtPoint(

View File

@ -230,7 +230,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mActionSync2DNavTo3D = new QAction( tr( "2D Map View Follows 3D Camera" ), this ); mActionSync2DNavTo3D = new QAction( tr( "2D Map View Follows 3D Camera" ), this );
mActionSync2DNavTo3D->setCheckable( true ); mActionSync2DNavTo3D->setCheckable( true );
connect( mActionSync2DNavTo3D, &QAction::triggered, this, [=]( bool enabled ) { connect( mActionSync2DNavTo3D, &QAction::triggered, this, [this]( bool enabled ) {
Qgis::ViewSyncModeFlags syncMode = mCanvas->mapSettings()->viewSyncMode(); Qgis::ViewSyncModeFlags syncMode = mCanvas->mapSettings()->viewSyncMode();
syncMode.setFlag( Qgis::ViewSyncModeFlag::Sync2DTo3D, enabled ); syncMode.setFlag( Qgis::ViewSyncModeFlag::Sync2DTo3D, enabled );
mCanvas->mapSettings()->setViewSyncMode( syncMode ); mCanvas->mapSettings()->setViewSyncMode( syncMode );
@ -239,7 +239,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mActionSync3DNavTo2D = new QAction( tr( "3D Camera Follows 2D Map View" ), this ); mActionSync3DNavTo2D = new QAction( tr( "3D Camera Follows 2D Map View" ), this );
mActionSync3DNavTo2D->setCheckable( true ); mActionSync3DNavTo2D->setCheckable( true );
connect( mActionSync3DNavTo2D, &QAction::triggered, this, [=]( bool enabled ) { connect( mActionSync3DNavTo2D, &QAction::triggered, this, [this]( bool enabled ) {
Qgis::ViewSyncModeFlags syncMode = mCanvas->mapSettings()->viewSyncMode(); Qgis::ViewSyncModeFlags syncMode = mCanvas->mapSettings()->viewSyncMode();
syncMode.setFlag( Qgis::ViewSyncModeFlag::Sync3DTo2D, enabled ); syncMode.setFlag( Qgis::ViewSyncModeFlag::Sync3DTo2D, enabled );
mCanvas->mapSettings()->setViewSyncMode( syncMode ); mCanvas->mapSettings()->setViewSyncMode( syncMode );
@ -248,14 +248,14 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mShowFrustumPolygon = new QAction( tr( "Show Visible Camera Area in 2D Map View" ), this ); mShowFrustumPolygon = new QAction( tr( "Show Visible Camera Area in 2D Map View" ), this );
mShowFrustumPolygon->setCheckable( true ); mShowFrustumPolygon->setCheckable( true );
connect( mShowFrustumPolygon, &QAction::triggered, this, [=]( bool enabled ) { connect( mShowFrustumPolygon, &QAction::triggered, this, [this]( bool enabled ) {
mCanvas->mapSettings()->setViewFrustumVisualizationEnabled( enabled ); mCanvas->mapSettings()->setViewFrustumVisualizationEnabled( enabled );
} ); } );
mCameraMenu->addAction( mShowFrustumPolygon ); mCameraMenu->addAction( mShowFrustumPolygon );
mActionSetSceneExtent = mCameraMenu->addAction( QgsApplication::getThemeIcon( QStringLiteral( "extents.svg" ) ), tr( "Set 3D Scene Extent on 2D Map View" ), this, &Qgs3DMapCanvasWidget::setSceneExtentOn2DCanvas ); mActionSetSceneExtent = mCameraMenu->addAction( QgsApplication::getThemeIcon( QStringLiteral( "extents.svg" ) ), tr( "Set 3D Scene Extent on 2D Map View" ), this, &Qgs3DMapCanvasWidget::setSceneExtentOn2DCanvas );
mActionSetSceneExtent->setCheckable( true ); mActionSetSceneExtent->setCheckable( true );
auto createShortcuts = [=]( const QString &objectName, void ( Qgs3DMapCanvasWidget::*slot )() ) { auto createShortcuts = [this]( const QString &objectName, void ( Qgs3DMapCanvasWidget::*slot )() ) {
if ( QShortcut *sc = QgsGui::shortcutsManager()->shortcutByName( objectName ) ) if ( QShortcut *sc = QgsGui::shortcutsManager()->shortcutByName( objectName ) )
connect( sc, &QShortcut::activated, this, slot ); connect( sc, &QShortcut::activated, this, slot );
}; };
@ -277,7 +277,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mActionEnableShadows = new QAction( tr( "Show Shadows" ), this ); mActionEnableShadows = new QAction( tr( "Show Shadows" ), this );
mActionEnableShadows->setCheckable( true ); mActionEnableShadows->setCheckable( true );
connect( mActionEnableShadows, &QAction::toggled, this, [=]( bool enabled ) { connect( mActionEnableShadows, &QAction::toggled, this, [this]( bool enabled ) {
QgsShadowSettings settings = mCanvas->mapSettings()->shadowSettings(); QgsShadowSettings settings = mCanvas->mapSettings()->shadowSettings();
settings.setRenderShadows( enabled ); settings.setRenderShadows( enabled );
mCanvas->mapSettings()->setShadowSettings( settings ); mCanvas->mapSettings()->setShadowSettings( settings );
@ -286,14 +286,14 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mActionEnableEyeDome = new QAction( tr( "Show Eye Dome Lighting" ), this ); mActionEnableEyeDome = new QAction( tr( "Show Eye Dome Lighting" ), this );
mActionEnableEyeDome->setCheckable( true ); mActionEnableEyeDome->setCheckable( true );
connect( mActionEnableEyeDome, &QAction::triggered, this, [=]( bool enabled ) { connect( mActionEnableEyeDome, &QAction::triggered, this, [this]( bool enabled ) {
mCanvas->mapSettings()->setEyeDomeLightingEnabled( enabled ); mCanvas->mapSettings()->setEyeDomeLightingEnabled( enabled );
} ); } );
mEffectsMenu->addAction( mActionEnableEyeDome ); mEffectsMenu->addAction( mActionEnableEyeDome );
mActionEnableAmbientOcclusion = new QAction( tr( "Show Ambient Occlusion" ), this ); mActionEnableAmbientOcclusion = new QAction( tr( "Show Ambient Occlusion" ), this );
mActionEnableAmbientOcclusion->setCheckable( true ); mActionEnableAmbientOcclusion->setCheckable( true );
connect( mActionEnableAmbientOcclusion, &QAction::triggered, this, [=]( bool enabled ) { connect( mActionEnableAmbientOcclusion, &QAction::triggered, this, [this]( bool enabled ) {
QgsAmbientOcclusionSettings ambientOcclusionSettings = mCanvas->mapSettings()->ambientOcclusionSettings(); QgsAmbientOcclusionSettings ambientOcclusionSettings = mCanvas->mapSettings()->ambientOcclusionSettings();
ambientOcclusionSettings.setEnabled( enabled ); ambientOcclusionSettings.setEnabled( enabled );
mCanvas->mapSettings()->setAmbientOcclusionSettings( ambientOcclusionSettings ); mCanvas->mapSettings()->setAmbientOcclusionSettings( ambientOcclusionSettings );
@ -308,7 +308,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mCanvas = new Qgs3DMapCanvas; mCanvas = new Qgs3DMapCanvas;
mCanvas->setMinimumSize( QSize( 200, 200 ) ); mCanvas->setMinimumSize( QSize( 200, 200 ) );
connect( mCanvas, &Qgs3DMapCanvas::savedAsImage, this, [=]( const QString &fileName ) { connect( mCanvas, &Qgs3DMapCanvas::savedAsImage, this, []( const QString &fileName ) {
QgisApp::instance()->messageBar()->pushSuccess( tr( "Save as Image" ), tr( "Successfully saved the 3D map to <a href=\"%1\">%2</a>" ).arg( QUrl::fromLocalFile( fileName ).toString(), QDir::toNativeSeparators( fileName ) ) ); QgisApp::instance()->messageBar()->pushSuccess( tr( "Save as Image" ), tr( "Successfully saved the 3D map to <a href=\"%1\">%2</a>" ).arg( QUrl::fromLocalFile( fileName ).toString(), QDir::toNativeSeparators( fileName ) ) );
} ); } );
@ -353,7 +353,7 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
mLabelNavSpeedHideTimeout = new QTimer( this ); mLabelNavSpeedHideTimeout = new QTimer( this );
mLabelNavSpeedHideTimeout->setInterval( 1000 ); mLabelNavSpeedHideTimeout->setInterval( 1000 );
connect( mLabelNavSpeedHideTimeout, &QTimer::timeout, this, [=] { connect( mLabelNavSpeedHideTimeout, &QTimer::timeout, this, [this] {
mLabelNavigationSpeed->hide(); mLabelNavigationSpeed->hide();
mLabelNavSpeedHideTimeout->stop(); mLabelNavSpeedHideTimeout->stop();
} ); } );
@ -404,10 +404,10 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked )
} }
QAction *dockAction = mDockableWidgetHelper->createDockUndockAction( tr( "Dock 3D Map View" ), this ); QAction *dockAction = mDockableWidgetHelper->createDockUndockAction( tr( "Dock 3D Map View" ), this );
toolBar->addAction( dockAction ); toolBar->addAction( dockAction );
connect( mDockableWidgetHelper, &QgsDockableWidgetHelper::closed, this, [=]() { connect( mDockableWidgetHelper, &QgsDockableWidgetHelper::closed, this, [this]() {
QgisApp::instance()->close3DMapView( canvasName() ); QgisApp::instance()->close3DMapView( canvasName() );
} ); } );
connect( dockAction, &QAction::toggled, this, [=]( const bool isSmallSize ) { connect( dockAction, &QAction::toggled, this, [toolBar]( const bool isSmallSize ) {
toolBar->setIconSize( QgisApp::instance()->iconSize( isSmallSize ) ); toolBar->setIconSize( QgisApp::instance()->iconSize( isSmallSize ) );
} ); } );
@ -769,7 +769,7 @@ void Qgs3DMapCanvasWidget::configure()
Qgs3DMapConfigWidget *w = new Qgs3DMapConfigWidget( map, mMainCanvas, mCanvas, mConfigureDialog ); Qgs3DMapConfigWidget *w = new Qgs3DMapConfigWidget( map, mMainCanvas, mCanvas, mConfigureDialog );
QDialogButtonBox *buttons = new QDialogButtonBox( QDialogButtonBox::Apply | QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, mConfigureDialog ); QDialogButtonBox *buttons = new QDialogButtonBox( QDialogButtonBox::Apply | QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, mConfigureDialog );
auto applyConfig = [=]() { auto applyConfig = [this, map, w]() {
const QgsVector3D oldOrigin = map->origin(); const QgsVector3D oldOrigin = map->origin();
const QgsCoordinateReferenceSystem oldCrs = map->crs(); const QgsCoordinateReferenceSystem oldCrs = map->crs();
const QgsCameraPose oldCameraPose = mCanvas->cameraController()->cameraPose(); const QgsCameraPose oldCameraPose = mCanvas->cameraController()->cameraPose();
@ -797,7 +797,7 @@ void Qgs3DMapCanvasWidget::configure()
}; };
connect( buttons, &QDialogButtonBox::rejected, mConfigureDialog, &QDialog::reject ); connect( buttons, &QDialogButtonBox::rejected, mConfigureDialog, &QDialog::reject );
connect( buttons, &QDialogButtonBox::clicked, mConfigureDialog, [=]( QAbstractButton *button ) { connect( buttons, &QDialogButtonBox::clicked, mConfigureDialog, [this, buttons, applyConfig]( QAbstractButton *button ) {
if ( button == buttons->button( QDialogButtonBox::Apply ) || button == buttons->button( QDialogButtonBox::Ok ) ) if ( button == buttons->button( QDialogButtonBox::Apply ) || button == buttons->button( QDialogButtonBox::Ok ) )
applyConfig(); applyConfig();
if ( button == buttons->button( QDialogButtonBox::Ok ) ) if ( button == buttons->button( QDialogButtonBox::Ok ) )
@ -805,7 +805,7 @@ void Qgs3DMapCanvasWidget::configure()
} ); } );
connect( buttons, &QDialogButtonBox::helpRequested, w, []() { QgsHelp::openHelp( QStringLiteral( "map_views/3d_map_view.html#scene-configuration" ) ); } ); connect( buttons, &QDialogButtonBox::helpRequested, w, []() { QgsHelp::openHelp( QStringLiteral( "map_views/3d_map_view.html#scene-configuration" ) ); } );
connect( w, &Qgs3DMapConfigWidget::isValidChanged, this, [=]( bool valid ) { connect( w, &Qgs3DMapConfigWidget::isValidChanged, this, [buttons]( bool valid ) {
buttons->button( QDialogButtonBox::Apply )->setEnabled( valid ); buttons->button( QDialogButtonBox::Apply )->setEnabled( valid );
buttons->button( QDialogButtonBox::Ok )->setEnabled( valid ); buttons->button( QDialogButtonBox::Ok )->setEnabled( valid );
} ); } );
@ -838,7 +838,7 @@ void Qgs3DMapCanvasWidget::exportScene()
connect( buttons, &QDialogButtonBox::accepted, &dlg, &QDialog::accept ); connect( buttons, &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
connect( buttons, &QDialogButtonBox::rejected, &dlg, &QDialog::reject ); connect( buttons, &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
connect( buttons, &QDialogButtonBox::helpRequested, &dlg, [=] { QgsHelp::openHelp( QStringLiteral( "map_views/3d_map_view.html" ) ); } ); connect( buttons, &QDialogButtonBox::helpRequested, &dlg, [] { QgsHelp::openHelp( QStringLiteral( "map_views/3d_map_view.html" ) ); } );
QVBoxLayout *layout = new QVBoxLayout( &dlg ); QVBoxLayout *layout = new QVBoxLayout( &dlg );
layout->addWidget( &exportWidget, 1 ); layout->addWidget( &exportWidget, 1 );
@ -902,7 +902,7 @@ void Qgs3DMapCanvasWidget::mapThemeMenuAboutToShow()
{ {
actionFollowMain->setChecked( true ); actionFollowMain->setChecked( true );
} }
connect( actionFollowMain, &QAction::triggered, this, [=] { connect( actionFollowMain, &QAction::triggered, this, [this] {
mCanvas->mapSettings()->setTerrainMapTheme( QString() ); mCanvas->mapSettings()->setTerrainMapTheme( QString() );
} ); } );
mMapThemeMenuPresetActions.append( actionFollowMain ); mMapThemeMenuPresetActions.append( actionFollowMain );

View File

@ -59,7 +59,7 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas
// get rid of annoying outer focus rect on Mac // get rid of annoying outer focus rect on Mac
m3DOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect, false ); m3DOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect, false );
m3DOptionsListWidget->setCurrentRow( settings.value( QStringLiteral( "Windows/3DMapConfig/Tab" ), 0 ).toInt() ); m3DOptionsListWidget->setCurrentRow( settings.value( QStringLiteral( "Windows/3DMapConfig/Tab" ), 0 ).toInt() );
connect( m3DOptionsListWidget, &QListWidget::currentRowChanged, this, [=]( int index ) { m3DOptionsStackedWidget->setCurrentIndex( index ); } ); connect( m3DOptionsListWidget, &QListWidget::currentRowChanged, this, [this]( int index ) { m3DOptionsStackedWidget->setCurrentIndex( index ); } );
m3DOptionsStackedWidget->setCurrentIndex( m3DOptionsListWidget->currentRow() ); m3DOptionsStackedWidget->setCurrentIndex( m3DOptionsListWidget->currentRow() );
if ( !settings.contains( QStringLiteral( "Windows/3DMapConfig/OptionsSplitState" ) ) ) if ( !settings.contains( QStringLiteral( "Windows/3DMapConfig/OptionsSplitState" ) ) )
@ -76,7 +76,7 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas
cboCameraProjectionType->addItem( tr( "Perspective Projection" ), Qt3DRender::QCameraLens::PerspectiveProjection ); cboCameraProjectionType->addItem( tr( "Perspective Projection" ), Qt3DRender::QCameraLens::PerspectiveProjection );
cboCameraProjectionType->addItem( tr( "Orthogonal Projection" ), Qt3DRender::QCameraLens::OrthographicProjection ); cboCameraProjectionType->addItem( tr( "Orthogonal Projection" ), Qt3DRender::QCameraLens::OrthographicProjection );
connect( cboCameraProjectionType, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, [=]() { connect( cboCameraProjectionType, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, [this]() {
spinCameraFieldOfView->setEnabled( cboCameraProjectionType->currentIndex() == cboCameraProjectionType->findData( Qt3DRender::QCameraLens::PerspectiveProjection ) ); spinCameraFieldOfView->setEnabled( cboCameraProjectionType->currentIndex() == cboCameraProjectionType->findData( Qt3DRender::QCameraLens::PerspectiveProjection ) );
} ); } );

View File

@ -47,7 +47,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mZoomInButton, mZoomInButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
QgsCameraController *controller = m3DMapCanvas->cameraController(); QgsCameraController *controller = m3DMapCanvas->cameraController();
if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe )
controller->globeZoom( ZOOM_FACTOR ); controller->globeZoom( ZOOM_FACTOR );
@ -61,7 +61,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mZoomOutButton, mZoomOutButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
QgsCameraController *controller = m3DMapCanvas->cameraController(); QgsCameraController *controller = m3DMapCanvas->cameraController();
if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe )
controller->globeZoom( 1 / ZOOM_FACTOR ); controller->globeZoom( 1 / ZOOM_FACTOR );
@ -75,7 +75,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mTiltUpButton, mTiltUpButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
m3DMapCanvas->cameraController()->tiltUpAroundViewCenter( 1 ); m3DMapCanvas->cameraController()->tiltUpAroundViewCenter( 1 );
} }
); );
@ -85,7 +85,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mTiltDownButton, mTiltDownButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
m3DMapCanvas->cameraController()->tiltUpAroundViewCenter( -1 ); m3DMapCanvas->cameraController()->tiltUpAroundViewCenter( -1 );
} }
); );
@ -98,7 +98,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mCompass, mCompass,
&QwtDial::valueChanged, &QwtDial::valueChanged,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
m3DMapCanvas->cameraController()->setCameraHeadingAngle( float( mCompass->value() ) ); m3DMapCanvas->cameraController()->setCameraHeadingAngle( float( mCompass->value() ) );
} }
); );
@ -108,7 +108,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mMoveUpButton, mMoveUpButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
QgsCameraController *controller = m3DMapCanvas->cameraController(); QgsCameraController *controller = m3DMapCanvas->cameraController();
if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe )
controller->globeMoveCenterPoint( MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint(), 0 ); controller->globeMoveCenterPoint( MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint(), 0 );
@ -122,7 +122,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mMoveRightButton, mMoveRightButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
QgsCameraController *controller = m3DMapCanvas->cameraController(); QgsCameraController *controller = m3DMapCanvas->cameraController();
if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe )
controller->globeMoveCenterPoint( 0, MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint() ); controller->globeMoveCenterPoint( 0, MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint() );
@ -136,7 +136,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mMoveDownButton, mMoveDownButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
QgsCameraController *controller = m3DMapCanvas->cameraController(); QgsCameraController *controller = m3DMapCanvas->cameraController();
if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe )
controller->globeMoveCenterPoint( -MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint(), 0 ); controller->globeMoveCenterPoint( -MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint(), 0 );
@ -150,7 +150,7 @@ Qgs3DNavigationWidget::Qgs3DNavigationWidget( Qgs3DMapCanvas *canvas, QWidget *p
mMoveLeftButton, mMoveLeftButton,
&QToolButton::clicked, &QToolButton::clicked,
m3DMapCanvas, m3DMapCanvas,
[=] { [this] {
QgsCameraController *controller = m3DMapCanvas->cameraController(); QgsCameraController *controller = m3DMapCanvas->cameraController();
if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe ) if ( m3DMapCanvas->mapSettings()->sceneMode() == Qgis::SceneMode::Globe )
controller->globeMoveCenterPoint( 0, -MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint() ); controller->globeMoveCenterPoint( 0, -MOVE_FACTOR * controller->cameraPose().distanceFromCenterPoint() );

View File

@ -38,14 +38,14 @@ QgsMap3DExportWidget::QgsMap3DExportWidget( Qgs3DMapScene *scene, Qgs3DMapExport
loadSettings(); loadSettings();
connect( ui->sceneNameLineEdit, &QLineEdit::textChanged, this, [=]( const QString & ) { settingsChanged(); } ); connect( ui->sceneNameLineEdit, &QLineEdit::textChanged, this, [this]( const QString & ) { settingsChanged(); } );
connect( ui->selectFolderWidget, &QgsFileWidget::fileChanged, this, [=]( const QString & ) { settingsChanged(); } ); connect( ui->selectFolderWidget, &QgsFileWidget::fileChanged, this, [this]( const QString & ) { settingsChanged(); } );
connect( ui->smoothEdgesCheckBox, &QCheckBox::stateChanged, this, [=]( int ) { settingsChanged(); } ); connect( ui->smoothEdgesCheckBox, &QCheckBox::stateChanged, this, [this]( int ) { settingsChanged(); } );
connect( ui->terrainResolutionSpinBox, qOverload<int>( &QSpinBox::valueChanged ), this, [=]( int ) { settingsChanged(); } ); connect( ui->terrainResolutionSpinBox, qOverload<int>( &QSpinBox::valueChanged ), this, [this]( int ) { settingsChanged(); } );
connect( ui->exportNormalsCheckBox, &QCheckBox::stateChanged, this, [=]( int ) { settingsChanged(); } ); connect( ui->exportNormalsCheckBox, &QCheckBox::stateChanged, this, [this]( int ) { settingsChanged(); } );
connect( ui->exportTexturesCheckBox, &QCheckBox::stateChanged, this, [=]( int ) { settingsChanged(); } ); connect( ui->exportTexturesCheckBox, &QCheckBox::stateChanged, this, [this]( int ) { settingsChanged(); } );
connect( ui->terrainTextureResolutionSpinBox, qOverload<int>( &QSpinBox::valueChanged ), this, [=]( int ) { settingsChanged(); } ); connect( ui->terrainTextureResolutionSpinBox, qOverload<int>( &QSpinBox::valueChanged ), this, [this]( int ) { settingsChanged(); } );
connect( ui->scaleSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [=]( int ) { settingsChanged(); } ); connect( ui->scaleSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), this, [this]( int ) { settingsChanged(); } );
// sets the export settings to whatever is on the scene // sets the export settings to whatever is on the scene
settingsChanged(); settingsChanged();

View File

@ -30,11 +30,11 @@ QgsMetalRoughMaterialWidget::QgsMetalRoughMaterialWidget( QWidget *parent, bool
setSettings( &defaultMaterial, nullptr ); setSettings( &defaultMaterial, nullptr );
connect( mButtonBaseColor, &QgsColorButton::colorChanged, this, &QgsMetalRoughMaterialWidget::changed ); connect( mButtonBaseColor, &QgsColorButton::colorChanged, this, &QgsMetalRoughMaterialWidget::changed );
connect( mSpinMetalness, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [=] { connect( mSpinMetalness, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [this] {
updateWidgetState(); updateWidgetState();
emit changed(); emit changed();
} ); } );
connect( mSpinRoughness, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [=] { connect( mSpinRoughness, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [this] {
updateWidgetState(); updateWidgetState();
emit changed(); emit changed();
} ); } );

View File

@ -34,7 +34,7 @@ QgsPhongMaterialWidget::QgsPhongMaterialWidget( QWidget *parent, bool hasOpacity
connect( btnDiffuse, &QgsColorButton::colorChanged, this, &QgsPhongMaterialWidget::changed ); connect( btnDiffuse, &QgsColorButton::colorChanged, this, &QgsPhongMaterialWidget::changed );
connect( btnAmbient, &QgsColorButton::colorChanged, this, &QgsPhongMaterialWidget::changed ); connect( btnAmbient, &QgsColorButton::colorChanged, this, &QgsPhongMaterialWidget::changed );
connect( btnSpecular, &QgsColorButton::colorChanged, this, &QgsPhongMaterialWidget::changed ); connect( btnSpecular, &QgsColorButton::colorChanged, this, &QgsPhongMaterialWidget::changed );
connect( spinShininess, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [=] { connect( spinShininess, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [this] {
updateWidgetState(); updateWidgetState();
emit changed(); emit changed();
} ); } );

View File

@ -33,7 +33,7 @@ QgsPhongTexturedMaterialWidget::QgsPhongTexturedMaterialWidget( QWidget *parent
connect( btnAmbient, &QgsColorButton::colorChanged, this, &QgsPhongTexturedMaterialWidget::changed ); connect( btnAmbient, &QgsColorButton::colorChanged, this, &QgsPhongTexturedMaterialWidget::changed );
connect( btnSpecular, &QgsColorButton::colorChanged, this, &QgsPhongTexturedMaterialWidget::changed ); connect( btnSpecular, &QgsColorButton::colorChanged, this, &QgsPhongTexturedMaterialWidget::changed );
connect( spinShininess, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [=] { connect( spinShininess, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, [this] {
updateWidgetState(); updateWidgetState();
emit changed(); emit changed();
} ); } );

View File

@ -587,8 +587,8 @@ Qgs3DRendererRulePropsWidget::Qgs3DRendererRulePropsWidget( QgsRuleBased3DRender
connect( editDescription, &QLineEdit::textChanged, this, &Qgs3DRendererRulePropsWidget::widgetChanged ); connect( editDescription, &QLineEdit::textChanged, this, &Qgs3DRendererRulePropsWidget::widgetChanged );
connect( groupSymbol, &QGroupBox::toggled, this, &Qgs3DRendererRulePropsWidget::widgetChanged ); connect( groupSymbol, &QGroupBox::toggled, this, &Qgs3DRendererRulePropsWidget::widgetChanged );
connect( mSymbolWidget, &QgsSymbol3DWidget::widgetChanged, this, &Qgs3DRendererRulePropsWidget::widgetChanged ); connect( mSymbolWidget, &QgsSymbol3DWidget::widgetChanged, this, &Qgs3DRendererRulePropsWidget::widgetChanged );
connect( mFilterRadio, &QRadioButton::toggled, this, [=]( bool toggled ) { filterFrame->setEnabled( toggled ); } ); connect( mFilterRadio, &QRadioButton::toggled, this, [this]( bool toggled ) { filterFrame->setEnabled( toggled ); } );
connect( mElseRadio, &QRadioButton::toggled, this, [=]( bool toggled ) { if ( toggled ) editFilter->setText( QStringLiteral( "ELSE" ) ); } ); connect( mElseRadio, &QRadioButton::toggled, this, [this]( bool toggled ) { if ( toggled ) editFilter->setText( QStringLiteral( "ELSE" ) ); } );
} }
Qgs3DRendererRulePropsWidget::~Qgs3DRendererRulePropsWidget() = default; Qgs3DRendererRulePropsWidget::~Qgs3DRendererRulePropsWidget() = default;

View File

@ -511,22 +511,24 @@ endif()
############# #############
if (ANDROID) if (ANDROID)
add_library(${QGIS_APP_NAME} ${LIBRARY_TYPE} ${QGIS_APPMAIN_SRCS}) add_library(qgis ${LIBRARY_TYPE} ${QGIS_APPMAIN_SRCS})
# require c++17 # require c++17
target_compile_features(${QGIS_APP_NAME} PRIVATE cxx_std_17) target_compile_features(qgis PRIVATE cxx_std_17)
else() else()
add_executable(${QGIS_APP_NAME} WIN32 ${QGIS_APPMAIN_SRCS}) add_executable(qgis WIN32 ${QGIS_APPMAIN_SRCS})
if(WIN32 AND BUILD_WITH_QT6) if(WIN32 AND BUILD_WITH_QT6)
qt_disable_unicode_defines(${QGIS_APP_NAME}) qt_disable_unicode_defines(qgis)
endif() endif()
# require c++17 # require c++17
target_compile_features(${QGIS_APP_NAME} PRIVATE cxx_std_17) target_compile_features(qgis PRIVATE cxx_std_17)
target_compile_definitions(${QGIS_APP_NAME} PRIVATE "QT_PLUGINS_DIR=\"${QT_PLUGINS_DIR}\"") target_compile_definitions(qgis PRIVATE "QT_PLUGINS_DIR=\"${QT_PLUGINS_DIR}\"")
endif() endif()
set_target_properties(qgis PROPERTIES OUTPUT_NAME "${QGIS_APP_NAME}")
# Putting IMAGE_RCC_SRCS into qgis_app lib is causing problems when the lib is # Putting IMAGE_RCC_SRCS into qgis_app lib is causing problems when the lib is
# loaded (by plugin for example) in test unit (qgis_layoutpicturetest). # loaded (by plugin for example) in test unit (qgis_layoutpicturetest).
add_library(qgis_app ${LIBRARY_TYPE} ${QGIS_APP_SRCS}) add_library(qgis_app ${LIBRARY_TYPE} ${QGIS_APP_SRCS})
@ -654,29 +656,29 @@ if(CLANG_TIDY_EXE)
endif() endif()
if(NOT WIN32) if(NOT WIN32)
target_link_libraries(${QGIS_APP_NAME} qgis_app) target_link_libraries(qgis qgis_app)
endif() endif()
if (ANDROID) if (ANDROID)
target_link_libraries(${QGIS_APP_NAME} log) target_link_libraries(qgis log)
endif() endif()
if(WIN32) if(WIN32)
add_definitions(-DQWT_DLL) add_definitions(-DQWT_DLL)
add_definitions(-DQSCINTILLA_DLL) add_definitions(-DQSCINTILLA_DLL)
target_link_libraries(${QGIS_APP_NAME} dbghelp) target_link_libraries(qgis dbghelp)
target_link_libraries(qgis_app dbghelp) target_link_libraries(qgis_app dbghelp)
endif() endif()
target_link_libraries(${QGIS_APP_NAME} qgis_native) target_link_libraries(qgis qgis_native)
if (NOT WIN32) if (NOT WIN32)
target_link_libraries(${QGIS_APP_NAME} QTSignal) target_link_libraries(qgis QTSignal)
endif() endif()
if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
find_library(EXECINFO_LIBRARY NAMES execinfo) find_library(EXECINFO_LIBRARY NAMES execinfo)
target_link_libraries(${QGIS_APP_NAME} ${EXECINFO_LIBRARY}) target_link_libraries(qgis ${EXECINFO_LIBRARY})
endif() endif()
if (WITH_PDAL) if (WITH_PDAL)
@ -693,7 +695,7 @@ install(TARGETS qgis_app
ARCHIVE DESTINATION ${QGIS_LIB_DIR} ARCHIVE DESTINATION ${QGIS_LIB_DIR}
PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR}) PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR})
install(TARGETS ${QGIS_APP_NAME} install(TARGETS qgis
BUNDLE DESTINATION ${QGIS_INSTALL_PREFIX} BUNDLE DESTINATION ${QGIS_INSTALL_PREFIX}
RUNTIME DESTINATION ${QGIS_BIN_DIR} RUNTIME DESTINATION ${QGIS_BIN_DIR}
LIBRARY DESTINATION ${QGIS_LIB_DIR} LIBRARY DESTINATION ${QGIS_LIB_DIR}

View File

@ -93,7 +93,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QgsSettings settings; QgsSettings settings;
QAction *actionRefresh = new QAction( tr( "Refresh" ), menu ); QAction *actionRefresh = new QAction( tr( "Refresh" ), menu );
connect( actionRefresh, &QAction::triggered, this, [=] { directoryItem->refresh(); } ); connect( actionRefresh, &QAction::triggered, this, [directoryItem] { directoryItem->refresh(); } );
menu->addAction( actionRefresh ); menu->addAction( actionRefresh );
menu->addSeparator(); menu->addSeparator();
@ -101,7 +101,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QMenu *newMenu = new QMenu( tr( "New" ), menu ); QMenu *newMenu = new QMenu( tr( "New" ), menu );
QAction *createFolder = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewFolder.svg" ) ), tr( "Directory…" ), menu ); QAction *createFolder = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewFolder.svg" ) ), tr( "Directory…" ), menu );
connect( createFolder, &QAction::triggered, this, [=] { connect( createFolder, &QAction::triggered, this, [directoryItem, context] {
bool ok = false; bool ok = false;
const QString name = QInputDialog::getText( QgisApp::instance(), tr( "Create Directory" ), tr( "Directory name" ), QLineEdit::Normal, QString(), &ok ); const QString name = QInputDialog::getText( QgisApp::instance(), tr( "Create Directory" ), tr( "Directory name" ), QLineEdit::Normal, QString(), &ok );
@ -126,7 +126,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QAction *createGpkg = new QAction( tr( "GeoPackage…" ), newMenu ); QAction *createGpkg = new QAction( tr( "GeoPackage…" ), newMenu );
createGpkg->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewGeoPackageLayer.svg" ) ) ); createGpkg->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewGeoPackageLayer.svg" ) ) );
connect( createGpkg, &QAction::triggered, this, [=] { connect( createGpkg, &QAction::triggered, this, [directoryItem, context] {
QDir dir( directoryItem->dirPath() ); QDir dir( directoryItem->dirPath() );
QString newName = tr( "New GeoPackage.gpkg" ); QString newName = tr( "New GeoPackage.gpkg" );
int i = 1; int i = 1;
@ -175,7 +175,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QAction *createShp = new QAction( tr( "ShapeFile…" ), newMenu ); QAction *createShp = new QAction( tr( "ShapeFile…" ), newMenu );
createShp->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewVectorLayer.svg" ) ) ); createShp->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewVectorLayer.svg" ) ) );
connect( createShp, &QAction::triggered, this, [=] { connect( createShp, &QAction::triggered, this, [directoryItem, item, context] {
QString enc; QString enc;
QDir dir( directoryItem->dirPath() ); QDir dir( directoryItem->dirPath() );
QString error; QString error;
@ -195,7 +195,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION( 3, 6, 0 ) #if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION( 3, 6, 0 )
QAction *createFgdb = new QAction( tr( "ESRI FileGeodatabase…" ), newMenu ); QAction *createFgdb = new QAction( tr( "ESRI FileGeodatabase…" ), newMenu );
createFgdb->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewFileGeodatabase.svg" ) ) ); createFgdb->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "mActionNewFileGeodatabase.svg" ) ) );
connect( createFgdb, &QAction::triggered, this, [=] { connect( createFgdb, &QAction::triggered, this, [directoryItem, context] {
QDir dir( directoryItem->dirPath() ); QDir dir( directoryItem->dirPath() );
QString newName = tr( "New File Geodatabase.gdb" ); QString newName = tr( "New File Geodatabase.gdb" );
int i = 1; int i = 1;
@ -254,7 +254,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QAction *addAsFavorite = new QAction( tr( "Add as a Favorite" ), menu ); QAction *addAsFavorite = new QAction( tr( "Add as a Favorite" ), menu );
addAsFavorite->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconFavorites.svg" ) ) ); addAsFavorite->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconFavorites.svg" ) ) );
menu->addAction( addAsFavorite ); menu->addAction( addAsFavorite );
connect( addAsFavorite, &QAction::triggered, this, [=] { connect( addAsFavorite, &QAction::triggered, this, [this, directoryItem] {
addFavorite( directoryItem ); addFavorite( directoryItem );
} ); } );
} }
@ -263,13 +263,13 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
if ( QgsFavoriteItem *favoriteItem = qobject_cast<QgsFavoriteItem *>( item ) ) if ( QgsFavoriteItem *favoriteItem = qobject_cast<QgsFavoriteItem *>( item ) )
{ {
QAction *actionRename = new QAction( tr( "Rename Favorite…" ), menu ); QAction *actionRename = new QAction( tr( "Rename Favorite…" ), menu );
connect( actionRename, &QAction::triggered, this, [=] { connect( actionRename, &QAction::triggered, this, [this, favoriteItem] {
renameFavorite( favoriteItem ); renameFavorite( favoriteItem );
} ); } );
menu->addAction( actionRename ); menu->addAction( actionRename );
QAction *removeFavoriteAction = new QAction( tr( "Remove Favorite" ), menu ); QAction *removeFavoriteAction = new QAction( tr( "Remove Favorite" ), menu );
connect( removeFavoriteAction, &QAction::triggered, this, [=] { connect( removeFavoriteAction, &QAction::triggered, this, [this, favoriteItem] {
removeFavorite( favoriteItem ); removeFavorite( favoriteItem );
} ); } );
menu->addAction( removeFavoriteAction ); menu->addAction( removeFavoriteAction );
@ -277,7 +277,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
} }
} }
QAction *hideAction = new QAction( tr( "Hide from Browser" ), menu ); QAction *hideAction = new QAction( tr( "Hide from Browser" ), menu );
connect( hideAction, &QAction::triggered, this, [=] { connect( hideAction, &QAction::triggered, this, [this, directoryItem] {
hideDirectory( directoryItem ); hideDirectory( directoryItem );
} ); } );
menu->addAction( hideAction ); menu->addAction( hideAction );
@ -289,7 +289,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
for ( const QString &path : hiddenPathList ) for ( const QString &path : hiddenPathList )
{ {
QAction *action = new QAction( QDir::toNativeSeparators( path ), hiddenMenu ); QAction *action = new QAction( QDir::toNativeSeparators( path ), hiddenMenu );
connect( action, &QAction::triggered, this, [=] { connect( action, &QAction::triggered, this, [path] {
QgsSettings s; QgsSettings s;
QStringList pathsList = s.value( QStringLiteral( "/browser/hiddenPaths" ) ).toStringList(); QStringList pathsList = s.value( QStringLiteral( "/browser/hiddenPaths" ) ).toStringList();
pathsList.removeAll( path ); pathsList.removeAll( path );
@ -321,7 +321,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
hiddenMenu->addSeparator(); hiddenMenu->addSeparator();
QAction *moreAction = new QAction( tr( "Show More…" ), hiddenMenu ); QAction *moreAction = new QAction( tr( "Show More…" ), hiddenMenu );
connect( moreAction, &QAction::triggered, this, [=] { connect( moreAction, &QAction::triggered, this, [] {
QgisApp::instance()->showOptionsDialog( QgisApp::instance(), QStringLiteral( "mOptionsPageDataSources" ) ); QgisApp::instance()->showOptionsDialog( QgisApp::instance(), QStringLiteral( "mOptionsPageDataSources" ) );
} ); } );
hiddenMenu->addAction( moreAction ); hiddenMenu->addAction( moreAction );
@ -337,14 +337,14 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
const QPixmap icon = QgsColorButton::createMenuIcon( directoryItem->iconColor(), true ); const QPixmap icon = QgsColorButton::createMenuIcon( directoryItem->iconColor(), true );
actionSetIconColor->setIcon( icon ); actionSetIconColor->setIcon( icon );
} }
connect( actionSetIconColor, &QAction::triggered, this, [=] { connect( actionSetIconColor, &QAction::triggered, this, [this, directoryItem] {
changeDirectoryColor( directoryItem ); changeDirectoryColor( directoryItem );
} ); } );
menu->addAction( actionSetIconColor ); menu->addAction( actionSetIconColor );
if ( directoryItem->iconColor().isValid() ) if ( directoryItem->iconColor().isValid() )
{ {
QAction *actionClearIconColor = new QAction( tr( "Clear Custom Color" ), menu ); QAction *actionClearIconColor = new QAction( tr( "Clear Custom Color" ), menu );
connect( actionClearIconColor, &QAction::triggered, this, [=] { connect( actionClearIconColor, &QAction::triggered, this, [this, directoryItem] {
clearDirectoryColor( directoryItem ); clearDirectoryColor( directoryItem );
} ); } );
menu->addAction( actionClearIconColor ); menu->addAction( actionClearIconColor );
@ -353,7 +353,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QMenu *scanningMenu = new QMenu( tr( "Scanning" ), menu ); QMenu *scanningMenu = new QMenu( tr( "Scanning" ), menu );
QAction *monitorAction = new QAction( tr( "Monitor for Changes" ), scanningMenu ); QAction *monitorAction = new QAction( tr( "Monitor for Changes" ), scanningMenu );
connect( monitorAction, &QAction::triggered, this, [=] { connect( monitorAction, &QAction::triggered, this, [this, directoryItem] {
toggleMonitor( directoryItem ); toggleMonitor( directoryItem );
} ); } );
monitorAction->setCheckable( true ); monitorAction->setCheckable( true );
@ -361,7 +361,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
scanningMenu->addAction( monitorAction ); scanningMenu->addAction( monitorAction );
QAction *fastScanAction = new QAction( tr( "Fast Scan this Directory" ), scanningMenu ); QAction *fastScanAction = new QAction( tr( "Fast Scan this Directory" ), scanningMenu );
connect( fastScanAction, &QAction::triggered, this, [=] { connect( fastScanAction, &QAction::triggered, this, [this, directoryItem] {
toggleFastScan( directoryItem ); toggleFastScan( directoryItem );
} ); } );
fastScanAction->setCheckable( true ); fastScanAction->setCheckable( true );
@ -373,7 +373,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
menu->addSeparator(); menu->addSeparator();
QAction *openFolder = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mIconFolder.svg" ) ), tr( "Open Directory…" ), menu ); QAction *openFolder = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mIconFolder.svg" ) ), tr( "Open Directory…" ), menu );
connect( openFolder, &QAction::triggered, this, [=] { connect( openFolder, &QAction::triggered, this, [directoryItem] {
QDesktopServices::openUrl( QUrl::fromLocalFile( directoryItem->dirPath() ) ); QDesktopServices::openUrl( QUrl::fromLocalFile( directoryItem->dirPath() ) );
} ); } );
menu->addAction( openFolder ); menu->addAction( openFolder );
@ -381,7 +381,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
if ( QgsGui::nativePlatformInterface()->capabilities() & QgsNative::NativeOpenTerminalAtPath ) if ( QgsGui::nativePlatformInterface()->capabilities() & QgsNative::NativeOpenTerminalAtPath )
{ {
QAction *openTerminal = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mActionTerminal.svg" ) ), tr( "Open in Terminal…" ), menu ); QAction *openTerminal = new QAction( QgsApplication::getThemeIcon( QStringLiteral( "mActionTerminal.svg" ) ), tr( "Open in Terminal…" ), menu );
connect( openTerminal, &QAction::triggered, this, [=] { connect( openTerminal, &QAction::triggered, this, [directoryItem] {
QgsGui::nativePlatformInterface()->openTerminalAtPath( directoryItem->dirPath() ); QgsGui::nativePlatformInterface()->openTerminalAtPath( directoryItem->dirPath() );
} ); } );
menu->addAction( openTerminal ); menu->addAction( openTerminal );
@ -389,7 +389,7 @@ void QgsAppDirectoryItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
} }
QAction *propertiesAction = new QAction( tr( "Properties…" ), menu ); QAction *propertiesAction = new QAction( tr( "Properties…" ), menu );
connect( propertiesAction, &QAction::triggered, this, [=] { connect( propertiesAction, &QAction::triggered, this, [this, directoryItem, context] {
showProperties( directoryItem, context ); showProperties( directoryItem, context );
} ); } );
menu->addAction( propertiesAction ); menu->addAction( propertiesAction );
@ -513,7 +513,7 @@ void QgsAppFileItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *m
if ( !sourceSelectProviders.isEmpty() && sourceSelectProviders.first()->capabilities().testFlag( QgsSourceSelectProvider::Capability::ConfigureFromUri ) ) if ( !sourceSelectProviders.isEmpty() && sourceSelectProviders.first()->capabilities().testFlag( QgsSourceSelectProvider::Capability::ConfigureFromUri ) )
{ {
openDataSourceManagerAction = new QAction( tr( "Open with Data Source Manager…" ), menu ); openDataSourceManagerAction = new QAction( tr( "Open with Data Source Manager…" ), menu );
connect( openDataSourceManagerAction, &QAction::triggered, this, [=] { connect( openDataSourceManagerAction, &QAction::triggered, this, [layerItem] {
QString pageName { layerItem->providerKey() }; QString pageName { layerItem->providerKey() };
// GPKG special handling // GPKG special handling
if ( qobject_cast<QgsGeoPackageVectorLayerItem *>( layerItem ) ) if ( qobject_cast<QgsGeoPackageVectorLayerItem *>( layerItem ) )
@ -537,7 +537,7 @@ void QgsAppFileItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *m
{ {
const QgsProviderSublayerDetails &sublayer { sublayers.first() }; const QgsProviderSublayerDetails &sublayer { sublayers.first() };
openDataSourceManagerAction = new QAction( tr( "Open with Data Source Manager…" ), menu ); openDataSourceManagerAction = new QAction( tr( "Open with Data Source Manager…" ), menu );
connect( openDataSourceManagerAction, &QAction::triggered, this, [=] { connect( openDataSourceManagerAction, &QAction::triggered, this, [sublayer, layerItem] {
QString pageName { sublayer.providerKey() }; QString pageName { sublayer.providerKey() };
// GPKG special handling // GPKG special handling
if ( sublayer.driverName() == QLatin1String( "GeoPackage" ) ) if ( sublayer.driverName() == QLatin1String( "GeoPackage" ) )
@ -587,7 +587,7 @@ void QgsAppFileItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *m
if ( fi.suffix().compare( ext, Qt::CaseInsensitive ) == 0 ) if ( fi.suffix().compare( ext, Qt::CaseInsensitive ) == 0 )
{ {
QAction *viewAction = new QAction( tr( "Open %1 Externally…" ).arg( name ), menu ); QAction *viewAction = new QAction( tr( "Open %1 Externally…" ).arg( name ), menu );
connect( viewAction, &QAction::triggered, this, [=] { connect( viewAction, &QAction::triggered, this, [filename] {
QDesktopServices::openUrl( QUrl::fromLocalFile( filename ) ); QDesktopServices::openUrl( QUrl::fromLocalFile( filename ) );
} ); } );
@ -646,7 +646,7 @@ void QgsAppFileItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *m
{ {
const QString renameText = tr( "Rename “%1”…" ).arg( fi.fileName() ); const QString renameText = tr( "Rename “%1”…" ).arg( fi.fileName() );
QAction *renameAction = new QAction( renameText, menu ); QAction *renameAction = new QAction( renameText, menu );
connect( renameAction, &QAction::triggered, this, [=] { connect( renameAction, &QAction::triggered, this, [this, selectedFiles, context, selectedParents, menu] {
const QString oldPath = selectedFiles.value( 0 ); const QString oldPath = selectedFiles.value( 0 );
const QStringList existingNames = QFileInfo( oldPath ).dir().entryList(); const QStringList existingNames = QFileInfo( oldPath ).dir().entryList();
@ -670,7 +670,7 @@ void QgsAppFileItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *m
const QString deleteText = selectedFiles.count() == 1 ? tr( "Delete “%1”…" ).arg( fi.fileName() ) const QString deleteText = selectedFiles.count() == 1 ? tr( "Delete “%1”…" ).arg( fi.fileName() )
: tr( "Delete Selected Files…" ); : tr( "Delete Selected Files…" );
QAction *deleteAction = new QAction( deleteText, menu ); QAction *deleteAction = new QAction( deleteText, menu );
connect( deleteAction, &QAction::triggered, this, [=] { connect( deleteAction, &QAction::triggered, this, [selectedFiles, selectedParents, context] {
// Check if the files correspond to paths in the project // Check if the files correspond to paths in the project
QList<QgsMapLayer *> layersList; QList<QgsMapLayer *> layersList;
for ( const QString &path : std::as_const( selectedFiles ) ) for ( const QString &path : std::as_const( selectedFiles ) )
@ -810,12 +810,12 @@ void QgsAppFileItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *m
menu->addSeparator(); menu->addSeparator();
QAction *showInFilesAction = menu->addAction( tr( "Show in Files" ) ); QAction *showInFilesAction = menu->addAction( tr( "Show in Files" ) );
connect( showInFilesAction, &QAction::triggered, this, [=] { connect( showInFilesAction, &QAction::triggered, this, [item] {
QgsGui::nativePlatformInterface()->openFileExplorerAndSelectFile( item->path() ); QgsGui::nativePlatformInterface()->openFileExplorerAndSelectFile( item->path() );
} ); } );
QAction *filePropertiesAction = menu->addAction( tr( "File Properties…" ) ); QAction *filePropertiesAction = menu->addAction( tr( "File Properties…" ) );
connect( filePropertiesAction, &QAction::triggered, this, [=] { connect( filePropertiesAction, &QAction::triggered, this, [item] {
QgsGui::nativePlatformInterface()->showFileProperties( item->path() ); QgsGui::nativePlatformInterface()->showFileProperties( item->path() );
} ); } );
} }
@ -939,7 +939,7 @@ void QgsProjectHomeItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
menu->insertSeparator( menu->actions().at( 0 ) ); menu->insertSeparator( menu->actions().at( 0 ) );
QAction *setHome = new QAction( tr( "Set Project Home…" ), menu ); QAction *setHome = new QAction( tr( "Set Project Home…" ), menu );
connect( setHome, &QAction::triggered, this, [=] { connect( setHome, &QAction::triggered, this, [] {
QString oldHome = QgsProject::instance()->homePath(); QString oldHome = QgsProject::instance()->homePath();
QString newPath = QFileDialog::getExistingDirectory( QgisApp::instance(), tr( "Select Project Home Directory" ), oldHome ); QString newPath = QFileDialog::getExistingDirectory( QgisApp::instance(), tr( "Select Project Home Directory" ), oldHome );
if ( !newPath.isEmpty() ) if ( !newPath.isEmpty() )
@ -970,7 +970,7 @@ void QgsFavoritesItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu
return; return;
QAction *addAction = new QAction( tr( "Add a Directory…" ), menu ); QAction *addAction = new QAction( tr( "Add a Directory…" ), menu );
connect( addAction, &QAction::triggered, this, [=] { connect( addAction, &QAction::triggered, this, [] {
QString directory = QFileDialog::getExistingDirectory( QgisApp::instance(), tr( "Add Directory to Favorites" ) ); QString directory = QFileDialog::getExistingDirectory( QgisApp::instance(), tr( "Add Directory to Favorites" ) );
if ( !directory.isEmpty() ) if ( !directory.isEmpty() )
{ {
@ -1065,7 +1065,7 @@ void QgsLayerItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *men
const QString deleteText = selectedDeletableItemPaths.count() == 1 ? tr( "Delete Layer “%1”…" ).arg( layerItem->name() ) const QString deleteText = selectedDeletableItemPaths.count() == 1 ? tr( "Delete Layer “%1”…" ).arg( layerItem->name() )
: tr( "Delete Selected Layers…" ); : tr( "Delete Selected Layers…" );
QAction *deleteAction = new QAction( deleteText, menu ); QAction *deleteAction = new QAction( deleteText, menu );
connect( deleteAction, &QAction::triggered, this, [=] { connect( deleteAction, &QAction::triggered, this, [this, selectedDeletableItemPaths, context] {
deleteLayers( selectedDeletableItemPaths, context ); deleteLayers( selectedDeletableItemPaths, context );
} ); } );
@ -1095,7 +1095,7 @@ void QgsLayerItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *men
const QString addText = selectedItems.count() == 1 ? tr( "Add Layer to Project" ) const QString addText = selectedItems.count() == 1 ? tr( "Add Layer to Project" )
: tr( "Add Selected Layers to Project" ); : tr( "Add Selected Layers to Project" );
QAction *addAction = new QAction( addText, menu ); QAction *addAction = new QAction( addText, menu );
connect( addAction, &QAction::triggered, this, [=] { connect( addAction, &QAction::triggered, this, [this, selectedItems] {
addLayersFromItems( selectedItems ); addLayersFromItems( selectedItems );
} ); } );
menu->addAction( addAction ); menu->addAction( addAction );
@ -1117,7 +1117,7 @@ void QgsLayerItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *men
} }
QAction *propertiesAction = new QAction( tr( "Layer Properties…" ), menu ); QAction *propertiesAction = new QAction( tr( "Layer Properties…" ), menu );
connect( propertiesAction, &QAction::triggered, this, [=] { connect( propertiesAction, &QAction::triggered, this, [this, layerItem, context] {
showPropertiesForItem( layerItem, context ); showPropertiesForItem( layerItem, context );
} ); } );
menu->addAction( propertiesAction ); menu->addAction( propertiesAction );
@ -2077,13 +2077,13 @@ bool QgsDatabaseItemGuiProvider::handleDrop( QgsDataItem *item, QgsDataItemGuiCo
mainTask->addSubTask( exportTask ); mainTask->addSubTask( exportTask );
hasSubTasks = true; hasSubTasks = true;
// when export is successful: // when export is successful:
connect( exportTask, &QgsVectorLayerExporterTask::exportComplete, item, [=]() { connect( exportTask, &QgsVectorLayerExporterTask::exportComplete, item, [item, context]() {
notify( tr( "Import to database" ), tr( "Import was successful." ), context, Qgis::MessageLevel::Success ); notify( tr( "Import to database" ), tr( "Import was successful." ), context, Qgis::MessageLevel::Success );
item->refresh(); item->refresh();
} ); } );
// when an error occurs: // when an error occurs:
connect( exportTask, &QgsVectorLayerExporterTask::errorOccurred, item, [=]( Qgis::VectorExportResult error, const QString &errorMessage ) { connect( exportTask, &QgsVectorLayerExporterTask::errorOccurred, item, []( Qgis::VectorExportResult error, const QString &errorMessage ) {
if ( error != Qgis::VectorExportResult::UserCanceled ) if ( error != Qgis::VectorExportResult::UserCanceled )
{ {
QgsMessageOutput *output = QgsMessageOutput::createMessageOutput(); QgsMessageOutput *output = QgsMessageOutput::createMessageOutput();
@ -2297,7 +2297,7 @@ void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
{ {
QAction *rangeDomainAction = new QAction( QObject::tr( "New Range Domain…" ) ); QAction *rangeDomainAction = new QAction( QObject::tr( "New Range Domain…" ) );
createFieldDomainMenu->addAction( rangeDomainAction ); createFieldDomainMenu->addAction( rangeDomainAction );
connect( rangeDomainAction, &QAction::triggered, this, [=] { connect( rangeDomainAction, &QAction::triggered, this, [createDomain] {
createDomain( Qgis::FieldDomainType::Range ); createDomain( Qgis::FieldDomainType::Range );
} ); } );
} }
@ -2306,7 +2306,7 @@ void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
{ {
QAction *codedDomainAction = new QAction( QObject::tr( "New Coded Values Domain…" ) ); QAction *codedDomainAction = new QAction( QObject::tr( "New Coded Values Domain…" ) );
createFieldDomainMenu->addAction( codedDomainAction ); createFieldDomainMenu->addAction( codedDomainAction );
connect( codedDomainAction, &QAction::triggered, this, [=] { connect( codedDomainAction, &QAction::triggered, this, [createDomain] {
createDomain( Qgis::FieldDomainType::Coded ); createDomain( Qgis::FieldDomainType::Coded );
} ); } );
} }
@ -2315,7 +2315,7 @@ void QgsFieldDomainItemGuiProvider::populateContextMenu( QgsDataItem *item, QMen
{ {
QAction *globDomainAction = new QAction( QObject::tr( "New Glob Domain…" ) ); QAction *globDomainAction = new QAction( QObject::tr( "New Glob Domain…" ) );
createFieldDomainMenu->addAction( globDomainAction ); createFieldDomainMenu->addAction( globDomainAction );
connect( globDomainAction, &QAction::triggered, this, [=] { connect( globDomainAction, &QAction::triggered, this, [createDomain] {
createDomain( Qgis::FieldDomainType::Glob ); createDomain( Qgis::FieldDomainType::Glob );
} ); } );
} }
@ -2580,7 +2580,7 @@ void QgsRelationshipItemGuiProvider::populateContextMenu( QgsDataItem *item, QMe
QPointer<QgsDataItem> itemWeakPointer( item ); QPointer<QgsDataItem> itemWeakPointer( item );
connect( editRelationshipAction, &QAction::triggered, this, [=] { connect( editRelationshipAction, &QAction::triggered, this, [md, itemWeakPointer, relation, connectionUri, context] {
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) }; std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn { static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) };
QgsDbRelationDialog dialog( conn.release(), QgisApp::instance() ); QgsDbRelationDialog dialog( conn.release(), QgisApp::instance() );

View File

@ -67,7 +67,7 @@ QgsDecorationCopyrightDialog::QgsDecorationCopyrightDialog( QgsDecorationCopyrig
cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft ); cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft );
cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter ); cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter );
cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight ); cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight );
connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( int ) { connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
spnHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 ); spnHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 );
} ); } );
cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) ); cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) );

View File

@ -38,7 +38,7 @@ QgsDecorationGridDialog::QgsDecorationGridDialog( QgsDecorationGrid &deco, QWidg
connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsDecorationGridDialog::buttonBox_accepted ); connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsDecorationGridDialog::buttonBox_accepted );
connect( buttonBox, &QDialogButtonBox::rejected, this, &QgsDecorationGridDialog::buttonBox_rejected ); connect( buttonBox, &QDialogButtonBox::rejected, this, &QgsDecorationGridDialog::buttonBox_rejected );
connect( mGridTypeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, [=]( int ) { updateSymbolButtons(); } ); connect( mGridTypeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, [this]( int ) { updateSymbolButtons(); } );
connect( mPbtnUpdateFromExtents, &QPushButton::clicked, this, &QgsDecorationGridDialog::mPbtnUpdateFromExtents_clicked ); connect( mPbtnUpdateFromExtents, &QPushButton::clicked, this, &QgsDecorationGridDialog::mPbtnUpdateFromExtents_clicked );
connect( mPbtnUpdateFromLayer, &QPushButton::clicked, this, &QgsDecorationGridDialog::mPbtnUpdateFromLayer_clicked ); connect( mPbtnUpdateFromLayer, &QPushButton::clicked, this, &QgsDecorationGridDialog::mPbtnUpdateFromLayer_clicked );
connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsDecorationGridDialog::showHelp ); connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsDecorationGridDialog::showHelp );
@ -47,7 +47,7 @@ QgsDecorationGridDialog::QgsDecorationGridDialog( QgsDecorationGrid &deco, QWidg
mLineSymbolButton->setSymbolType( Qgis::SymbolType::Line ); mLineSymbolButton->setSymbolType( Qgis::SymbolType::Line );
grpEnable->setChecked( mDeco.enabled() ); grpEnable->setChecked( mDeco.enabled() );
connect( grpEnable, &QGroupBox::toggled, this, [=] { updateSymbolButtons(); } ); connect( grpEnable, &QGroupBox::toggled, this, [this] { updateSymbolButtons(); } );
mOffsetXEdit->setShowClearButton( true ); mOffsetXEdit->setShowClearButton( true );
mOffsetXEdit->setClearValue( 0 ); mOffsetXEdit->setClearValue( 0 );

View File

@ -51,7 +51,7 @@ QgsDecorationImageDialog::QgsDecorationImageDialog( QgsDecorationImage &deco, QW
cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft ); cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft );
cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter ); cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter );
cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight ); cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight );
connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( int ) { connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
spinHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 ); spinHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 );
} ); } );
cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) ); cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) );
@ -69,7 +69,7 @@ QgsDecorationImageDialog::QgsDecorationImageDialog( QgsDecorationImage &deco, QW
// enabled // enabled
grpEnable->setChecked( mDeco.enabled() ); grpEnable->setChecked( mDeco.enabled() );
connect( grpEnable, &QGroupBox::toggled, this, [=] { updateEnabledColorButtons(); } ); connect( grpEnable, &QGroupBox::toggled, this, [this] { updateEnabledColorButtons(); } );
wgtImagePath->setFilePath( mDeco.imagePath() ); wgtImagePath->setFilePath( mDeco.imagePath() );
connect( wgtImagePath, &QgsFileWidget::fileChanged, this, &QgsDecorationImageDialog::updateImagePath ); connect( wgtImagePath, &QgsFileWidget::fileChanged, this, &QgsDecorationImageDialog::updateImagePath );
@ -83,8 +83,8 @@ QgsDecorationImageDialog::QgsDecorationImageDialog( QgsDecorationImage &deco, QW
pbnChangeOutlineColor->setColor( mDeco.mOutlineColor ); pbnChangeOutlineColor->setColor( mDeco.mOutlineColor );
pbnChangeOutlineColor->setContext( QStringLiteral( "gui" ) ); pbnChangeOutlineColor->setContext( QStringLiteral( "gui" ) );
pbnChangeOutlineColor->setColorDialogTitle( tr( "Select SVG Image Outline Color" ) ); pbnChangeOutlineColor->setColorDialogTitle( tr( "Select SVG Image Outline Color" ) );
connect( pbnChangeColor, &QgsColorButton::colorChanged, this, [=]( QColor ) { drawImage(); } ); connect( pbnChangeColor, &QgsColorButton::colorChanged, this, [this]( QColor ) { drawImage(); } );
connect( pbnChangeOutlineColor, &QgsColorButton::colorChanged, this, [=]( QColor ) { drawImage(); } ); connect( pbnChangeOutlineColor, &QgsColorButton::colorChanged, this, [this]( QColor ) { drawImage(); } );
drawImage(); drawImage();
} }

View File

@ -52,7 +52,7 @@ QgsDecorationNorthArrowDialog::QgsDecorationNorthArrowDialog( QgsDecorationNorth
spinAngle->setEnabled( !mDeco.mAutomatic ); spinAngle->setEnabled( !mDeco.mAutomatic );
sliderRotation->setEnabled( !mDeco.mAutomatic ); sliderRotation->setEnabled( !mDeco.mAutomatic );
connect( cboxAutomatic, &QAbstractButton::toggled, this, [=]( bool checked ) { connect( cboxAutomatic, &QAbstractButton::toggled, this, [this]( bool checked ) {
spinAngle->setEnabled( !checked ); spinAngle->setEnabled( !checked );
sliderRotation->setEnabled( !checked ); sliderRotation->setEnabled( !checked );
} ); } );
@ -66,7 +66,7 @@ QgsDecorationNorthArrowDialog::QgsDecorationNorthArrowDialog( QgsDecorationNorth
cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft ); cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft );
cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter ); cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter );
cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight ); cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight );
connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( int ) { connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
spinHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 ); spinHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 );
} ); } );
cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) ); cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) );
@ -87,7 +87,7 @@ QgsDecorationNorthArrowDialog::QgsDecorationNorthArrowDialog( QgsDecorationNorth
mSvgPathLineEdit->setText( mDeco.mSvgPath ); mSvgPathLineEdit->setText( mDeco.mSvgPath );
connect( mSvgPathLineEdit, &QLineEdit::textChanged, this, &QgsDecorationNorthArrowDialog::updateSvgPath ); connect( mSvgPathLineEdit, &QLineEdit::textChanged, this, &QgsDecorationNorthArrowDialog::updateSvgPath );
connect( mSvgSelectorBtn, &QPushButton::clicked, this, [=] { connect( mSvgSelectorBtn, &QPushButton::clicked, this, [this] {
QgsSvgSelectorDialog svgDlg( this ); QgsSvgSelectorDialog svgDlg( this );
svgDlg.setWindowTitle( tr( "Select SVG file" ) ); svgDlg.setWindowTitle( tr( "Select SVG file" ) );
svgDlg.svgSelector()->setSvgPath( mSvgPathLineEdit->text().trimmed() ); svgDlg.svgSelector()->setSvgPath( mSvgPathLineEdit->text().trimmed() );
@ -109,8 +109,8 @@ QgsDecorationNorthArrowDialog::QgsDecorationNorthArrowDialog( QgsDecorationNorth
pbnChangeOutlineColor->setColor( mDeco.mOutlineColor ); pbnChangeOutlineColor->setColor( mDeco.mOutlineColor );
pbnChangeOutlineColor->setContext( QStringLiteral( "gui" ) ); pbnChangeOutlineColor->setContext( QStringLiteral( "gui" ) );
pbnChangeOutlineColor->setColorDialogTitle( tr( "Select North Arrow Outline Color" ) ); pbnChangeOutlineColor->setColorDialogTitle( tr( "Select North Arrow Outline Color" ) );
connect( pbnChangeColor, &QgsColorButton::colorChanged, this, [=]( QColor ) { drawNorthArrow(); } ); connect( pbnChangeColor, &QgsColorButton::colorChanged, this, [this]( QColor ) { drawNorthArrow(); } );
connect( pbnChangeOutlineColor, &QgsColorButton::colorChanged, this, [=]( QColor ) { drawNorthArrow(); } ); connect( pbnChangeOutlineColor, &QgsColorButton::colorChanged, this, [this]( QColor ) { drawNorthArrow(); } );
drawNorthArrow(); drawNorthArrow();
} }

View File

@ -64,7 +64,7 @@ QgsDecorationScaleBarDialog::QgsDecorationScaleBarDialog( QgsDecorationScaleBar
cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft ); cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft );
cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter ); cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter );
cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight ); cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight );
connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( int ) { connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
spnHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 ); spnHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 );
} ); } );
cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) ); cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) );

View File

@ -74,7 +74,7 @@ QgsDecorationTitleDialog::QgsDecorationTitleDialog( QgsDecorationTitle &deco, QW
cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft ); cboPlacement->addItem( tr( "Bottom Left" ), QgsDecorationItem::BottomLeft );
cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter ); cboPlacement->addItem( tr( "Bottom Center" ), QgsDecorationItem::BottomCenter );
cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight ); cboPlacement->addItem( tr( "Bottom Right" ), QgsDecorationItem::BottomRight );
connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [=]( int ) { connect( cboPlacement, qOverload<int>( &QComboBox::currentIndexChanged ), this, [this]( int ) {
spnHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 ); spnHorizontal->setMinimum( cboPlacement->currentData() == QgsDecorationItem::TopCenter || cboPlacement->currentData() == QgsDecorationItem::BottomCenter ? -100 : 0 );
} ); } );
cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) ); cboPlacement->setCurrentIndex( cboPlacement->findData( mDeco.placement() ) );

View File

@ -152,19 +152,19 @@ QList<QAction *> QgsNetworkLoggerRequestGroup::actions( QObject *parent )
{ {
QList<QAction *> res; QList<QAction *> res;
QAction *openUrlAction = new QAction( QObject::tr( "Open URL" ), parent ); QAction *openUrlAction = new QAction( QObject::tr( "Open URL" ), parent );
QObject::connect( openUrlAction, &QAction::triggered, openUrlAction, [=] { QObject::connect( openUrlAction, &QAction::triggered, openUrlAction, [this] {
QDesktopServices::openUrl( mUrl ); QDesktopServices::openUrl( mUrl );
} ); } );
res << openUrlAction; res << openUrlAction;
QAction *copyUrlAction = new QAction( QObject::tr( "Copy URL" ), parent ); QAction *copyUrlAction = new QAction( QObject::tr( "Copy URL" ), parent );
QObject::connect( copyUrlAction, &QAction::triggered, openUrlAction, [=] { QObject::connect( copyUrlAction, &QAction::triggered, openUrlAction, [this] {
QApplication::clipboard()->setText( mUrl.url() ); QApplication::clipboard()->setText( mUrl.url() );
} ); } );
res << copyUrlAction; res << copyUrlAction;
QAction *copyAsCurlAction = new QAction( QObject::tr( "Copy As cURL" ), parent ); QAction *copyAsCurlAction = new QAction( QObject::tr( "Copy As cURL" ), parent );
QObject::connect( copyAsCurlAction, &QAction::triggered, copyAsCurlAction, [=] { QObject::connect( copyAsCurlAction, &QAction::triggered, copyAsCurlAction, [this] {
QString curlHeaders; QString curlHeaders;
for ( const QPair<QString, QString> &header : std::as_const( mHeaders ) ) for ( const QPair<QString, QString> &header : std::as_const( mHeaders ) )
curlHeaders += QStringLiteral( "-H '%1: %2' " ).arg( header.first, header.second ); curlHeaders += QStringLiteral( "-H '%1: %2' " ).arg( header.first, header.second );
@ -211,7 +211,7 @@ QList<QAction *> QgsNetworkLoggerRequestGroup::actions( QObject *parent )
res << copyAsCurlAction; res << copyAsCurlAction;
QAction *copyJsonAction = new QAction( QObject::tr( "Copy as JSON" ), parent ); QAction *copyJsonAction = new QAction( QObject::tr( "Copy as JSON" ), parent );
QObject::connect( copyJsonAction, &QAction::triggered, openUrlAction, [=] { QObject::connect( copyJsonAction, &QAction::triggered, openUrlAction, [this] {
const QVariant value = toVariant(); const QVariant value = toVariant();
const QString json = QString::fromStdString( QgsJsonUtils::jsonFromVariant( value ).dump( 2 ) ); const QString json = QString::fromStdString( QgsJsonUtils::jsonFromVariant( value ).dump( 2 ) );
QApplication::clipboard()->setText( json ); QApplication::clipboard()->setText( json );

Some files were not shown because too many files have changed in this diff Show More