use a QgsFileWidget in open vector layer UI

This commit is contained in:
nirvn 2017-08-25 11:56:59 +07:00
parent 35765326aa
commit 095bcae01d
5 changed files with 68 additions and 93 deletions

View File

@ -23,9 +23,10 @@ QgsGdalSourceSelect::QgsGdalSourceSelect( QWidget *parent, Qt::WindowFlags fl, Q
{
setupUi( this );
setupButtons( buttonBox );
mQgsFileWidget->setFilter( QgsProviderRegistry::instance()->fileRasterFilters() );
mQgsFileWidget->setStorageMode( QgsFileWidget::GetMultipleFiles );
connect( mQgsFileWidget, &QgsFileWidget::fileChanged, this, [ = ]( const QString & path )
mFileWidget->setDialogTitle( tr( "Open GDAL Supported Raster Dataset(s)" ) );
mFileWidget->setFilter( QgsProviderRegistry::instance()->fileRasterFilters() );
mFileWidget->setStorageMode( QgsFileWidget::GetMultipleFiles );
connect( mFileWidget, &QgsFileWidget::fileChanged, this, [ = ]( const QString & path )
{
mRasterPath = path;
emit enableButtons( ! mRasterPath.isEmpty() );

View File

@ -97,6 +97,16 @@ QgsOgrSourceSelect::QgsOgrSourceSelect( QWidget *parent, Qt::WindowFlags fl, Qgs
}
cmbDatabaseTypes->blockSignals( false );
cmbConnections->blockSignals( false );
mFileWidget->setDialogTitle( tr( "Open OGR Supported Vector Dataset(s)" ) );
mFileWidget->setFilter( mVectorFileFilter );
mFileWidget->setStorageMode( QgsFileWidget::GetMultipleFiles );
connect( mFileWidget, &QgsFileWidget::fileChanged, this, [ = ]( const QString & path )
{
mVectorPath = path;
emit enableButtons( ! mVectorPath.isEmpty() );
} );
}
QgsOgrSourceSelect::~QgsOgrSourceSelect()
@ -105,43 +115,6 @@ QgsOgrSourceSelect::~QgsOgrSourceSelect()
settings.setValue( QStringLiteral( "Windows/OpenVectorLayer/geometry" ), saveGeometry() );
}
QStringList QgsOgrSourceSelect::openFile()
{
QStringList selectedFiles;
QgsDebugMsg( "Vector file filters: " + mVectorFileFilter );
QString enc = encoding();
QString title = tr( "Open an OGR Supported Vector Layer" );
QgsGuiUtils::openFilesRememberingFilter( QStringLiteral( "lastVectorFileFilter" ), mVectorFileFilter, selectedFiles, enc, title );
return selectedFiles;
}
QString QgsOgrSourceSelect::openDirectory()
{
QgsSettings settings;
bool haveLastUsedDir = settings.contains( QStringLiteral( "/UI/LastUsedDirectory" ) );
QString lastUsedDir = settings.value( QStringLiteral( "UI/LastUsedDirectory" ), QDir::homePath() ).toString();
if ( !haveLastUsedDir )
lastUsedDir = QLatin1String( "" );
QString path = QFileDialog::getExistingDirectory( this,
tr( "Open Directory" ), lastUsedDir,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );
settings.setValue( QStringLiteral( "UI/LastUsedDirectory" ), path );
//process path if it is grass
if ( cmbDirectoryTypes->currentText() == QLatin1String( "Grass Vector" ) )
{
#ifdef Q_OS_WIN
//replace backslashes with forward slashes
path.replace( '\\', '/' );
#endif
path = path + "/head";
}
return path;
}
QStringList QgsOgrSourceSelect::dataSources()
{
return mDataSources;
@ -272,29 +245,6 @@ void QgsOgrSourceSelect::setSelectedConnection()
QgsDebugMsg( "Setting selected connection to " + cmbConnections->currentText() );
}
void QgsOgrSourceSelect::on_buttonSelectSrc_clicked()
{
if ( radioSrcFile->isChecked() )
{
QStringList selected = openFile();
if ( !selected.isEmpty() )
{
inputSrcDataset->setText( selected.join( QStringLiteral( ";" ) ) );
addButton()->setFocus();
emit enableButtons( true );
}
}
else if ( radioSrcDirectory->isChecked() )
{
inputSrcDataset->setText( openDirectory() );
}
else if ( !radioSrcDatabase->isChecked() )
{
Q_ASSERT( !"SHOULD NEVER GET HERE" );
}
}
void QgsOgrSourceSelect::addButtonClicked()
{
QgsSettings settings;
@ -359,7 +309,7 @@ void QgsOgrSourceSelect::addButtonClicked()
}
else if ( radioSrcFile->isChecked() )
{
if ( inputSrcDataset->text().isEmpty() )
if ( mVectorPath.isEmpty() )
{
QMessageBox::information( this,
tr( "Add vector layer" ),
@ -367,11 +317,11 @@ void QgsOgrSourceSelect::addButtonClicked()
return;
}
mDataSources << inputSrcDataset->text().split( ';' );
mDataSources << QgsFileWidget::splitFilePaths( mVectorPath );
}
else if ( radioSrcDirectory->isChecked() )
{
if ( inputSrcDataset->text().isEmpty() )
if ( mVectorPath.isEmpty() )
{
QMessageBox::information( this,
tr( "Add vector layer" ),
@ -379,7 +329,17 @@ void QgsOgrSourceSelect::addButtonClicked()
return;
}
mDataSources << inputSrcDataset->text();
//process path if it is grass
if ( cmbDirectoryTypes->currentText() == QLatin1String( "Grass Vector" ) )
{
#ifdef Q_OS_WIN
//replace backslashes with forward slashes
mVectorPath.replace( '\\', '/' );
#endif
mVectorPath = mVectorPath + "/head";
}
mDataSources << mVectorPath;
}
// Save the used encoding
@ -402,6 +362,12 @@ void QgsOgrSourceSelect::on_radioSrcFile_toggled( bool checked )
fileGroupBox->show();
dbGroupBox->hide();
protocolGroupBox->hide();
mFileWidget->setDialogTitle( tr( "Open an OGR Supported Vector Layer" ) );
mFileWidget->setFilter( mVectorFileFilter );
mFileWidget->setStorageMode( QgsFileWidget::GetMultipleFiles );
mFileWidget->setFilePath( QString() );
mDataSourceType = QStringLiteral( "file" );
}
}
@ -415,6 +381,11 @@ void QgsOgrSourceSelect::on_radioSrcDirectory_toggled( bool checked )
fileGroupBox->show();
dbGroupBox->hide();
protocolGroupBox->hide();
mFileWidget->setDialogTitle( tr( "Open Directory" ) );
mFileWidget->setStorageMode( QgsFileWidget::GetDirectory );
mFileWidget->setFilePath( QString() );
mDataSourceType = QStringLiteral( "directory" );
}
}

View File

@ -91,7 +91,6 @@ class QgsOgrSourceSelect : public QgsAbstractDataSourceWidget, private Ui::QgsOg
//! Sets the selected connection
void setSelectedConnection();
void on_buttonSelectSrc_clicked();
void on_radioSrcFile_toggled( bool checked );
void on_radioSrcDirectory_toggled( bool checked );
void on_radioSrcDatabase_toggled( bool checked );
@ -102,6 +101,11 @@ class QgsOgrSourceSelect : public QgsAbstractDataSourceWidget, private Ui::QgsOg
void on_cmbDatabaseTypes_currentIndexChanged( const QString &text );
void on_cmbConnections_currentIndexChanged( const QString &text );
void showHelp();
private:
QString mVectorPath;
};
#endif // QGSOGRSOURCESELECT_H

View File

@ -39,12 +39,12 @@
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Dataset</string>
<string>Raster Dataset(s)</string>
</property>
</widget>
</item>
<item>
<widget class="QgsFileWidget" name="mQgsFileWidget"/>
<widget class="QgsFileWidget" name="mFileWidget"/>
</item>
</layout>
</widget>

View File

@ -103,35 +103,28 @@
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QComboBox" name="cmbDirectoryTypes"/>
<item row="0" column="1">
<widget class="QComboBox" name="cmbDirectoryTypes">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<item row="1" column="0">
<widget class="QLabel" name="labelSrcDataset">
<property name="text">
<string>Dataset</string>
<string>Vector Dataset(s)</string>
</property>
<property name="buddy">
<cstring>inputSrcDataset</cstring>
<cstring>mFileWidget</cstring>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLineEdit" name="inputSrcDataset">
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QToolButton" name="buttonSelectSrc">
<property name="text">
<string>…</string>
</property>
</widget>
<item row="1" column="1">
<widget class="QgsFileWidget" name="mFileWidget"/>
</item>
</layout>
</widget>
@ -297,6 +290,13 @@
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>QgsFileWidget</class>
<extends>QWidget</extends>
<header>qgsfilewidget.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>radioSrcFile</tabstop>
<tabstop>radioSrcDirectory</tabstop>
@ -306,8 +306,7 @@
<tabstop>cmbProtocolTypes</tabstop>
<tabstop>protocolURI</tabstop>
<tabstop>cmbDirectoryTypes</tabstop>
<tabstop>inputSrcDataset</tabstop>
<tabstop>buttonSelectSrc</tabstop>
<tabstop>mFileWidget</tabstop>
<tabstop>cmbDatabaseTypes</tabstop>
<tabstop>cmbConnections</tabstop>
<tabstop>btnNew</tabstop>