[QGIS Commit] r13585 - trunk/qgis/src/core/composer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat May 29 04:08:40 EDT 2010


Author: mhugent
Date: 2010-05-29 04:08:39 -0400 (Sat, 29 May 2010)
New Revision: 13585

Modified:
   trunk/qgis/src/core/composer/qgscomposerarrow.cpp
   trunk/qgis/src/core/composer/qgscomposition.cpp
Log:
Fix for zList sort problem and added call to composer item readXML in composer arrow

Modified: trunk/qgis/src/core/composer/qgscomposerarrow.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposerarrow.cpp	2010-05-28 21:58:35 UTC (rev 13584)
+++ trunk/qgis/src/core/composer/qgscomposerarrow.cpp	2010-05-29 08:08:39 UTC (rev 13585)
@@ -302,7 +302,7 @@
   composerArrowElem.appendChild( stopPointElem );
 
   elem.appendChild( composerArrowElem );
-  return true;
+  return _writeXML( composerArrowElem, doc );
 }
 
 bool QgsComposerArrow::readXML( const QDomElement& itemElem, const QDomDocument& doc )
@@ -325,6 +325,15 @@
     mArrowColor = QColor( red, green, blue, alpha );
   }
 
+  //restore general composer item properties
+  //needs to be before start point / stop point because setSceneRect()
+  QDomNodeList composerItemList = itemElem.elementsByTagName( "ComposerItem" );
+  if ( composerItemList.size() > 0 )
+  {
+    QDomElement composerItemElem = composerItemList.at( 0 ).toElement();
+    _readXML( composerItemElem, doc );
+  }
+
   //start point
   QDomNodeList startPointList = itemElem.elementsByTagName( "StartPoint" );
   if ( startPointList.size() > 0 )
@@ -343,15 +352,6 @@
     mStopPoint.setY( stopPointElem.attribute( "y", "0.0" ).toDouble() );
   }
 
-
-  //restore general composer item properties
-  QDomNodeList composerItemList = itemElem.elementsByTagName( "ComposerItem" );
-  if ( composerItemList.size() > 0 )
-  {
-    QDomElement composerItemElem = composerItemList.at( 0 ).toElement();
-    _readXML( composerItemElem, doc );
-  }
-
   adaptItemSceneRect();
   return true;
 }

Modified: trunk/qgis/src/core/composer/qgscomposition.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposition.cpp	2010-05-28 21:58:35 UTC (rev 13584)
+++ trunk/qgis/src/core/composer/qgscomposition.cpp	2010-05-29 08:08:39 UTC (rev 13585)
@@ -537,6 +537,11 @@
 
 void QgsComposition::sortZList()
 {
+  if ( mItemZList.size() < 2 )
+  {
+    return;
+  }
+
 #ifdef QGISDEBUG
   //debug: list before sorting
   QgsDebugMsg( "before sorting" );
@@ -547,51 +552,24 @@
   }
 #endif
 
-  QMutableLinkedListIterator<QgsComposerItem*> it( mItemZList );
-  int previousZ, afterZ; //z values of items before and after
-  QgsComposerItem* previousItem;
-  QgsComposerItem* afterItem;
+  QLinkedList<QgsComposerItem*>::const_iterator lIt = mItemZList.constBegin();
+  QLinkedList<QgsComposerItem*> sortedList;
 
-  while ( it.hasNext() )
+  for ( ; lIt != mItemZList.constEnd(); ++lIt )
   {
-    previousItem = it.next();
-    if ( previousItem )
+    QLinkedList<QgsComposerItem*>::iterator insertIt = sortedList.begin();
+    for ( ; insertIt != sortedList.end(); ++insertIt )
     {
-      previousZ = previousItem->zValue();
-    }
-    else
-    {
-      previousZ = -1;
-    }
-
-    if ( !it.hasNext() )
-    {
-      break; //this is the end...
-    }
-    afterItem = it.peekNext();
-
-    if ( afterItem )
-    {
-      afterZ = afterItem->zValue();
-    }
-    else
-    {
-      afterZ = -1;
-    }
-
-    if ( previousZ > afterZ )
-    {
-      //swap items
-      if ( previousItem && afterItem )
+      if (( *lIt )->zValue() < ( *insertIt )->zValue() )
       {
-        it.remove();
-        it.next();
-        it.insert( previousItem );
-        it.previous();
+        break;
       }
     }
+    sortedList.insert( insertIt, ( *lIt ) );
   }
 
+  mItemZList = sortedList;
+
 #ifdef QGISDEBUG
   //debug: list after sorting
   //debug: list before sorting



More information about the QGIS-commit mailing list