create expression context scopes
Allows algorithms which require the underlying layer scope
to operate correctly when running in selected features only
mode.
Fixes#17170
in a feature-based algorithm, don't try to continue processing
remaining features
Avoids multiple error dialogs appearing for every feature
in a layer...
Because Python code cannot catch and rethrow c++ exceptions
without losing context, we end up getting unknown exceptions
caught by c++ from python code (phew!).
So if we catch a python exception from processing, throw it
into the log so at least there's the full debugging detail
available on the console.
(Not ideal. Would love to see a PR allowing the full error
message to be passed correctly between c++/python/back again)
values/default value clauses present, then use these as the
initial value for the merged feature
Otherwise the dialog defaulted to skipping these attributes
or taking a value from an existing feature, which meant
that it could violate constraints on the backend.
Users can still easily overwrite these values if desired.
Fixes#18397
This was originally done to allow the table to show mapped values
such as value maps/relations. But it creates the false impression
that these values are editable, since the editor widgets are
not read only.
Instead, use the field formatter to create a value representation
string and make the body of the table read-only instead.
Allows algorithms to pre-processes a set of parameters, allowing the
algorithm to clean their values.
This method is automatically called after users enter parameters, e.g.
via the algorithm dialog. This method should NOT be called manually
by algorithms.
Also:
- move doxygen comments to header files so that they get included
in Python docstrings
- remove duplicate doxygen implemented in both header and footer
- remove some redundant doxygen for overridden methods
- add some missing docs
ModelerParametersDialog and ParametersPanel have to keep list of
wrappers only. widget and label( if needed) are created through
WidgetWrapper.createLabel()