mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
use native file dialogs wherever possible (fixes #3763)
This commit is contained in:
parent
f294c16b94
commit
f749a5e31f
@ -534,37 +534,27 @@ class QgsPaintEngineHack : public QPaintEngine
|
||||
void QgsComposer::on_mActionExportAsPDF_triggered()
|
||||
{
|
||||
QSettings myQSettings; // where we keep last used filter in persistent state
|
||||
QString myLastUsedFile = myQSettings.value( "/UI/lastSaveAsPdfFile", "qgis.pdf" ).toString();
|
||||
QFileInfo file( myLastUsedFile );
|
||||
QFileDialog *myQFileDialog = new QFileDialog( this, tr( "Choose a file name to save the map as" ),
|
||||
file.path(), tr( "PDF Format" ) + " (*.pdf *PDF)" );
|
||||
myQFileDialog->selectFile( file.fileName() );
|
||||
myQFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
myQFileDialog->setConfirmOverwrite( true );
|
||||
myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
QString lastUsedFile = myQSettings.value( "/UI/lastSaveAsPdfFile", "qgis.pdf" ).toString();
|
||||
QFileInfo file( lastUsedFile );
|
||||
|
||||
int result = myQFileDialog->exec();
|
||||
raise();
|
||||
if ( result != QDialog::Accepted )
|
||||
QString outputFileName = QFileDialog::getSaveFileName(
|
||||
this,
|
||||
tr( "Choose a file name to save the map as" ),
|
||||
file.path(),
|
||||
tr( "PDF Format" ) + " (*.pdf *.PDF)" );
|
||||
if ( outputFileName.isEmpty() )
|
||||
return;
|
||||
|
||||
QString myOutputFileNameQString = myQFileDialog->selectedFiles().first();
|
||||
if ( myOutputFileNameQString == "" )
|
||||
if ( !outputFileName.endsWith( ".pdf", Qt::CaseInsensitive ) )
|
||||
{
|
||||
return;
|
||||
outputFileName += ".pdf";
|
||||
}
|
||||
|
||||
if ( !myOutputFileNameQString.endsWith( ".pdf", Qt::CaseInsensitive ) )
|
||||
{
|
||||
myOutputFileNameQString.append( ".pdf" );
|
||||
}
|
||||
|
||||
myQSettings.setValue( "/UI/lastSaveAsPdfFile", myOutputFileNameQString );
|
||||
myQSettings.setValue( "/UI/lastSaveAsPdfFile", outputFileName );
|
||||
|
||||
QPrinter printer;
|
||||
|
||||
printer.setOutputFormat( QPrinter::PdfFormat );
|
||||
printer.setOutputFileName( myOutputFileNameQString );
|
||||
printer.setOutputFileName( outputFileName );
|
||||
printer.setPaperSize( QSizeF( mComposition->paperWidth(), mComposition->paperHeight() ), QPrinter::Millimeter );
|
||||
|
||||
QPaintEngine *engine = printer.paintEngine();
|
||||
@ -697,93 +687,12 @@ void QgsComposer::on_mActionExportAsImage_triggered()
|
||||
return;
|
||||
}
|
||||
|
||||
// Get file and format (stolen from qgisapp.cpp but modified significantely)
|
||||
QPair<QString, QString> fileNExt = QgisGui::getSaveAsImageName( this, tr( "Choose a file name to save the map image as" ) );
|
||||
|
||||
//create a map to hold the QImageIO names and the filter names
|
||||
//the QImageIO name must be passed to the mapcanvas saveas image function
|
||||
typedef QMap<QString, QString> FilterMap;
|
||||
FilterMap myFilterMap;
|
||||
QgsDebugMsg( QString( "Selected filter: %1" ).arg( fileNExt.first ) );
|
||||
QgsDebugMsg( QString( "Image type: %1" ).arg( fileNExt.second ) );
|
||||
|
||||
//find out the last used filter
|
||||
QSettings myQSettings; // where we keep last used filter in persistent state
|
||||
QString myLastUsedFormat = myQSettings.value( "/UI/lastSaveAsImageFormat", "png" ).toString();
|
||||
QString myLastUsedFile = myQSettings.value( "/UI/lastSaveAsImageFile", "qgis.png" ).toString();
|
||||
QFileInfo file( myLastUsedFile );
|
||||
|
||||
// get a list of supported output image types
|
||||
int myCounterInt = 0;
|
||||
QString myFilters;
|
||||
QString myLastUsedFilter;
|
||||
for ( ; myCounterInt < QImageWriter::supportedImageFormats().count(); myCounterInt++ )
|
||||
{
|
||||
QString myFormat = QString( QImageWriter::supportedImageFormats().at( myCounterInt ) );
|
||||
QString myFilter = tr( "%1 format (*.%2 *.%3)" )
|
||||
.arg( myFormat ).arg( myFormat.toLower() ).arg( myFormat.toUpper() );
|
||||
|
||||
if ( myCounterInt > 0 )
|
||||
myFilters += ";;";
|
||||
myFilters += myFilter;
|
||||
myFilterMap[myFilter] = myFormat;
|
||||
if ( myFormat == myLastUsedFormat )
|
||||
{
|
||||
myLastUsedFilter = myFilter;
|
||||
}
|
||||
}
|
||||
#ifdef QGISDEBUG
|
||||
QgsDebugMsg( "Available Filters Map: " );
|
||||
FilterMap::Iterator myIterator;
|
||||
for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator )
|
||||
{
|
||||
QgsDebugMsg( QString( "%1 : %2" ).arg( myIterator.key() ).arg( myIterator.value() ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
//create a file dialog using the the filter list generated above
|
||||
std::auto_ptr < QFileDialog > myQFileDialog(
|
||||
new QFileDialog(
|
||||
this,
|
||||
tr( "Choose a file name to save the map image as" ),
|
||||
file.path(),
|
||||
myFilters
|
||||
)
|
||||
);
|
||||
|
||||
myQFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
myQFileDialog->setConfirmOverwrite( true );
|
||||
|
||||
// set the filter to the last one used
|
||||
myQFileDialog->selectFilter( myLastUsedFilter );
|
||||
|
||||
// set the 'Open' button to something that makes more sense
|
||||
myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
|
||||
//prompt the user for a file name
|
||||
QString myOutputFileNameQString;
|
||||
|
||||
int result = myQFileDialog->exec();
|
||||
//raise();
|
||||
|
||||
if ( result != QDialog::Accepted )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
myOutputFileNameQString = myQFileDialog->selectedFiles().last();
|
||||
QgsDebugMsg( myOutputFileNameQString );
|
||||
QString myFilterString = myQFileDialog->selectedFilter();
|
||||
QgsDebugMsg( QString( "Selected filter: %1" ).arg( myFilterString ) );
|
||||
QgsDebugMsg( QString( "Image type: %1" ).arg( myFilterMap[myFilterString] ) );
|
||||
|
||||
// Add the file type suffix to the fileName if required
|
||||
if ( !myOutputFileNameQString.endsWith( myFilterMap[myFilterString] ) )
|
||||
{
|
||||
myOutputFileNameQString += "." + myFilterMap[myFilterString];
|
||||
}
|
||||
|
||||
myQSettings.setValue( "/UI/lastSaveAsImageFormat", myFilterMap[myFilterString] );
|
||||
myQSettings.setValue( "/UI/lastSaveAsImageFile", myOutputFileNameQString );
|
||||
|
||||
if ( myOutputFileNameQString == "" )
|
||||
if ( fileNExt.first.isEmpty() )
|
||||
return;
|
||||
|
||||
QImage image( QSize( width, height ), QImage::Format_ARGB32 );
|
||||
@ -809,7 +718,7 @@ void QgsComposer::on_mActionExportAsImage_triggered()
|
||||
p.end();
|
||||
mComposition->setPlotStyle( QgsComposition::Preview );
|
||||
mView->setPaintingEnabled( true );
|
||||
image.save( myOutputFileNameQString, myFilterMap[myFilterString].toLocal8Bit().data() );
|
||||
image.save( fileNExt.first, fileNExt.second.toLocal8Bit().constData() );
|
||||
}
|
||||
|
||||
|
||||
@ -820,10 +729,10 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
|
||||
showWMSPrintingWarning();
|
||||
}
|
||||
|
||||
QString myQSettingsLabel = "/UI/displaySVGWarning";
|
||||
QSettings myQSettings;
|
||||
QString settingsLabel = "/UI/displaySVGWarning";
|
||||
QSettings settings;
|
||||
|
||||
bool displaySVGWarning = myQSettings.value( myQSettingsLabel, true ).toBool();
|
||||
bool displaySVGWarning = settings.value( settingsLabel, true ).toBool();
|
||||
|
||||
if ( displaySVGWarning )
|
||||
{
|
||||
@ -832,7 +741,7 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
|
||||
m->setCheckBoxText( tr( "Don't show this message again" ) );
|
||||
m->setCheckBoxState( Qt::Unchecked );
|
||||
m->setCheckBoxVisible( true );
|
||||
m->setCheckBoxQSettingsLabel( myQSettingsLabel );
|
||||
m->setCheckBoxQSettingsLabel( settingsLabel );
|
||||
m->setMessageAsHtml( tr( "<p>The SVG export function in Qgis has several "
|
||||
"problems due to bugs and deficiencies in the " )
|
||||
+ tr( "Qt4 svg code. In particular, there are problems "
|
||||
@ -845,39 +754,31 @@ void QgsComposer::on_mActionExportAsSVG_triggered()
|
||||
"</p>" ) );
|
||||
m->exec();
|
||||
}
|
||||
QString myLastUsedFile = myQSettings.value( "/UI/lastSaveAsSvgFile", "qgis.svg" ).toString();
|
||||
QFileInfo file( myLastUsedFile );
|
||||
QFileDialog *myQFileDialog = new QFileDialog( this, tr( "Choose a file name to save the map as" ),
|
||||
file.path(), tr( "SVG Format" ) + " (*.svg *SVG)" );
|
||||
myQFileDialog->selectFile( file.fileName() );
|
||||
myQFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
myQFileDialog->setConfirmOverwrite( true );
|
||||
myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
|
||||
int result = myQFileDialog->exec();
|
||||
raise();
|
||||
if ( result != QDialog::Accepted )
|
||||
QString lastUsedFile = settings.value( "/UI/lastSaveAsSvgFile", "qgis.svg" ).toString();
|
||||
QFileInfo file( lastUsedFile );
|
||||
|
||||
QString outputFileName = QFileDialog::getSaveFileName(
|
||||
this,
|
||||
tr( "Choose a file name to save the map as" ),
|
||||
file.path(),
|
||||
tr( "SVG Format" ) + " (*.svg *.SVG)" );
|
||||
if ( outputFileName.isEmpty() )
|
||||
return;
|
||||
|
||||
QString myOutputFileNameQString = myQFileDialog->selectedFiles().first();
|
||||
if ( myOutputFileNameQString == "" )
|
||||
if ( !outputFileName.endsWith( ".svg", Qt::CaseInsensitive ) )
|
||||
{
|
||||
return;
|
||||
outputFileName += ".svg";
|
||||
}
|
||||
|
||||
if ( !myOutputFileNameQString.endsWith( ".svg", Qt::CaseInsensitive ) )
|
||||
{
|
||||
myOutputFileNameQString.append( ".svg" );
|
||||
}
|
||||
|
||||
myQSettings.setValue( "/UI/lastSaveAsSvgFile", myOutputFileNameQString );
|
||||
settings.setValue( "/UI/lastSaveAsSvgFile", outputFileName );
|
||||
mComposition->setPlotStyle( QgsComposition::Print );
|
||||
|
||||
QSvgGenerator generator;
|
||||
#if QT_VERSION >= 0x040500
|
||||
generator.setTitle( QgsProject::instance()->title() );
|
||||
#endif
|
||||
generator.setFileName( myOutputFileNameQString );
|
||||
generator.setFileName( outputFileName );
|
||||
//width in pixel
|
||||
int width = ( int )( mComposition->paperWidth() * mComposition->printResolution() / 25.4 );
|
||||
//height in pixel
|
||||
@ -976,11 +877,13 @@ void QgsComposer::on_mActionSaveAsTemplate_triggered()
|
||||
//show file dialog
|
||||
QSettings settings;
|
||||
QString lastSaveDir = settings.value( "UI/lastComposerTemplateDir", "" ).toString();
|
||||
QString saveFileName = QFileDialog::getSaveFileName( 0, tr( "save template" ), lastSaveDir, "*.qpt" );
|
||||
QString saveFileName = QFileDialog::getSaveFileName(
|
||||
this,
|
||||
tr( "Save template" ),
|
||||
lastSaveDir,
|
||||
tr( "Composer templates" ) + " (*.qpt *.QPT)" );
|
||||
if ( saveFileName.isEmpty() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QFileInfo saveFileInfo( saveFileName );
|
||||
//check if suffix has been added
|
||||
|
@ -2701,7 +2701,7 @@ void QgisApp::fileOpen()
|
||||
// Retrieve last used project dir from persistent settings
|
||||
QSettings settings;
|
||||
QString lastUsedDir = settings.value( "/UI/lastProjectDir", "." ).toString();
|
||||
QString fullPath = QFileDialog::getOpenFileName( this, tr( "Choose a QGIS project file to open" ), lastUsedDir, tr( "QGis files (*.qgs)" ) );
|
||||
QString fullPath = QFileDialog::getOpenFileName( this, tr( "Choose a QGIS project file to open" ), lastUsedDir, tr( "QGis files (*.qgs *.QGS)" ) );
|
||||
if ( fullPath.isNull() )
|
||||
{
|
||||
return;
|
||||
@ -2840,31 +2840,20 @@ bool QgisApp::fileSave()
|
||||
QSettings settings;
|
||||
QString lastUsedDir = settings.value( "/UI/lastProjectDir", "." ).toString();
|
||||
|
||||
std::auto_ptr<QFileDialog> saveFileDialog( new QFileDialog( this,
|
||||
tr( "Choose a QGIS project file" ),
|
||||
lastUsedDir, tr( "QGis files (*.qgs)" ) ) );
|
||||
QString path = QFileDialog::getSaveFileName(
|
||||
this,
|
||||
tr( "Choose a QGIS project file" ),
|
||||
lastUsedDir + "/" + QgsProject::instance()->title(),
|
||||
tr( "QGis files (*.qgs *.QGS)" ) );
|
||||
if ( path.isEmpty() )
|
||||
return true;
|
||||
|
||||
saveFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
saveFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
saveFileDialog->setConfirmOverwrite( true );
|
||||
saveFileDialog->selectFile( QgsProject::instance()->title() );
|
||||
|
||||
if ( saveFileDialog->exec() == QDialog::Accepted )
|
||||
{
|
||||
fullPath.setFile( saveFileDialog->selectedFiles().first() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// if they didn't select anything, just return
|
||||
// delete saveFileDialog; auto_ptr auto destroys
|
||||
return false;
|
||||
}
|
||||
QFileInfo fullPath( path );
|
||||
|
||||
// make sure we have the .qgs extension in the file name
|
||||
if ( "qgs" != fullPath.suffix() )
|
||||
if ( "qgs" != fullPath.suffix().toLower() )
|
||||
{
|
||||
QString newFilePath = fullPath.filePath() + ".qgs";
|
||||
fullPath.setFile( newFilePath );
|
||||
fullPath.setFile( fullPath.filePath() + ".qgs" );
|
||||
}
|
||||
|
||||
|
||||
@ -2904,33 +2893,18 @@ void QgisApp::fileSaveAs()
|
||||
QSettings settings;
|
||||
QString lastUsedDir = settings.value( "/UI/lastProjectDir", "." ).toString();
|
||||
|
||||
std::auto_ptr<QFileDialog> saveFileDialog( new QFileDialog( this,
|
||||
tr( "Choose a file name to save the QGIS project file as" ),
|
||||
lastUsedDir, tr( "QGis files (*.qgs)" ) ) );
|
||||
saveFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
saveFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
saveFileDialog->setConfirmOverwrite( true );
|
||||
saveFileDialog->selectFile( QgsProject::instance()->title() );
|
||||
|
||||
QFileInfo fullPath;
|
||||
if ( saveFileDialog->exec() == QDialog::Accepted )
|
||||
{
|
||||
//saveFilePath = saveFileDialog->selectedFiles().first();
|
||||
fullPath.setFile( saveFileDialog->selectedFiles().first() );
|
||||
}
|
||||
else
|
||||
{
|
||||
QString path = QFileDialog::getSaveFileName( this, tr( "Choose a file name to save the QGIS project file as" ), lastUsedDir + "/" + QgsProject::instance()->title(), tr( "QGis files (*.qgs *.QGS)" ) );
|
||||
if ( path.isEmpty() )
|
||||
return;
|
||||
}
|
||||
|
||||
QString myPath = fullPath.path();
|
||||
settings.setValue( "/UI/lastProjectDir", myPath );
|
||||
QFileInfo fullPath( path );
|
||||
|
||||
settings.setValue( "/UI/lastProjectDir", fullPath.path() );
|
||||
|
||||
// make sure the .qgs extension is included in the path name. if not, add it...
|
||||
if ( "qgs" != fullPath.suffix() )
|
||||
if ( "qgs" != fullPath.suffix().toLower() )
|
||||
{
|
||||
myPath = fullPath.filePath() + ".qgs";
|
||||
fullPath.setFile( myPath );
|
||||
fullPath.setFile( fullPath.filePath() + ".qgs" );
|
||||
}
|
||||
|
||||
QgsProject::instance()->setFileName( fullPath.filePath() );
|
||||
|
@ -62,7 +62,7 @@ void QgsEmbedLayerDialog::on_mBrowseFileToolButton_clicked()
|
||||
mProjectFileLineEdit->blockSignals( true );
|
||||
|
||||
QSettings s;
|
||||
QString projectFile = QFileDialog::getOpenFileName( 0, tr( "Select project file" ), s.value( "/qgis/last_embedded_project_path" ).toString() , tr( "QGIS project files (*.qgs)" ) );
|
||||
QString projectFile = QFileDialog::getOpenFileName( 0, tr( "Select project file" ), s.value( "/qgis/last_embedded_project_path" ).toString() , tr( "QGIS project files (*.qgs *.QGS)" ) );
|
||||
if ( !projectFile.isEmpty() )
|
||||
{
|
||||
mProjectFileLineEdit->setText( projectFile );
|
||||
|
@ -2950,131 +2950,61 @@ void QgsRasterLayerProperties::on_pbnSaveDefaultStyle_clicked()
|
||||
|
||||
void QgsRasterLayerProperties::on_pbnLoadStyle_clicked()
|
||||
{
|
||||
QSettings myQSettings; // where we keep last used filter in persistent state
|
||||
QString myLastUsedDir = myQSettings.value( "style/lastStyleDir", "." ).toString();
|
||||
QSettings settings;
|
||||
QString lastUsedDir = settings.value( "style/lastStyleDir", "." ).toString();
|
||||
|
||||
//create a file dialog
|
||||
std::auto_ptr < QFileDialog > myFileDialog
|
||||
(
|
||||
new QFileDialog(
|
||||
this,
|
||||
QFileDialog::tr( "Load layer properties from style file (.qml)" ),
|
||||
myLastUsedDir,
|
||||
tr( "QGIS Layer Style File (*.qml)" )
|
||||
)
|
||||
);
|
||||
myFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
myFileDialog->setAcceptMode( QFileDialog::AcceptOpen );
|
||||
QString fileName = QFileDialog::getOpenFileName(
|
||||
this,
|
||||
tr( "Load layer properties from style file (.qml)" ),
|
||||
lastUsedDir,
|
||||
tr( "QGIS Layer Style File (*.qml)" ) );
|
||||
if ( fileName.isEmpty() )
|
||||
return;
|
||||
|
||||
//prompt the user for a file name
|
||||
QString myFileName;
|
||||
if ( myFileDialog->exec() == QDialog::Accepted )
|
||||
// ensure the user never omits the extension from the file name
|
||||
if ( !fileName.endsWith( ".qml", Qt::CaseInsensitive ) )
|
||||
fileName += ".qml";
|
||||
|
||||
bool defaultLoadedFlag = false;
|
||||
QString message = mRasterLayer->loadNamedStyle( fileName, defaultLoadedFlag );
|
||||
if ( defaultLoadedFlag )
|
||||
{
|
||||
QStringList myFiles = myFileDialog->selectedFiles();
|
||||
if ( !myFiles.isEmpty() )
|
||||
{
|
||||
myFileName = myFiles[0];
|
||||
}
|
||||
sync();
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::information( this, tr( "Saved Style" ), message );
|
||||
}
|
||||
|
||||
if ( !myFileName.isEmpty() )
|
||||
{
|
||||
if ( myFileDialog->selectedFilter() == tr( "QGIS Layer Style File (*.qml)" ) )
|
||||
{
|
||||
//ensure the user never omitted the extension from the file name
|
||||
if ( !myFileName.toUpper().endsWith( ".QML" ) )
|
||||
{
|
||||
myFileName += ".qml";
|
||||
}
|
||||
bool defaultLoadedFlag = false;
|
||||
QString myMessage = mRasterLayer->loadNamedStyle( myFileName, defaultLoadedFlag );
|
||||
//reset if the default style was loaded ok only
|
||||
if ( defaultLoadedFlag )
|
||||
{
|
||||
sync();
|
||||
}
|
||||
else
|
||||
{
|
||||
//let the user know something went wrong...
|
||||
QMessageBox::information( this,
|
||||
tr( "Saved Style" ),
|
||||
myMessage
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::warning( this, tr( "QGIS" ), tr( "Unknown style format: %1" ).arg( myFileDialog->selectedFilter() ) );
|
||||
|
||||
}
|
||||
myQSettings.setValue( "style/lastStyleDir", myFileDialog->directory().absolutePath() );
|
||||
}
|
||||
settings.setValue( "style/lastStyleDir", QFileInfo( fileName ).absolutePath() );
|
||||
}
|
||||
|
||||
|
||||
void QgsRasterLayerProperties::on_pbnSaveStyleAs_clicked()
|
||||
{
|
||||
QSettings settings;
|
||||
QString lastUsedDir = settings.value( "style/lastStyleDir", "." ).toString();
|
||||
|
||||
QSettings myQSettings; // where we keep last used filter in persistent state
|
||||
QString myLastUsedDir = myQSettings.value( "style/lastStyleDir", "." ).toString();
|
||||
QString outputFileName = QFileDialog::getSaveFileName( this, tr( "Save layer properties as style file (.qml)" ), lastUsedDir );
|
||||
if ( outputFileName.isEmpty() )
|
||||
return;
|
||||
|
||||
//create a file dialog
|
||||
std::auto_ptr < QFileDialog > myFileDialog
|
||||
(
|
||||
new QFileDialog(
|
||||
this,
|
||||
QFileDialog::tr( "Save layer properties as style file (.qml)" ),
|
||||
myLastUsedDir,
|
||||
tr( "QGIS Layer Style File (*.qml)" )
|
||||
)
|
||||
);
|
||||
myFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
myFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
// ensure the user never omits the extension from the file name
|
||||
if ( !outputFileName.endsWith( ".qml", Qt::CaseInsensitive ) )
|
||||
outputFileName += ".qml";
|
||||
|
||||
//prompt the user for a file name
|
||||
QString myOutputFileName;
|
||||
if ( myFileDialog->exec() == QDialog::Accepted )
|
||||
bool defaultLoadedFlag = false;
|
||||
QString message = mRasterLayer->saveNamedStyle( outputFileName, defaultLoadedFlag );
|
||||
if ( defaultLoadedFlag )
|
||||
{
|
||||
QStringList myFiles = myFileDialog->selectedFiles();
|
||||
if ( !myFiles.isEmpty() )
|
||||
{
|
||||
myOutputFileName = myFiles[0];
|
||||
}
|
||||
sync();
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::information( this, tr( "Saved Style" ), message );
|
||||
}
|
||||
|
||||
if ( !myOutputFileName.isEmpty() )
|
||||
{
|
||||
if ( myFileDialog->selectedFilter() == tr( "QGIS Layer Style File (*.qml)" ) )
|
||||
{
|
||||
//ensure the user never omitted the extension from the file name
|
||||
if ( !myOutputFileName.toUpper().endsWith( ".QML" ) )
|
||||
{
|
||||
myOutputFileName += ".qml";
|
||||
}
|
||||
bool defaultLoadedFlag = false;
|
||||
QString myMessage = mRasterLayer->saveNamedStyle( myOutputFileName, defaultLoadedFlag );
|
||||
//reset if the default style was loaded ok only
|
||||
if ( defaultLoadedFlag )
|
||||
{
|
||||
//don't show the message if all went well...
|
||||
sync();
|
||||
}
|
||||
else
|
||||
{
|
||||
//if something went wrong let the user know why
|
||||
QMessageBox::information( this,
|
||||
tr( "Saved Style" ),
|
||||
myMessage
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::warning( this, tr( "QGIS" ), tr( "Unknown style format: %1" ).arg( myFileDialog->selectedFilter() ) );
|
||||
|
||||
}
|
||||
myQSettings.setValue( "style/lastStyleDir", myFileDialog->directory().absolutePath() );
|
||||
}
|
||||
settings.setValue( "style/lastStyleDir", QFileInfo( outputFileName ).absolutePath() );
|
||||
}
|
||||
|
||||
void QgsRasterLayerProperties::on_btnResetNull_clicked( )
|
||||
|
@ -31,16 +31,8 @@ namespace QgisGui
|
||||
{
|
||||
Q_UNUSED( enc );
|
||||
|
||||
bool haveLastUsedFilter = false; // by default, there is no last
|
||||
// used filter
|
||||
|
||||
QSettings settings; // where we keep last used filter in
|
||||
// persistent state
|
||||
|
||||
haveLastUsedFilter = settings.contains( "/UI/" + filterName );
|
||||
QString lastUsedFilter = settings.value( "/UI/" + filterName,
|
||||
QVariant( QString::null ) ).toString();
|
||||
|
||||
QSettings settings;
|
||||
QString lastUsedFilter = settings.value( "/UI/" + filterName, "" ).toString();
|
||||
QString lastUsedDir = settings.value( "/UI/" + filterName + "Dir", "." ).toString();
|
||||
|
||||
QgsDebugMsg( "Opening file dialog with filters: " + filters );
|
||||
@ -51,9 +43,11 @@ namespace QgisGui
|
||||
else //we have to use non-native dialog to add cancel all button
|
||||
{
|
||||
QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog( 0, title, lastUsedDir, filters, QString( "" ) );
|
||||
|
||||
// allow for selection of more than one file
|
||||
openFileDialog->setFileMode( QFileDialog::ExistingFiles );
|
||||
if ( haveLastUsedFilter ) // set the filter to the last one used
|
||||
|
||||
if ( !lastUsedFilter.isEmpty() )
|
||||
{
|
||||
openFileDialog->selectFilter( lastUsedFilter );
|
||||
}
|
||||
@ -77,104 +71,100 @@ namespace QgisGui
|
||||
// Fix by Tim - getting the dirPath from the dialog
|
||||
// directly truncates the last node in the dir path.
|
||||
// This is a workaround for that
|
||||
QString myFirstFileName = selectedFiles.first();
|
||||
QFileInfo myFI( myFirstFileName );
|
||||
QString myPath = myFI.path();
|
||||
QString firstFileName = selectedFiles.first();
|
||||
QFileInfo fi( firstFileName );
|
||||
QString path = fi.path();
|
||||
|
||||
QgsDebugMsg( "Writing last used dir: " + myPath );
|
||||
QgsDebugMsg( "Writing last used dir: " + path );
|
||||
|
||||
settings.setValue( "/UI/" + filterName, lastUsedFilter );
|
||||
settings.setValue( "/UI/" + filterName + "Dir", myPath );
|
||||
settings.setValue( "/UI/" + filterName + "Dir", path );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QPair<QString, QString> GUI_EXPORT getSaveAsImageName( QWidget * theParent, QString theMessage )
|
||||
QPair<QString, QString> GUI_EXPORT getSaveAsImageName( QWidget *theParent, QString theMessage )
|
||||
{
|
||||
Q_UNUSED( theMessage );
|
||||
//create a map to hold the QImageIO names and the filter names
|
||||
//the QImageIO name must be passed to the mapcanvas saveas image function
|
||||
typedef QMap<QString, QString> FilterMap;
|
||||
FilterMap myFilterMap;
|
||||
|
||||
//find out the last used filter
|
||||
QSettings myQSettings; // where we keep last used filter in persistent state
|
||||
QString myLastUsedFilter = myQSettings.value( "/UI/lastSaveAsImageFilter" ).toString();
|
||||
QString myLastUsedDir = myQSettings.value( "/UI/lastSaveAsImageDir", "." ).toString();
|
||||
|
||||
// get a list of supported output image types
|
||||
int myCounterInt = 0;
|
||||
QString myFilters;
|
||||
QList<QByteArray> formats = QImageWriter::supportedImageFormats();
|
||||
|
||||
for ( ; myCounterInt < formats.count(); myCounterInt++ )
|
||||
QMap<QString, QString> filterMap;
|
||||
foreach( QByteArray format, QImageWriter::supportedImageFormats() )
|
||||
{
|
||||
QString myFormat = QString( formats.at( myCounterInt ) );
|
||||
//svg doesnt work so skip it
|
||||
if ( myFormat == "svg" )
|
||||
if ( format == "svg" )
|
||||
continue;
|
||||
|
||||
QString myFilter = createFileFilter_( myFormat + " format", "*." + myFormat );
|
||||
if ( !myFilters.isEmpty() )
|
||||
myFilters += ";;";
|
||||
myFilters += myFilter;
|
||||
myFilterMap[myFilter] = myFormat;
|
||||
filterMap.insert( createFileFilter_( format + " format", "*." + format ), format );
|
||||
}
|
||||
|
||||
#ifdef QGISDEBUG
|
||||
QgsDebugMsg( "Available Filters Map: " );
|
||||
FilterMap::Iterator myIterator;
|
||||
for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator )
|
||||
for ( QMap<QString, QString>::iterator it = filterMap.begin(); it != filterMap.end(); ++it )
|
||||
{
|
||||
QgsDebugMsg( myIterator.key() + " : " + myIterator.value() );
|
||||
QgsDebugMsg( it.key() + " : " + it.value() );
|
||||
}
|
||||
#endif
|
||||
|
||||
//find out the last used filter
|
||||
QSettings settings; // where we keep last used filter in persistent state
|
||||
QString lastUsedFilter = settings.value( "/UI/lastSaveAsImageFilter" ).toString();
|
||||
QString lastUsedDir = settings.value( "/UI/lastSaveAsImageDir", "." ).toString();
|
||||
|
||||
QString outputFileName;
|
||||
QString selectedFilter = lastUsedFilter;
|
||||
QString ext;
|
||||
|
||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||
outputFileName = QFileDialog::getSaveFileName( theParent, theMessage, lastUsedDir, QStringList( filterMap.keys() ).join( ";;" ), &selectedFilter );
|
||||
|
||||
if ( !outputFileName.isNull() )
|
||||
{
|
||||
ext = filterMap.value( selectedFilter, QString::null );
|
||||
if ( !ext.isNull() )
|
||||
settings.setValue( "/UI/lastSaveAsImageFilter", selectedFilter );
|
||||
settings.setValue( "/UI/lastSaveAsImageDir", QFileInfo( outputFileName ).absolutePath() );
|
||||
}
|
||||
#else
|
||||
//create a file dialog using the the filter list generated above
|
||||
std::auto_ptr < QFileDialog > myQFileDialog( new QFileDialog( theParent,
|
||||
QObject::tr( "Choose a file name to save the map image as" ),
|
||||
myLastUsedDir, myFilters ) );
|
||||
std::auto_ptr<QFileDialog> fileDialog( new QFileDialog( theParent, theMessage, lastUsedDir, QStringList( filterMap.keys() ).join( ";;" ) ) );
|
||||
|
||||
// allow for selection of more than one file
|
||||
myQFileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
fileDialog->setFileMode( QFileDialog::AnyFile );
|
||||
fileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
fileDialog->setConfirmOverwrite( true );
|
||||
|
||||
myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
|
||||
|
||||
myQFileDialog->setConfirmOverwrite( true );
|
||||
|
||||
|
||||
if ( !myLastUsedFilter.isEmpty() ) // set the filter to the last one used
|
||||
if ( !lastUsedFilter.isEmpty() ) // set the filter to the last one used
|
||||
{
|
||||
myQFileDialog->selectFilter( myLastUsedFilter );
|
||||
fileDialog->selectFilter( lastUsedFilter );
|
||||
}
|
||||
|
||||
//prompt the user for a fileName
|
||||
QString myOutputFileName; // = myQFileDialog->getSaveFileName(); //delete this
|
||||
if ( myQFileDialog->exec() == QDialog::Accepted )
|
||||
if ( fileDialog->exec() == QDialog::Accepted )
|
||||
{
|
||||
myOutputFileName = myQFileDialog->selectedFiles().first();
|
||||
outputFileName = fileDialog->selectedFiles().first();
|
||||
}
|
||||
|
||||
QString myFilterString = myQFileDialog->selectedFilter();
|
||||
QgsDebugMsg( "Selected filter: " + myFilterString );
|
||||
QgsDebugMsg( "Image type: " + myFilterMap[myFilterString] );
|
||||
selectedFilter = fileDialog->selectedFilter();
|
||||
QgsDebugMsg( "Selected filter: " + selectedFilter );
|
||||
ext = filterMap.value( selectedFilter, QString::null );
|
||||
|
||||
if ( !ext.isNull() )
|
||||
settings.setValue( "/UI/lastSaveAsImageFilter", selectedFilter );
|
||||
|
||||
settings.setValue( "/UI/lastSaveAsImageDir", fileDialog->directory().absolutePath() );
|
||||
#endif
|
||||
|
||||
// Add the file type suffix to the fileName if required
|
||||
if ( !myOutputFileName.endsWith( myFilterMap[myFilterString] ) )
|
||||
if ( !ext.isNull() && !outputFileName.endsWith( "." + ext ) )
|
||||
{
|
||||
myOutputFileName += "." + myFilterMap[myFilterString];
|
||||
outputFileName += "." + ext;
|
||||
}
|
||||
|
||||
myQSettings.setValue( "/UI/lastSaveAsImageFilter", myFilterString );
|
||||
myQSettings.setValue( "/UI/lastSaveAsImageDir", myQFileDialog->directory().absolutePath() );
|
||||
QPair <QString, QString> myPair;
|
||||
myPair.first = myOutputFileName;
|
||||
myPair.second = myFilterMap[myFilterString];
|
||||
return myPair;
|
||||
} //
|
||||
return qMakePair<QString, QString>( outputFileName, ext );
|
||||
}
|
||||
|
||||
QString createFileFilter_( QString const &longName, QString const &glob )
|
||||
{
|
||||
return longName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
|
||||
} // createFileFilter_
|
||||
}
|
||||
|
||||
} // end of QgisGui namespace
|
||||
|
@ -3409,46 +3409,39 @@ QStringList QgsGrassModuleFile::options()
|
||||
|
||||
void QgsGrassModuleFile::browse()
|
||||
{
|
||||
// TODO: unfortunately QFileDialog does not support 'new' directory
|
||||
QFileDialog *fd = new QFileDialog( this, NULL, mLineEdit->text() );
|
||||
static QString lastDir = QDir::currentPath();
|
||||
|
||||
static QDir currentDir = QDir::current();
|
||||
fd->setDirectory( currentDir );
|
||||
|
||||
switch ( mType )
|
||||
if ( mType == Multiple )
|
||||
{
|
||||
case New:
|
||||
fd->setFileMode( QFileDialog::AnyFile );
|
||||
fd->setAcceptMode( QFileDialog::AcceptSave );
|
||||
break;
|
||||
case Multiple:
|
||||
fd->setFileMode( QFileDialog::ExistingFiles );
|
||||
fd->setAcceptMode( QFileDialog::AcceptOpen );
|
||||
break;
|
||||
case Directory:
|
||||
fd->setFileMode( QFileDialog::Directory );
|
||||
fd->setAcceptMode( QFileDialog::AcceptOpen );
|
||||
break;
|
||||
default:
|
||||
fd->setFileMode( QFileDialog::ExistingFile );
|
||||
fd->setAcceptMode( QFileDialog::AcceptOpen );
|
||||
QString path = mLineEdit->text().split( "," ).first();
|
||||
if ( path.isEmpty() )
|
||||
path = lastDir;
|
||||
else
|
||||
path = QFileInfo( path ).absolutePath();
|
||||
|
||||
QStringList files = QFileDialog::getOpenFileNames( this, 0, path );
|
||||
if ( files.isEmpty() )
|
||||
return;
|
||||
|
||||
lastDir = QFileInfo( files[0] ).absolutePath();
|
||||
|
||||
mLineEdit->setText( files.join( "," ) );
|
||||
}
|
||||
|
||||
if ( mFilters.size() > 0 )
|
||||
else
|
||||
{
|
||||
fd->setFilters( mFilters );
|
||||
}
|
||||
fd->setDefaultSuffix( mSuffix );
|
||||
QString selectedFile = mLineEdit->text();
|
||||
if ( selectedFile.isEmpty() )
|
||||
selectedFile = lastDir;
|
||||
|
||||
if ( mType == New )
|
||||
selectedFile = QFileDialog::getSaveFileName( this, 0, selectedFile );
|
||||
else if ( mType == Directory )
|
||||
selectedFile = QFileDialog::getExistingDirectory( this, 0, selectedFile );
|
||||
else
|
||||
selectedFile = QFileDialog::getOpenFileName( this, 0, selectedFile );
|
||||
|
||||
lastDir = QFileInfo( selectedFile ).absolutePath();
|
||||
|
||||
if ( fd->exec() == QDialog::Accepted )
|
||||
{
|
||||
QString selectedFile = fd->selectedFiles().last();
|
||||
QFileInfo fi = QFileInfo( selectedFile );
|
||||
currentDir = fi.absoluteDir();
|
||||
if ( mType == Multiple )
|
||||
{
|
||||
selectedFile = fd->selectedFiles().join( "," );
|
||||
}
|
||||
mLineEdit->setText( selectedFile );
|
||||
}
|
||||
}
|
||||
|
@ -154,15 +154,12 @@ QgsGrassNewMapset::~QgsGrassNewMapset()
|
||||
/*************************** DATABASE *******************************/
|
||||
void QgsGrassNewMapset::browseDatabase()
|
||||
{
|
||||
// TODO: unfortunately QFileDialog does not support 'new' directory
|
||||
QFileDialog *fd = new QFileDialog( this, NULL, mDatabaseLineEdit->text() );
|
||||
fd->setFileMode( QFileDialog::DirectoryOnly );
|
||||
QString selectedDir = QFileDialog::getExistingDirectory( this, NULL, mDatabaseLineEdit->text() );
|
||||
if ( selectedDir.isEmpty() )
|
||||
return;
|
||||
|
||||
if ( fd->exec() == QDialog::Accepted )
|
||||
{
|
||||
mDatabaseLineEdit->setText( fd->selectedFiles().first() );
|
||||
databaseChanged();
|
||||
}
|
||||
mDatabaseLineEdit->setText( selectedDir );
|
||||
databaseChanged();
|
||||
}
|
||||
|
||||
void QgsGrassNewMapset::databaseChanged()
|
||||
|
Loading…
x
Reference in New Issue
Block a user