[QGIS Commit] r10963 - in trunk/qgis/src: app/composer
core/composer ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sun Jun 21 08:30:36 EDT 2009
Author: mhugent
Date: 2009-06-21 08:30:36 -0400 (Sun, 21 Jun 2009)
New Revision: 10963
Modified:
trunk/qgis/src/app/composer/qgscomposermapwidget.cpp
trunk/qgis/src/app/composer/qgscomposermapwidget.h
trunk/qgis/src/core/composer/qgscomposermap.cpp
trunk/qgis/src/core/composer/qgscomposermap.h
trunk/qgis/src/ui/qgscomposermapwidgetbase.ui
Log:
[FEATURE] Added possibility to keep the current layers in a composer map even if further layers are added to the main map
Modified: trunk/qgis/src/app/composer/qgscomposermapwidget.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposermapwidget.cpp 2009-06-19 14:46:32 UTC (rev 10962)
+++ trunk/qgis/src/app/composer/qgscomposermapwidget.cpp 2009-06-21 12:30:36 UTC (rev 10963)
@@ -252,6 +252,18 @@
mXMaxLineEdit->setText( QString::number( composerMapExtent.xMaximum(), 'f', 3 ) );
mYMinLineEdit->setText( QString::number( composerMapExtent.yMinimum(), 'f', 3 ) );
mYMaxLineEdit->setText( QString::number( composerMapExtent.yMaximum(), 'f', 3 ) );
+
+ //keep layer list check box
+ mKeepLayerListCheckBox->blockSignals(true);
+ if(mComposerMap->keepLayerSet())
+ {
+ mKeepLayerListCheckBox->setCheckState(Qt::Checked);
+ }
+ else
+ {
+ mKeepLayerListCheckBox->setCheckState(Qt::Unchecked);
+ }
+ mKeepLayerListCheckBox->blockSignals(false);
}
}
@@ -298,3 +310,23 @@
mUpdatePreviewButton->setEnabled( true );
}
+
+void QgsComposerMapWidget::on_mKeepLayerListCheckBox_stateChanged(int state)
+{
+ if(!mComposerMap)
+ {
+ return;
+ }
+
+ if(state == Qt::Checked)
+ {
+ mComposerMap->storeCurrentLayerSet();
+ mComposerMap->setKeepLayerSet(true);
+ }
+ else
+ {
+ QStringList emptyLayerSet;
+ mComposerMap->setLayerSet(emptyLayerSet);
+ mComposerMap->setKeepLayerSet(false);
+ }
+}
Modified: trunk/qgis/src/app/composer/qgscomposermapwidget.h
===================================================================
--- trunk/qgis/src/app/composer/qgscomposermapwidget.h 2009-06-19 14:46:32 UTC (rev 10962)
+++ trunk/qgis/src/app/composer/qgscomposermapwidget.h 2009-06-21 12:30:36 UTC (rev 10963)
@@ -41,6 +41,7 @@
void on_mScaleLineEdit_editingFinished();
void on_mSetToMapCanvasExtentButton_clicked();
void on_mUpdatePreviewButton_clicked();
+ void on_mKeepLayerListCheckBox_stateChanged(int state);
void on_mXMinLineEdit_editingFinished();
void on_mXMaxLineEdit_editingFinished();
Modified: trunk/qgis/src/core/composer/qgscomposermap.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposermap.cpp 2009-06-19 14:46:32 UTC (rev 10962)
+++ trunk/qgis/src/core/composer/qgscomposermap.cpp 2009-06-21 12:30:36 UTC (rev 10963)
@@ -42,7 +42,7 @@
int QgsComposerMap::mCurrentComposerId = 0;
QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int width, int height )
- : QgsComposerItem( x, y, width, height, composition )
+ : QgsComposerItem( x, y, width, height, composition ), mKeepLayerSet(false)
{
mComposition = composition;
mMapRenderer = mComposition->mapRenderer();
@@ -69,7 +69,7 @@
}
QgsComposerMap::QgsComposerMap( QgsComposition *composition )
- : QgsComposerItem( 0, 0, 10, 10, composition )
+ : QgsComposerItem( 0, 0, 10, 10, composition ), mKeepLayerSet(false)
{
//Offset
mXOffset = 0.0;
@@ -113,7 +113,16 @@
QgsMapRenderer theMapRenderer;
theMapRenderer.setExtent( extent );
theMapRenderer.setOutputSize( size, dpi );
- theMapRenderer.setLayerSet( mMapRenderer->layerSet() );
+
+ //use stored layer set or read current set from main canvas
+ if(mKeepLayerSet)
+ {
+ theMapRenderer.setLayerSet(mLayerSet);
+ }
+ else
+ {
+ theMapRenderer.setLayerSet( mMapRenderer->layerSet() );
+ }
theMapRenderer.setProjectionsEnabled( mMapRenderer->hasCrsTransformEnabled() );
theMapRenderer.setDestinationSrs( mMapRenderer->destinationSrs() );
@@ -240,6 +249,7 @@
void QgsComposerMap::updateCachedImage( void )
{
+ syncLayerSet(); //layer list may have changed
mCacheUpdated = false;
cache();
QGraphicsRectItem::update();
@@ -489,6 +499,15 @@
composerMapElem.setAttribute( "previewMode", "Rectangle" );
}
+ if(mKeepLayerSet)
+ {
+ composerMapElem.setAttribute( "keepLayerSet", "true");
+ }
+ else
+ {
+ composerMapElem.setAttribute( "keepLayerSet", "false");
+ }
+
//extent
QDomElement extentElem = doc.createElement( "Extent" );
extentElem.setAttribute( "xmin", QString::number( mExtent.xMinimum() ) );
@@ -497,6 +516,18 @@
extentElem.setAttribute( "ymax", QString::number( mExtent.yMaximum() ) );
composerMapElem.appendChild( extentElem );
+ //layer set
+ QDomElement layerSetElem = doc.createElement( "LayerSet" );
+ QStringList::const_iterator layerIt = mLayerSet.constBegin();
+ for(; layerIt != mLayerSet.constEnd(); ++layerIt)
+ {
+ QDomElement layerElem = doc.createElement( "Layer" );
+ QDomText layerIdText = doc.createTextNode(*layerIt);
+ layerElem.appendChild(layerIdText);
+ layerSetElem.appendChild(layerElem);
+ }
+ composerMapElem.appendChild(layerSetElem);
+
#if 0
// why is saving the map changing anything about the cache?
mCacheUpdated = false;
@@ -545,6 +576,31 @@
mExtent = QgsRectangle( xmin, ymin, xmax, ymax );
}
+ //mKeepLayerSet flag
+ QString keepLayerSetFlag = itemElem.attribute( "keepLayerSet" );
+ if(keepLayerSetFlag.compare("true", Qt::CaseInsensitive) == 0)
+ {
+ mKeepLayerSet = true;
+ }
+ else
+ {
+ mKeepLayerSet = false;
+ }
+
+ //mLayerSet
+ QDomNodeList layerSetNodeList = itemElem.elementsByTagName("LayerSet");
+ QStringList layerSet;
+ if(layerSetNodeList.size() > 0)
+ {
+ QDomElement layerSetElem = layerSetNodeList.at(0).toElement();
+ QDomNodeList layerIdNodeList = layerSetElem.elementsByTagName("Layer");
+ for(int i = 0; i < layerIdNodeList.size(); ++i)
+ {
+ layerSet << layerIdNodeList.at(i).toElement().text();
+ }
+ }
+ mLayerSet = layerSet;
+
mDrawing = false;
mNumCachedLayers = 0;
mCacheUpdated = false;
@@ -565,3 +621,28 @@
return true;
}
+
+void QgsComposerMap::storeCurrentLayerSet()
+{
+ if(mMapRenderer)
+ {
+ mLayerSet = mMapRenderer->layerSet();
+ }
+}
+
+void QgsComposerMap::syncLayerSet()
+{
+ if(mLayerSet.size() < 1 && !mMapRenderer)
+ {
+ return;
+ }
+
+ QStringList currentLayerSet = mMapRenderer->layerSet();
+ for(int i = mLayerSet.size() - 1; i >= 0; --i)
+ {
+ if(!currentLayerSet.contains(mLayerSet.at(i)))
+ {
+ mLayerSet.removeAt(i);
+ }
+ }
+}
Modified: trunk/qgis/src/core/composer/qgscomposermap.h
===================================================================
--- trunk/qgis/src/core/composer/qgscomposermap.h 2009-06-19 14:46:32 UTC (rev 10962)
+++ trunk/qgis/src/core/composer/qgscomposermap.h 2009-06-21 12:30:36 UTC (rev 10963)
@@ -101,6 +101,22 @@
PreviewMode previewMode() {return mPreviewMode;}
void setPreviewMode( PreviewMode m ) {mPreviewMode = m;}
+ /**Getter for flag that determines if the stored layer set should be used or the current layer set of the qgis mapcanvas
+ @note this function was added in version 1.2*/
+ bool keepLayerSet() const {return mKeepLayerSet;}
+ /**Setter for flag that determines if the stored layer set should be used or the current layer set of the qgis mapcanvas
+ @note this function was added in version 1.2*/
+ void setKeepLayerSet(bool enabled) {mKeepLayerSet = enabled;}
+
+ /**Getter for stored layer set that is used if mKeepLayerSet is true
+ @note this function was added in version 1.2*/
+ QStringList layerSet() const {return mLayerSet;}
+ /**Setter for stored layer set that is used if mKeepLayerSet is true
+ @note this function was added in version 1.2*/
+ void setLayerSet(const QStringList& layerSet) {mLayerSet = layerSet;}
+ /**Stores the current layer set of the qgis mapcanvas in mLayerSet*/
+ void storeCurrentLayerSet();
+
// Set cache outdated
void setCacheUpdated( bool u = false );
@@ -176,11 +192,20 @@
/**Offset in y direction for showing map cache image*/
double mYOffset;
+ /**Flag if layers to be displayed should be read from qgis canvas (true) or from stored list in mLayerSet (false)*/
+ bool mKeepLayerSet;
+
+ /**Stored layer list (used if layer live-link mKeepLayerSet is disabled)*/
+ QStringList mLayerSet;
+
/**For the generation of new unique ids*/
static int mCurrentComposerId;
/**Establishes signal/slot connection for update in case of layer change*/
void connectUpdateSlot();
+
+ /**Removes layer ids from mLayerSet that are no longer present in the qgis main map*/
+ void syncLayerSet();
};
#endif
Modified: trunk/qgis/src/ui/qgscomposermapwidgetbase.ui
===================================================================
--- trunk/qgis/src/ui/qgscomposermapwidgetbase.ui 2009-06-19 14:46:32 UTC (rev 10962)
+++ trunk/qgis/src/ui/qgscomposermapwidgetbase.ui 2009-06-21 12:30:36 UTC (rev 10963)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>QgsComposerMapWidgetBase</class>
- <widget class="QWidget" name="QgsComposerMapWidgetBase" >
- <property name="geometry" >
+ <widget class="QWidget" name="QgsComposerMapWidgetBase">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@@ -9,178 +10,175 @@
<height>374</height>
</rect>
</property>
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>Map options</string>
</property>
- <layout class="QGridLayout" >
- <item row="0" column="0" colspan="4" >
- <widget class="QLabel" name="mNameLabel" >
- <property name="text" >
- <string><b>Map</b></string>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="mNameLabel">
+ <property name="text">
+ <string><b>Map</b></string>
</property>
</widget>
</item>
- <item row="1" column="0" colspan="4" >
- <widget class="Line" name="line1" >
- <property name="frameShape" >
+ <item row="1" column="0" colspan="5">
+ <widget class="Line" name="line1">
+ <property name="frameShape">
<enum>QFrame::HLine</enum>
</property>
- <property name="frameShadow" >
+ <property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
- <item row="2" column="0" >
- <widget class="QLabel" name="textLabel1" >
- <property name="text" >
+ <item row="2" column="0">
+ <widget class="QLabel" name="textLabel1">
+ <property name="text">
<string>Width</string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>mWidthLineEdit</cstring>
</property>
</widget>
</item>
- <item row="2" column="2" colspan="2" >
- <widget class="QLineEdit" name="mWidthLineEdit" />
+ <item row="2" column="3">
+ <widget class="QLineEdit" name="mWidthLineEdit"/>
</item>
- <item row="3" column="0" >
- <widget class="QLabel" name="textLabel2" >
- <property name="text" >
+ <item row="3" column="0">
+ <widget class="QLabel" name="textLabel2">
+ <property name="text">
<string>Height</string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>mHeightLineEdit</cstring>
</property>
</widget>
</item>
- <item row="3" column="2" colspan="2" >
- <widget class="QLineEdit" name="mHeightLineEdit" />
+ <item row="3" column="3">
+ <widget class="QLineEdit" name="mHeightLineEdit"/>
</item>
- <item row="4" column="0" >
- <widget class="QLabel" name="label_2" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text" >
+ <property name="text">
<string>Scale:</string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
- <item row="4" column="1" >
- <widget class="QLabel" name="label" >
- <property name="text" >
+ <item row="4" column="1" colspan="2">
+ <widget class="QLabel" name="label">
+ <property name="text">
<string>1:</string>
</property>
- <property name="alignment" >
+ <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="4" column="2" colspan="2" >
- <widget class="QLineEdit" name="mScaleLineEdit" />
+ <item row="4" column="3">
+ <widget class="QLineEdit" name="mScaleLineEdit"/>
</item>
- <item row="5" column="0" colspan="4" >
- <widget class="QGroupBox" name="mMapExtentGroupBox" >
- <property name="title" >
+ <item row="5" column="0" colspan="5">
+ <widget class="QGroupBox" name="mMapExtentGroupBox">
+ <property name="title">
<string>Map extent</string>
</property>
- <layout class="QGridLayout" >
- <item row="0" column="0" >
- <layout class="QVBoxLayout" >
+ <layout class="QGridLayout">
+ <item row="0" column="0">
+ <layout class="QVBoxLayout">
<item>
- <widget class="QLabel" name="mXMinLabel" >
- <property name="enabled" >
+ <widget class="QLabel" name="mXMinLabel">
+ <property name="enabled">
<bool>true</bool>
</property>
- <property name="text" >
+ <property name="text">
<string>X min:</string>
</property>
</widget>
</item>
<item>
- <widget class="QLabel" name="mYMinLabel" >
- <property name="text" >
+ <widget class="QLabel" name="mYMinLabel">
+ <property name="text">
<string>Y min:</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="0" column="1" colspan="2" >
- <layout class="QVBoxLayout" >
+ <item row="0" column="1" colspan="2">
+ <layout class="QVBoxLayout">
<item>
- <widget class="QLineEdit" name="mXMinLineEdit" />
+ <widget class="QLineEdit" name="mXMinLineEdit"/>
</item>
<item>
- <widget class="QLineEdit" name="mYMinLineEdit" />
+ <widget class="QLineEdit" name="mYMinLineEdit"/>
</item>
</layout>
</item>
- <item row="0" column="3" >
- <layout class="QVBoxLayout" >
+ <item row="0" column="3">
+ <layout class="QVBoxLayout">
<item>
- <widget class="QLabel" name="mXMaxLabel" >
- <property name="text" >
+ <widget class="QLabel" name="mXMaxLabel">
+ <property name="text">
<string>X max:</string>
</property>
</widget>
</item>
<item>
- <widget class="QLabel" name="mYMaxLabel" >
- <property name="windowModality" >
- <enum>Qt::NonModal</enum>
- </property>
- <property name="text" >
+ <widget class="QLabel" name="mYMaxLabel">
+ <property name="text">
<string>Y max:</string>
</property>
</widget>
</item>
</layout>
</item>
- <item row="0" column="4" >
- <layout class="QVBoxLayout" >
+ <item row="0" column="4">
+ <layout class="QVBoxLayout">
<item>
- <widget class="QLineEdit" name="mXMaxLineEdit" />
+ <widget class="QLineEdit" name="mXMaxLineEdit"/>
</item>
<item>
- <widget class="QLineEdit" name="mYMaxLineEdit" />
+ <widget class="QLineEdit" name="mYMaxLineEdit"/>
</item>
</layout>
</item>
- <item row="1" column="0" colspan="2" >
- <widget class="QPushButton" name="mSetToMapCanvasExtentButton" >
- <property name="text" >
+ <item row="1" column="0" colspan="2">
+ <widget class="QPushButton" name="mSetToMapCanvasExtentButton">
+ <property name="text">
<string>set to map canvas extent</string>
</property>
</widget>
</item>
- <item row="1" column="2" colspan="3" >
+ <item row="1" column="2" colspan="3">
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0">
<size>
<width>311</width>
<height>20</height>
@@ -191,42 +189,49 @@
</layout>
</widget>
</item>
- <item row="6" column="0" colspan="2" >
- <widget class="QLabel" name="mPreviewModeLabel" >
- <property name="text" >
+ <item row="6" column="0" colspan="2">
+ <widget class="QLabel" name="mPreviewModeLabel">
+ <property name="text">
<string>Preview</string>
</property>
- <property name="wordWrap" >
+ <property name="wordWrap">
<bool>true</bool>
</property>
- <property name="buddy" >
+ <property name="buddy">
<cstring>mPreviewModeComboBox</cstring>
</property>
</widget>
</item>
- <item row="6" column="2" >
- <widget class="QComboBox" name="mPreviewModeComboBox" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+ <item row="6" column="3">
+ <widget class="QComboBox" name="mPreviewModeComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
- <item row="6" column="3" >
- <widget class="QPushButton" name="mUpdatePreviewButton" >
- <property name="text" >
+ <item row="6" column="4">
+ <widget class="QPushButton" name="mUpdatePreviewButton">
+ <property name="text">
<string>Update preview</string>
</property>
</widget>
</item>
- <item row="7" column="2" colspan="2" >
+ <item row="7" column="0" colspan="4">
+ <widget class="QCheckBox" name="mKeepLayerListCheckBox">
+ <property name="text">
+ <string>Keep layer list</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="2" colspan="3">
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0">
<size>
<width>458</width>
<height>31</height>
@@ -236,7 +241,7 @@
</item>
</layout>
</widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>mWidthLineEdit</tabstop>
<tabstop>mHeightLineEdit</tabstop>
More information about the QGIS-commit
mailing list