Trivial clean-up of QGisApp::addRasterLayer() :

- s/Erdas/ERDAS/

- s/Usgs/USGS/

- s/Sdts/SDTS/

- s/Lyr/Layer/

- use QStringList::empty() instead of QStringList::length() == 0

- now unfreeze mapCanvas if user didn't select files

- use more intuitive and safer for() instead of while()

- prettified code

- added XXX comment regarding possible initContextMenu() invocation
  even if layer is invalid


git-svn-id: http://svn.osgeo.org/qgis/trunk@602 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
mcoletti 2004-01-26 22:48:53 +00:00
parent e8a904f025
commit 409d73805f

View File

@ -375,31 +375,39 @@ void QgisApp::addLayer()
}
void QgisApp::addRasterLayer()
void
QgisApp::addRasterLayer()
{
// insure that the map canvas temporarily suspends event processing
// until we've loaded the raster
mapCanvas->freeze();
QString myFileTypeQString;
QString myArcInfoBinaryGridFilterString="Arc Info Binary Grid (*.adf)";
QString myArcInfoAsciiGridFilterString="Arc Info Ascii Grid (*.asc;*.grd)";
QString myErdasFilterString="Erdas Imagine (*.img)";
QString myERDASFilterString="ERDAS Imagine (*.img)";
QString myGeoTiffFilterString="Geo tiff (*.tif)";
QString myUsgsAsciiDemFilterString="Usgs Ascii DEM (*.dem)";
QString myUSGSAsciiDemFilterString="USGS Ascii DEM (*.dem)";
QString myGrassFilterString="Grass raster (*.*)";
QString mySdtsFilterString="Sdts (*CATD*.DDF)";
QString mySDTSFilterString="SDTS (*CATD*.DDF)";
QString myAllRasterFormats = "All Rasters (*.asc;*.grd;*.img;*.tif;*.png;*.jpg;*.dem;*.DDF)";
//QString myBilFilterString="Band Interleaved by Line (*.bil)";
//QString myJpgFilterString="Geo jpg (*.jpg)";
QStringList myFileNameQStringList = QFileDialog::getOpenFileNames(
myAllRasterFormats + ";;" +
myArcInfoBinaryGridFilterString + ";;" +
myArcInfoAsciiGridFilterString + ";;" +
myErdasFilterString + ";;" +
myERDASFilterString + ";;" +
//myBilFilterString + ";;" +
//myJpgFilterString + ";;" +
myGeoTiffFilterString + ";;" +
myGrassFilterString + ";;" +
myUsgsAsciiDemFilterString + ";;" +
mySdtsFilterString, //filters to select
myUSGSAsciiDemFilterString + ";;" +
mySDTSFilterString, //filters to select
"" , //initial dir
this , //parent dialog
"OpenFileDialog" , //QFileDialog qt object name
@ -407,65 +415,89 @@ void QgisApp::addRasterLayer()
&myFileTypeQString //the pointer to store selected filter
);
//cout << "Selected filetype filter is : " << myFileTypeQString << endl;
if (myFileNameQStringList.size()==0) return; //no files selected so bail out
if ( myFileNameQStringList.empty() )
{ // no files selected so bail out, but
// allow mapCanvas to handle events
// first
mapCanvas->freeze( false );
return;
}
QApplication::setOverrideCursor(Qt::WaitCursor);
if (myFileTypeQString==myArcInfoBinaryGridFilterString)
// handle ArcInfo rasters
if ( myArcInfoBinaryGridFilterString == myFileTypeQString )
{
//if multiple file were selected ignore the others because currently we
//can only select one AI Binary Grid dir at a time
QStringList::Iterator it = myFileNameQStringList.begin();
QFileInfo fi(*it);
QString base = fi.dirPath(); //get the directory the .adf file was in
// create the layer
QgsRasterLayer *lyr = new QgsRasterLayer(*it, base);
QObject::connect(lyr,SIGNAL(repaintRequested()),mapCanvas,SLOT(refresh()));
QgsRasterLayer *layer = new QgsRasterLayer(*it, base);
QObject::connect(layer,SIGNAL(repaintRequested()),mapCanvas,SLOT(refresh()));
if (lyr->isValid()) {
if ( layer->isValid() )
{
// add it to the mapcanvas collection
mapCanvas->addLayer(lyr);
} else {
QString msg = *it;
msg += " is not a valid or recognized raster data source";
QMessageBox::critical(this, "Invalid Data Source", msg);
mapCanvas->addLayer( layer );
} else
{
QString msg( *it + " is not a valid or recognized raster data source" );
QMessageBox::critical( this, "Invalid Data Source", msg );
}
// init the context menu so it can connect to slots in main app
lyr->initContextMenu(this);
layer->initContextMenu( this );
}
else // Any other gdal type
else // Any other GDAL type
{
QStringList::Iterator it = myFileNameQStringList.begin();
while (it != myFileNameQStringList.end()) {
for ( QStringList::Iterator it = myFileNameQStringList.begin();
it != myFileNameQStringList.end();
++it )
{
QFileInfo fi(*it);
QString base = fi.baseName();
QString baseName = fi.baseName();
// create the layer
QgsRasterLayer *lyr = new QgsRasterLayer(*it, base);
QObject::connect(lyr,SIGNAL(repaintRequested()),mapCanvas,SLOT(refresh()));
QgsRasterLayer *layer = new QgsRasterLayer(*it, baseName);
QObject::connect( layer, SIGNAL(repaintRequested()), mapCanvas, SLOT(refresh()) );
if (lyr->isValid()) {
// add it to the mapcanvas collection
mapCanvas->addLayer(lyr);
} else {
QString msg = *it;
msg += " is not a valid or recognized raster data source";
QMessageBox::critical(this, "Invalid Data Source", msg);
if ( layer->isValid() )
{// add it to the mapcanvas collection
mapCanvas->addLayer( layer );
} else
{
QString msg( *it + " is not a valid or recognized raster data source" );
QMessageBox::critical( this, "Invalid Data Source", msg );
}
// init the context menu so it can connect to slots in main app
lyr->initContextMenu(this);
++it;
// XXX Yes, but what if the layer is invalid? Should we still be doing this?
layer->initContextMenu( this );
}
}
mapLegend->update();
qApp->processEvents();
mapCanvas->freeze(false);
mapCanvas->render2();
QApplication::restoreOverrideCursor();
statusBar()->message(mapCanvas->extent().stringRep());
}
statusBar()->message( mapCanvas->extent().stringRep() );
} // QgisApp::addRasterLayer()
#ifdef POSTGRESQL
void QgisApp::addDatabaseLayer()