Skip to content

Commit 810b522

Browse files
committedMay 22, 2019
[layouts] Avoid resetting column selection when restoring project
with an atttribute table set to the "atlas feature" source Fixes #20538
1 parent fbd3289 commit 810b522

File tree

3 files changed

+567
-2
lines changed

3 files changed

+567
-2
lines changed
 

‎src/core/layout/qgslayoutitemattributetable.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,15 @@ void QgsLayoutItemAttributeTable::atlasLayerChanged( QgsVectorLayer *layer )
183183
disconnect( mCurrentAtlasLayer, &QgsVectorLayer::layerModified, this, &QgsLayoutTable::refreshAttributes );
184184
}
185185

186+
const bool mustRebuildColumns = static_cast< bool >( mCurrentAtlasLayer ) || mColumns.empty();
186187
mCurrentAtlasLayer = layer;
187188

188-
//rebuild column list to match all columns from layer
189-
resetColumns();
189+
if ( mustRebuildColumns )
190+
{
191+
//rebuild column list to match all columns from layer
192+
resetColumns();
193+
}
194+
190195
refreshAttributes();
191196

192197
//listen for modifications to layer and refresh table when they occur

‎tests/src/core/testqgslayouttable.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
#include "qgsrelationmanager.h"
3232
#include "qgsreadwritecontext.h"
3333
#include "qgsexpressioncontextutils.h"
34+
#include "qgslayoutmanager.h"
35+
#include "qgsprintlayout.h"
36+
#include "qgslayoutatlas.h"
3437

3538
#include <QObject>
3639
#include "qgstest.h"
@@ -60,6 +63,7 @@ class TestQgsLayoutTable : public QObject
6063
void attributeTableExtend();
6164
void attributeTableRepeat();
6265
void attributeTableAtlasSource(); //test attribute table in atlas feature mode
66+
void attributeTableRestoreAtlasSource();
6367
void attributeTableRelationSource(); //test attribute table in relation mode
6468
void contentsContainsRow(); //test the contentsContainsRow function
6569
void removeDuplicates(); //test removing duplicate rows
@@ -610,6 +614,23 @@ void TestQgsLayoutTable::attributeTableAtlasSource()
610614

611615
}
612616

617+
void TestQgsLayoutTable::attributeTableRestoreAtlasSource()
618+
{
619+
const QString projectPath = QStringLiteral( TEST_DATA_DIR ) + "/layout_atlas_table.qgs";
620+
QgsProject p;
621+
p.read( projectPath );
622+
623+
QgsPrintLayout *l = dynamic_cast< QgsPrintLayout *>( p.layoutManager()->layouts().at( 0 ) );
624+
QgsLayoutItemAttributeTable *table = qobject_cast< QgsLayoutItemAttributeTable * >( l->multiFrames().at( 0 ) );
625+
QCOMPARE( table->source(), QgsLayoutItemAttributeTable::AtlasFeature );
626+
QVERIFY( l->atlas()->coverageLayer() );
627+
QVERIFY( l->atlas()->coverageLayer()->isValid() );
628+
QCOMPARE( table->sourceLayer(), l->atlas()->coverageLayer() );
629+
QCOMPARE( table->columns().count(), 2 );
630+
QCOMPARE( table->columns().at( 0 )->attribute(), QStringLiteral( "Heading" ) );
631+
QCOMPARE( table->columns().at( 1 )->attribute(), QStringLiteral( "Staff" ) );
632+
}
633+
613634

614635
void TestQgsLayoutTable::attributeTableRelationSource()
615636
{

‎tests/testdata/layout_atlas_table.qgs

Lines changed: 539 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,539 @@
1+
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
2+
<qgis version="3.7.0-Master" projectname="">
3+
<homePath path=""/>
4+
<title></title>
5+
<autotransaction active="0"/>
6+
<evaluateDefaultValues active="0"/>
7+
<trust active="0"/>
8+
<projectCrs>
9+
<spatialrefsys>
10+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
11+
<srsid>3452</srsid>
12+
<srid>4326</srid>
13+
<authid>EPSG:4326</authid>
14+
<description>WGS 84</description>
15+
<projectionacronym>longlat</projectionacronym>
16+
<ellipsoidacronym>WGS84</ellipsoidacronym>
17+
<geographicflag>true</geographicflag>
18+
</spatialrefsys>
19+
</projectCrs>
20+
<layer-tree-group>
21+
<customproperties/>
22+
<layer-tree-layer providerKey="ogr" expanded="1" id="points_ce766da2_f70f_4fc6_b852_4550b40ed354" checked="Qt::Checked" name="points" source="./points.shp">
23+
<customproperties/>
24+
</layer-tree-layer>
25+
<custom-order enabled="0">
26+
<item>points_ce766da2_f70f_4fc6_b852_4550b40ed354</item>
27+
</custom-order>
28+
</layer-tree-group>
29+
<snapping-settings mode="2" enabled="0" type="1" unit="1" intersection-snapping="0" tolerance="12">
30+
<individual-layer-settings>
31+
<layer-setting id="points_ce766da2_f70f_4fc6_b852_4550b40ed354" enabled="0" type="1" units="1" tolerance="12"/>
32+
</individual-layer-settings>
33+
</snapping-settings>
34+
<relations/>
35+
<mapcanvas name="theMapCanvas" annotationsVisible="1">
36+
<units>degrees</units>
37+
<extent>
38+
<xmin>-119.77777777777767199</xmin>
39+
<ymin>22.19841269841290199</ymin>
40+
<xmax>-82.44444444444427234</xmax>
41+
<ymax>47.4737750172535371</ymax>
42+
</extent>
43+
<rotation>0</rotation>
44+
<destinationsrs>
45+
<spatialrefsys>
46+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
47+
<srsid>3452</srsid>
48+
<srid>4326</srid>
49+
<authid>EPSG:4326</authid>
50+
<description>WGS 84</description>
51+
<projectionacronym>longlat</projectionacronym>
52+
<ellipsoidacronym>WGS84</ellipsoidacronym>
53+
<geographicflag>true</geographicflag>
54+
</spatialrefsys>
55+
</destinationsrs>
56+
<rendermaptile>0</rendermaptile>
57+
<expressionContextScope/>
58+
</mapcanvas>
59+
<projectModels/>
60+
<legend updateDrawingOrder="true">
61+
<legendlayer open="true" showFeatureCount="0" drawingOrder="-1" checked="Qt::Checked" name="points">
62+
<filegroup open="true" hidden="false">
63+
<legendlayerfile visible="1" isInOverview="0" layerid="points_ce766da2_f70f_4fc6_b852_4550b40ed354"/>
64+
</filegroup>
65+
</legendlayer>
66+
</legend>
67+
<mapViewDocks/>
68+
<mapViewDocks3D/>
69+
<projectlayers>
70+
<maplayer simplifyDrawingHints="0" wkbType="Point" simplifyLocal="1" hasScaleBasedVisibilityFlag="0" type="vector" minScale="1e+08" refreshOnNotifyMessage="" styleCategories="AllStyleCategories" refreshOnNotifyEnabled="0" autoRefreshEnabled="0" simplifyAlgorithm="0" autoRefreshTime="0" simplifyMaxScale="1" simplifyDrawingTol="1" maxScale="1" readOnly="0" labelsEnabled="1" geometry="Point">
71+
<extent>
72+
<xmin>-118.88888888888877204</xmin>
73+
<ymin>22.80020703933767834</ymin>
74+
<xmax>-83.33333333333315807</xmax>
75+
<ymax>46.87198067632875365</ymax>
76+
</extent>
77+
<id>points_ce766da2_f70f_4fc6_b852_4550b40ed354</id>
78+
<datasource>./points.shp</datasource>
79+
<keywordList>
80+
<value></value>
81+
</keywordList>
82+
<layername>points</layername>
83+
<srs>
84+
<spatialrefsys>
85+
<proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
86+
<srsid>3452</srsid>
87+
<srid>4326</srid>
88+
<authid>EPSG:4326</authid>
89+
<description>WGS 84</description>
90+
<projectionacronym>longlat</projectionacronym>
91+
<ellipsoidacronym>WGS84</ellipsoidacronym>
92+
<geographicflag>true</geographicflag>
93+
</spatialrefsys>
94+
</srs>
95+
<resourceMetadata>
96+
<identifier></identifier>
97+
<parentidentifier></parentidentifier>
98+
<language></language>
99+
<type>dataset</type>
100+
<title></title>
101+
<abstract></abstract>
102+
<links/>
103+
<fees></fees>
104+
<encoding></encoding>
105+
<crs>
106+
<spatialrefsys>
107+
<proj4></proj4>
108+
<srsid>0</srsid>
109+
<srid>0</srid>
110+
<authid></authid>
111+
<description></description>
112+
<projectionacronym></projectionacronym>
113+
<ellipsoidacronym></ellipsoidacronym>
114+
<geographicflag>false</geographicflag>
115+
</spatialrefsys>
116+
</crs>
117+
<extent/>
118+
</resourceMetadata>
119+
<provider encoding="UTF-8">ogr</provider>
120+
<vectorjoins/>
121+
<layerDependencies/>
122+
<dataDependencies/>
123+
<legend type="default-vector"/>
124+
<expressionfields/>
125+
<map-layer-style-manager current="default">
126+
<map-layer-style name="default"/>
127+
</map-layer-style-manager>
128+
<auxiliaryLayer/>
129+
<flags>
130+
<Identifiable>1</Identifiable>
131+
<Removable>1</Removable>
132+
<Searchable>1</Searchable>
133+
</flags>
134+
<renderer-v2 forceraster="0" attr="Class" enableorderby="0" symbollevels="0" type="categorizedSymbol">
135+
<categories>
136+
<category label="B52" value="B52" symbol="0" render="true"/>
137+
<category label="Biplane" value="Biplane" symbol="1" render="true"/>
138+
<category label="Jet" value="Jet" symbol="2" render="true"/>
139+
</categories>
140+
<symbols>
141+
<symbol clip_to_extent="1" type="marker" force_rhr="0" name="0" alpha="1">
142+
<layer enabled="1" pass="0" class="SvgMarker" locked="0">
143+
<prop v="0" k="angle"/>
144+
<prop v="0,0,0,255" k="color"/>
145+
<prop v="0" k="fixedAspectRatio"/>
146+
<prop v="1" k="horizontal_anchor_point"/>
147+
<prop v="gpsicons/plane.svg" k="name"/>
148+
<prop v="0,0" k="offset"/>
149+
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
150+
<prop v="MM" k="offset_unit"/>
151+
<prop v="0,0,0,255" k="outline_color"/>
152+
<prop v="0.2" k="outline_width"/>
153+
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
154+
<prop v="MM" k="outline_width_unit"/>
155+
<prop v="diameter" k="scale_method"/>
156+
<prop v="11" k="size"/>
157+
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
158+
<prop v="MM" k="size_unit"/>
159+
<prop v="1" k="vertical_anchor_point"/>
160+
<data_defined_properties>
161+
<Option type="Map">
162+
<Option value="" type="QString" name="name"/>
163+
<Option name="properties"/>
164+
<Option value="collection" type="QString" name="type"/>
165+
</Option>
166+
</data_defined_properties>
167+
</layer>
168+
</symbol>
169+
<symbol clip_to_extent="1" type="marker" force_rhr="0" name="1" alpha="1">
170+
<layer enabled="1" pass="0" class="SvgMarker" locked="0">
171+
<prop v="0" k="angle"/>
172+
<prop v="0,0,0,255" k="color"/>
173+
<prop v="0" k="fixedAspectRatio"/>
174+
<prop v="1" k="horizontal_anchor_point"/>
175+
<prop v="gpsicons/plane_orange.svg" k="name"/>
176+
<prop v="0,0" k="offset"/>
177+
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
178+
<prop v="MM" k="offset_unit"/>
179+
<prop v="0,0,0,255" k="outline_color"/>
180+
<prop v="0.2" k="outline_width"/>
181+
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
182+
<prop v="MM" k="outline_width_unit"/>
183+
<prop v="diameter" k="scale_method"/>
184+
<prop v="18" k="size"/>
185+
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
186+
<prop v="MM" k="size_unit"/>
187+
<prop v="1" k="vertical_anchor_point"/>
188+
<data_defined_properties>
189+
<Option type="Map">
190+
<Option value="" type="QString" name="name"/>
191+
<Option name="properties"/>
192+
<Option value="collection" type="QString" name="type"/>
193+
</Option>
194+
</data_defined_properties>
195+
</layer>
196+
</symbol>
197+
<symbol clip_to_extent="1" type="marker" force_rhr="0" name="2" alpha="1">
198+
<layer enabled="1" pass="0" class="SvgMarker" locked="0">
199+
<prop v="0" k="angle"/>
200+
<prop v="0,0,0,255" k="color"/>
201+
<prop v="0" k="fixedAspectRatio"/>
202+
<prop v="1" k="horizontal_anchor_point"/>
203+
<prop v="gpsicons/plane.svg" k="name"/>
204+
<prop v="0,0" k="offset"/>
205+
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
206+
<prop v="MM" k="offset_unit"/>
207+
<prop v="0,0,0,255" k="outline_color"/>
208+
<prop v="0.2" k="outline_width"/>
209+
<prop v="3x:0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
210+
<prop v="MM" k="outline_width_unit"/>
211+
<prop v="diameter" k="scale_method"/>
212+
<prop v="11" k="size"/>
213+
<prop v="3x:0,0,0,0,0,0" k="size_map_unit_scale"/>
214+
<prop v="MM" k="size_unit"/>
215+
<prop v="1" k="vertical_anchor_point"/>
216+
<data_defined_properties>
217+
<Option type="Map">
218+
<Option value="" type="QString" name="name"/>
219+
<Option name="properties"/>
220+
<Option value="collection" type="QString" name="type"/>
221+
</Option>
222+
</data_defined_properties>
223+
</layer>
224+
</symbol>
225+
</symbols>
226+
<rotation/>
227+
<sizescale/>
228+
</renderer-v2>
229+
<customproperties>
230+
<property key="embeddedWidgets/count" value="0"/>
231+
<property key="variableNames"/>
232+
<property key="variableValues"/>
233+
</customproperties>
234+
<blendMode>0</blendMode>
235+
<featureBlendMode>0</featureBlendMode>
236+
<layerOpacity>1</layerOpacity>
237+
<SingleCategoryDiagramRenderer diagramType="Histogram" attributeLegend="1">
238+
<DiagramCategory scaleBasedVisibility="0" opacity="1" penColor="#000000" width="15" height="15" backgroundColor="#ffffff" minScaleDenominator="1" penAlpha="255" enabled="0" maxScaleDenominator="1e+08" minimumSize="0" sizeScale="3x:0,0,0,0,0,0" diagramOrientation="Up" backgroundAlpha="255" penWidth="0" barWidth="5" lineSizeType="MM" sizeType="MM" labelPlacementMethod="XHeight" lineSizeScale="3x:0,0,0,0,0,0" scaleDependency="Area" rotationOffset="270">
239+
<fontProperties description="Noto Sans,10,-1,5,50,0,0,0,0,0" style=""/>
240+
<attribute color="#000000" label="" field=""/>
241+
</DiagramCategory>
242+
</SingleCategoryDiagramRenderer>
243+
<DiagramLayerSettings linePlacementFlags="10" dist="0" priority="0" placement="0" zIndex="0" obstacle="0" showAll="1">
244+
<properties>
245+
<Option type="Map">
246+
<Option value="" type="QString" name="name"/>
247+
<Option name="properties"/>
248+
<Option value="collection" type="QString" name="type"/>
249+
</Option>
250+
</properties>
251+
</DiagramLayerSettings>
252+
<geometryOptions geometryPrecision="0" removeDuplicateNodes="0">
253+
<activeChecks/>
254+
<checkConfiguration/>
255+
</geometryOptions>
256+
<fieldConfiguration>
257+
<field name="Class">
258+
<editWidget type="">
259+
<config>
260+
<Option/>
261+
</config>
262+
</editWidget>
263+
</field>
264+
<field name="Heading">
265+
<editWidget type="">
266+
<config>
267+
<Option/>
268+
</config>
269+
</editWidget>
270+
</field>
271+
<field name="Importance">
272+
<editWidget type="">
273+
<config>
274+
<Option/>
275+
</config>
276+
</editWidget>
277+
</field>
278+
<field name="Pilots">
279+
<editWidget type="">
280+
<config>
281+
<Option/>
282+
</config>
283+
</editWidget>
284+
</field>
285+
<field name="Cabin Crew">
286+
<editWidget type="">
287+
<config>
288+
<Option/>
289+
</config>
290+
</editWidget>
291+
</field>
292+
<field name="Staff">
293+
<editWidget type="">
294+
<config>
295+
<Option/>
296+
</config>
297+
</editWidget>
298+
</field>
299+
</fieldConfiguration>
300+
<aliases>
301+
<alias index="0" field="Class" name=""/>
302+
<alias index="1" field="Heading" name=""/>
303+
<alias index="2" field="Importance" name=""/>
304+
<alias index="3" field="Pilots" name=""/>
305+
<alias index="4" field="Cabin Crew" name=""/>
306+
<alias index="5" field="Staff" name=""/>
307+
</aliases>
308+
<excludeAttributesWMS/>
309+
<excludeAttributesWFS/>
310+
<defaults>
311+
<default applyOnUpdate="0" field="Class" expression=""/>
312+
<default applyOnUpdate="0" field="Heading" expression=""/>
313+
<default applyOnUpdate="0" field="Importance" expression=""/>
314+
<default applyOnUpdate="0" field="Pilots" expression=""/>
315+
<default applyOnUpdate="0" field="Cabin Crew" expression=""/>
316+
<default applyOnUpdate="0" field="Staff" expression=""/>
317+
</defaults>
318+
<constraints>
319+
<constraint exp_strength="0" field="Class" constraints="0" notnull_strength="0" unique_strength="0"/>
320+
<constraint exp_strength="0" field="Heading" constraints="0" notnull_strength="0" unique_strength="0"/>
321+
<constraint exp_strength="0" field="Importance" constraints="0" notnull_strength="0" unique_strength="0"/>
322+
<constraint exp_strength="0" field="Pilots" constraints="0" notnull_strength="0" unique_strength="0"/>
323+
<constraint exp_strength="0" field="Cabin Crew" constraints="0" notnull_strength="0" unique_strength="0"/>
324+
<constraint exp_strength="0" field="Staff" constraints="0" notnull_strength="0" unique_strength="0"/>
325+
</constraints>
326+
<constraintExpressions>
327+
<constraint exp="" field="Class" desc=""/>
328+
<constraint exp="" field="Heading" desc=""/>
329+
<constraint exp="" field="Importance" desc=""/>
330+
<constraint exp="" field="Pilots" desc=""/>
331+
<constraint exp="" field="Cabin Crew" desc=""/>
332+
<constraint exp="" field="Staff" desc=""/>
333+
</constraintExpressions>
334+
<expressionfields/>
335+
<attributeactions>
336+
<defaultAction key="Canvas" value="{00000000-0000-0000-0000-000000000000}"/>
337+
</attributeactions>
338+
<attributetableconfig sortExpression="" actionWidgetStyle="dropDown" sortOrder="0">
339+
<columns>
340+
<column hidden="0" type="field" name="Class" width="-1"/>
341+
<column hidden="0" type="field" name="Heading" width="-1"/>
342+
<column hidden="0" type="field" name="Importance" width="-1"/>
343+
<column hidden="0" type="field" name="Pilots" width="-1"/>
344+
<column hidden="0" type="field" name="Cabin Crew" width="-1"/>
345+
<column hidden="0" type="field" name="Staff" width="-1"/>
346+
<column hidden="1" type="actions" width="-1"/>
347+
</columns>
348+
</attributetableconfig>
349+
<conditionalstyles>
350+
<rowstyles/>
351+
<fieldstyles/>
352+
</conditionalstyles>
353+
<editform tolerant="1"></editform>
354+
<editforminit/>
355+
<editforminitcodesource>0</editforminitcodesource>
356+
<editforminitfilepath></editforminitfilepath>
357+
<editforminitcode><![CDATA[# -*- coding: utf-8 -*-
358+
"""
359+
QGIS forms can have a Python function that is called when the form is
360+
opened.
361+
362+
Use this function to add extra logic to your forms.
363+
364+
Enter the name of the function in the "Python Init function"
365+
field.
366+
An example follows:
367+
"""
368+
from qgis.PyQt.QtWidgets import QWidget
369+
370+
def my_form_open(dialog, layer, feature):
371+
geom = feature.geometry()
372+
control = dialog.findChild(QWidget, "MyLineEdit")
373+
]]></editforminitcode>
374+
<featformsuppress>0</featformsuppress>
375+
<editorlayout>generatedlayout</editorlayout>
376+
<editable/>
377+
<labelOnTop/>
378+
<widgets/>
379+
<previewExpression>"Class"</previewExpression>
380+
<mapTip></mapTip>
381+
</maplayer>
382+
</projectlayers>
383+
<layerorder>
384+
<layer id="points_ce766da2_f70f_4fc6_b852_4550b40ed354"/>
385+
</layerorder>
386+
<properties>
387+
<Gui>
388+
<CanvasColorBluePart type="int">255</CanvasColorBluePart>
389+
<CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
390+
<CanvasColorRedPart type="int">255</CanvasColorRedPart>
391+
<SelectionColorAlphaPart type="int">255</SelectionColorAlphaPart>
392+
<SelectionColorBluePart type="int">0</SelectionColorBluePart>
393+
<SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
394+
<SelectionColorRedPart type="int">255</SelectionColorRedPart>
395+
</Gui>
396+
<Legend>
397+
<filterByMap type="bool">false</filterByMap>
398+
</Legend>
399+
<Measure>
400+
<Ellipsoid type="QString">WGS84</Ellipsoid>
401+
</Measure>
402+
<Measurement>
403+
<AreaUnits type="QString">m2</AreaUnits>
404+
<DistanceUnits type="QString">meters</DistanceUnits>
405+
</Measurement>
406+
<PAL>
407+
<CandidatesLine type="int">50</CandidatesLine>
408+
<CandidatesPoint type="int">16</CandidatesPoint>
409+
<CandidatesPolygon type="int">30</CandidatesPolygon>
410+
<DrawRectOnly type="bool">false</DrawRectOnly>
411+
<SearchMethod type="int">0</SearchMethod>
412+
<ShowingAllLabels type="bool">false</ShowingAllLabels>
413+
<ShowingCandidates type="bool">false</ShowingCandidates>
414+
<ShowingPartialsLabels type="bool">true</ShowingPartialsLabels>
415+
<TextFormat type="int">0</TextFormat>
416+
</PAL>
417+
<Paths>
418+
<Absolute type="bool">false</Absolute>
419+
</Paths>
420+
<PositionPrecision>
421+
<Automatic type="bool">true</Automatic>
422+
<DecimalPlaces type="int">2</DecimalPlaces>
423+
</PositionPrecision>
424+
<SpatialRefSys>
425+
<ProjectionsEnabled type="int">1</ProjectionsEnabled>
426+
</SpatialRefSys>
427+
</properties>
428+
<visibility-presets/>
429+
<transformContext/>
430+
<projectMetadata>
431+
<identifier></identifier>
432+
<parentidentifier></parentidentifier>
433+
<language></language>
434+
<type></type>
435+
<title></title>
436+
<abstract></abstract>
437+
<links/>
438+
<author>Nyall</author>
439+
<creation>2019-05-22T07:55:49</creation>
440+
</projectMetadata>
441+
<Annotations/>
442+
<Layouts>
443+
<Layout worldFileMap="" printResolution="300" units="mm" name="Layout 1">
444+
<Snapper snapToGuides="1" snapToItems="1" snapToGrid="0" tolerance="5"/>
445+
<Grid offsetX="0" offsetUnits="mm" resolution="10" offsetY="0" resUnits="mm"/>
446+
<PageCollection>
447+
<symbol clip_to_extent="1" type="fill" force_rhr="0" name="" alpha="1">
448+
<layer enabled="1" pass="0" class="SimpleFill" locked="0">
449+
<prop v="3x:0,0,0,0,0,0" k="border_width_map_unit_scale"/>
450+
<prop v="255,255,255,255" k="color"/>
451+
<prop v="miter" k="joinstyle"/>
452+
<prop v="0,0" k="offset"/>
453+
<prop v="3x:0,0,0,0,0,0" k="offset_map_unit_scale"/>
454+
<prop v="MM" k="offset_unit"/>
455+
<prop v="35,35,35,255" k="outline_color"/>
456+
<prop v="no" k="outline_style"/>
457+
<prop v="0.26" k="outline_width"/>
458+
<prop v="MM" k="outline_width_unit"/>
459+
<prop v="solid" k="style"/>
460+
<data_defined_properties>
461+
<Option type="Map">
462+
<Option value="" type="QString" name="name"/>
463+
<Option name="properties"/>
464+
<Option value="collection" type="QString" name="type"/>
465+
</Option>
466+
</data_defined_properties>
467+
</layer>
468+
</symbol>
469+
<LayoutItem positionOnPage="0,0,mm" opacity="1" frameJoinStyle="miter" visibility="1" positionLock="false" position="0,0,mm" type="65638" referencePoint="0" uuid="{f100fece-ec6a-4cf2-ba16-7d961ba0e0fd}" size="297,210,mm" excludeFromExports="0" outlineWidthM="0.3,mm" zValue="0" templateUuid="{f100fece-ec6a-4cf2-ba16-7d961ba0e0fd}" background="true" frame="false" id="" groupUuid="" itemRotation="0" blendMode="0">
470+
<FrameColor green="0" red="0" blue="0" alpha="255"/>
471+
<BackgroundColor green="255" red="255" blue="255" alpha="255"/>
472+
<LayoutObject>
473+
<dataDefinedProperties>
474+
<Option type="Map">
475+
<Option value="" type="QString" name="name"/>
476+
<Option name="properties"/>
477+
<Option value="collection" type="QString" name="type"/>
478+
</Option>
479+
</dataDefinedProperties>
480+
<customproperties/>
481+
</LayoutObject>
482+
</LayoutItem>
483+
<GuideCollection visible="1"/>
484+
</PageCollection>
485+
<LayoutItem positionOnPage="63.455,26.5388,mm" opacity="1" sectionY="0" frameJoinStyle="miter" hidePageIfEmpty="0" visibility="1" hideBackgroundIfEmpty="0" positionLock="false" position="63.455,26.5388,mm" multiFrameTemplateUuid="{25741952-c242-4d17-942e-21f550d35b81}" type="65647" referencePoint="0" uuid="{c213c327-3a06-4ec3-82c3-de8a8ed4ebdd}" sectionHeight="113.811" size="28.4375,113.811,mm" excludeFromExports="0" outlineWidthM="0.3,mm" zValue="1" templateUuid="{c213c327-3a06-4ec3-82c3-de8a8ed4ebdd}" background="false" sectionX="0" frame="false" id="" multiFrame="{25741952-c242-4d17-942e-21f550d35b81}" groupUuid="" sectionWidth="28.4375" itemRotation="0" blendMode="0">
486+
<FrameColor green="0" red="0" blue="0" alpha="255"/>
487+
<BackgroundColor green="255" red="255" blue="255" alpha="255"/>
488+
<LayoutObject>
489+
<dataDefinedProperties>
490+
<Option type="Map">
491+
<Option value="" type="QString" name="name"/>
492+
<Option name="properties"/>
493+
<Option value="collection" type="QString" name="type"/>
494+
</Option>
495+
</dataDefinedProperties>
496+
<customproperties/>
497+
</LayoutObject>
498+
</LayoutItem>
499+
<LayoutMultiFrame vectorLayerSource="/home/nyall/dev/QGIS/tests/testdata/points.shp" wrapBehavior="0" vectorLayerName="points" showUniqueRowsOnly="0" resizeMode="0" backgroundColor="255,255,255,255" type="65649" showGrid="1" uuid="{25741952-c242-4d17-942e-21f550d35b81}" headerMode="0" cellMargin="1" filterFeatures="false" gridColor="0,0,0,255" horizontalGrid="1" headerHAlignment="0" emptyTableMessage="" relationId="" vectorLayer="points_ce766da2_f70f_4fc6_b852_4550b40ed354" emptyTableMode="0" gridStrokeWidth="0.5" templateUuid="{25741952-c242-4d17-942e-21f550d35b81}" showOnlyVisibleFeatures="0" maxFeatures="30" featureFilter="" vectorLayerProvider="ogr" wrapString="" contentFontColor="0,0,0,255" verticalGrid="1" headerFontColor="0,0,0,255" showEmptyRows="0" filterToAtlasIntersection="0" source="1">
500+
<childFrame templateUuid="{c213c327-3a06-4ec3-82c3-de8a8ed4ebdd}" uuid="{c213c327-3a06-4ec3-82c3-de8a8ed4ebdd}"/>
501+
<LayoutObject>
502+
<dataDefinedProperties>
503+
<Option type="Map">
504+
<Option value="" type="QString" name="name"/>
505+
<Option name="properties"/>
506+
<Option value="collection" type="QString" name="type"/>
507+
</Option>
508+
</dataDefinedProperties>
509+
<customproperties/>
510+
</LayoutObject>
511+
<headerFontProperties description="Cantarell,11,-1,5,50,0,0,0,0,0" style=""/>
512+
<contentFontProperties description="Cantarell,11,-1,5,50,0,0,0,0,0" style=""/>
513+
<displayColumns>
514+
<column vAlignment="128" heading="Heading" hAlignment="1" sortByRank="0" attribute="Heading" sortOrder="0" width="0">
515+
<backgroundColor green="0" red="0" blue="0" alpha="0"/>
516+
</column>
517+
<column vAlignment="128" heading="Staff" hAlignment="1" sortByRank="0" attribute="Staff" sortOrder="0" width="0">
518+
<backgroundColor green="0" red="0" blue="0" alpha="0"/>
519+
</column>
520+
</displayColumns>
521+
<cellStyles>
522+
<oddColumns cellBackgroundColor="255,255,255,255" enabled="0"/>
523+
<evenColumns cellBackgroundColor="255,255,255,255" enabled="0"/>
524+
<oddRows cellBackgroundColor="255,255,255,255" enabled="0"/>
525+
<evenRows cellBackgroundColor="255,255,255,255" enabled="0"/>
526+
<firstColumn cellBackgroundColor="255,255,255,255" enabled="0"/>
527+
<lastColumn cellBackgroundColor="255,255,255,255" enabled="0"/>
528+
<headerRow cellBackgroundColor="255,255,255,255" enabled="0"/>
529+
<firstRow cellBackgroundColor="255,255,255,255" enabled="0"/>
530+
<lastRow cellBackgroundColor="255,255,255,255" enabled="0"/>
531+
</cellStyles>
532+
</LayoutMultiFrame>
533+
<customproperties>
534+
<property key="atlasRasterFormat" value="png"/>
535+
</customproperties>
536+
<Atlas coverageLayerProvider="ogr" coverageLayerName="points" pageNameExpression="" sortFeatures="0" hideCoverage="0" enabled="1" filenamePattern="'output_'||@atlas_featurenumber" coverageLayer="points_ce766da2_f70f_4fc6_b852_4550b40ed354" coverageLayerSource="/home/nyall/dev/QGIS/tests/testdata/points.shp" filterFeatures="0"/>
537+
</Layout>
538+
</Layouts>
539+
</qgis>

0 commit comments

Comments
 (0)
Please sign in to comment.