29#include <QStandardItemModel>
33#include "moc_qgsprocessingalignrasterlayerswidgetwrapper.cpp"
35using namespace Qt::StringLiterals;
43QgsProcessingAlignRasterLayerDetailsWidget::QgsProcessingAlignRasterLayerDetailsWidget(
const QVariant &value,
QgsProject *project )
48 mOutputFileWidget->setConfirmOverwrite(
true );
52 for (
const QString &ext : extensions )
54 filters << QObject::tr(
"%1 files (*.%2)" ).arg( ext.toUpper(), ext.toLower() );
56 mOutputFileWidget->setFilter( filters.join(
";;"_L1 ) + u
";;"_s + QObject::tr(
"All files (*.*)" ) );
71 mContext.setProject( project );
76 cmbResamplingMethod->setCurrentIndex( cmbResamplingMethod->findData(
static_cast<int>( item.
resampleMethod ) ) );
84QVariant QgsProcessingAlignRasterLayerDetailsWidget::value()
const
97QgsProcessingAlignRasterLayersPanelWidget::QgsProcessingAlignRasterLayersPanelWidget(
const QVariant &value,
QgsProject *project, QWidget *parent )
98 : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
101 connect( listView(), &QListView::doubleClicked,
this, &QgsProcessingAlignRasterLayersPanelWidget::configureRaster );
103 QPushButton *configureLayerButton =
new QPushButton( tr(
"Configure Raster…" ) );
104 connect( configureLayerButton, &QPushButton::clicked,
this, &QgsProcessingAlignRasterLayersPanelWidget::configureRaster );
105 buttonBox()->addButton( configureLayerButton, QDialogButtonBox::ActionRole );
108 mContext.setProject( project );
110 QSet<const QString> seenFiles;
111 const QVariantList valueList = value.toList();
112 for (
const QVariant &v : valueList )
115 addOption( v, titleForItem( item ),
true );
122 if ( seenFiles.contains( layer->source() ) )
126 vm[
"inputFile"] = layer->source();
127 vm[
"outputFile"] = QString();
131 const QString title = layer->source();
132 addOption( vm, title,
false );
136void QgsProcessingAlignRasterLayersPanelWidget::configureRaster()
138 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
139 if ( selection.size() != 1 )
141 QMessageBox::warning(
this, tr(
"Configure Raster" ), tr(
"Please select a single layer." ) );
145 QStandardItem *item = mModel->itemFromIndex( selection[0] );
146 const QVariant value = item->data( Qt::UserRole );
151 QgsProcessingAlignRasterLayerDetailsWidget *widget =
new QgsProcessingAlignRasterLayerDetailsWidget( value, mProject );
152 widget->setPanelTitle( tr(
"Configure Raster" ) );
153 widget->buttonBox()->hide();
155 connect( widget, &QgsProcessingAlignRasterLayerDetailsWidget::widgetChanged,
this, [
this, item, widget]() { setItemValue( item, widget->value() ); } );
161 dlg.setWindowTitle( tr(
"Configure Raster" ) );
162 QVBoxLayout *vLayout =
new QVBoxLayout();
163 QgsProcessingAlignRasterLayerDetailsWidget *widget =
new QgsProcessingAlignRasterLayerDetailsWidget( value, mProject );
164 vLayout->addWidget( widget );
165 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
166 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
167 dlg.setLayout( vLayout );
170 setItemValue( item, widget->value() );
175void QgsProcessingAlignRasterLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
177 mContext.setProject( mProject );
181 item->setText( titleForItem( rasterItem ) );
182 item->setData( value, Qt::UserRole );
195QgsProcessingAlignRasterLayersWidget::QgsProcessingAlignRasterLayersWidget( QWidget *parent )
198 QHBoxLayout *hl =
new QHBoxLayout();
199 hl->setContentsMargins( 0, 0, 0, 0 );
201 mLineEdit =
new QLineEdit();
202 mLineEdit->setEnabled(
false );
203 hl->addWidget( mLineEdit, 1 );
205 mToolButton =
new QToolButton();
206 mToolButton->setText( QString( QChar( 0x2026 ) ) );
207 hl->addWidget( mToolButton );
213 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingAlignRasterLayersWidget::showDialog );
216void QgsProcessingAlignRasterLayersWidget::setValue(
const QVariant &value )
218 if ( value.isValid() )
219 mValue = value.userType() == QMetaType::Type::QVariantList ? value.toList() : QVariantList() << value;
227void QgsProcessingAlignRasterLayersWidget::setProject(
QgsProject *project )
232void QgsProcessingAlignRasterLayersWidget::showDialog()
237 QgsProcessingAlignRasterLayersPanelWidget *widget =
new QgsProcessingAlignRasterLayersPanelWidget( mValue, mProject );
238 widget->setPanelTitle( tr(
"Input layers" ) );
239 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [
this, widget]() { setValue( widget->selectedOptions() ); } );
246 dlg.setWindowTitle( tr(
"Input layers" ) );
247 QVBoxLayout *vLayout =
new QVBoxLayout();
248 QgsProcessingAlignRasterLayersPanelWidget *widget =
new QgsProcessingAlignRasterLayersPanelWidget( mValue, mProject );
249 vLayout->addWidget( widget );
250 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
251 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
252 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
253 dlg.setLayout( vLayout );
256 setValue( widget->selectedOptions() );
261void QgsProcessingAlignRasterLayersWidget::updateSummaryText()
263 mLineEdit->setText( tr(
"%n raster layer(s) selected",
nullptr, mValue.count() ) );
275QString QgsProcessingAlignRasterLayersWidgetWrapper::parameterType()
const
282 return new QgsProcessingAlignRasterLayersWidgetWrapper( parameter, type );
285QWidget *QgsProcessingAlignRasterLayersWidgetWrapper::createWidget()
287 mPanel =
new QgsProcessingAlignRasterLayersWidget(
nullptr );
288 mPanel->setProject( widgetContext().project() );
289 if ( parameterDefinition() )
291 mPanel->setToolTip( parameterDefinition()->toolTip() );
293 connect( mPanel, &QgsProcessingAlignRasterLayersWidget::changed,
this, [
this] { emit widgetValueHasChanged(
this ); } );
302 mPanel->setProject( context.
project() );
306void QgsProcessingAlignRasterLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
311 mPanel->setValue( value );
315QVariant QgsProcessingAlignRasterLayersWidgetWrapper::widgetValue()
const
317 return mPanel ? mPanel->value() : QVariant();
ProcessingMode
Types of modes which Processing widgets can be created for.
GdalResampleAlgorithm
Resampling algorithm to be used (equivalent to GDAL's enum GDALResampleAlg).
@ RA_Lanczos
Lanczos windowed sinc interpolation (6x6 kernel).
@ RA_Q3
Third quartile (selects the third quartile of all non-NODATA contributing pixels).
@ RA_CubicSpline
Cubic B-Spline Approximation (4x4 kernel).
@ RA_Q1
First quartile (selects the first quartile of all non-NODATA contributing pixels).
@ RA_Min
Minimum (selects the minimum of all non-NODATA contributing pixels).
@ RA_Median
Median (selects the median of all non-NODATA contributing pixels).
@ RA_NearestNeighbour
Nearest neighbour (select on one input pixel).
@ RA_Average
Average (computes the average of all non-NODATA contributing pixels).
@ RA_Max
Maximum (selects the maximum of all non-NODATA contributing pixels).
@ RA_Bilinear
Bilinear (2x2 kernel).
@ RA_Mode
Mode (selects the value which appears most often of all the sampled points).
@ RA_Cubic
Cubic Convolution Approximation (4x4 kernel).
Contains information about the context in which a processing algorithm is executed.
static QString typeName()
Returns the type name for the parameter class.
static QgsAlignRasterData::RasterItem variantMapAsItem(const QVariantMap &layerVariantMap, QgsProcessingContext &context)
Converts a QVariant value (a QVariantMap) to a single input layer.
static QVariantMap itemAsVariantMap(const QgsAlignRasterData::RasterItem &item)
Converts a single input layer to QVariant representation (a QVariantMap).
Base class for the definition of processing parameters.
Contains settings which reflect the context in which a Processing parameter widget is shown.
QgsProject * project() const
Returns the project associated with the widget.
static QList< QgsRasterLayer * > compatibleRasterLayers(QgsProject *project, bool sort=true)
Returns a list of raster layers from a project which are compatible with the processing framework.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
static QStringList supportedFormatExtensions(RasterFormatOptions options=SortRecommended)
Returns a list of file extensions for supported formats.
Represents a raster layer.
Definition of one raster layer for alignment.
Qgis::GdalResampleAlgorithm resampleMethod
resampling method to be used
bool rescaleValues
rescaling of values according to the change of pixel size
QString inputFilename
filename of the source raster
QString outputFilename
filename of the newly created aligned raster (will be overwritten if exists already)