306 Commits

Author SHA1 Message Date
Matthias Kuhn
c8c623ecee Add methods to vectorlayercache and tests 2016-07-19 10:47:14 +02:00
Matthias Kuhn
d91a45ceaf Add shorthands to get features by fid, fids and expression
Adds new methods overloads to QgsVectorLayer

  getFeatures( expression )
  getFeatures( ids )
  getFeature( id )

These three methods to query features are by far the most used ones
and with this patch it is much easier to write and read code.
2016-07-19 10:37:09 +02:00
Nyall Dawson
21eab8c2ea Add missing docs 2016-07-15 08:08:24 +10:00
Nyall Dawson
2d50895d04 Const correctness for QgsVectorLayer methods 2016-07-15 06:07:52 +10:00
Nyall Dawson
0d84ca74c5 Make QgsMapLayer::metadata() const 2016-07-15 06:07:08 +10:00
Nyall Dawson
0935b58fef Cleanup QgsMapLayer for 3.0
- implement QGIS 3.0 TODOs
- mark methods as const correct
- rename 'the...' parameters to remove 'the'
- mark QgsVectorLayer::getFeatures as const
2016-07-15 06:07:00 +10:00
Matthias Kuhn
c277e6e55e Fix tests, partially reverts ff1f9cf 2016-07-02 18:55:22 +02:00
Matthias Kuhn
ff1f9cf595 Doxymentation for QgsVectorLayer signals 2016-07-02 18:09:19 +02:00
Nyall Dawson
0a5ad73581 Invalid join cache when layer is modified (fix #11140) 2016-06-13 22:08:55 +10:00
Nyall Dawson
0e03115d33 Add support for field renaming in QgsVectorLayer and edit buffer 2016-06-02 17:09:46 +10:00
Nyall Dawson
23a3a7717e Cleaner API for selecting features in QgsVectorLayer
- add selectByRect( QgsRectangle&, SelectBehaviour) and
selectByIds( QgsFeatureIds, SelectBehaviour) for selecting
by rect and ids respectively, with options to add to selection/
remove from selection/intersect with current selection
- deprecate select( QgsRectangle ) and setSelectedFeatures in
favour of new methods
- add unit tests
2016-05-19 12:30:32 +10:00
Nyall Dawson
b951d5a54d [FEATURE] new method QgsVectorLayer::selectByExpression(...)
Makes it simple for scripts to select by expression. The method
also accepts a parameter which dictates whether matching features
are added to an existing selection, removed from the selection
or intersected with the current selection.

The existing code from the select by expression dialog has been
moved to QgsVectorLayer, and optimised for maximum possible speed.

Also added unit tests.
2016-05-19 09:11:00 +10:00
Nyall Dawson
307aabd66a [FEATURE] Aggregates for expressions
This commit adds a number of different forms of aggregates to
the expression engine.

1. Aggregates within the current layer, eg sum("passengers")
Supports sub expressions (ie sum("passengers"/2) ), group by
( sum("passengers", group_by:="line_segment") ), and optional
filters ( sum("passengers", filter:= "station_class" > 3 ) )

2. Relational aggregates, which calculate an aggregate over
all matching child features from a relation, eg
relation_aggregate( 'my_relation', 'mean', "some_child_field" )

3. A summary aggregate function, for calculating aggregates
on other layers. Eg aggregate('rail_station_layer','sum',"passengers")
The summary aggregate function supports an optional filter,
making it possible to calculate things like:

aggregate('rail_stations','sum',"passengers",
  intersects(@atlas_geometry, $geometry ) )

for calculating the total number of passengers for the stations
inside the current atlas feature

In all cases the calculations are cached inside the expression
context, so they only need to be calculated once for each
set of expression evaluations.

Sponsored by Kanton of Zug, Switzerland
2016-05-17 10:53:25 +10:00
Nyall Dawson
dcc047af49 Add possibility to handle aggregate calculation at data provider
(not implemented for any providers yet)
2016-05-17 10:53:24 +10:00
Nathan Woodrow
ca914f118e [FEATURE] Add style/history tab to style dock 2016-05-10 10:32:30 +10:00
Matthias Kuhn
dd88fa99f3 [feature] New configuration options for attribute table
* Allow reordering the attribute table columns
 * Allow adding a new column to trigger an action to the attribute table
2016-05-02 18:25:57 +02:00
Matthias Kuhn
2faaf1cd9c Rename QgsAttributeAction to QgsActionManager
The original name was not representative for the scope of the class
and misleading at best.
The class manages actions for a given layer and it's not a single action
like the former name suggested.
There is a typedef introduced to keep it in the API until we can remove
it with QGIS 3.
2016-05-02 18:25:57 +02:00
Denis Rouzaud
40f214b415 Revert "add todo QGIS 3: add /In,Out/ to QgsVectorLayer.addFeature (python)"
this works already, features are updated.

This reverts commit bf3f8b5920bc43cf528c9569a3d6b1000f0eef9f.
2016-04-07 14:25:42 +02:00
Denis Rouzaud
bf3f8b5920 add todo QGIS 3: add /In,Out/ to QgsVectorLayer.addFeature (python)
https://github.com/qgis/qgis3.0_api/issues/45
2016-04-07 13:29:43 +02:00
Matthias Kuhn
e3de0c119a Move drag and drop designer python API to QgsEdtiFormConfig 2016-04-01 13:35:33 +02:00
Nyall Dawson
5e08626051 Add QgsMapLayer::isSpatial() method
The current approach of testing !vl || vl->geometryType() != NoGeometry
is not intuitive and has been the source of 2 recent bugs.

Replacing these tests with the new isSpatial() function makes it
immediately obvious what is being tested. It also allows for
non-spatial plugin layers to be correctly handled by overriding
this method.
2016-03-16 12:38:16 +11:00
Matthias Kuhn
4c63c85cca Show provider errors more prominently 2016-02-20 17:21:57 +01:00
Juergen E. Fischer
a90be95f7b sip sync 2016-02-14 03:50:49 +01:00
Nyall Dawson
c3a57434d9 Fix clazy 'pass small and trivially-copyable type by value' warnings 2016-02-02 19:47:21 +11:00
Denis Rouzaud
e453c1588d remove join returns true in case of success 2016-02-01 03:38:16 -05:00
Nyall Dawson
4aafed8366 Indentation 2016-01-28 20:51:22 +11:00
Nyall Dawson
4ec0912001 Fix inconsistent behaviour when deleting nodes with node tool
(fix #14168)
2016-01-27 20:12:20 +11:00
Alexander Bruy
fe2503dab3 fix SIP bindings for listStylesInDatabase() method (fix #11210) 2016-01-20 14:36:20 +02:00
Matthias Kuhn
9b51007071 Add transaction groups 2016-01-15 12:18:44 +01:00
Hugo Mercier
020dac0702 Allow to declare layer dependencies on a vector layer 2016-01-07 12:02:30 +01:00
Nyall Dawson
566dd4bd43 Always pass QgsFeatureId by value, not reference
Since it's just a int64, it's faster to pass by value
2015-12-30 22:51:32 +11:00
Nyall Dawson
9cc9d424ce Add extra check for deprecations to documentation test
This check tests that if a function has been declared deprecated
with either Q_DECL_DEPRECATED or has a @deprecated Doxygen note
then it MUST have both the Q_DECL_DEPRECATD and @deprecated note.

It's important that both are used, as Q_DECL_DEPRECATED allows
throwing a warning if that method is used in code, while the
@deprecated doxygen note gives an indication to devs/PyQGIS users
of why it's deprecated and what should be used instead.

Ideally we'd also test for SIP /Deprecated/ tags, but I can't
find any reliable way to do this.
2015-12-07 21:55:36 +11:00
Matthias Kuhn
68a01c9ab1 Add QgsVectorLayer::deleteFeatures() method 2015-11-30 21:33:35 +01:00
Matthias Kuhn
6992f2450e Add QGIS3 API change comment 2015-11-30 13:52:11 +01:00
Juergen E. Fischer
79640ef805 restore QgsVectorLayer::setReadOnly (followup 4cd1e38) 2015-11-20 15:45:02 +01:00
Matthias Kuhn
5b5960970e Some sip changes and doxymentation 2015-11-19 15:32:28 +01:00
Matthias Kuhn
4cd1e38631 fieldEditable -> readOnly 2015-11-19 15:32:28 +01:00
Matthias Kuhn
a50f2d051f Refactor edit form configuration out of QgsVectorLayer 2015-11-19 15:32:28 +01:00
Matthias Kuhn
56ccb2b858 sipClass_Klass is deprecated for a long time: replace with sipType_Klass 2015-11-11 23:22:51 +01:00
Juergen E. Fischer
b5794b2f2d sip coverage fixes:
* make sip coverage test aware that there are less classes where QSci sip
  headers are not available
* exclude properties from members
* fix QgsFeatureIds typedef (fixes missing signal
  QgsVectorLayer.featuresDeleted and others)
* add missing notes for PyNames
* include some missing new methods in bindings
2015-11-08 19:30:39 +00:00
elpaso
954b39d389 [FEATURE] store python init code into the project
Adds an option and code editor to store python form
init code into the project (and the DB, since it's in
the style section)
2015-11-04 18:03:27 +01:00
Nyall Dawson
f1633a1796 Change all signals to use const refs for non trivial objects 2015-10-26 22:46:25 +11:00
Nyall Dawson
45a6f715b3 Fix fill ring tool creates more features than needed (fix #13354) 2015-10-08 22:40:58 +11:00
Nyall Dawson
c49b5b777f Change a lot of arguments to const references in core/gui
Rationale:
- there was a lot of large objects passed by value, so potentially
there's a speed bump from this
- even for implicitly shared classes like QString/QList there's still
a (small) cost for copying the objects when there's no reason to
- it's the right thing to do!
2015-10-07 12:02:04 +11:00
Nyall Dawson
0caf944747 Misc optimisations identified by clazy:
- call reserve on container classes where applicable
- make sure Q_FOREACH uses references
- remove dynamic casts to base classes
- fix some implicit bool conversions
2015-10-05 18:43:18 +11:00
Nyall Dawson
e04f4018d1 Fix warnings 2015-08-26 06:52:02 +10:00
Nathan Woodrow
2f60a5f85c [Conditional Styles] Better defaults
Add QgsConditionalLayerStyles to hold row and field styles
2015-08-25 21:08:55 +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
df4c1311ad Fix crash when opening attribute table on non-spatial layer 2015-08-05 15:00:40 +10:00