This commit adds a new mode to the attribute table dialog for searching
and filtering features. When activated (using a button on the toolbar
or by pressng CTRL+F), the dialog will switch to form view and all
widgets are replaced with their search widget wrapper variant.
Alongside each widget is a tool button with options for controlling
the search/filter behaviour for that field, eg "equal to", "not equal
to", "is null", "greater than", etc.., with the options presented
matching themselves to the corresponding field and widget type.
New buttons appear at the bottom of the form for either selecting
matching features (with options for add to selection/remove from
selection/select within current selection) or filtering features
in the table (with options for adding features to a current filter
or further restricting a current filter).
Sponsored by SIGE
This change allows the attributes of multiple features to be edited
simultaneously. It is enabled when the attribute table dialog is in
"form mode", via a new "multi edit" button on the toolbar.
In this mode, attribute value changes will apply to all selected
features. New widgets appear next to each editor widget allowing for
display of the current multi-edit state and for rolling back changes
on a field-by-field basis.
Changes are made as a single edit command, so pressing undo will
rollback the attribute changes for all selected features at once.
Multiedit mode is only available for auto generated and drag and
drop forms - it is not supported by custom ui forms.
Sponsored by Kanton Basel Stadt
Now all classes and members are either exposed to bindings or marked
as "not available in Python bindings" in the docs.
Drop test thresholds to 0. Now it should be much easier to determine
what missing members have been added which are causing test
failures.
* 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
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!
This fixes performance issues with the attribute table visible when deleting a
large number of features.
The attribute table tries to behave smart in the following way:
* It tries to remove only the deleted rows as long as they are in one or a few
single blocks
* If there are more than 100 rows to delete and it starts to delete blocks
of a size smaller than 10 it assumes that the selection to delete is widely
distributed and that a reload of the whole model is less expensive than a
differential update.
Fix#10167
used as a generic api for registering actions which can apply to
a specific map layer or layer type.
Create a QgsMapLayerAction for setting features as the current
atlas feature for compositions.
This work was kindly sponsored by SIGE (www.sige.ch).
* With a selection model, the way the attribute table handles selections
can be customized. E.g. synchronized to layer selection or used to pick
features.
* With request filters, the visible features on an attribute table can be
limited. This will effectively reduce the subset of features the attribute
table works on. Additional filters by means of a proxy model can of course
further reduce the visible subset subsequently.
- update methods of existing classes
- add comment to methods missing in the sip bindings
- split up collective sip files into single files and use
same directory structure in python/ as in src/
- add a lot of missing classes (some might not make sense because of
missing python methods in those classes)
- remove some non-existing methods from the header files
- add scripts/sipdiff
- replace some usages of std::vector and std::set with QVector/QSet