[QGIS Commit] r15687 - trunk/qgis/src/core

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Apr 9 16:37:36 EDT 2011


Author: jef
Date: 2011-04-09 13:37:36 -0700 (Sat, 09 Apr 2011)
New Revision: 15687

Modified:
   trunk/qgis/src/core/qgsvectorlayer.cpp
   trunk/qgis/src/core/qgsvectorlayer.h
Log:
fix #3057

Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp	2011-04-09 20:35:06 UTC (rev 15686)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp	2011-04-09 20:37:36 UTC (rev 15687)
@@ -2679,14 +2679,14 @@
   }
   mJoinBuffer->readXml( layer_node );
 
+  updateFieldMap();
+
   QString errorMsg;
   if ( !readSymbology( layer_node, errorMsg ) )
   {
     return false;
   }
 
-  updateFieldMap();
-
   return mValid;               // should be true if read successfully
 
 } // void QgsVectorLayer::readXml
@@ -3039,16 +3039,27 @@
   if ( !aliasesNode.isNull() )
   {
     QDomElement aliasElem;
-    int index;
     QString name;
 
     QDomNodeList aliasNodeList = aliasesNode.toElement().elementsByTagName( "alias" );
     for ( int i = 0; i < aliasNodeList.size(); ++i )
     {
       aliasElem = aliasNodeList.at( i ).toElement();
-      index = aliasElem.attribute( "index" ).toInt();
-      name = aliasElem.attribute( "name" );
-      mAttributeAliasMap.insert( index, name );
+
+      QString field;
+      if ( aliasElem.hasAttribute( "field" ) )
+      {
+        field = aliasElem.attribute( "field" );
+      }
+      else
+      {
+        int index = aliasElem.attribute( "index" ).toInt();
+
+        if ( pendingFields().contains( index ) )
+          field = pendingFields()[ index ].name();
+      }
+
+      mAttributeAliasMap.insert( field, aliasElem.attribute( "name" ) );
     }
   }
 
@@ -3217,11 +3228,16 @@
   if ( mAttributeAliasMap.size() > 0 )
   {
     QDomElement aliasElem = doc.createElement( "aliases" );
-    QMap<int, QString>::const_iterator a_it = mAttributeAliasMap.constBegin();
+    QMap<QString, QString>::const_iterator a_it = mAttributeAliasMap.constBegin();
     for ( ; a_it != mAttributeAliasMap.constEnd(); ++a_it )
     {
+      int idx = fieldNameIndex( a_it.key() );
+      if( idx < 0 )
+	continue;
+
       QDomElement aliasEntryElem = doc.createElement( "alias" );
-      aliasEntryElem.setAttribute( "index", QString::number( a_it.key() ) );
+      aliasEntryElem.setAttribute( "field", a_it.key() );
+      aliasEntryElem.setAttribute( "index", idx );
       aliasEntryElem.setAttribute( "name", a_it.value() );
       aliasElem.appendChild( aliasEntryElem );
     }
@@ -3317,21 +3333,23 @@
 
 void QgsVectorLayer::addAttributeAlias( int attIndex, QString aliasString )
 {
-  mAttributeAliasMap.insert( attIndex, aliasString );
+  if ( !pendingFields().contains( attIndex ) )
+    return;
+
+  QString name = pendingFields()[ attIndex ].name();
+
+  mAttributeAliasMap.insert( name, aliasString );
   emit layerModified( false );
 }
 
 QString QgsVectorLayer::attributeAlias( int attributeIndex ) const
 {
-  QMap<int, QString>::const_iterator alias_it = mAttributeAliasMap.find( attributeIndex );
-  if ( alias_it != mAttributeAliasMap.constEnd() )
-  {
-    return alias_it.value();
-  }
-  else
-  {
-    return QString();
-  }
+  if ( !pendingFields().contains( attributeIndex ) )
+    return "";
+
+  QString name = pendingFields()[ attributeIndex ].name();
+
+  return mAttributeAliasMap.value( name, "" );
 }
 
 QString QgsVectorLayer::attributeDisplayName( int attributeIndex ) const
@@ -3369,7 +3387,6 @@
   mDeletedAttributeIds.insert( index );
   mAddedAttributeIds.remove( index );
   mUpdatedFields.remove( index );
-  mAttributeAliasMap.remove( index );
 
   setModified( true, false );
 

Modified: trunk/qgis/src/core/qgsvectorlayer.h
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.h	2011-04-09 20:35:06 UTC (rev 15686)
+++ trunk/qgis/src/core/qgsvectorlayer.h	2011-04-09 20:37:36 UTC (rev 15687)
@@ -884,8 +884,8 @@
     /** field map to commit */
     QgsFieldMap mUpdatedFields;
 
-    /**Map that stores the aliases for attributes. Key is the attribute index and value the alias for that attribute*/
-    QMap<int, QString> mAttributeAliasMap;
+    /**Map that stores the aliases for attributes. Key is the attribute name and value the alias for that attribute*/
+    QMap< QString, QString > mAttributeAliasMap;
 
     /** max field index */
     int mMaxUpdatedIndex;



More information about the QGIS-commit mailing list