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(
98 const QVariant &value,
102 : QgsProcessingMultipleSelectionPanelWidget( QVariantList(), QVariantList(), parent )
103 , mProject( project )
105 connect( listView(), &QListView::doubleClicked,
this, &QgsProcessingAlignRasterLayersPanelWidget::configureRaster );
107 QPushButton *configureLayerButton =
new QPushButton( tr(
"Configure Raster…" ) );
108 connect( configureLayerButton, &QPushButton::clicked,
this, &QgsProcessingAlignRasterLayersPanelWidget::configureRaster );
109 buttonBox()->addButton( configureLayerButton, QDialogButtonBox::ActionRole );
112 mContext.setProject( project );
114 QSet<const QString> seenFiles;
115 const QVariantList valueList = value.toList();
116 for (
const QVariant &v : valueList )
119 addOption( v, titleForItem( item ),
true );
126 if ( seenFiles.contains( layer->source() ) )
130 vm[
"inputFile"] = layer->source();
131 vm[
"outputFile"] = QString();
135 const QString title = layer->source();
136 addOption( vm, title,
false );
140void QgsProcessingAlignRasterLayersPanelWidget::configureRaster()
142 const QModelIndexList selection = listView()->selectionModel()->selectedIndexes();
143 if ( selection.size() != 1 )
145 QMessageBox::warning(
this, tr(
"Configure Raster" ), tr(
"Please select a single layer." ) );
149 QStandardItem *item = mModel->itemFromIndex( selection[0] );
150 const QVariant value = item->data( Qt::UserRole );
155 QgsProcessingAlignRasterLayerDetailsWidget *widget =
new QgsProcessingAlignRasterLayerDetailsWidget( value, mProject );
156 widget->setPanelTitle( tr(
"Configure Raster" ) );
157 widget->buttonBox()->hide();
159 connect( widget, &QgsProcessingAlignRasterLayerDetailsWidget::widgetChanged,
this, [
this, item, widget]() {
160 setItemValue( item, widget->value() );
167 dlg.setWindowTitle( tr(
"Configure Raster" ) );
168 QVBoxLayout *vLayout =
new QVBoxLayout();
169 QgsProcessingAlignRasterLayerDetailsWidget *widget =
new QgsProcessingAlignRasterLayerDetailsWidget( value, mProject );
170 vLayout->addWidget( widget );
171 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
172 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
173 dlg.setLayout( vLayout );
176 setItemValue( item, widget->value() );
181void QgsProcessingAlignRasterLayersPanelWidget::setItemValue( QStandardItem *item,
const QVariant &value )
183 mContext.setProject( mProject );
187 item->setText( titleForItem( rasterItem ) );
188 item->setData( value, Qt::UserRole );
201QgsProcessingAlignRasterLayersWidget::QgsProcessingAlignRasterLayersWidget( QWidget *parent )
204 QHBoxLayout *hl =
new QHBoxLayout();
205 hl->setContentsMargins( 0, 0, 0, 0 );
207 mLineEdit =
new QLineEdit();
208 mLineEdit->setEnabled(
false );
209 hl->addWidget( mLineEdit, 1 );
211 mToolButton =
new QToolButton();
212 mToolButton->setText( QString( QChar( 0x2026 ) ) );
213 hl->addWidget( mToolButton );
219 connect( mToolButton, &QToolButton::clicked,
this, &QgsProcessingAlignRasterLayersWidget::showDialog );
222void QgsProcessingAlignRasterLayersWidget::setValue(
const QVariant &value )
224 if ( value.isValid() )
225 mValue = value.userType() == QMetaType::Type::QVariantList ? value.toList() : QVariantList() << value;
233void QgsProcessingAlignRasterLayersWidget::setProject(
QgsProject *project )
238void QgsProcessingAlignRasterLayersWidget::showDialog()
243 QgsProcessingAlignRasterLayersPanelWidget *widget =
new QgsProcessingAlignRasterLayersPanelWidget( mValue, mProject );
244 widget->setPanelTitle( tr(
"Input layers" ) );
245 connect( widget, &QgsProcessingMultipleSelectionPanelWidget::selectionChanged,
this, [
this, widget]() {
246 setValue( widget->selectedOptions() );
254 dlg.setWindowTitle( tr(
"Input layers" ) );
255 QVBoxLayout *vLayout =
new QVBoxLayout();
256 QgsProcessingAlignRasterLayersPanelWidget *widget =
new QgsProcessingAlignRasterLayersPanelWidget( mValue, mProject );
257 vLayout->addWidget( widget );
258 widget->buttonBox()->addButton( QDialogButtonBox::Cancel );
259 connect( widget->buttonBox(), &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
260 connect( widget->buttonBox(), &QDialogButtonBox::rejected, &dlg, &QDialog::reject );
261 dlg.setLayout( vLayout );
264 setValue( widget->selectedOptions() );
269void QgsProcessingAlignRasterLayersWidget::updateSummaryText()
271 mLineEdit->setText( tr(
"%n raster layer(s) selected",
nullptr, mValue.count() ) );
284QString QgsProcessingAlignRasterLayersWidgetWrapper::parameterType()
const
291 return new QgsProcessingAlignRasterLayersWidgetWrapper( parameter, type );
294QWidget *QgsProcessingAlignRasterLayersWidgetWrapper::createWidget()
296 mPanel =
new QgsProcessingAlignRasterLayersWidget(
nullptr );
297 mPanel->setProject( widgetContext().project() );
298 if ( parameterDefinition() )
300 mPanel->setToolTip( parameterDefinition()->toolTip() );
302 connect( mPanel, &QgsProcessingAlignRasterLayersWidget::changed,
this, [
this] {
303 emit widgetValueHasChanged(
this );
313 mPanel->setProject( context.
project() );
317void QgsProcessingAlignRasterLayersWidgetWrapper::setWidgetValue(
const QVariant &value,
QgsProcessingContext &context )
322 mPanel->setValue( value );
326QVariant QgsProcessingAlignRasterLayersWidgetWrapper::widgetValue()
const
328 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)