When a spin box is showing a NULL value, we DON'T do the default step
behavior, as that would add one step to the NULL value, which is usually
a very large negative value... so the user will get a very large negative number!
Instead, treat the initial value as 0 instead, and then perform the step.
Allows suppression of the standard user actions for managing
file based data items. Could be used in future to restrict
other browser actions for sources which the user does not
have permission to modify.
This is a new opt-in flag for map settings/render context/layouts.
If set, then when applying clipping paths for selective masking,
we always use global ("entire map") paths, instead of calculating
local clipping paths per rendered feature. This results in
considerably more complex vector exports in all current Qt versions,
but gives us a way to force this IF/when a future Qt version adds
optimisations which make global masks desirable.
These are the symbol layer classes where there's no special logic
required relating to feature rendering and features are rendered
one-by-one, with no sub symbols.
Optimise the logic used when the new geometry backend for
selective masking is in effect:
Whenever its SAFE, instead of calculating an "entire map" clipping
path and then applying this for every feature being rendered,
we now defer the calculation of the clipping path until we
are rendering individual features. Then, we create a clipping path
which contains ONLY the mask paths which are within the area
being drawn over.
This avoids having the entire map clipping path being used for
EVERY feature being rendered, which results in huge PDF/SVG
exports when masks are in effect, and instead results in
clipping paths which are confined just to a sensible area
around each rendered feature.
In some complex test projects this reduces the PDF export
size by a factor of 0.01!! (and results in PDFs/SVGs which
open much quicker in viewers and editors, and don't grind
their operation to a halt).
And API mechanism to propagate these from layout exports down
to the render context
Gives us a place to specify fine-tuned control over masking
settings for map renders
Add QgsAbstractGeometry::simplifyByDistance, which is a direct
port of GEOS Douglas Peucker algorithm.
This is a trivial algorithm to implement, and we benefit from
avoiding the conversion to/from GEOS geometries.
Adds a new "QgsDataItemGuiProviderUtils" class, with a generic
function for handling deletion of browser connection items.
Replace all the duplicate connection deletion logic from the
different browser connection providers with calls to the
generic function.
In addition to removing a lot of duplicate code, the new
generic function correctly handles deletion of multiple
selected connections (previously, only the first connection
would actually be removed).
Fixes#26276
This isn't exposed in the GUI, but allows users to
set a specific editor command to use when opening
Python files in the external editor.
Use the token <file> to insert the filename, <line>
to insert line number, and <col> to insert the column number.
Eg:
QgsSettings().setValue(
'gui/code-editor/python/external-editor',
'kate -l <line> -c <col> "<file>"')
Avoid calling expensive sipConvertFromNewType method when feature
attribute is a trivial type
Also avoid a copy of the feature attributes which we don't require
This allows the editor to be opened in a proper detached process,
avoiding the editor being closed when QGIS is exited.
Move to a blocklist for terminal text editors instead of the fragile
polling approach (which eg doesn't work if the editor is set to
pycharm)
Filters must be configurable for each individual expansion level,
as we can't achieve the same results by a single top-level filter.
For instance, this prevents filtering children from the expansion
to return just the most recent observation.