[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>&lt;b>Map&lt;/b></string>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="mNameLabel">
+     <property name="text">
+      <string>&lt;b&gt;Map&lt;/b&gt;</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