Skip to content

Commit 0ce4e02

Browse files
author
mhugent
committedJun 21, 2009
[FEATURE] Added possibility to keep the current layers in a composer map even if further layers are added to the main map
git-svn-id: http://svn.osgeo.org/qgis/trunk@10963 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 5996d17 commit 0ce4e02

File tree

5 files changed

+239
-95
lines changed

5 files changed

+239
-95
lines changed
 

‎src/app/composer/qgscomposermapwidget.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,18 @@ void QgsComposerMapWidget::updateGuiElements()
252252
mXMaxLineEdit->setText( QString::number( composerMapExtent.xMaximum(), 'f', 3 ) );
253253
mYMinLineEdit->setText( QString::number( composerMapExtent.yMinimum(), 'f', 3 ) );
254254
mYMaxLineEdit->setText( QString::number( composerMapExtent.yMaximum(), 'f', 3 ) );
255+
256+
//keep layer list check box
257+
mKeepLayerListCheckBox->blockSignals(true);
258+
if(mComposerMap->keepLayerSet())
259+
{
260+
mKeepLayerListCheckBox->setCheckState(Qt::Checked);
261+
}
262+
else
263+
{
264+
mKeepLayerListCheckBox->setCheckState(Qt::Unchecked);
265+
}
266+
mKeepLayerListCheckBox->blockSignals(false);
255267
}
256268
}
257269

@@ -298,3 +310,23 @@ void QgsComposerMapWidget::on_mUpdatePreviewButton_clicked()
298310

299311
mUpdatePreviewButton->setEnabled( true );
300312
}
313+
314+
void QgsComposerMapWidget::on_mKeepLayerListCheckBox_stateChanged(int state)
315+
{
316+
if(!mComposerMap)
317+
{
318+
return;
319+
}
320+
321+
if(state == Qt::Checked)
322+
{
323+
mComposerMap->storeCurrentLayerSet();
324+
mComposerMap->setKeepLayerSet(true);
325+
}
326+
else
327+
{
328+
QStringList emptyLayerSet;
329+
mComposerMap->setLayerSet(emptyLayerSet);
330+
mComposerMap->setKeepLayerSet(false);
331+
}
332+
}

‎src/app/composer/qgscomposermapwidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class QgsComposerMapWidget: public QWidget, private Ui::QgsComposerMapWidgetBase
4141
void on_mScaleLineEdit_editingFinished();
4242
void on_mSetToMapCanvasExtentButton_clicked();
4343
void on_mUpdatePreviewButton_clicked();
44+
void on_mKeepLayerListCheckBox_stateChanged(int state);
4445

4546
void on_mXMinLineEdit_editingFinished();
4647
void on_mXMaxLineEdit_editingFinished();

‎src/core/composer/qgscomposermap.cpp

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
int QgsComposerMap::mCurrentComposerId = 0;
4343

4444
QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int width, int height )
45-
: QgsComposerItem( x, y, width, height, composition )
45+
: QgsComposerItem( x, y, width, height, composition ), mKeepLayerSet(false)
4646
{
4747
mComposition = composition;
4848
mMapRenderer = mComposition->mapRenderer();
@@ -69,7 +69,7 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
6969
}
7070

7171
QgsComposerMap::QgsComposerMap( QgsComposition *composition )
72-
: QgsComposerItem( 0, 0, 10, 10, composition )
72+
: QgsComposerItem( 0, 0, 10, 10, composition ), mKeepLayerSet(false)
7373
{
7474
//Offset
7575
mXOffset = 0.0;
@@ -113,7 +113,16 @@ void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const
113113
QgsMapRenderer theMapRenderer;
114114
theMapRenderer.setExtent( extent );
115115
theMapRenderer.setOutputSize( size, dpi );
116-
theMapRenderer.setLayerSet( mMapRenderer->layerSet() );
116+
117+
//use stored layer set or read current set from main canvas
118+
if(mKeepLayerSet)
119+
{
120+
theMapRenderer.setLayerSet(mLayerSet);
121+
}
122+
else
123+
{
124+
theMapRenderer.setLayerSet( mMapRenderer->layerSet() );
125+
}
117126
theMapRenderer.setProjectionsEnabled( mMapRenderer->hasCrsTransformEnabled() );
118127
theMapRenderer.setDestinationSrs( mMapRenderer->destinationSrs() );
119128

@@ -240,6 +249,7 @@ void QgsComposerMap::paint( QPainter* painter, const QStyleOptionGraphicsItem* i
240249

241250
void QgsComposerMap::updateCachedImage( void )
242251
{
252+
syncLayerSet(); //layer list may have changed
243253
mCacheUpdated = false;
244254
cache();
245255
QGraphicsRectItem::update();
@@ -489,6 +499,15 @@ bool QgsComposerMap::writeXML( QDomElement& elem, QDomDocument & doc ) const
489499
composerMapElem.setAttribute( "previewMode", "Rectangle" );
490500
}
491501

502+
if(mKeepLayerSet)
503+
{
504+
composerMapElem.setAttribute( "keepLayerSet", "true");
505+
}
506+
else
507+
{
508+
composerMapElem.setAttribute( "keepLayerSet", "false");
509+
}
510+
492511
//extent
493512
QDomElement extentElem = doc.createElement( "Extent" );
494513
extentElem.setAttribute( "xmin", QString::number( mExtent.xMinimum() ) );
@@ -497,6 +516,18 @@ bool QgsComposerMap::writeXML( QDomElement& elem, QDomDocument & doc ) const
497516
extentElem.setAttribute( "ymax", QString::number( mExtent.yMaximum() ) );
498517
composerMapElem.appendChild( extentElem );
499518

519+
//layer set
520+
QDomElement layerSetElem = doc.createElement( "LayerSet" );
521+
QStringList::const_iterator layerIt = mLayerSet.constBegin();
522+
for(; layerIt != mLayerSet.constEnd(); ++layerIt)
523+
{
524+
QDomElement layerElem = doc.createElement( "Layer" );
525+
QDomText layerIdText = doc.createTextNode(*layerIt);
526+
layerElem.appendChild(layerIdText);
527+
layerSetElem.appendChild(layerElem);
528+
}
529+
composerMapElem.appendChild(layerSetElem);
530+
500531
#if 0
501532
// why is saving the map changing anything about the cache?
502533
mCacheUpdated = false;
@@ -545,6 +576,31 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
545576
mExtent = QgsRectangle( xmin, ymin, xmax, ymax );
546577
}
547578

579+
//mKeepLayerSet flag
580+
QString keepLayerSetFlag = itemElem.attribute( "keepLayerSet" );
581+
if(keepLayerSetFlag.compare("true", Qt::CaseInsensitive) == 0)
582+
{
583+
mKeepLayerSet = true;
584+
}
585+
else
586+
{
587+
mKeepLayerSet = false;
588+
}
589+
590+
//mLayerSet
591+
QDomNodeList layerSetNodeList = itemElem.elementsByTagName("LayerSet");
592+
QStringList layerSet;
593+
if(layerSetNodeList.size() > 0)
594+
{
595+
QDomElement layerSetElem = layerSetNodeList.at(0).toElement();
596+
QDomNodeList layerIdNodeList = layerSetElem.elementsByTagName("Layer");
597+
for(int i = 0; i < layerIdNodeList.size(); ++i)
598+
{
599+
layerSet << layerIdNodeList.at(i).toElement().text();
600+
}
601+
}
602+
mLayerSet = layerSet;
603+
548604
mDrawing = false;
549605
mNumCachedLayers = 0;
550606
mCacheUpdated = false;
@@ -565,3 +621,28 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
565621

566622
return true;
567623
}
624+
625+
void QgsComposerMap::storeCurrentLayerSet()
626+
{
627+
if(mMapRenderer)
628+
{
629+
mLayerSet = mMapRenderer->layerSet();
630+
}
631+
}
632+
633+
void QgsComposerMap::syncLayerSet()
634+
{
635+
if(mLayerSet.size() < 1 && !mMapRenderer)
636+
{
637+
return;
638+
}
639+
640+
QStringList currentLayerSet = mMapRenderer->layerSet();
641+
for(int i = mLayerSet.size() - 1; i >= 0; --i)
642+
{
643+
if(!currentLayerSet.contains(mLayerSet.at(i)))
644+
{
645+
mLayerSet.removeAt(i);
646+
}
647+
}
648+
}

‎src/core/composer/qgscomposermap.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,22 @@ class CORE_EXPORT QgsComposerMap : /*public QWidget, private Ui::QgsComposerMapB
101101
PreviewMode previewMode() {return mPreviewMode;}
102102
void setPreviewMode( PreviewMode m ) {mPreviewMode = m;}
103103

104+
/**Getter for flag that determines if the stored layer set should be used or the current layer set of the qgis mapcanvas
105+
@note this function was added in version 1.2*/
106+
bool keepLayerSet() const {return mKeepLayerSet;}
107+
/**Setter for flag that determines if the stored layer set should be used or the current layer set of the qgis mapcanvas
108+
@note this function was added in version 1.2*/
109+
void setKeepLayerSet(bool enabled) {mKeepLayerSet = enabled;}
110+
111+
/**Getter for stored layer set that is used if mKeepLayerSet is true
112+
@note this function was added in version 1.2*/
113+
QStringList layerSet() const {return mLayerSet;}
114+
/**Setter for stored layer set that is used if mKeepLayerSet is true
115+
@note this function was added in version 1.2*/
116+
void setLayerSet(const QStringList& layerSet) {mLayerSet = layerSet;}
117+
/**Stores the current layer set of the qgis mapcanvas in mLayerSet*/
118+
void storeCurrentLayerSet();
119+
104120
// Set cache outdated
105121
void setCacheUpdated( bool u = false );
106122

@@ -176,11 +192,20 @@ class CORE_EXPORT QgsComposerMap : /*public QWidget, private Ui::QgsComposerMapB
176192
/**Offset in y direction for showing map cache image*/
177193
double mYOffset;
178194

195+
/**Flag if layers to be displayed should be read from qgis canvas (true) or from stored list in mLayerSet (false)*/
196+
bool mKeepLayerSet;
197+
198+
/**Stored layer list (used if layer live-link mKeepLayerSet is disabled)*/
199+
QStringList mLayerSet;
200+
179201
/**For the generation of new unique ids*/
180202
static int mCurrentComposerId;
181203

182204
/**Establishes signal/slot connection for update in case of layer change*/
183205
void connectUpdateSlot();
206+
207+
/**Removes layer ids from mLayerSet that are no longer present in the qgis main map*/
208+
void syncLayerSet();
184209
};
185210

186211
#endif

‎src/ui/qgscomposermapwidgetbase.ui

Lines changed: 97 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,186 +1,184 @@
1-
<ui version="4.0" >
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
23
<class>QgsComposerMapWidgetBase</class>
3-
<widget class="QWidget" name="QgsComposerMapWidgetBase" >
4-
<property name="geometry" >
4+
<widget class="QWidget" name="QgsComposerMapWidgetBase">
5+
<property name="geometry">
56
<rect>
67
<x>0</x>
78
<y>0</y>
89
<width>546</width>
910
<height>374</height>
1011
</rect>
1112
</property>
12-
<property name="sizePolicy" >
13-
<sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
13+
<property name="sizePolicy">
14+
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
1415
<horstretch>0</horstretch>
1516
<verstretch>0</verstretch>
1617
</sizepolicy>
1718
</property>
18-
<property name="windowTitle" >
19+
<property name="windowTitle">
1920
<string>Map options</string>
2021
</property>
21-
<layout class="QGridLayout" >
22-
<item row="0" column="0" colspan="4" >
23-
<widget class="QLabel" name="mNameLabel" >
24-
<property name="text" >
25-
<string>&lt;b>Map&lt;/b></string>
22+
<layout class="QGridLayout" name="gridLayout">
23+
<item row="0" column="0">
24+
<widget class="QLabel" name="mNameLabel">
25+
<property name="text">
26+
<string>&lt;b&gt;Map&lt;/b&gt;</string>
2627
</property>
2728
</widget>
2829
</item>
29-
<item row="1" column="0" colspan="4" >
30-
<widget class="Line" name="line1" >
31-
<property name="frameShape" >
30+
<item row="1" column="0" colspan="5">
31+
<widget class="Line" name="line1">
32+
<property name="frameShape">
3233
<enum>QFrame::HLine</enum>
3334
</property>
34-
<property name="frameShadow" >
35+
<property name="frameShadow">
3536
<enum>QFrame::Sunken</enum>
3637
</property>
37-
<property name="orientation" >
38+
<property name="orientation">
3839
<enum>Qt::Horizontal</enum>
3940
</property>
4041
</widget>
4142
</item>
42-
<item row="2" column="0" >
43-
<widget class="QLabel" name="textLabel1" >
44-
<property name="text" >
43+
<item row="2" column="0">
44+
<widget class="QLabel" name="textLabel1">
45+
<property name="text">
4546
<string>Width</string>
4647
</property>
47-
<property name="wordWrap" >
48+
<property name="wordWrap">
4849
<bool>true</bool>
4950
</property>
50-
<property name="buddy" >
51+
<property name="buddy">
5152
<cstring>mWidthLineEdit</cstring>
5253
</property>
5354
</widget>
5455
</item>
55-
<item row="2" column="2" colspan="2" >
56-
<widget class="QLineEdit" name="mWidthLineEdit" />
56+
<item row="2" column="3">
57+
<widget class="QLineEdit" name="mWidthLineEdit"/>
5758
</item>
58-
<item row="3" column="0" >
59-
<widget class="QLabel" name="textLabel2" >
60-
<property name="text" >
59+
<item row="3" column="0">
60+
<widget class="QLabel" name="textLabel2">
61+
<property name="text">
6162
<string>Height</string>
6263
</property>
63-
<property name="wordWrap" >
64+
<property name="wordWrap">
6465
<bool>true</bool>
6566
</property>
66-
<property name="buddy" >
67+
<property name="buddy">
6768
<cstring>mHeightLineEdit</cstring>
6869
</property>
6970
</widget>
7071
</item>
71-
<item row="3" column="2" colspan="2" >
72-
<widget class="QLineEdit" name="mHeightLineEdit" />
72+
<item row="3" column="3">
73+
<widget class="QLineEdit" name="mHeightLineEdit"/>
7374
</item>
74-
<item row="4" column="0" >
75-
<widget class="QLabel" name="label_2" >
76-
<property name="sizePolicy" >
77-
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
75+
<item row="4" column="0">
76+
<widget class="QLabel" name="label_2">
77+
<property name="sizePolicy">
78+
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7879
<horstretch>0</horstretch>
7980
<verstretch>0</verstretch>
8081
</sizepolicy>
8182
</property>
82-
<property name="text" >
83+
<property name="text">
8384
<string>Scale:</string>
8485
</property>
85-
<property name="wordWrap" >
86+
<property name="wordWrap">
8687
<bool>true</bool>
8788
</property>
8889
</widget>
8990
</item>
90-
<item row="4" column="1" >
91-
<widget class="QLabel" name="label" >
92-
<property name="text" >
91+
<item row="4" column="1" colspan="2">
92+
<widget class="QLabel" name="label">
93+
<property name="text">
9394
<string>1:</string>
9495
</property>
95-
<property name="alignment" >
96+
<property name="alignment">
9697
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
9798
</property>
9899
</widget>
99100
</item>
100-
<item row="4" column="2" colspan="2" >
101-
<widget class="QLineEdit" name="mScaleLineEdit" />
101+
<item row="4" column="3">
102+
<widget class="QLineEdit" name="mScaleLineEdit"/>
102103
</item>
103-
<item row="5" column="0" colspan="4" >
104-
<widget class="QGroupBox" name="mMapExtentGroupBox" >
105-
<property name="title" >
104+
<item row="5" column="0" colspan="5">
105+
<widget class="QGroupBox" name="mMapExtentGroupBox">
106+
<property name="title">
106107
<string>Map extent</string>
107108
</property>
108-
<layout class="QGridLayout" >
109-
<item row="0" column="0" >
110-
<layout class="QVBoxLayout" >
109+
<layout class="QGridLayout">
110+
<item row="0" column="0">
111+
<layout class="QVBoxLayout">
111112
<item>
112-
<widget class="QLabel" name="mXMinLabel" >
113-
<property name="enabled" >
113+
<widget class="QLabel" name="mXMinLabel">
114+
<property name="enabled">
114115
<bool>true</bool>
115116
</property>
116-
<property name="text" >
117+
<property name="text">
117118
<string>X min:</string>
118119
</property>
119120
</widget>
120121
</item>
121122
<item>
122-
<widget class="QLabel" name="mYMinLabel" >
123-
<property name="text" >
123+
<widget class="QLabel" name="mYMinLabel">
124+
<property name="text">
124125
<string>Y min:</string>
125126
</property>
126127
</widget>
127128
</item>
128129
</layout>
129130
</item>
130-
<item row="0" column="1" colspan="2" >
131-
<layout class="QVBoxLayout" >
131+
<item row="0" column="1" colspan="2">
132+
<layout class="QVBoxLayout">
132133
<item>
133-
<widget class="QLineEdit" name="mXMinLineEdit" />
134+
<widget class="QLineEdit" name="mXMinLineEdit"/>
134135
</item>
135136
<item>
136-
<widget class="QLineEdit" name="mYMinLineEdit" />
137+
<widget class="QLineEdit" name="mYMinLineEdit"/>
137138
</item>
138139
</layout>
139140
</item>
140-
<item row="0" column="3" >
141-
<layout class="QVBoxLayout" >
141+
<item row="0" column="3">
142+
<layout class="QVBoxLayout">
142143
<item>
143-
<widget class="QLabel" name="mXMaxLabel" >
144-
<property name="text" >
144+
<widget class="QLabel" name="mXMaxLabel">
145+
<property name="text">
145146
<string>X max:</string>
146147
</property>
147148
</widget>
148149
</item>
149150
<item>
150-
<widget class="QLabel" name="mYMaxLabel" >
151-
<property name="windowModality" >
152-
<enum>Qt::NonModal</enum>
153-
</property>
154-
<property name="text" >
151+
<widget class="QLabel" name="mYMaxLabel">
152+
<property name="text">
155153
<string>Y max:</string>
156154
</property>
157155
</widget>
158156
</item>
159157
</layout>
160158
</item>
161-
<item row="0" column="4" >
162-
<layout class="QVBoxLayout" >
159+
<item row="0" column="4">
160+
<layout class="QVBoxLayout">
163161
<item>
164-
<widget class="QLineEdit" name="mXMaxLineEdit" />
162+
<widget class="QLineEdit" name="mXMaxLineEdit"/>
165163
</item>
166164
<item>
167-
<widget class="QLineEdit" name="mYMaxLineEdit" />
165+
<widget class="QLineEdit" name="mYMaxLineEdit"/>
168166
</item>
169167
</layout>
170168
</item>
171-
<item row="1" column="0" colspan="2" >
172-
<widget class="QPushButton" name="mSetToMapCanvasExtentButton" >
173-
<property name="text" >
169+
<item row="1" column="0" colspan="2">
170+
<widget class="QPushButton" name="mSetToMapCanvasExtentButton">
171+
<property name="text">
174172
<string>set to map canvas extent</string>
175173
</property>
176174
</widget>
177175
</item>
178-
<item row="1" column="2" colspan="3" >
176+
<item row="1" column="2" colspan="3">
179177
<spacer>
180-
<property name="orientation" >
178+
<property name="orientation">
181179
<enum>Qt::Horizontal</enum>
182180
</property>
183-
<property name="sizeHint" >
181+
<property name="sizeHint" stdset="0">
184182
<size>
185183
<width>311</width>
186184
<height>20</height>
@@ -191,42 +189,49 @@
191189
</layout>
192190
</widget>
193191
</item>
194-
<item row="6" column="0" colspan="2" >
195-
<widget class="QLabel" name="mPreviewModeLabel" >
196-
<property name="text" >
192+
<item row="6" column="0" colspan="2">
193+
<widget class="QLabel" name="mPreviewModeLabel">
194+
<property name="text">
197195
<string>Preview</string>
198196
</property>
199-
<property name="wordWrap" >
197+
<property name="wordWrap">
200198
<bool>true</bool>
201199
</property>
202-
<property name="buddy" >
200+
<property name="buddy">
203201
<cstring>mPreviewModeComboBox</cstring>
204202
</property>
205203
</widget>
206204
</item>
207-
<item row="6" column="2" >
208-
<widget class="QComboBox" name="mPreviewModeComboBox" >
209-
<property name="sizePolicy" >
210-
<sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
205+
<item row="6" column="3">
206+
<widget class="QComboBox" name="mPreviewModeComboBox">
207+
<property name="sizePolicy">
208+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
211209
<horstretch>0</horstretch>
212210
<verstretch>0</verstretch>
213211
</sizepolicy>
214212
</property>
215213
</widget>
216214
</item>
217-
<item row="6" column="3" >
218-
<widget class="QPushButton" name="mUpdatePreviewButton" >
219-
<property name="text" >
215+
<item row="6" column="4">
216+
<widget class="QPushButton" name="mUpdatePreviewButton">
217+
<property name="text">
220218
<string>Update preview</string>
221219
</property>
222220
</widget>
223221
</item>
224-
<item row="7" column="2" colspan="2" >
222+
<item row="7" column="0" colspan="4">
223+
<widget class="QCheckBox" name="mKeepLayerListCheckBox">
224+
<property name="text">
225+
<string>Keep layer list</string>
226+
</property>
227+
</widget>
228+
</item>
229+
<item row="8" column="2" colspan="3">
225230
<spacer>
226-
<property name="orientation" >
231+
<property name="orientation">
227232
<enum>Qt::Vertical</enum>
228233
</property>
229-
<property name="sizeHint" >
234+
<property name="sizeHint" stdset="0">
230235
<size>
231236
<width>458</width>
232237
<height>31</height>
@@ -236,7 +241,7 @@
236241
</item>
237242
</layout>
238243
</widget>
239-
<layoutdefault spacing="6" margin="11" />
244+
<layoutdefault spacing="6" margin="11"/>
240245
<tabstops>
241246
<tabstop>mWidthLineEdit</tabstop>
242247
<tabstop>mHeightLineEdit</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.