Skip to content

Commit c2acb5f

Browse files
committedDec 7, 2017
[ui] use qgsfilewidget in the create shapefile layer dialog
1 parent cddca2f commit c2acb5f

File tree

4 files changed

+43
-33
lines changed

4 files changed

+43
-33
lines changed
 

‎python/gui/qgsfilewidget.sip

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class QgsFileWidget : QWidget
3131
GetFile,
3232
GetDirectory,
3333
GetMultipleFiles,
34+
SaveFile,
3435
};
3536

3637
enum RelativeStorage
@@ -97,6 +98,18 @@ returns the filters used for QDialog.getOpenFileName
9798
\param filter Only files that match the given filter are shown, it may be an empty string. If you want multiple filters, separate them with ';;',
9899
%End
99100

101+
void setConfirmOverwrite( bool confirmOverwrite );
102+
%Docstring
103+
Sets whether a confirmation to overwrite an existing file will appear
104+
\param confirmOverwrite If set to true, an overwrite confirmation will be shown
105+
%End
106+
107+
bool confirmOverwrite() const;
108+
%Docstring
109+
Returns whether a confirmation will be shown when overwriting an existing file
110+
:rtype: bool
111+
%End
112+
100113
bool fileWidgetButtonVisible() const;
101114
%Docstring
102115
determines if the tool button is shown

‎src/gui/qgsnewvectorlayerdialog.cpp

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "qgsnewvectorlayerdialog.h"
1919
#include "qgsapplication.h"
20+
#include "qgsfilewidget.h"
2021
#include "qgis.h"
2122
#include "qgslogger.h"
2223
#include "qgscoordinatereferencesystem.h"
@@ -35,10 +36,9 @@ QgsNewVectorLayerDialog::QgsNewVectorLayerDialog( QWidget *parent, Qt::WindowFla
3536
: QDialog( parent, fl )
3637
{
3738
setupUi( this );
39+
3840
connect( mAddAttributeButton, &QToolButton::clicked, this, &QgsNewVectorLayerDialog::mAddAttributeButton_clicked );
3941
connect( mRemoveAttributeButton, &QToolButton::clicked, this, &QgsNewVectorLayerDialog::mRemoveAttributeButton_clicked );
40-
connect( mFileNameEdit, &QLineEdit::textChanged, this, &QgsNewVectorLayerDialog::checkOk );
41-
connect( mBrowseFileName, &QToolButton::clicked, this, &QgsNewVectorLayerDialog::selectFileName );
4242
connect( mFileFormatComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsNewVectorLayerDialog::mFileFormatComboBox_currentIndexChanged );
4343
connect( mTypeBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsNewVectorLayerDialog::mTypeBox_currentIndexChanged );
4444
connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsNewVectorLayerDialog::showHelp );
@@ -100,6 +100,18 @@ QgsNewVectorLayerDialog::QgsNewVectorLayerDialog( QWidget *parent, Qt::WindowFla
100100

101101
mAddAttributeButton->setEnabled( false );
102102
mRemoveAttributeButton->setEnabled( false );
103+
104+
mFileName->setStorageMode( QgsFileWidget::SaveFile );
105+
mFileName->setFilter( QgsVectorFileWriter::filterForDriver( mFileFormatComboBox->currentData( Qt::UserRole ).toString() ) );
106+
mFileName->setDialogTitle( tr( "Select Layer as..." ) );
107+
mFileName->setDefaultRoot( settings.value( QStringLiteral( "UI/lastVectorFileFilterDir" ), QDir::homePath() ).toString() );
108+
connect( mFileName, &QgsFileWidget::fileChanged, this, [ = ]
109+
{
110+
QgsSettings settings;
111+
QFileInfo tmplFileInfo( mFileName->filePath() );
112+
settings.setValue( QStringLiteral( "UI/lastVectorFileFilterDir" ), tmplFileInfo.absolutePath() );
113+
checkOk();
114+
} );
103115
}
104116

105117
QgsNewVectorLayerDialog::~QgsNewVectorLayerDialog()
@@ -224,29 +236,14 @@ void QgsNewVectorLayerDialog::selectionChanged()
224236
mRemoveAttributeButton->setDisabled( mAttributeView->selectedItems().isEmpty() );
225237
}
226238

227-
void QgsNewVectorLayerDialog::selectFileName()
228-
{
229-
QString fileformat = mFileFormatComboBox->currentData( Qt::UserRole ).toString();
230-
QgsSettings settings;
231-
QString lastUsedDir = settings.value( QStringLiteral( "UI/lastVectorFileFilterDir" ), QDir::homePath() ).toString();
232-
QString filterString = QgsVectorFileWriter::filterForDriver( fileformat );
233-
QString fileName = QFileDialog::getSaveFileName( nullptr, tr( "Save Layer as..." ), lastUsedDir, filterString );
234-
if ( fileName.isEmpty() )
235-
return;
236-
237-
if ( fileformat == QLatin1String( "ESRI Shapefile" ) && !fileName.endsWith( QLatin1String( ".shp" ), Qt::CaseInsensitive ) )
238-
fileName += QLatin1String( ".shp" );
239-
mFileNameEdit->setText( fileName );
240-
}
241-
242239
QString QgsNewVectorLayerDialog::filename() const
243240
{
244-
return mFileNameEdit->text();
241+
return mFileName->filePath();
245242
}
246243

247244
void QgsNewVectorLayerDialog::checkOk()
248245
{
249-
bool ok = ( !mFileNameEdit->text().isEmpty() && mAttributeView->topLevelItemCount() > 0 );
246+
bool ok = ( !mFileName->filePath().isEmpty() && mAttributeView->topLevelItemCount() > 0 );
250247
mOkButton->setEnabled( ok );
251248
}
252249

@@ -271,6 +268,8 @@ QString QgsNewVectorLayerDialog::runAndCreateLayer( QWidget *parent, QString *pE
271268
QgsSettings settings;
272269
QString filterString = QgsVectorFileWriter::filterForDriver( fileformat );
273270
QString fileName = geomDialog.filename();
271+
if ( fileformat == QLatin1String( "ESRI Shapefile" ) && !fileName.endsWith( QLatin1String( ".shp" ), Qt::CaseInsensitive ) )
272+
fileName += QLatin1String( ".shp" );
274273

275274
settings.setValue( QStringLiteral( "UI/lastVectorFileFilterDir" ), QFileInfo( fileName ).absolutePath() );
276275
settings.setValue( QStringLiteral( "UI/encoding" ), enc );

‎src/gui/qgsnewvectorlayerdialog.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ class GUI_EXPORT QgsNewVectorLayerDialog: public QDialog, private Ui::QgsNewVect
6767
void setCrs( const QgsCoordinateReferenceSystem &crs );
6868

6969
private slots:
70-
void selectFileName();
7170
void mAddAttributeButton_clicked();
7271
void mRemoveAttributeButton_clicked();
7372
void mFileFormatComboBox_currentIndexChanged( int index );

‎src/ui/qgsnewvectorlayerdialogbase.ui

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -279,23 +279,23 @@
279279
</widget>
280280
</item>
281281
<item row="0" column="1">
282-
<widget class="QLineEdit" name="mFileNameEdit"/>
282+
<widget class="QgsFileWidget" name="mFileName"/>
283283
</item>
284-
<item row="1" column="1" colspan="2">
284+
<item row="1" column="1">
285285
<widget class="QComboBox" name="mFileEncoding">
286286
<property name="enabled">
287287
<bool>true</bool>
288288
</property>
289289
</widget>
290290
</item>
291-
<item row="2" column="1" colspan="2">
291+
<item row="2" column="1">
292292
<widget class="QComboBox" name="mFileFormatComboBox">
293293
<property name="enabled">
294294
<bool>true</bool>
295295
</property>
296296
</widget>
297297
</item>
298-
<item row="3" column="1" colspan="2">
298+
<item row="3" column="1">
299299
<widget class="QComboBox" name="mGeometryTypeBox">
300300
<property name="sizePolicy">
301301
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -305,20 +305,13 @@
305305
</property>
306306
</widget>
307307
</item>
308-
<item row="4" column="1" colspan="2">
308+
<item row="4" column="1">
309309
<widget class="QCheckBox" name="mGeometryWithZCheckBox">
310310
<property name="text">
311311
<string>Include Z dimension</string>
312312
</property>
313313
</widget>
314314
</item>
315-
<item row="0" column="2">
316-
<widget class="QToolButton" name="mBrowseFileName">
317-
<property name="text">
318-
<string>...</string>
319-
</property>
320-
</widget>
321-
</item>
322315
</layout>
323316
</item>
324317
</layout>
@@ -331,9 +324,15 @@
331324
<header location="global">qgsprojectionselectionwidget.h</header>
332325
<container>1</container>
333326
</customwidget>
327+
<customwidget>
328+
<class>QgsFileWidget</class>
329+
<extends>QWidget</extends>
330+
<header>qgsfilewidget.h</header>
331+
<container>1</container>
332+
</customwidget>
334333
</customwidgets>
335334
<tabstops>
336-
<tabstop>mFileNameEdit</tabstop>
335+
<tabstop>mFileName</tabstop>
337336
<tabstop>mFileEncoding</tabstop>
338337
<tabstop>mFileFormatComboBox</tabstop>
339338
<tabstop>mGeometryTypeBox</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.