@@ -44,8 +44,6 @@ QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterLayer *rasterLa
44
44
{
45
45
setupUi ( this );
46
46
connect ( mRawModeRadioButton , &QRadioButton::toggled, this , &QgsRasterLayerSaveAsDialog::mRawModeRadioButton_toggled );
47
- connect ( mBrowseButton , &QPushButton::clicked, this , &QgsRasterLayerSaveAsDialog::mBrowseButton_clicked );
48
- connect ( mSaveAsLineEdit , &QLineEdit::textChanged, this , &QgsRasterLayerSaveAsDialog::mSaveAsLineEdit_textChanged );
49
47
connect ( mFormatComboBox , static_cast <void ( QComboBox::* )( const QString & )>( &QComboBox::currentIndexChanged ), this , &QgsRasterLayerSaveAsDialog::mFormatComboBox_currentIndexChanged );
50
48
connect ( mResolutionRadioButton , &QRadioButton::toggled, this , &QgsRasterLayerSaveAsDialog::mResolutionRadioButton_toggled );
51
49
connect ( mOriginalResolutionPushButton , &QPushButton::clicked, this , &QgsRasterLayerSaveAsDialog::mOriginalResolutionPushButton_clicked );
@@ -161,6 +159,59 @@ QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterLayer *rasterLa
161
159
162
160
QgsSettings settings;
163
161
restoreGeometry ( settings.value ( QStringLiteral ( " Windows/RasterLayerSaveAs/geometry" ) ).toByteArray () );
162
+
163
+ if ( mTileModeCheckBox ->isChecked () )
164
+ {
165
+ mFilename ->setStorageMode ( QgsFileWidget::GetDirectory );
166
+ mFilename ->setDialogTitle ( tr ( " Select output directory" ) );
167
+ }
168
+ else
169
+ {
170
+ mFilename ->setStorageMode ( QgsFileWidget::SaveFile );
171
+ mFilename ->setDialogTitle ( tr ( " Select output file" ) );
172
+ }
173
+ mFilename ->setDefaultRoot ( settings.value ( QStringLiteral ( " UI/lastRasterFileDir" ), QDir::homePath () ).toString () );
174
+ connect ( mFilename , &QgsFileWidget::fileChanged, this , [ = ]( const QString & filePath )
175
+ {
176
+ QgsSettings settings;
177
+ QFileInfo tmplFileInfo ( filePath );
178
+ settings.setValue ( QStringLiteral ( " UI/lastRasterFileDir" ), tmplFileInfo.absolutePath () );
179
+
180
+ if ( mTileModeCheckBox ->isChecked () )
181
+ {
182
+ QString fileName = filePath;
183
+ Q_FOREVER
184
+ {
185
+ // TODO: would not it be better to select .vrt file instead of directory?
186
+ // fileName = QFileDialog::getSaveFileName( this, tr( "Select output file" ), QString(), tr( "VRT" ) + " (*.vrt *.VRT)" );
187
+ if ( fileName.isEmpty () )
188
+ break ; // canceled
189
+
190
+ // Check if directory is empty
191
+ QDir dir ( fileName );
192
+ QString baseName = QFileInfo ( fileName ).baseName ();
193
+ QStringList filters;
194
+ filters << QStringLiteral ( " %1.*" ).arg ( baseName );
195
+ QStringList files = dir.entryList ( filters );
196
+ if ( files.isEmpty () )
197
+ break ;
198
+
199
+ if ( QMessageBox::warning ( this , tr ( " Warning" ),
200
+ tr ( " The directory %1 contains files which will be overwritten: %2" ).arg ( dir.absolutePath (), files.join ( QStringLiteral ( " , " ) ) ),
201
+ QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Ok )
202
+ break ;
203
+
204
+ fileName = QFileDialog::getExistingDirectory ( this , tr ( " Select output directory" ), tmplFileInfo.absolutePath () );
205
+ }
206
+ }
207
+
208
+ QPushButton *okButton = mButtonBox ->button ( QDialogButtonBox::Ok );
209
+ if ( !okButton )
210
+ {
211
+ return ;
212
+ }
213
+ okButton->setEnabled ( tmplFileInfo.absoluteDir ().exists () );
214
+ } );
164
215
}
165
216
166
217
QgsRasterLayerSaveAsDialog::~QgsRasterLayerSaveAsDialog ()
@@ -241,84 +292,6 @@ void QgsRasterLayerSaveAsDialog::setValidators()
241
292
mMaximumSizeYLineEdit ->setValidator ( new QIntValidator ( this ) );
242
293
}
243
294
244
- void QgsRasterLayerSaveAsDialog::mBrowseButton_clicked ()
245
- {
246
- QString fileName;
247
-
248
- QgsSettings settings;
249
- QString dirName = mSaveAsLineEdit ->text ().isEmpty () ? settings.value ( QStringLiteral ( " UI/lastRasterFileDir" ), QDir::homePath () ).toString () : mSaveAsLineEdit ->text ();
250
-
251
- if ( mTileModeCheckBox ->isChecked () )
252
- {
253
- Q_FOREVER
254
- {
255
- // TODO: would not it be better to select .vrt file instead of directory?
256
- fileName = QFileDialog::getExistingDirectory ( this , tr ( " Select output directory" ), dirName );
257
- // fileName = QFileDialog::getSaveFileName( this, tr( "Select output file" ), QString(), tr( "VRT" ) + " (*.vrt *.VRT)" );
258
-
259
- if ( fileName.isEmpty () )
260
- break ; // canceled
261
-
262
- // Check if directory is empty
263
- QDir dir ( fileName );
264
- QString baseName = QFileInfo ( fileName ).baseName ();
265
- QStringList filters;
266
- filters << QStringLiteral ( " %1.*" ).arg ( baseName );
267
- QStringList files = dir.entryList ( filters );
268
- if ( files.isEmpty () )
269
- break ;
270
-
271
- if ( QMessageBox::warning ( this , tr ( " Warning" ),
272
- tr ( " The directory %1 contains files which will be overwritten: %2" ).arg ( dir.absolutePath (), files.join ( QStringLiteral ( " , " ) ) ),
273
- QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Ok )
274
- break ;
275
-
276
- fileName.clear ();
277
- }
278
- }
279
- else
280
- {
281
- QStringList extensions = QgsRasterFileWriter::extensionsForFormat ( outputFormat () );
282
- QString filter;
283
- QString defaultExt;
284
- if ( extensions.empty () )
285
- filter = tr ( " All files (*.*)" );
286
- else
287
- {
288
- filter = QStringLiteral ( " %1 (*.%2);;%3" ).arg ( mFormatComboBox ->currentText (),
289
- extensions.join ( QStringLiteral ( " *." ) ),
290
- tr ( " All files (*.*)" ) );
291
- defaultExt = extensions.at ( 0 );
292
- }
293
-
294
- fileName = QFileDialog::getSaveFileName ( this , tr ( " Select output file" ), dirName, filter );
295
-
296
- // ensure the user never omits the extension from the file name
297
- QFileInfo fi ( fileName );
298
- if ( !fileName.isEmpty () && fi.suffix ().isEmpty () )
299
- {
300
- fileName += ' .' + defaultExt;
301
- }
302
- }
303
-
304
- if ( !fileName.isEmpty () )
305
- {
306
- mSaveAsLineEdit ->setText ( fileName );
307
- }
308
- }
309
-
310
- void QgsRasterLayerSaveAsDialog::mSaveAsLineEdit_textChanged ( const QString &text )
311
- {
312
- QPushButton *okButton = mButtonBox ->button ( QDialogButtonBox::Ok );
313
- if ( !okButton )
314
- {
315
- return ;
316
- }
317
-
318
- okButton->setEnabled ( QFileInfo ( text ).absoluteDir ().exists () );
319
- }
320
-
321
-
322
295
void QgsRasterLayerSaveAsDialog::mFormatComboBox_currentIndexChanged ( const QString & )
323
296
{
324
297
// gdal-specific
@@ -327,6 +300,18 @@ void QgsRasterLayerSaveAsDialog::mFormatComboBox_currentIndexChanged( const QStr
327
300
mCreateOptionsWidget ->setFormat ( outputFormat () );
328
301
mCreateOptionsWidget ->update ();
329
302
}
303
+
304
+ QStringList extensions = QgsRasterFileWriter::extensionsForFormat ( outputFormat () );
305
+ QString filter;
306
+ if ( extensions.empty () )
307
+ filter = tr ( " All files (*.*)" );
308
+ else
309
+ {
310
+ filter = QStringLiteral ( " %1 (*.%2);;%3" ).arg ( mFormatComboBox ->currentText (),
311
+ extensions.join ( QStringLiteral ( " *." ) ),
312
+ tr ( " All files (*.*)" ) );
313
+ }
314
+ mFilename ->setFilter ( filter );
330
315
}
331
316
332
317
int QgsRasterLayerSaveAsDialog::nColumns () const
@@ -371,7 +356,22 @@ bool QgsRasterLayerSaveAsDialog::addToCanvas() const
371
356
372
357
QString QgsRasterLayerSaveAsDialog::outputFileName () const
373
358
{
374
- return mSaveAsLineEdit ->text ();
359
+ QStringList extensions = QgsRasterFileWriter::extensionsForFormat ( outputFormat () );
360
+ QString defaultExt;
361
+ if ( !extensions.empty () )
362
+ {
363
+ defaultExt = extensions.at ( 0 );
364
+ }
365
+
366
+ // ensure the user never omits the extension from the file name
367
+ QString fileName = mFilename ->filePath ();
368
+ QFileInfo fi ( fileName );
369
+ if ( !fileName.isEmpty () && fi.suffix ().isEmpty () )
370
+ {
371
+ fileName += ' .' + defaultExt;
372
+ }
373
+
374
+ return fileName;
375
375
}
376
376
377
377
QString QgsRasterLayerSaveAsDialog::outputFormat () const
@@ -398,8 +398,7 @@ void QgsRasterLayerSaveAsDialog::hideFormat()
398
398
void QgsRasterLayerSaveAsDialog::hideOutput ()
399
399
{
400
400
mSaveAsLabel ->hide ();
401
- mSaveAsLineEdit ->hide ();
402
- mBrowseButton ->hide ();
401
+ mFilename ->hide ();
403
402
QPushButton *okButton = mButtonBox ->button ( QDialogButtonBox::Ok );
404
403
if ( okButton )
405
404
{
@@ -710,10 +709,14 @@ void QgsRasterLayerSaveAsDialog::mTileModeCheckBox_toggled( bool toggled )
710
709
711
710
// Show / hide tile options
712
711
mTilesGroupBox ->show ();
712
+ mFilename ->setStorageMode ( QgsFileWidget::GetDirectory );
713
+ mFilename ->setDialogTitle ( tr ( " Select output directory" ) );
713
714
}
714
715
else
715
716
{
716
717
mTilesGroupBox ->hide ();
718
+ mFilename ->setStorageMode ( QgsFileWidget::SaveFile );
719
+ mFilename ->setDialogTitle ( tr ( " Select output file" ) );
717
720
}
718
721
}
719
722
0 commit comments