17 #include <QMessageBox> 
   18 #include <QRegularExpressionValidator> 
   19 #include <QRegularExpression> 
   30 #include <cpl_error.h> 
   34   : QDialog( parent, fl )
 
   35   , mOriginalConnName( connName )
 
   40   connect( btnConnect, &QPushButton::clicked, 
this, &QgsNewOgrConnection::btnConnect_clicked );
 
   45   buttonBox->button( QDialogButtonBox::Ok )->setDisabled( 
true );
 
   46   connect( txtName, &QLineEdit::textChanged, 
this, &QgsNewOgrConnection::updateOkButtonState );
 
   47   connect( txtHost, &QLineEdit::textChanged, 
this, &QgsNewOgrConnection::updateOkButtonState );
 
   48   connect( txtDatabase, &QLineEdit::textChanged, 
this, &QgsNewOgrConnection::updateOkButtonState );
 
   49   connect( txtPort, &QLineEdit::textChanged, 
this, &QgsNewOgrConnection::updateOkButtonState );
 
   55   for ( 
int i = 0; i < dbDrivers.count(); i++ )
 
   57     const QString dbDrive = dbDrivers.at( i );
 
   58     cmbDatabaseTypes->addItem( dbDrive.split( 
',' ).at( 0 ) );
 
   60   txtName->setEnabled( 
true );
 
   61   cmbDatabaseTypes->setEnabled( 
true );
 
   62   if ( !connName.isEmpty() )
 
   66     const QString key = 
'/' + connType + 
"/connections/" + connName;
 
   67     txtHost->setText( settings.
value( key + 
"/host" ).toString() );
 
   68     txtDatabase->setText( settings.
value( key + 
"/database" ).toString() );
 
   69     const QString port = settings.
value( key + 
"/port" ).toString();
 
   70     txtPort->setText( port );
 
   71     if ( settings.
value( key + 
"/store_username" ).toString() == QLatin1String( 
"true" ) )
 
   73       mAuthSettingsDatabase->setUsername( settings.
value( key + 
"/username" ).toString() );
 
   74       mAuthSettingsDatabase->setStoreUsernameChecked( 
true );
 
   76     if ( settings.
value( key + 
"/store_password" ).toString() == QLatin1String( 
"true" ) )
 
   78       mAuthSettingsDatabase->setPassword( settings.
value( key + 
"/password" ).toString() );
 
   79       mAuthSettingsDatabase->setStorePasswordChecked( 
true );
 
   81     mAuthSettingsDatabase->setConfigId( settings.
value( key + 
"/configid" ).toString() );
 
   82     cmbDatabaseTypes->setCurrentIndex( cmbDatabaseTypes->findText( connType ) );
 
   83     txtName->setText( connName );
 
   84     txtName->setEnabled( 
false );
 
   85     cmbDatabaseTypes->setEnabled( 
false );
 
   87   txtName->setValidator( 
new QRegularExpressionValidator( QRegularExpression( 
"[^\\/]+" ), txtName ) );
 
   88   mAuthSettingsDatabase->setDataprovider( QStringLiteral( 
"ogr" ) );
 
   89   mAuthSettingsDatabase->showStoreCheckboxes( 
true );
 
   99                            mAuthSettingsDatabase->configId(),
 
  100                            mAuthSettingsDatabase->username(),
 
  101                            mAuthSettingsDatabase->password(),
 
  106   OGRSFDriverH         pahDriver;
 
  108   poDS = OGROpen( uri.toUtf8().constData(), 
false, &pahDriver );
 
  111     QMessageBox::information( 
this, tr( 
"Test Connection" ), tr( 
"Connection failed - Check settings and try again.\n\nExtended error information:\n%1" ).arg( QString::fromUtf8( CPLGetLastErrorMsg() ) ) );
 
  115     QMessageBox::information( 
this, tr( 
"Test Connection" ), tr( 
"Connection to %1 was successful." ).arg( uri ) );
 
  116     OGRReleaseDataSource( poDS );
 
  122   QgsHelp::openHelp( QStringLiteral( 
"managing_data_source/opening_data.html#creating-a-stored-connection" ) );
 
  125 void QgsNewOgrConnection::updateOkButtonState()
 
  127   const bool enabled = !txtName->text().isEmpty();
 
  128   buttonBox->button( QDialogButtonBox::Ok )->setEnabled( enabled );
 
  136   QString baseKey = 
'/' + cmbDatabaseTypes->currentText() + 
"/connections/";
 
  137   settings.
setValue( baseKey + 
"selected", txtName->text() );
 
  140   if ( ( mOriginalConnName.isNull() || mOriginalConnName != txtName->text() ) &&
 
  141        settings.
contains( baseKey + txtName->text() + 
"/host" ) &&
 
  142        QMessageBox::question( 
this,
 
  143                               tr( 
"Save Connection" ),
 
  144                               tr( 
"Should the existing connection %1 be overwritten?" ).arg( txtName->text() ),
 
  145                               QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Cancel )
 
  151   if ( !mOriginalConnName.isNull() && mOriginalConnName != txtName->text() )
 
  153     settings.
remove( baseKey + mOriginalConnName );
 
  156   baseKey += txtName->text();
 
  157   settings.
setValue( baseKey + 
"/host", txtHost->text() );
 
  158   settings.
setValue( baseKey + 
"/database", txtDatabase->text() );
 
  159   settings.
setValue( baseKey + 
"/port", txtPort->text() );
 
  160   settings.
setValue( baseKey + 
"/username", mAuthSettingsDatabase->storeUsernameIsChecked() ? mAuthSettingsDatabase->username() : QString() );
 
  161   settings.
setValue( baseKey + 
"/password", mAuthSettingsDatabase->storePasswordIsChecked() ? mAuthSettingsDatabase->password() : QString() );
 
  162   settings.
setValue( baseKey + 
"/store_username", mAuthSettingsDatabase->storeUsernameIsChecked() ? 
"true" : 
"false" );
 
  163   settings.
setValue( baseKey + 
"/store_password", mAuthSettingsDatabase->storePasswordIsChecked() ? 
"true" : 
"false" );
 
  164   settings.
setValue( baseKey + 
"/configid", mAuthSettingsDatabase->configId() );
 
  169 void QgsNewOgrConnection::btnConnect_clicked()