1573 Commits

Author SHA1 Message Date
Nyall Dawson
2bb1c8a31b Start on implementing contexts for render operations 2015-08-22 19:01:39 +10:00
Nyall Dawson
a0e35a3893 Switch some composer expressions to contexts 2015-08-22 19:01:39 +10:00
Nyall Dawson
c1adf623af Port field calculator to contexts 2015-08-22 19:01:39 +10:00
Nyall Dawson
d6542276e7 Add a bunch of layer related variables, including things like
metadata, extent, crs, feature count, geometry types, etc...
2015-08-22 19:01:39 +10:00
Nyall Dawson
f6e0ce788e New framework for context based expressions
This commit adds the ability for expressions to be evaluated against
specific contexts. It replaces the previous behaviour where
expressions were evaluated against a specific feature and could
utilise fragile global "special columns".

Now, expressions are instead evaluated using a context designed for
each individual expression. This is done via QgsExpressionContext
and QgsExpressionContextScope objects.

A QgsExpressionContextScope encapsulates the variables and functions
relating to a specific context. For instance, scopes can be created
for "global" variables (such as QGIS version, platform, and user-set
variables specified within the QGIS options dialog. Think things
like user name, work department, etc), or for "project" variables
(eg project path, title, filename, and user-set variables set
through the project properties dialog. Project version, reference
number, that kind of thing). Many more scopes are planned, including
map layer scopes (variables for layer name, id, user-set variables
through the layer properties dialog), composer scopes, etc...

QgsExpressionContextScopes are 'stacked' into a QgsExpressionContext
object. Scopes added later to a QgsExpressionContext will override
any variables or functions provided by earlier scopes, so for
instance a user could override their global 'author' variable set
within QGIS options with a different 'author' set via the project
properties dialog.

The intended use is that a QgsExpressionContext is created before
a batch set of QgsExpression evaluations. Scopes are then added to
the context based on what makes sense for that particular
expression. Eg, almost all contexts will consist of the global
scope and project scope, and then additional scopes as required.
So a composer label would be evaluated against a context
consisting of the global scope, project scope, composition scope
and finally composer item scope. The batch set of expression
evaluations would then be performed using this context, after which
the context is discarded. In other words, a context is designed
for use for one specific set of expression evaluations only.
2015-08-22 19:01:39 +10:00
Nyall Dawson
f5de32779f Add missing sip changes 2015-08-22 19:01:39 +10:00
Nyall Dawson
57669e71c0 Make QgsRenderContext available to more renderer methods 2015-08-22 19:01:38 +10:00
Nyall Dawson
6a3357fab8 Fix warnings, add missing sip bindings 2015-08-21 05:45:49 +10:00
Nathan Woodrow
faa32f36cf [FEATURE] Conditional formatting for attribute table cells 2015-08-20 23:06:31 +10:00
Nyall Dawson
b87e5f7573 [FEATURE][composer] Data defined style preset for composer maps
Sponsored by City of Uster
2015-08-19 20:43:19 +10:00
Nyall Dawson
0e567cd83b Fix doxygen warning 2015-08-19 20:00:37 +10:00
Nyall Dawson
73522dce7e Refactor visibility presets, so that all non-app specific
methods are now in core

A new QgsVisibilityPresetCollection object has been created
which stores a set of visibility presets. QgsProject now
contains a preset collection object.

This allows plugins and other core objects to retrieve and
modify visibility presets.
2015-08-19 19:07:23 +10:00
Nyall Dawson
612df6ae14 [FEATURE][composer] Auto wrapping for text in fixed width columns
in attribute tables

Sponsored by City of Uster
2015-08-19 06:08:22 +10:00
Nyall Dawson
b78564899a [FEATURE][composer] Option for 'wrap text on' for attribute tables
Fix #8006

Sponsored by City of Uster
2015-08-19 05:16:12 +10:00
Nyall Dawson
759f842bc3 [FEATURE][composer] Vertical alignment control for attribute tables
Sponsored by City of Uster
2015-08-19 05:16:12 +10:00
Nyall Dawson
372534eb89 [composer] Add proper handling of multiline text in attribute tables
Previously multi-line text would overflow onto neighbouring cells.
Now rows will be expanded to fit required height of text.
Fix #10273.

Sponsored by City of Uster
2015-08-19 05:16:12 +10:00
Nyall Dawson
29cc0642a4 [composer] Add method for calculating height of text
Sponsored by City of Uster
2015-08-19 05:16:12 +10:00
Marco Hugentobler
c39ffe9fc2 [FEATURE]: Tool to add circular strings with start point, curve point and end point 2015-08-17 17:14:05 +02:00
Nyall Dawson
7527638d43 [FEATURE][composer] Data defined control over map layers
Adds new data defined control for the map layers to show in a
composer map. Expression result should be a | delimited list of
layer names which will be shown in the map.

Sponsored by City of Uster
2015-08-17 23:46:13 +10:00
Juergen E. Fischer
624f16cc2c indentation update 2015-08-16 11:56:27 +02:00
Nyall Dawson
42d5b9b2aa Python exceptions for invalid keys in QgsFields methods (fix #13221) 2015-08-16 16:08:04 +10:00
Denis Rouzaud
480a0f17c3 Don't send expressions with special fields to provider 2015-08-14 11:39:27 +02:00
Juergen E. Fischer
ac89dc0e73 * update QgsSymbolV2 sip bindings
* fix a crash when setRotationField (now deprecated) is used on a fresh
  QgsCategorizedSymbolRendererV2
2015-08-13 17:48:56 +02:00
Nyall Dawson
19a833c23d Clean atlas interface - avoid storage of pointer to atlas feature 2015-08-13 08:35:43 +10:00
Matthias Kuhn
8ab69e9386 with edit(layer) raises an error if the commit fails 2015-08-12 14:55:36 +02:00
Matthias Kuhn
f64783493e PyQgis: Move NULL and edit to qgis.core 2015-08-12 13:50:06 +02:00
Nyall Dawson
3898d840bd Custom properties for QgsComposition and QgsComposerObject 2015-08-11 20:32:14 +10:00
elpaso
e48b6e8910 Moved QMultiMap<int, TYPE2*> to conversion.sip 2015-08-07 09:26:14 +02:00
Matthias Kuhn
9c3d65ef7b QgsDataDefined: Implicit management for useExpression 2015-08-07 09:06:41 +10:00
Nyall Dawson
728ead8a53 Avoid use of deprecated rotation field methods 2015-08-07 09:06:31 +10:00
Nyall Dawson
013e1da783 Tests and doxygen for QgsDataDefined 2015-08-07 09:05:47 +10:00
Matthias Kuhn
1e6483c6d1 Fix marker rotation
The rotation is no longer saved in the Qgs*SymbolRendererV2 but in the
QgsMarkerSymbolV2 in a QgsDataDefined. This commit fixes the legacy API and
redirects calls to the new API.
2015-08-07 08:47:52 +10:00
Nyall Dawson
df4c1311ad Fix crash when opening attribute table on non-spatial layer 2015-08-05 15:00:40 +10:00
Nyall Dawson
56a48ed0d2 Add missing color ramp methods and conversions to sip 2015-08-05 14:46:46 +10:00
Matthias Kuhn
cf2f6b17fa Alias without pending prefix for QgsVectorLayer methods
* pendingAllAttributesList -> attributeList
 * pendingPkAttributesList -> pkAttributeList
 * pendingFeatureCount -> featureCount

featureCount will now always return the features on the layer and NOT the
committed features count as before.
This changes its behavior but this way it is coherent with the other methods
which work on the layer.
2015-08-04 15:13:31 +02:00
Matthias Kuhn
e832b2a28a Add QgsVectorLayer::fields() as alias to pendingFields()
pendingFields() is not very intuitive and leads to confusion for new developers.
2015-08-04 15:13:31 +02:00
Nyall Dawson
69ac6771e8 [FEATURE][composer] Add page name option for atlas
Page name can be set to either a field or expression derived from
the coverage layer, and is shown in the new atlas page combobox.
2015-08-03 16:46:59 +10:00
Martin Dobias
febadfe21b Fix crashes when rendering with SVG symbols that are missing
The crashes would happen after some time when browsing the map,
especially when size of SVGs is in map units. This was due to wrong
removal of deleted cache entries where cache entry key would be
different from SVG file's path, thus not removing the entry that
got deleted. Now explicitly keeping the lookup key in the entry
to make sure this does not happen.

Related issues: #9959, #8883
2015-07-31 20:35:15 +02:00
Hugo Mercier
95ff0922e4 Handle QgsDataItem class hierarchy in SIP bindings 2015-07-30 15:04:56 +02:00
Matthias Kuhn
e984fb00fd Remove QgsRenderOptions, return filter in separate method 2015-07-29 12:09:44 +02:00
Matthias Kuhn
5be0ee734f Remove QgsFeatureRequest::FilterRect from providers/iterators 2015-07-29 12:09:44 +02:00
Matthias Kuhn
1d7a6a4909 Rule based renderer exposes filter where clause
This filter can then be sent to the server to reduce the amount of fetched
features
2015-07-29 12:08:55 +02:00
Matthias Kuhn
b47b9a54b7 Add return type QgsRenderOptions to QgsRendererV2::startRender
This allows to specify additional filter constraints for the feature request to
be specified.
2015-07-29 12:08:54 +02:00
Juergen E. Fischer
9752c468c1 indentation update 2015-07-29 11:52:14 +02:00
Juergen E. Fischer
b165875fa6 spelling fixes 2015-07-26 14:39:30 +02:00
Matthias Kuhn
d01424ae4b Add QgsRelation::getReferencedFeature to access parent feature 2015-07-24 18:57:24 +02:00
Nyall Dawson
d07dadf333 [FEATURE][composer] Add page number combo box to atlas toolbar
(fix #13136)
2015-07-23 15:02:06 +10:00
Nyall Dawson
b4311877f7 [FEATURE][labeling] Add priority control for obstacles
Allows you to make labels prefer to overlap features from certain
layers rather than others. Can also be data defined, so that certain
features are more likely to be covered than others.
2015-07-23 15:00:53 +10:00
Nyall Dawson
c97733ea27 [FEATURE][labeling] Data defined control over whether a feature
acts as an obstacle for labels
2015-07-23 15:00:45 +10:00
Matthias Kuhn
a37b3e27d5 Remove executable flag on a bunch of files 2015-07-20 15:45:44 +02:00