refresh of ALL browser content
Instead limit refresh to the provider associated with the item only
(and provide a means for items to refresh a different provider, e.g.
to allow the geopackage connection item to be refreshed when a
new connection is added through a directory item)
Fixes#37007
This is intended for use with non-qgs/qgz project files
(see QgsCustomProjectOpenHandler) in order to allow custom project open handlers
to specify the original file name of the project. For custom project formats,
it is NOT appropriate to call setFileName() with the original project path, as
this causes the original (non QGIS) project file to be overwritten when the
project is next saved.
This is a temporary solution for OGR because we expect
to use the native GDAL implementation in GDAL 3.2.
For now a new method QgsSqliteUtils::uniqueFields
used by spatialite and OGR/GPKG is used to detect
UNIQUE constraints on single fields.
This avoids the force conversion to a raster based pattern which currently occurs
when exporting maps/layouts to a vector format (e.g. PDF). The raster pattern
results in considerable quality loss, and the tiling edges of the raster brush
can sometimes be seen in outputs.
Additionally, fixes render corrupt when marker subsymbols have data defined properties
which affect the marker shape, such as data defined rotation or sizes
Refs #16100 (still needs fixing for line fill symbols)
- code simplification (moving displayName() to the core class
prevents us having to create lists of DecorationItem alongside
lists of MapDecoration
- Proper translation support for decoration names
and preparation stage from the symbol layer rendering stage, and
ensure that QgsSymbolLayer::startFeatureRender and ::stopFeatureRender
is correctly called in the right sequence when rendering multi-layer
symbols
This fixes issues with symbol layers which rely on startFeatureRender
and stopFeatureRender to correctly render, e.g. the Random Marker Fill
symbol layer.
Before this fix, the logic looked like:
- for every symbol layer in the symbol, call startFeatureRender
- for each part in polygon, prepare the part geometry and then render each symbol layer
- for every symbol layer in the symbol, call stopFeatureRender
The issue with this approach is that symbol layers which defer
rendering to the stopFeatureRender stage are always rendered
after ALL other symbol layers in the symbol, regardless of the actual
order of the symbol layers. Ultimately this causes Random Marker Fill
layers to always render on the top of symbols.
The new logic is:
- for each part in polygon, prepare the geometry and store the result
- for each symbol layer in the symbol:
- call startFeatureRender
- render the layer using each of the previously prepared parts
- call stopFeatureRender
This results in correct stacking of the random marker fill in multi
layer symbols, because the stopFeatureRender call is correctly called
before the next layer's startFeatureRender and renderPolygon calls
Also, use QVector instead of QList for rings for improved efficiency