Prevent creating invalid join in add join dialog (fixes crash)

This commit is contained in:
Nyall Dawson 2016-06-13 09:18:59 +10:00
parent e301cc80f9
commit 693ead28bb
2 changed files with 18 additions and 1 deletions

View File

@ -24,6 +24,7 @@
#include "qgsfieldcombobox.h"
#include <QStandardItemModel>
#include <QPushButton>
QgsJoinDialog::QgsJoinDialog( QgsVectorLayer* layer, QList<QgsMapLayer*> alreadyJoinedLayers, QWidget * parent, Qt::WindowFlags f )
: QDialog( parent, f )
@ -53,6 +54,12 @@ QgsJoinDialog::QgsJoinDialog( QgsVectorLayer* layer, QList<QgsMapLayer*> already
mJoinFieldComboBox->setLayer( joinLayer );
joinedLayerChanged( joinLayer );
}
connect( mJoinLayerComboBox, SIGNAL( layerChanged( QgsMapLayer* ) ), this, SLOT( checkDefinitionValid() ) );
connect( mJoinFieldComboBox, SIGNAL( fieldChanged( QString ) ), this, SLOT( checkDefinitionValid() ) );
connect( mTargetFieldComboBox, SIGNAL( fieldChanged( QString ) ), this, SLOT( checkDefinitionValid() ) );
checkDefinitionValid();
}
QgsJoinDialog::~QgsJoinDialog()
@ -98,7 +105,8 @@ void QgsJoinDialog::setJoinInfo( const QgsVectorJoinInfo& joinInfo )
QgsVectorJoinInfo QgsJoinDialog::joinInfo() const
{
QgsVectorJoinInfo info;
info.joinLayerId = mJoinLayerComboBox->currentLayer()->id();
if ( mJoinLayerComboBox->currentLayer() )
info.joinLayerId = mJoinLayerComboBox->currentLayer()->id();
info.joinFieldName = mJoinFieldComboBox->currentField();
info.targetFieldName = mTargetFieldComboBox->currentField();
info.memoryCache = mCacheInMemoryCheckBox->isChecked();
@ -172,3 +180,10 @@ void QgsJoinDialog::joinedLayerChanged( QgsMapLayer* layer )
mCustomPrefix->setText( layer->name() + '_' );
}
}
void QgsJoinDialog::checkDefinitionValid()
{
buttonBox->button( QDialogButtonBox::Ok )->setEnabled( mJoinLayerComboBox->currentIndex() != -1
&& mJoinFieldComboBox->currentIndex() != -1
&& mTargetFieldComboBox->currentIndex() != -1 );
}

View File

@ -42,6 +42,8 @@ class APP_EXPORT QgsJoinDialog: public QDialog, private Ui::QgsJoinDialogBase
private slots:
void joinedLayerChanged( QgsMapLayer* layer );
void checkDefinitionValid();
private:
/** Target layer*/
QgsVectorLayer* mLayer;