16#ifndef QGSPROCESSINGMULTIPLESELECTIONDIALOG_H
17#define QGSPROCESSINGMULTIPLESELECTIONDIALOG_H
19#include "ui_qgsprocessingmultipleselectiondialogbase.h"
28class QStandardItemModel;
31class QgsProcessingModelChildParameterSource;
32class QgsProcessingModelAlgorithm;
42class GUI_EXPORT QgsProcessingMultipleSelectionPanelWidget :
public QgsPanelWidget,
private Ui::QgsProcessingMultipleSelectionDialogBase
56 QgsProcessingMultipleSelectionPanelWidget(
const QVariantList &availableOptions = QVariantList(),
const QVariantList &selectedOptions = QVariantList(), QWidget *parent
SIP_TRANSFERTHIS =
nullptr );
62 void setValueFormatter(
const std::function<QString(
const QVariant & )> &formatter );
64 void setValueFormatter( SIP_PYCALLABLE );
67 Py_BEGIN_ALLOW_THREADS
69 sipCpp->setValueFormatter( [a0](
const QVariant &v ) -> QString {
72 PyObject *s = sipCallMethod( NULL, a0,
"D", &v, sipType_QVariant, NULL );
75 QString *t1 =
reinterpret_cast<QString *
>( sipConvertToType( s, sipType_QString, 0, SIP_NOT_NONE, &state, &sipIsError ) );
76 if ( sipIsError == 0 )
80 sipReleaseType( t1, sipType_QString, state );
93 QVariantList selectedOptions()
const;
98 QDialogButtonBox *buttonBox() {
return mButtonBox; }
105 void acceptClicked();
110 void selectionChanged();
118 void addOption(
const QVariant &value,
const QString &title,
bool selected,
bool updateExistingTitle =
false, QIcon optionalIconDecoration = QIcon() );
120 QListView *listView()
const {
return mSelectionList; }
123 QStandardItemModel *mModel =
nullptr;
125 std::function<QString(
const QVariant & )> mValueFormatter;
127 void dragEnterEvent( QDragEnterEvent *event )
override;
128 void dropEvent( QDropEvent *event )
override;
132 void selectAll(
bool checked );
133 void toggleSelection();
136 QPushButton *mButtonSelectAll =
nullptr;
137 QPushButton *mButtonClearSelection =
nullptr;
138 QPushButton *mButtonToggleSelection =
nullptr;
140 QList<QStandardItem *> currentItems();
142 void populateList(
const QVariantList &availableOptions,
const QVariantList &selectedOptions );
144 friend class TestProcessingGui;
150 QList<int> existingMapLayerFromMimeData(
const QMimeData *data )
const;
160class GUI_EXPORT QgsProcessingMultipleSelectionDialog :
public QDialog
174 QgsProcessingMultipleSelectionDialog(
const QVariantList &availableOptions = QVariantList(),
const QVariantList &selectedOptions = QVariantList(), QWidget *parent
SIP_TRANSFERTHIS =
nullptr, Qt::WindowFlags flags = Qt::WindowFlags() );
181 void setValueFormatter(
const std::function<QString(
const QVariant & )> &formatter );
183 void setValueFormatter( SIP_PYCALLABLE );
186 Py_BEGIN_ALLOW_THREADS
188 sipCpp->setValueFormatter( [a0](
const QVariant &v ) -> QString {
191 PyObject *s = sipCallMethod( NULL, a0,
"D", &v, sipType_QVariant, NULL );
194 QString *t1 =
reinterpret_cast<QString *
>( sipConvertToType( s, sipType_QString, 0, SIP_NOT_NONE, &state, &sipIsError ) );
195 if ( sipIsError == 0 )
197 res = QString( *t1 );
199 sipReleaseType( t1, sipType_QString, state );
212 QVariantList selectedOptions()
const;
215 QgsProcessingMultipleSelectionPanelWidget *mWidget =
nullptr;
225class GUI_EXPORT QgsProcessingMultipleInputPanelWidget :
public QgsProcessingMultipleSelectionPanelWidget
233 QgsProcessingMultipleInputPanelWidget(
const QgsProcessingParameterMultipleLayers *parameter,
const QVariantList &selectedOptions,
const QList<QgsProcessingModelChildParameterSource> &modelSources, QgsProcessingModelAlgorithm *model =
nullptr, QWidget *parent
SIP_TRANSFERTHIS =
nullptr );
238 void setProject( QgsProject *project );
245 static QStringList compatibleUrisFromMimeData(
246 const QgsProcessingParameterMultipleLayers *parameter,
247 const QMimeData *data,
257 void dragEnterEvent( QDragEnterEvent *event )
override;
258 void dropEvent( QDropEvent *event )
override;
266 void populateFromProject( QgsProject *project );
268 const QgsProcessingParameterMultipleLayers *mParameter =
nullptr;
278class GUI_EXPORT QgsProcessingMultipleInputDialog :
public QDialog
289 QgsProcessingMultipleInputDialog(
const QgsProcessingParameterMultipleLayers *parameter,
const QVariantList &selectedOptions,
const QList<QgsProcessingModelChildParameterSource> &modelSources, QgsProcessingModelAlgorithm *model =
nullptr, QWidget *parent
SIP_TRANSFERTHIS =
nullptr, Qt::WindowFlags flags = Qt::WindowFlags() );
294 QVariantList selectedOptions()
const;
299 void setProject( QgsProject *project );
302 QgsProcessingMultipleInputPanelWidget *mWidget =
nullptr;
QList< QgsMimeDataUtils::Uri > UriList