Not 100% sure about what to hide for Mesh layers. For now hiding the
so called 'Geometry' feature
Co-authored-by: Nyall Dawson <nyall.dawson@gmail.com>
and logic for activating a custom map tool and ensuring it can
only be enabled in the right circumstances to QGIS app
If a plugin has to do this, it's a nightmare of code and hacks (partly
because of the number of changing circumstances it needs to respond
to, and partly because a lot of the useful functions available
for handling this behavior is locked away in private methods
in qgisapp.cpp)
So instead make an abstract base class for map tool handlers and
an iface method for register/unregistering them.
From the dox:
An abstract base class for map tool handlers which automatically handle all the necessary
logic for toggling the map tool and enabling/disabling the associated action
when the QGIS application is in a state permissible for the tool.
Creating these handlers avoids a lot of complex setup code and manual connections
which are otherwise necessary to ensure that a map tool is correctly activated and
deactivated when the state of the QGIS application changes (e.g. when the active
layer is changed, when edit modes are toggled, when other map tools are switched
to, etc).
- ### Example
\code{.py}
class MyMapTool(QgsMapTool):
...
class MyMapToolHandler(QgsAbstractMapToolHandler):
def __init__(self, tool, action):
super().__init__(tool, action)
def isCompatibleWithLayer(self, layer, context):
# this tool can only be activated when an editable vector layer is selected
return isinstance(layer, QgsVectorLayer) and layer.isEditable()
my_tool = MyMapTool()
my_action = QAction('My Map Tool')
my_handler = MyMapToolHandler(my_tool, my_action)
iface.registerMapToolHandler(my_handler)
\endcode
The landing page implements a system to map URLs to project using hashes.
For the legacy services (WMS, WFS etc.) this information has to be passed
in the environment `QGIS_PROJECT_FILE` and an I/O filter takes care of
setting the environment variable.
The problem is when using the rest of the API after a project containing
bad layers has been browsed because it remains the environment and it
raises immediately an exception too early in the handleRequest server's
processing pipeline.
By restoring the original `QGIS_PROJECT_FILE` at the end of the request,
this PR fixes the issue.
This reverts commit 26e9ec98e76591286576d2dde098578877bef9c0.
It results in unfixable crashes on many platforms, likely due to some
issue in sip itself
Fixes#38393, reopens#38245
The original bug (being asked twice for credentials) is preferable
over a hard crash
When using Keycloak in OpenId Connect mode with AuthCode or ResourceOwner
methods, and no specifying a scope, we send a &scope= query parameter that
is rejected by Keycloak with
KC-SERVICES0093: Invalid parameter value for: scope
https://tools.ietf.org/html/rfc6749#section-3.3 mentions that scope is
optional : 'If the client omits the scope parameter when requesting
authorization...'
Do the same for the optional 'state' and 'api_key' parameters
This commit adds a new signal to the QgsTemporalNavigationObject, which is
emitted when the frameDuration (of current QgsTemporalNavigationObject) is
change.
It also fixes the issue that changing the frame in the Temporal
Navigation-WIDGET was not reflected in the widget itself.
Any actions added by plugins for toggling a map tool should also
be added to this action group so that they behave identically
to the native, in-built map tool actions.
original layout DPI
This fixes the incorrect page size reported by Acrobat reader for
generated GeoPDF files.
Unfortunately it comes with a side-effect of limiting the resolution
at which GDAL will read the GeoPDF files as a raster layer, but of
the two issues the page size issue is more critical.
Fixes#33465
instead of a point light source
These are a better default lighting, because they are simpler to
configure and will lead to more of the scene being immediately lit
by default.
instead of directly top-down directions
This is more friendly behavior, because it allows visibility of
vertical features with a default light (instead of "black" walls
and lit roofs you get shaded walls + roofs)