|
26 | 26 | #include "qgsapplication.h"
|
27 | 27 | #include "qgspanelwidget.h"
|
28 | 28 | #include "qgsjsonutils.h"
|
| 29 | +#include "qgsunittypes.h" |
29 | 30 | #include <QToolButton>
|
30 | 31 | #include <QDesktopServices>
|
31 | 32 | #include <QScrollBar>
|
@@ -263,6 +264,8 @@ QgsProcessingAlgorithmDialogBase::QgsProcessingAlgorithmDialogBase( QWidget *par
|
263 | 264 | {
|
264 | 265 | mOverrideDefaultContextSettings = true;
|
265 | 266 | mGeometryCheck = mContextOptionsWidget->invalidGeometryCheck();
|
| 267 | + mDistanceUnits = mContextOptionsWidget->distanceUnit(); |
| 268 | + mAreaUnits = mContextOptionsWidget->areaUnit(); |
266 | 269 | } );
|
267 | 270 | }
|
268 | 271 | }
|
@@ -863,6 +866,8 @@ void QgsProcessingAlgorithmDialogBase::applyContextOverrides( QgsProcessingConte
|
863 | 866 | if ( mOverrideDefaultContextSettings )
|
864 | 867 | {
|
865 | 868 | context->setInvalidGeometryCheck( mGeometryCheck );
|
| 869 | + context->setDistanceUnit( mDistanceUnits ); |
| 870 | + context->setAreaUnit( mAreaUnits ); |
866 | 871 | }
|
867 | 872 | }
|
868 | 873 |
|
@@ -942,17 +947,67 @@ QgsProcessingContextOptionsWidget::QgsProcessingContextOptionsWidget( QWidget *p
|
942 | 947 | mComboInvalidFeatureFiltering->addItem( tr( "Skip (Ignore) Features with Invalid Geometries" ), QgsFeatureRequest::GeometrySkipInvalid );
|
943 | 948 | mComboInvalidFeatureFiltering->addItem( tr( "Stop Algorithm Execution When a Geometry is Invalid" ), QgsFeatureRequest::GeometryAbortOnInvalid );
|
944 | 949 |
|
| 950 | + mDistanceUnitsCombo->addItem( tr( "Default" ), QVariant::fromValue( Qgis::DistanceUnit::Unknown ) ); |
| 951 | + for ( Qgis::DistanceUnit unit : |
| 952 | + { |
| 953 | + Qgis::DistanceUnit::Meters, |
| 954 | + Qgis::DistanceUnit::Kilometers, |
| 955 | + Qgis::DistanceUnit::Centimeters, |
| 956 | + Qgis::DistanceUnit::Millimeters, |
| 957 | + Qgis::DistanceUnit::Feet, |
| 958 | + Qgis::DistanceUnit::Miles, |
| 959 | + Qgis::DistanceUnit::NauticalMiles, |
| 960 | + Qgis::DistanceUnit::Yards, |
| 961 | + Qgis::DistanceUnit::Degrees, |
| 962 | + } ) |
| 963 | + { |
| 964 | + mDistanceUnitsCombo->addItem( QgsUnitTypes::toString( unit ), QVariant::fromValue( unit ) ); |
| 965 | + } |
| 966 | + |
| 967 | + mAreaUnitsCombo->addItem( tr( "Default" ), QVariant::fromValue( Qgis::AreaUnit::Unknown ) ); |
| 968 | + for ( Qgis::AreaUnit unit : |
| 969 | + { |
| 970 | + Qgis::AreaUnit::SquareMeters, |
| 971 | + Qgis::AreaUnit::Hectares, |
| 972 | + Qgis::AreaUnit::SquareKilometers, |
| 973 | + Qgis::AreaUnit::SquareCentimeters, |
| 974 | + Qgis::AreaUnit::SquareMillimeters, |
| 975 | + Qgis::AreaUnit::SquareFeet, |
| 976 | + Qgis::AreaUnit::SquareMiles, |
| 977 | + Qgis::AreaUnit::SquareNauticalMiles, |
| 978 | + Qgis::AreaUnit::SquareYards, |
| 979 | + Qgis::AreaUnit::Acres, |
| 980 | + Qgis::AreaUnit::SquareDegrees, |
| 981 | + } ) |
| 982 | + { |
| 983 | + mAreaUnitsCombo->addItem( QgsUnitTypes::toString( unit ), QVariant::fromValue( unit ) ); |
| 984 | + } |
| 985 | + |
945 | 986 | connect( mComboInvalidFeatureFiltering, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
|
| 987 | + connect( mDistanceUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged ); |
| 988 | + connect( mAreaUnitsCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged ); |
946 | 989 | }
|
947 | 990 |
|
948 | 991 | void QgsProcessingContextOptionsWidget::setFromContext( const QgsProcessingContext *context )
|
949 | 992 | {
|
950 | 993 | whileBlocking( mComboInvalidFeatureFiltering )->setCurrentIndex( mComboInvalidFeatureFiltering->findData( static_cast< int >( context->invalidGeometryCheck() ) ) );
|
| 994 | + whileBlocking( mDistanceUnitsCombo )->setCurrentIndex( mDistanceUnitsCombo->findData( QVariant::fromValue( context->distanceUnit() ) ) ); |
| 995 | + whileBlocking( mAreaUnitsCombo )->setCurrentIndex( mAreaUnitsCombo->findData( QVariant::fromValue( context->areaUnit() ) ) ); |
951 | 996 | }
|
952 | 997 |
|
953 | 998 | QgsFeatureRequest::InvalidGeometryCheck QgsProcessingContextOptionsWidget::invalidGeometryCheck() const
|
954 | 999 | {
|
955 | 1000 | return static_cast< QgsFeatureRequest::InvalidGeometryCheck >( mComboInvalidFeatureFiltering->currentData().toInt() );
|
956 | 1001 | }
|
957 | 1002 |
|
| 1003 | +Qgis::DistanceUnit QgsProcessingContextOptionsWidget::distanceUnit() const |
| 1004 | +{ |
| 1005 | + return mDistanceUnitsCombo->currentData().value< Qgis::DistanceUnit >(); |
| 1006 | +} |
| 1007 | + |
| 1008 | +Qgis::AreaUnit QgsProcessingContextOptionsWidget::areaUnit() const |
| 1009 | +{ |
| 1010 | + return mAreaUnitsCombo->currentData().value< Qgis::AreaUnit >(); |
| 1011 | +} |
| 1012 | + |
958 | 1013 | ///@endcond
|
0 commit comments