4446 Commits

Author SHA1 Message Date
Nyall Dawson
6284f5e36f Correct project and parent handling for report sections 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
acb44643e3 Add missing factory annotation 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
811145eb96 Remove const from count method 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
8de8bb387f Try (and fail) to avoid a qApp->processEvents() call
I just can't find any other reliable way to wait until javascript
execution in a web page has completed.
2018-01-05 11:15:03 +10:00
Nyall Dawson
88a839061d Restore more unit 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
7d8953f1da Restore atlas multiple pdf exports 2018-01-05 11:15:03 +10:00
Nyall Dawson
427da5c081 Restore atlas single file pdf export 2018-01-05 11:15:03 +10:00
Nyall Dawson
9751c77063 Restore svg atlas export 2018-01-05 11:15:03 +10:00
Nyall Dawson
d81bf5d95a Add api to export layout atlas as images 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
e312d02c2b Tighten 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
3994c4a476 Restore legend atlas behavior 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
e72e20b8e0 Restore attribute table atlas handling 2018-01-05 11:15:03 +10:00
Nyall Dawson
5d1d25b36b Add atlas expression context scope to layouts 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
520c2aab19 More work on atlas GUI 2018-01-05 11:15:03 +10:00
Nyall Dawson
e169c219b3 Work on modernizing atlas 2018-01-05 11:15:03 +10:00
Nyall Dawson
f86c2988bb Serialize atlas settings 2018-01-05 11:15:03 +10:00
Nyall Dawson
e6a6db89a1 Add QgsLayout subclass, QgsPrintLayout
A print layout is a layout with an atlas
2018-01-05 11:15:03 +10:00
Nyall Dawson
bd7784cd00 Start working on restoring atlas 2018-01-05 11:15:03 +10:00
Nyall Dawson
164c439af9 Add missing docs 2018-01-05 10:03:52 +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
Juergen E. Fischer
e271b647d4 translation string updates (incl. better translatable date time widget
help)
2018-01-04 22:49:30 +01: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
c94d26a5d5 Doxygen++ 2018-01-04 12:27:38 +11:00
Denis Rouzaud
69cfdc4fcf rename static variables
since they're not really default values
2018-01-03 12:21:17 -04:00
Denis Rouzaud
919cbec7b2 add a bool in config to determine if it uses Qt::ISODate for field format
also fixes the fact that the display format of QDateTimeEdit only accepts string formats, so in case of Qt::ISODate use a default date/time with zmne zone
2018-01-03 11:28:05 -04:00
Denis Rouzaud
1710dc0587 fix date/time widget for field with time zones
this adds a new format of date/time to use Qt::ISODate format
the issue is that QDate::fromString does not recognize the t letter for the timezone in format
this a hack since any field_format needs to be tested if it corresponds to QgsDateTimeFieldFormatter::DEFAULT_ISO_FORMAT and in such case replace by Qt::ISODate instead of a format string
2018-01-03 10:01:53 -04:00
luzpaz
626781a63a Typo fixes
+ added word to spelling.dat
2017-12-31 09:14:09 +11:00
Nyall Dawson
2872f69e20 Reluctantly participate in the Americanization of the world 2017-12-23 18:48:03 +11:00
Nyall Dawson
c7e37e89eb [sipify] Correctly convert doxygen warning blocks to sphinx warnings 2017-12-23 18:48:03 +11:00
Nyall Dawson
87b8a370e9 Expand QgsCoordinateTransform docs 2017-12-23 18:48:03 +11:00
Nyall Dawson
6ac6939bf8 Sipify 2017-12-23 14:21:32 +10:00
Nyall Dawson
4ff72de62e
Merge pull request #5858 from lbartoletti/segment_intersection
Segment intersection
2017-12-22 21:43:13 +11:00