Skip to content

Commit

Permalink
allow editing transform in project properties
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids authored and nyalldawson committed Dec 15, 2017
1 parent eb71750 commit 8798cf0
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 9 deletions.
10 changes: 10 additions & 0 deletions src/app/qgsdatumtransformtablemodel.cpp
Expand Up @@ -99,6 +99,16 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
break;
}
break;
case Qt::UserRole:
switch ( index.column() )
{
case SourceTransformColumn:
return sourceTransform;
case DestinationTransformColumn:
return destinationTransform;
default:
break;
}
default:
break;
}
Expand Down
46 changes: 46 additions & 0 deletions src/app/qgsprojectproperties.cpp
Expand Up @@ -165,6 +165,7 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
mDatumTransformTableView->setSelectionBehavior( QAbstractItemView::SelectRows );
connect( mDatumTransformAddButton, &QToolButton::clicked, this, &QgsProjectProperties::addDatumTransform );
connect( mDatumTransformRemoveButton, &QToolButton::clicked, this, &QgsProjectProperties::removeDatumTransform );
connect( mDatumTransformEditButton, &QToolButton::clicked, this, &QgsProjectProperties::editDatumTransform );

bool show = settings.value( QStringLiteral( "/Projections/showDatumTransformDialog" ), false ).toBool();
mShowDatumTransformDialogCheckBox->setChecked( show );
Expand Down Expand Up @@ -1254,6 +1255,51 @@ void QgsProjectProperties::removeDatumTransform()
}
}

void QgsProjectProperties::editDatumTransform()
{
QModelIndexList selectedIndexes = mDatumTransformTableView->selectionModel()->selectedIndexes();
if ( selectedIndexes.count() > 0 )
{
QgsCoordinateReferenceSystem sourceCrs;
QgsCoordinateReferenceSystem destinationCrs;
int sourceTransform = -1;
int destinationTransform = -1;
for ( QModelIndexList::const_iterator it = selectedIndexes.constBegin(); it != selectedIndexes.constEnd(); it ++ )
{
if ( it->column() == QgsDatumTransformTableModel::SourceCrsColumn )
{
sourceCrs = QgsCoordinateReferenceSystem( mDatumTransformTableModel->data( *it, Qt::DisplayRole ).toString() );
}
if ( it->column() == QgsDatumTransformTableModel::DestinationCrsColumn )
{
destinationCrs = QgsCoordinateReferenceSystem( mDatumTransformTableModel->data( *it, Qt::DisplayRole ).toString() );
}
if ( it->column() == QgsDatumTransformTableModel::SourceTransformColumn )
{
sourceTransform = mDatumTransformTableModel->data( *it, Qt::UserRole ).toInt();
}
if ( it->column() == QgsDatumTransformTableModel::DestinationTransformColumn )
{
destinationTransform = mDatumTransformTableModel->data( *it, Qt::UserRole ).toInt();
}
}
if ( sourceCrs.isValid() && destinationCrs.isValid() &&
( sourceTransform != -1 || destinationTransform != -1 ) )
{
QgsDatumTransformDialog *dlg = new QgsDatumTransformDialog( sourceCrs, destinationCrs, qMakePair( sourceTransform, destinationTransform ) );
if ( dlg->exec() )
{
QPair< QPair<QgsCoordinateReferenceSystem, int>, QPair<QgsCoordinateReferenceSystem, int > > dt = dlg->selectedDatumTransforms();
QgsCoordinateTransformContext context = mDatumTransformTableModel->transformContext();
// QMap::insert takes care of replacing existing value
context.addSourceDestinationDatumTransform( sourceCrs, destinationCrs, dt.first.second, dt.second.second );
mDatumTransformTableModel->setTransformContext( context );
}
}
}

}

void QgsProjectProperties::cbxWFSPubliedStateChanged( int aIdx )
{
QCheckBox *cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( aIdx, 1 ) );
Expand Down
3 changes: 3 additions & 0 deletions src/app/qgsprojectproperties.h
Expand Up @@ -76,6 +76,9 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
//! remove currently selected datum transform
void removeDatumTransform();

//! edit currently selected datum transform
void editDatumTransform();

/**
* Let the user add a scale to the list of project scales
* used in scale combobox instead of global ones */
Expand Down
20 changes: 15 additions & 5 deletions src/gui/qgsdatumtransformdialog.cpp
Expand Up @@ -25,13 +25,18 @@
#include <QDir>
#include <QPushButton>

QgsDatumTransformDialog::QgsDatumTransformDialog( QgsCoordinateReferenceSystem sourceCrs,
QgsCoordinateReferenceSystem destinationCrs,
QWidget *parent, Qt::WindowFlags f )
QgsDatumTransformDialog::QgsDatumTransformDialog( const QgsCoordinateReferenceSystem &sourceCrs,
const QgsCoordinateReferenceSystem &destinationCrs,
QPair<int, int> selectedDatumTransforms,
QWidget *parent,
Qt::WindowFlags f )
: QDialog( parent, f )
{
setupUi( this );

mSourceProjectionSelectionWidget->setCrs( sourceCrs );
mDestinationProjectionSelectionWidget->setCrs( destinationCrs );

connect( mHideDeprecatedCheckBox, &QCheckBox::stateChanged, this, &QgsDatumTransformDialog::mHideDeprecatedCheckBox_stateChanged );
connect( mDatumTransformTreeWidget, &QTreeWidget::currentItemChanged, this, &QgsDatumTransformDialog::mDatumTransformTreeWidget_currentItemChanged );

Expand Down Expand Up @@ -59,10 +64,10 @@ QgsDatumTransformDialog::QgsDatumTransformDialog( QgsCoordinateReferenceSystem s
mDatumTransformTreeWidget->setColumnWidth( i, settings.value( QStringLiteral( "Windows/DatumTransformDialog/columnWidths/%1" ).arg( i ), mDatumTransformTreeWidget->columnWidth( i ) ).toInt() );
}

load();
load( selectedDatumTransforms );
}

void QgsDatumTransformDialog::load()
void QgsDatumTransformDialog::load( const QPair<int, int> &selectedDatumTransforms )
{
QgsDebugMsg( "Entered." );

Expand Down Expand Up @@ -128,6 +133,11 @@ void QgsDatumTransformDialog::load()
{
item->setDisabled( itemDisabled );
mDatumTransformTreeWidget->addTopLevelItem( item );
if ( it->at( 0 ) == selectedDatumTransforms.first &&
it->at( 1 ) == selectedDatumTransforms.second )
{
mDatumTransformTreeWidget->setCurrentItem( item );
}
}
else
{
Expand Down
10 changes: 6 additions & 4 deletions src/gui/qgsdatumtransformdialog.h
Expand Up @@ -37,9 +37,11 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
/**
* Constructor for QgsDatumTransformDialog.
*/
QgsDatumTransformDialog( QgsCoordinateReferenceSystem sourceCrs = QgsCoordinateReferenceSystem(),
QgsCoordinateReferenceSystem destinationCrs = QgsCoordinateReferenceSystem(),
QWidget *parent = nullptr, Qt::WindowFlags f = nullptr );
QgsDatumTransformDialog( const QgsCoordinateReferenceSystem &sourceCrs = QgsCoordinateReferenceSystem(),
const QgsCoordinateReferenceSystem &destinationCrs = QgsCoordinateReferenceSystem(),
QPair<int, int> selectedDatumTransforms = qMakePair( -1, -1 ),
QWidget *parent = nullptr,
Qt::WindowFlags f = nullptr );
~QgsDatumTransformDialog();

/**
Expand All @@ -64,7 +66,7 @@ class GUI_EXPORT QgsDatumTransformDialog : public QDialog, private Ui::QgsDatumT
bool gridShiftTransformation( const QString &itemText ) const;
//! Returns false if the location of the grid shift files is known (PROJ_LIB) and the shift file is not there
bool testGridShiftFileAvailability( QTreeWidgetItem *item, int col ) const;
void load();
void load( const QPair<int, int> &selectedDatumTransforms = qMakePair( -1, -1 ) );
void setOKButtonEnabled();


Expand Down

0 comments on commit 8798cf0

Please sign in to comment.