5139 Commits

Author SHA1 Message Date
Nyall Dawson
aef0432fdc Implement sort order customisation for field groups 2018-01-05 11:15:04 +10:00
Nyall Dawson
2654454c0b Implement serialization of reports 2018-01-05 11:15:04 +10:00
Nyall Dawson
6f2c63f3e5 Add a common base class for print layouts and reports, and adapt
QgsLayoutManager to suit
2018-01-05 11:15:04 +10:00
Nyall Dawson
159986fdec Implement QgsReportSectionFieldGroup 2018-01-05 11:15:04 +10:00
Nyall Dawson
6284f5e36f Correct project and parent handling for report sections 2018-01-05 11:15:04 +10:00
Nyall Dawson
57628faa01 Add a unit test for exporting reports 2018-01-05 11:15:04 +10:00
Nyall Dawson
767075a3d4 Hookup filename generation for reports 2018-01-05 11:15:04 +10:00
Nyall Dawson
935dfa32d8 Add reprt iteration test 2018-01-05 11:15:04 +10:00
Nyall Dawson
cdf5cf21e1 Add report section subclass with single layout as body 2018-01-05 11:15:04 +10:00
Nyall Dawson
1ea5a5fb98 [FEATURE] Reporting framework
Reports are based on the new layouts engine. They consist of multiple
nested sections. Each individual section (and the report itself)
can have an optional header and footer (which are themselves layouts,
and can consist of multiple pages!).

Two different types of sections are implemented so far:
- a standard section, which has a single, static body layout. This
can be used to embed static layouts mid way through a report
- a "field group" section, which repeats its body layout for
every feature in a layer. The features are sorted by the selected
grouping feature (with an option for ascending/descending sort).
If a field group section has child sections (e.g. another field
group section with a different field, then only features
with unique values for the group feature are iterated over.
This allows nested reports, e.g.

Report
- Country: Australia
    - State: NSW
        - Town: Sydney
        - Town: Woolongong
    - State: QLD
        - Town: Beerburrum
        - Town: Brisbane
        - Town: Emerald
- Country: NZ
    - State: ... etc

In this example country, state or town groups can have their
own headers and footers which will be inserted in the report.

Reports are configured through a new panel in the layout designer
dialog, which is shown when editing a report (created through
the Layout Manager Dialog). The organizer allows for adding
(and removing) sections to the report, and for selecting which
layout (e.g. headers, footers, bodies) to edit within the
layout designer.
2018-01-05 11:15:04 +10:00
Nyall Dawson
4d2f0deb1a Add a clone method to QgsLayout 2018-01-05 11:15:04 +10:00
Nyall Dawson
5bc543af6a Refactor layout context
Split render context from reporting context
2018-01-05 11:15:04 +10:00
Nyall Dawson
be7dae7d52 Expand exporter tests 2018-01-05 11:15:04 +10:00
Nyall Dawson
88a839061d Restore more unit tests 2018-01-05 11:15:03 +10:00
Nyall Dawson
ec67ddfc0e Restore more atlas tests 2018-01-05 11:15:03 +10:00
Nyall Dawson
3d03128e4a Restore some more atlas related tests 2018-01-05 11:15:03 +10:00
Nyall Dawson
1b932319a2 Fix some layout expression context handling, restore some tests 2018-01-05 11:15:03 +10:00
Nyall Dawson
b6f1425828 Flesh out QgsAbstractLayoutIterator interface 2018-01-05 11:15:03 +10:00
Nyall Dawson
69ddc32d0f Restore atlas map handling 2018-01-05 11:15:03 +10:00
Nyall Dawson
3ffdda3e30 Port predefined scale handling to layouts 2018-01-05 11:15:03 +10:00
Nyall Dawson
7c086beb92 Fix some map item todos 2018-01-05 11:15:03 +10:00
Nyall Dawson
49eaebbf40 Remove outdated icon support for item metadata
Now handled in QgsLayoutItem directly
2018-01-05 11:15:03 +10:00
Nyall Dawson
2ef3a5f199 Port current geometry from atlas to layouts 2018-01-05 11:15:03 +10:00
Nyall Dawson
92003c8797 Code shuffle, to make QgsLayoutContext aware of parent QgsLayout 2018-01-05 11:15:03 +10:00
Nyall Dawson
4a7813b953 Restore picture atlas handling 2018-01-05 11:15:03 +10:00
Nyall Dawson
60a28e32b7 Add some unit tests 2018-01-05 11:15:03 +10:00
Nyall Dawson
b7596970bc Remove outdated TODO 2018-01-05 11:15:03 +10:00
Nyall Dawson
f86c2988bb Serialize atlas settings 2018-01-05 11:15:03 +10:00
Nyall Dawson
2d43dac0b5 Refine behavior of QgsGeometry equals tests
Before we had two checks - equals() and isGeosEqual() which
performed the exact same check (since equals() called the geos
equality test)

Since the geos equality test is a slow, topological test, which
considers two geometries equal if their component edges overlap,
but disregards ordering of vertices this is not always what we
want. There's also the issue that geos cannot consider m values
when testing the geometries, so two geometries with different
m values would be reported equal.

So, now calling QgsGeometry::equals performs a very fast, strict
equality test where geometries are only equal if the have exactly
the same vertices, type, and order.

And swap most code which was calling the slow geos test to instead
use the fast strict native test.
2018-01-05 09:59:22 +10:00
Nyall Dawson
13aa5211d1 Expand equality operators for QgsAbstractGeometry subclasses 2018-01-05 09:37:27 +10:00
Nyall Dawson
b904731259 Respect transform context in point locator 2018-01-04 15:04:42 +11:00
Nyall Dawson
8f15cdf680 Respect transform contexts when tracing 2018-01-04 15:04:42 +11:00
Nyall Dawson
d69f932c31 Reformat code 2018-01-04 12:27:38 +11:00
Nyall Dawson
71cdb8cf8e Fix QgsVectorLayer::updateFeature cannot add geometry to feature
with no existing geometry

Fixes #17678
2018-01-04 12:27:38 +11:00
Nyall Dawson
5ecb5603df Fix QgsVectorLayer::updateFeature returns true when errors occur
Refs #17678
2018-01-04 12:27:38 +11:00
Matthias Kuhn
6ed078c889
Merge pull request #5946 from DelazJ/nullMinMax
[needs-docs] Update min and max functions
2018-01-03 09:13:46 +01:00
Martin Dobias
6508543f5f [3d] Fix tessellator crash with nearly collinear points (fixes #17745) 2018-01-01 22:28:40 +01:00
Matthias Kuhn
a650a03f19
Merge pull request #5853 from m-kuhn/valueRelationReadonly
Value relation widget: respect readonly state
2017-12-28 08:10:44 +01:00
Matthias Kuhn
375daf1879 PEP8 2017-12-28 07:54:07 +01:00
Harrissou Sant-anna
99abc8dfb5 Revert QVERIFY change 2017-12-28 12:12:55 +11:00
Matthias Kuhn
90acb5690e Make ValueRelation test more stable 2017-12-28 00:02:16 +01:00
Matthias Kuhn
46a74a090a Add test for enabled state of relation value widget 2017-12-27 22:04:40 +01:00
Matthias Kuhn
0c292a0207 Add some more min/max tests 2017-12-27 21:46:11 +01:00
Matthias Kuhn
2e1b9ae0e4 Improve test output 2017-12-27 21:43:20 +01:00
Harrissou Sant-anna
c063710352 Add more tests 2017-12-27 21:43:20 +01:00
Harrissou Sant-anna
49a3af0034 Adding tests to min and max functions 2017-12-27 21:43:20 +01:00
Matthias Kuhn
d01f94f7ef Avoid crash with represent_value exp function
represent_value would crash when it was called via evaluate without any context specified.
2017-12-27 20:40:41 +01:00
Matthias Kuhn
a4141c7f03 Expression tests: change Q_ASSERT to QVERIFY 2017-12-27 19:53:10 +01:00
Matthias Kuhn
e552b9b2de Replace Q_ASSERT with QVERIFY in tests
Q_ASSERT's are only evaluated in debug mode. However, tests should trigger in debug or release mode.
2017-12-27 18:28:49 +01:00
Nyall Dawson
4ff72de62e
Merge pull request #5858 from lbartoletti/segment_intersection
Segment intersection
2017-12-22 21:43:13 +11:00