00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "qgisgui.h"
00016
00017 #include <QSettings>
00018 #include <QObject>
00019 #include <QImageWriter>
00020 #include "qgsencodingfiledialog.h"
00021 #include "qgslogger.h"
00022 #include <memory>
00023
00024
00025 namespace QgisGui
00026 {
00027
00028 bool GUI_EXPORT openFilesRememberingFilter( QString const &filterName,
00029 QString const &filters, QStringList & selectedFiles, QString& enc, QString &title,
00030 bool cancelAll )
00031 {
00032
00033 bool haveLastUsedFilter = false;
00034
00035
00036 QSettings settings;
00037
00038
00039 haveLastUsedFilter = settings.contains( "/UI/" + filterName );
00040 QString lastUsedFilter = settings.value( "/UI/" + filterName,
00041 QVariant( QString::null ) ).toString();
00042
00043 QString lastUsedDir = settings.value( "/UI/" + filterName + "Dir", "." ).toString();
00044
00045 QgsDebugMsg( "Opening file dialog with filters: " + filters );
00046 if ( !cancelAll )
00047 {
00048 selectedFiles = QFileDialog::getOpenFileNames( 0, title, lastUsedDir, filters, &lastUsedFilter );
00049 }
00050 else
00051 {
00052 QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog( 0, title, lastUsedDir, filters, QString( "" ) );
00053
00054 openFileDialog->setFileMode( QFileDialog::ExistingFiles );
00055 if ( haveLastUsedFilter )
00056 {
00057 openFileDialog->selectFilter( lastUsedFilter );
00058 }
00059 openFileDialog->addCancelAll();
00060 if ( openFileDialog->exec() == QDialog::Accepted )
00061 {
00062 selectedFiles = openFileDialog->selectedFiles();
00063 }
00064 else
00065 {
00066
00067 if ( openFileDialog->cancelAll() )
00068 {
00069 return true;
00070 }
00071 }
00072 }
00073
00074 if ( !selectedFiles.isEmpty() )
00075 {
00076
00077
00078
00079 QString myFirstFileName = selectedFiles.first();
00080 QFileInfo myFI( myFirstFileName );
00081 QString myPath = myFI.path();
00082
00083 QgsDebugMsg( "Writing last used dir: " + myPath );
00084
00085 settings.setValue( "/UI/" + filterName, lastUsedFilter );
00086 settings.setValue( "/UI/" + filterName + "Dir", myPath );
00087 }
00088 return false;
00089 }
00090
00091 QPair<QString, QString> GUI_EXPORT getSaveAsImageName( QWidget * theParent, QString theMessage )
00092 {
00093
00094
00095 typedef QMap<QString, QString> FilterMap;
00096 FilterMap myFilterMap;
00097
00098
00099 QSettings myQSettings;
00100 QString myLastUsedFilter = myQSettings.value( "/UI/lastSaveAsImageFilter" ).toString();
00101 QString myLastUsedDir = myQSettings.value( "/UI/lastSaveAsImageDir", "." ).toString();
00102
00103
00104 int myCounterInt = 0;
00105 QString myFilters;
00106 QList<QByteArray> formats = QImageWriter::supportedImageFormats();
00107
00108 for ( ; myCounterInt < formats.count(); myCounterInt++ )
00109 {
00110 QString myFormat = QString( formats.at( myCounterInt ) );
00111
00112 if ( myFormat == "svg" )
00113 continue;
00114
00115 QString myFilter = createFileFilter_( myFormat + " format", "*." + myFormat );
00116 if ( !myFilters.isEmpty() )
00117 myFilters += ";;";
00118 myFilters += myFilter;
00119 myFilterMap[myFilter] = myFormat;
00120 }
00121 #ifdef QGISDEBUG
00122 QgsDebugMsg( "Available Filters Map: " );
00123 FilterMap::Iterator myIterator;
00124 for ( myIterator = myFilterMap.begin(); myIterator != myFilterMap.end(); ++myIterator )
00125 {
00126 QgsDebugMsg( myIterator.key() + " : " + myIterator.value() );
00127 }
00128 #endif
00129
00130
00131 std::auto_ptr < QFileDialog > myQFileDialog( new QFileDialog( theParent,
00132 QObject::tr( "Choose a file name to save the map image as" ),
00133 myLastUsedDir, myFilters ) );
00134
00135
00136 myQFileDialog->setFileMode( QFileDialog::AnyFile );
00137
00138 myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
00139
00140 myQFileDialog->setConfirmOverwrite( true );
00141
00142
00143 if ( !myLastUsedFilter.isEmpty() )
00144 {
00145 myQFileDialog->selectFilter( myLastUsedFilter );
00146 }
00147
00148
00149 QString myOutputFileName;
00150 if ( myQFileDialog->exec() == QDialog::Accepted )
00151 {
00152 myOutputFileName = myQFileDialog->selectedFiles().first();
00153 }
00154
00155 QString myFilterString = myQFileDialog->selectedFilter();
00156 QgsDebugMsg( "Selected filter: " + myFilterString );
00157 QgsDebugMsg( "Image type: " + myFilterMap[myFilterString] );
00158
00159
00160 if ( !myOutputFileName.endsWith( myFilterMap[myFilterString] ) )
00161 {
00162 myOutputFileName += "." + myFilterMap[myFilterString];
00163 }
00164
00165 myQSettings.setValue( "/UI/lastSaveAsImageFilter", myFilterString );
00166 myQSettings.setValue( "/UI/lastSaveAsImageDir", myQFileDialog->directory().absolutePath() );
00167 QPair <QString, QString> myPair;
00168 myPair.first = myOutputFileName;
00169 myPair.second = myFilterMap[myFilterString];
00170 return myPair;
00171 }
00172
00173 QString createFileFilter_( QString const &longName, QString const &glob )
00174 {
00175 return longName + " (" + glob.toLower() + " " + glob.toUpper() + ")";
00176 }
00177
00178 }