- addLayer() and addRasterLayer now take QStringList const references [0]

- now only provides file filters for supported qgis subset of GDAL
  drivers

- disabled SDTS and GML vector format file filters as they're not yet
  currently supported in qgis

Notes:

  [0] thus saving unnecessary copying of string list arguments


git-svn-id: http://svn.osgeo.org/qgis/trunk@807 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
mcoletti 2004-02-12 21:16:06 +00:00
parent dc148c4858
commit 4194892006
2 changed files with 80 additions and 11 deletions

View File

@ -409,6 +409,8 @@ buildSupportedVectorFileFilter_( QString & fileFilters )
{ {
driver = driverRegistrar->GetDriver( i ); driver = driverRegistrar->GetDriver( i );
Q_CHECK_PTR( driver );
if ( ! driver ) if ( ! driver )
{ {
qWarning( "unable to get driver %d", i ); qWarning( "unable to get driver %d", i );
@ -432,8 +434,9 @@ buildSupportedVectorFileFilter_( QString & fileFilters )
} }
else if ( driverName.startsWith( "SDTS" ) ) else if ( driverName.startsWith( "SDTS" ) )
{ {
fileFilters += createFileFilter_( "Spatial Data Transfer Standard", // XXX not yet supported; post 0.1 release task
"*catd.ddf" ); // fileFilters += createFileFilter_( "Spatial Data Transfer Standard",
// "*catd.ddf" );
} }
else if ( driverName.startsWith( "TIGER" ) ) else if ( driverName.startsWith( "TIGER" ) )
{ {
@ -469,8 +472,9 @@ buildSupportedVectorFileFilter_( QString & fileFilters )
} }
else if ( driverName.startsWith( "GML" ) ) else if ( driverName.startsWith( "GML" ) )
{ {
fileFilters += createFileFilter_( "Geography Markup Language", // XXX not yet supported; post 0.1 release task
"*.gml" ); // fileFilters += createFileFilter_( "Geography Markup Language",
// "*.gml" );
} }
else else
{ {
@ -523,16 +527,18 @@ QgisApp::addLayer()
/** \brief overloaded vesion of the above method that takes a list of /** \brief overloaded vesion of the above method that takes a list of
* filenames instead of prompting user with a dialog. */ * filenames instead of prompting user with a dialog. */
void QgisApp::addLayer(QStringList theLayerQStringList) void
QgisApp::addLayer(QStringList const & theLayerQStringList)
{ {
// check to see if we have an ogr provider available // check to see if we have an ogr provider available
QString pOgr = providerRegistry->library("ogr"); QString pOgr = providerRegistry->library("ogr");
if (pOgr.length() > 0) { if (pOgr.length() > 0) {
mapCanvas->freeze(); mapCanvas->freeze();
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
QStringList::Iterator it = theLayerQStringList.begin(); QStringList::ConstIterator it = theLayerQStringList.begin();
while (it != theLayerQStringList.end()) { while (it != theLayerQStringList.end()) {
if (isValidVectorFileName(*it)) { if ( true ) {
// if (isValidVectorFileName(*it)) {
QFileInfo fi(*it); QFileInfo fi(*it);
QString base = fi.baseName(); QString base = fi.baseName();
@ -579,6 +585,55 @@ void QgisApp::addLayer(QStringList theLayerQStringList)
} }
/**
The subset of GDAL formats that we currently support.
@note
Some day this won't be necessary as there'll be a time when
theoretically we'll support everything that GDAL can throw at us.
These are GDAL driver description strings.
*/
static const char* const supportedRasterFormats_[] =
{ "SDTS",
"AIG",
"AAIGrid",
"GTiff",
"USGSDEM",
"HFA",
"GRASS",
"" // used to indicate end of list
};
/**
returns true if the given raster driver name is one currently
supported, otherwise it returns false
@param driverName GDAL driver description string
*/
static
bool
isSupportedRasterDriver_( QString const & driverName )
{
size_t i = 0;
while ( supportedRasterFormats_[i][0] ) // while not end of string list
{
if ( driverName == supportedRasterFormats_[i] )
{
return true;
}
i++;
}
return false;
} // isSupportedRasterDriver_
/** /**
@ -632,12 +687,26 @@ buildSupportedRasterFileFilter_( QString & fileFilters )
{ {
driver = driverManager->GetDriver( i ); driver = driverManager->GetDriver( i );
Q_CHECK_PTR( driver );
if ( ! driver ) if ( ! driver )
{ {
qWarning( "unable to get driver %d", i ); qWarning( "unable to get driver %d", i );
continue; continue;
} }
// now we need to see if the driver is for something currently
// supported; if not, we give it a miss for the next driver
if ( ! isSupportedRasterDriver_( driver->GetDescription() ) )
{
// not supported, therefore skip
#ifdef QT_DEBUG
qWarning( "skipping unsupported driver %s", driver->GetDescription() );
#endif
continue;
}
// std::cerr << "got driver string " << driver->GetDescription() << "\n"; // std::cerr << "got driver string " << driver->GetDescription() << "\n";
driverMetadata = driver->GetMetadata(); driverMetadata = driver->GetMetadata();
@ -730,7 +799,7 @@ QgisApp::addRasterLayer()
void QgisApp::addRasterLayer(QStringList theFileNameQStringList) void QgisApp::addRasterLayer(QStringList const & theFileNameQStringList)
{ {
if (theFileNameQStringList.empty()) { // no files selected so bail out, but if (theFileNameQStringList.empty()) { // no files selected so bail out, but
// allow mapCanvas to handle events // allow mapCanvas to handle events
@ -740,7 +809,7 @@ void QgisApp::addRasterLayer(QStringList theFileNameQStringList)
} }
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
for (QStringList::Iterator myIterator = theFileNameQStringList.begin(); myIterator != theFileNameQStringList.end(); ++myIterator) { for (QStringList::ConstIterator myIterator = theFileNameQStringList.begin(); myIterator != theFileNameQStringList.end(); ++myIterator) {
if (isValidRasterFileName(*myIterator)) { if (isValidRasterFileName(*myIterator)) {
QFileInfo myFileInfo(*myIterator); QFileInfo myFileInfo(*myIterator);
QString myDirNameQString = myFileInfo.dirPath(); //get the directory the .adf file was in QString myDirNameQString = myFileInfo.dirPath(); //get the directory the .adf file was in

View File

@ -53,10 +53,10 @@ public:
void addVectorLayer(QString vectorLayerPath, QString baseName, QString providerKey); void addVectorLayer(QString vectorLayerPath, QString baseName, QString providerKey);
/** \brief overloaded vesion of the privat addLayer method that takes a list of /** \brief overloaded vesion of the privat addLayer method that takes a list of
* filenames instead of prompting user with a dialog. */ * filenames instead of prompting user with a dialog. */
void addLayer(QStringList theLayerQStringList); void addLayer(QStringList const & theLayerQStringList);
/** \brief overloaded vesion of the privat addLRasterayer method that takes a list of /** \brief overloaded vesion of the privat addLRasterayer method that takes a list of
* filenames instead of prompting user with a dialog. */ * filenames instead of prompting user with a dialog. */
void addRasterLayer(QStringList theLayerQStringList); void addRasterLayer(QStringList const & theLayerQStringList);
private: private:
//private: //private: