[QGIS Commit] r10604 - in trunk/qgis/src: app core/raster
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Apr 20 05:43:49 EDT 2009
Author: wonder
Date: 2009-04-20 05:43:49 -0400 (Mon, 20 Apr 2009)
New Revision: 10604
Modified:
trunk/qgis/src/app/qgsrasterlayerproperties.cpp
trunk/qgis/src/core/raster/qgscolorrampshader.h
Log:
Sorting of raster color ramp items: better and faster.
... why to use insert sort if we have quicksort for free ...? :)
(was taking minutes for one raster layer)
Modified: trunk/qgis/src/app/qgsrasterlayerproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsrasterlayerproperties.cpp 2009-04-19 23:47:12 UTC (rev 10603)
+++ trunk/qgis/src/app/qgsrasterlayerproperties.cpp 2009-04-20 09:43:49 UTC (rev 10604)
@@ -1371,8 +1371,6 @@
//iterate through mColormapTreeWidget and set colormap info of layer
QList<QgsColorRampShader::ColorRampItem> myColorRampItems;
- bool inserted = false;
- int myCurrentIndex = 0;
int myTopLevelItemCount = mColormapTreeWidget->topLevelItemCount();
QTreeWidgetItem* myCurrentItem;
for ( int i = 0; i < myTopLevelItemCount; ++i )
@@ -1386,35 +1384,13 @@
myNewColorRampItem.value = myCurrentItem->text( 0 ).toDouble();
myNewColorRampItem.color = myCurrentItem->background( 1 ).color();
myNewColorRampItem.label = myCurrentItem->text( 2 );
-
- //Simple insertion sort - speed is not a huge factor here
- inserted = false;
- myCurrentIndex = 0;
- while ( !inserted )
- {
- if ( 0 == myColorRampItems.size() || myCurrentIndex == myColorRampItems.size() )
- {
- myColorRampItems.push_back( myNewColorRampItem );
- inserted = true;
- }
- else if ( myColorRampItems[myCurrentIndex].value > myNewColorRampItem.value )
- {
- myColorRampItems.insert( myCurrentIndex, myNewColorRampItem );
- inserted = true;
- }
- else if ( myColorRampItems[myCurrentIndex].value <= myNewColorRampItem.value && myCurrentIndex == myColorRampItems.size() - 1 )
- {
- myColorRampItems.push_back( myNewColorRampItem );
- inserted = true;
- }
- else if ( myColorRampItems[myCurrentIndex].value <= myNewColorRampItem.value && myColorRampItems[myCurrentIndex+1].value > myNewColorRampItem.value )
- {
- myColorRampItems.insert( myCurrentIndex + 1, myNewColorRampItem );
- inserted = true;
- }
- myCurrentIndex++;
- }
+
+ myColorRampItems.append( myNewColorRampItem );
}
+
+ // sort the shader items
+ qSort(myColorRampItems);
+
myRasterShaderFunction->setColorRampItemList( myColorRampItems );
//Reload table in GUI because it may have been sorted or contained invalid values
populateColorMapTable( myColorRampItems );
Modified: trunk/qgis/src/core/raster/qgscolorrampshader.h
===================================================================
--- trunk/qgis/src/core/raster/qgscolorrampshader.h 2009-04-19 23:47:12 UTC (rev 10603)
+++ trunk/qgis/src/core/raster/qgscolorrampshader.h 2009-04-20 09:43:49 UTC (rev 10604)
@@ -44,6 +44,9 @@
QString label;
double value;
QColor color;
+
+ // compare operator for sorting
+ bool operator<(const ColorRampItem& other) const { return value < other.value; }
};
enum ColorRamp_TYPE
More information about the QGIS-commit
mailing list