diff --git a/src/plugins/gps_importer/qgsgpsplugin.cpp b/src/plugins/gps_importer/qgsgpsplugin.cpp index f7f184bafc8..e359496b1d1 100644 --- a/src/plugins/gps_importer/qgsgpsplugin.cpp +++ b/src/plugins/gps_importer/qgsgpsplugin.cpp @@ -79,7 +79,6 @@ QgsGPSPlugin::~QgsGPSPlugin() delete iter2->second; } - /* * Initialize the GUI interface for the plugin */ @@ -156,13 +155,14 @@ void QgsGPSPlugin::run() myPluginGui->show(); } - void QgsGPSPlugin::createGPX() { + QSettings settings; + QString dir = settings.value( "/Plugin-GPS/gpxdirectory", "." ).toString(); QString fileName = QFileDialog::getSaveFileName( mQGisInterface->mainWindow(), tr( "Save new GPX file as..." ), - ".", + dir, tr( "GPS eXchange file (*.gpx)" ) ); if ( !fileName.isEmpty() ) { @@ -180,6 +180,8 @@ void QgsGPSPlugin::createGPX() "directory." ) ); return; } + settings.setValue( "/Plugin-GPS/gpxdirectory", fileInfo.absolutePath() ); + ofs << "" << std::endl; emit drawVectorLayer( fileName + "?type=track", @@ -191,7 +193,6 @@ void QgsGPSPlugin::createGPX() } } - void QgsGPSPlugin::drawVectorLayer( QString thePathNameQString, QString theBaseNameQString, QString theProviderQString ) @@ -214,7 +215,6 @@ void QgsGPSPlugin::unload() void QgsGPSPlugin::loadGPXFile( QString fileName, bool loadWaypoints, bool loadRoutes, bool loadTracks ) { - //check if input file is readable QFileInfo fileInfo( fileName ); if ( !fileInfo.isReadable() ) @@ -225,10 +225,6 @@ void QgsGPSPlugin::loadGPXFile( QString fileName, bool loadWaypoints, bool loadR return; } - // remember the directory - QSettings settings; - settings.setValue( "/Plugin-GPS/gpxdirectory", fileInfo.path() ); - // add the requested layers if ( loadTracks ) emit drawVectorLayer( fileName + "?type=track", @@ -243,13 +239,11 @@ void QgsGPSPlugin::loadGPXFile( QString fileName, bool loadWaypoints, bool loadR emit closeGui(); } - void QgsGPSPlugin::importGPSFile( QString inputFileName, QgsBabelFormat* importer, bool importWaypoints, bool importRoutes, bool importTracks, QString outputFileName, QString layerName ) { - // what features does the user want to import? QString typeArg; if ( importWaypoints ) @@ -312,15 +306,12 @@ void QgsGPSPlugin::importGPSFile( QString inputFileName, QgsBabelFormat* importe emit closeGui(); } - void QgsGPSPlugin::convertGPSFile( QString inputFileName, int convertType, QString outputFileName, QString layerName ) { - // what features does the user want to import? - QStringList convertStrings; switch ( convertType ) @@ -399,7 +390,6 @@ void QgsGPSPlugin::downloadFromGPS( QString device, QString port, bool downloadTracks, QString outputFileName, QString layerName ) { - // what does the user want to download? QString typeArg, features; if ( downloadWaypoints ) @@ -430,7 +420,6 @@ void QgsGPSPlugin::downloadFromGPS( QString device, QString port, return; } - QgsDebugMsg( QString( "Download command: " ) + babelArgs.join( "|" ) ); QProcess babelProcess; @@ -481,11 +470,9 @@ void QgsGPSPlugin::downloadFromGPS( QString device, QString port, emit closeGui(); } - void QgsGPSPlugin::uploadToGPS( QgsVectorLayer* gpxLayer, QString device, QString port ) { - const QString& source( gpxLayer->dataProvider()->dataSourceUri() ); // what kind of data does the user want to upload? @@ -562,10 +549,8 @@ void QgsGPSPlugin::uploadToGPS( QgsVectorLayer* gpxLayer, QString device, emit closeGui(); } - void QgsGPSPlugin::setupBabel() { - // where is gpsbabel? QSettings settings; mBabelPath = settings.value( "/Plugin-GPS/gpsbabelpath", "" ).toString(); diff --git a/src/plugins/gps_importer/qgsgpsplugingui.cpp b/src/plugins/gps_importer/qgsgpsplugingui.cpp index 78d310a0690..e770cceeeef 100644 --- a/src/plugins/gps_importer/qgsgpsplugingui.cpp +++ b/src/plugins/gps_importer/qgsgpsplugingui.cpp @@ -35,6 +35,10 @@ QgsGPSPluginGui::QgsGPSPluginGui( const BabelMap& importers, , mDevices( devices ) { setupUi( this ); + + // restore size, position and active tab + restoreState(); + populatePortComboBoxes(); populateULLayerComboBox(); populateIMPBabelFormats(); @@ -80,17 +84,17 @@ QgsGPSPluginGui::~QgsGPSPluginGui() void QgsGPSPluginGui::on_buttonBox_accepted() { + saveState(); // what should we do? switch ( tabWidget->currentIndex() ) { - // add a GPX layer? + // add a GPX layer? case 0: emit loadGPXFile( leGPXFile->text(), cbGPXWaypoints->isChecked(), cbGPXRoutes->isChecked(), cbGPXTracks->isChecked() ); break; - - // or import other file? + // or import other file? case 1: { const QString& typeString( cmbIMPFeature->currentText() ); @@ -109,7 +113,7 @@ void QgsGPSPluginGui::on_buttonBox_accepted() int featureType = cmbDLFeatureType->currentIndex(); QString fileName = leDLOutput->text(); - if ( fileName.right( 4 ) != ".gpx" ) + if ( !fileName.toLower().endsWith( ".gpx" ) ) { fileName += ".gpx"; } @@ -140,24 +144,32 @@ void QgsGPSPluginGui::on_buttonBox_accepted() break; } } + // The slots that are called above will emit closeGui() when successful. // If not successful, the user will get another shot without starting from scratch // accept(); } - void QgsGPSPluginGui::on_pbnDLOutput_clicked() { + QSettings settings; + QString dir = settings.value( "/Plugin-GPS/gpxdirectory", "." ).toString(); QString myFileNameQString = - QFileDialog::getSaveFileName( this, //parent dialog + QFileDialog::getSaveFileName( this, tr( "Choose a file name to save under" ), - ".", //initial dir + dir, tr( "GPS eXchange format (*.gpx)" ) ); if ( !myFileNameQString.isEmpty() ) + { + if ( !myFileNameQString.toLower().endsWith( ".gpx" ) ) + { + myFileNameQString += ".gpx"; + } leDLOutput->setText( myFileNameQString ); + settings.setValue( "/Plugin-GPS/gpxdirectory", QFileInfo( myFileNameQString ).absolutePath() ); + } } - void QgsGPSPluginGui::enableRelevantControls() { // load GPX @@ -188,7 +200,6 @@ void QgsGPSPluginGui::enableRelevantControls() // import other file else if ( tabWidget->currentIndex() == 1 ) { - if (( leIMPInput->text() == "" ) || ( leIMPOutput->text() == "" ) || ( leIMPLayer->text() == "" ) ) pbnOK->setEnabled( false ); @@ -218,7 +229,6 @@ void QgsGPSPluginGui::enableRelevantControls() // convert between waypoint/routes else if ( tabWidget->currentIndex() == 4 ) { - if (( leCONVInput->text() == "" ) || ( leCONVOutput->text() == "" ) || ( leCONVLayer->text() == "" ) ) pbnOK->setEnabled( false ); @@ -227,45 +237,47 @@ void QgsGPSPluginGui::enableRelevantControls() } } - void QgsGPSPluginGui::on_buttonBox_rejected() { + saveState(); reject(); } - void QgsGPSPluginGui::on_pbnGPXSelectFile_clicked() { QgsLogger::debug( " GPS File Importer::pbnGPXSelectFile_clicked() " ); - QString myFileTypeQString; - QString myFilterString = tr( "GPS eXchange format (*.gpx)" ); QSettings settings; - QString dir = settings.value( "/Plugin-GPS/gpxdirectory" ).toString(); - if ( dir.isEmpty() ) - dir = "."; + QString dir = settings.value( "/Plugin-GPS/gpxdirectory", "." ).toString(); QString myFileNameQString = QFileDialog::getOpenFileName( - this, //parent dialog - tr( "Select GPX file" ), //caption - dir, //initial dir - myFilterString, //filters to select - &myFileTypeQString ); //the pointer to store selected filter - QgsLogger::debug( "Selected filetype filter is : " + myFileTypeQString ); + this, + tr( "Select GPX file" ), + dir, + tr( "GPS eXchange format (*.gpx)" ) ); if ( !myFileNameQString.isEmpty() ) + { leGPXFile->setText( myFileNameQString ); + settings.setValue( "/Plugin-GPS/gpxdirectory", QFileInfo( myFileNameQString ).absolutePath() ); + } } - void QgsGPSPluginGui::on_pbnIMPInput_clicked() { - QString myFileType; + QSettings settings; + QString dir = settings.value( "/Plugin-GPS/importdirectory", "." ).toString(); + QString tf = mBabelFilter.split( ";;" ).first(); + QString myFileType = settings.value( "/Plugin-GPS/lastImportFilter", tf ).toString(); QString myFileName = QFileDialog::getOpenFileName( - this, //parent dialog - tr( "Select file and format to import" ), //caption - ".", //initial dir + this, + tr( "Select file and format to import" ), + dir, mBabelFilter, - &myFileType ); //the pointer to store selected filter + &myFileType ); if ( !myFileName.isEmpty() ) { + // save directory and file type + settings.setValue( "/Plugin-GPS/importdirectory", QFileInfo( myFileName ).absolutePath() ); + settings.setValue( "/Plugin-GPS/lastImportFilter", myFileType ); + mImpFormat = myFileType.left( myFileType.length() - 6 ); std::map::const_iterator iter; iter = mImporters.find( mImpFormat ); @@ -289,16 +301,24 @@ void QgsGPSPluginGui::on_pbnIMPInput_clicked() } } - void QgsGPSPluginGui::on_pbnIMPOutput_clicked() { + QSettings settings; + QString dir = settings.value( "/Plugin-GPS/gpxdirectory", "." ).toString(); QString myFileNameQString = - QFileDialog::getSaveFileName( this, //parent dialog + QFileDialog::getSaveFileName( this, tr( "Choose a file name to save under" ), - ".", //initial dir + dir, tr( "GPS eXchange format (*.gpx)" ) ); if ( !myFileNameQString.isEmpty() ) + { + if ( !myFileNameQString.toLower().endsWith( ".gpx" ) ) + { + myFileNameQString += ".gpx"; + } leIMPOutput->setText( myFileNameQString ); + settings.setValue( "/Plugin-GPS/gpxdirectory", QFileInfo( myFileNameQString ).absolutePath() ); + } } void QgsGPSPluginGui::on_pbnRefresh_clicked() @@ -343,7 +363,6 @@ void QgsGPSPluginGui::populateULLayerComboBox() cmbULLayer->addItem( mGPXLayers[i]->name() ); } - void QgsGPSPluginGui::populateIMPBabelFormats() { mBabelFilter = ""; @@ -375,31 +394,38 @@ void QgsGPSPluginGui::populateIMPBabelFormats() void QgsGPSPluginGui::on_pbnCONVInput_clicked() { - QString myFileTypeQString; - QString myFilterString = tr( "GPS eXchange format (*.gpx)" ); QSettings settings; - QString dir = settings.value( "/Plugin-GPS/gpxdirectory" ).toString(); - if ( dir.isEmpty() ) - dir = "."; + QString dir = settings.value( "/Plugin-GPS/gpxdirectory", "." ).toString(); QString myFileNameQString = QFileDialog::getOpenFileName( - this, //parent dialog - tr( "Select GPX file" ), //caption - dir, //initial dir - myFilterString, //filters to select - &myFileTypeQString ); //the pointer to store selected filter + this, + tr( "Select GPX file" ), + dir, + tr( "GPS eXchange format (*.gpx)" ) ); if ( !myFileNameQString.isEmpty() ) + { leCONVInput->setText( myFileNameQString ); + settings.setValue( "/Plugin-GPS/gpxdirectory", QFileInfo( myFileNameQString ).absolutePath() ); + } } void QgsGPSPluginGui::on_pbnCONVOutput_clicked() { + QSettings settings; + QString dir = settings.value( "/Plugin-GPS/gpxdirectory", "." ).toString(); QString myFileNameQString = - QFileDialog::getSaveFileName( this, //parent dialog + QFileDialog::getSaveFileName( this, tr( "Choose a file name to save under" ), - ".", //initial dir + dir, tr( "GPS eXchange format (*.gpx)" ) ); if ( !myFileNameQString.isEmpty() ) + { + if ( !myFileNameQString.toLower().endsWith( ".gpx" ) ) + { + myFileNameQString += ".gpx"; + } leCONVOutput->setText( myFileNameQString ); + settings.setValue( "/Plugin-GPS/gpxdirectory", QFileInfo( myFileNameQString ).absolutePath() ); + } } void QgsGPSPluginGui::openDeviceEditor() @@ -413,3 +439,17 @@ void QgsGPSPluginGui::devicesUpdated() { populateIMPBabelFormats(); } + +void QgsGPSPluginGui::saveState() +{ + QSettings settings; + settings.setValue( "/Plugin-GPS/geometry", saveGeometry() ); + settings.setValue( "/Plugin-GPS/lastTab", tabWidget->currentIndex() ); +} + +void QgsGPSPluginGui::restoreState() +{ + QSettings settings; + restoreGeometry( settings.value( "/Plugin-GPS/geometry" ).toByteArray() ); + tabWidget->setCurrentIndex( settings.value( "/Plugin-GPS/lastTab", 4 ).toInt() ); +} diff --git a/src/plugins/gps_importer/qgsgpsplugingui.h b/src/plugins/gps_importer/qgsgpsplugingui.h index 4a231eecbd5..85c6bb7a862 100644 --- a/src/plugins/gps_importer/qgsgpsplugingui.h +++ b/src/plugins/gps_importer/qgsgpsplugingui.h @@ -65,6 +65,9 @@ class QgsGPSPluginGui : public QDialog, private Ui::QgsGPSPluginGuiBase void populatePortComboBoxes(); void populateCONVDialog(); + void saveState(); + void restoreState(); + #if 0 void populateLoadDialog(); void populateDLDialog();