QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsmodelinputreorderwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmodelinputreorderwidget.cpp
3 ------------------------------------
4 Date : April 2020
5 Copyright : (C) 2020 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17#include "qgsgui.h"
19#include <QDialogButtonBox>
20#include <QStandardItemModel>
22
23QgsModelInputReorderWidget::QgsModelInputReorderWidget( QWidget *parent )
24 : QWidget( parent )
25{
26 setupUi( this );
27
28 mItemModel = new QStandardItemModel( 0, 1, this );
29 mInputsList->setModel( mItemModel );
30
31 mInputsList->setDropIndicatorShown( true );
32 mInputsList->setDragDropOverwriteMode( false );
33 mInputsList->setDragEnabled( true );
34 mInputsList->setDragDropMode( QAbstractItemView::InternalMove );
35
36 connect( mButtonUp, &QPushButton::clicked, this, [ = ]
37 {
38 int currentRow = mInputsList->currentIndex().row();
39 if ( currentRow == 0 )
40 return;
41
42 mItemModel->insertRow( currentRow - 1, mItemModel->takeRow( currentRow ) );
43 mInputsList->setCurrentIndex( mItemModel->index( currentRow - 1, 0 ) );
44 } );
45
46 connect( mButtonDown, &QPushButton::clicked, this, [ = ]
47 {
48 int currentRow = mInputsList->currentIndex().row();
49 if ( currentRow == mItemModel->rowCount() - 1 )
50 return;
51
52 mItemModel->insertRow( currentRow + 1, mItemModel->takeRow( currentRow ) );
53 mInputsList->setCurrentIndex( mItemModel->index( currentRow + 1, 0 ) );
54 } );
55
56}
57
58void QgsModelInputReorderWidget::setModel( QgsProcessingModelAlgorithm *model )
59{
60 mModel = model;
61 mParameters = mModel->orderedParameters();
62 QStringList res;
63 mItemModel->clear();
64 for ( const QgsProcessingModelParameter &param : std::as_const( mParameters ) )
65 {
66 QStandardItem *item = new QStandardItem( mModel->parameterDefinition( param.parameterName() )->description() );
67 item->setData( param.parameterName() );
68 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled );
69 mItemModel->appendRow( item );
70 }
71}
72
73QStringList QgsModelInputReorderWidget::inputOrder() const
74{
75 QStringList order;
76 order.reserve( mItemModel->rowCount( ) );
77 for ( int row = 0; row < mItemModel->rowCount(); ++row )
78 {
79 order << mItemModel->data( mItemModel->index( row, 0 ), Qt::UserRole + 1 ).toString();
80 }
81 return order;
82}
83
84
85QgsModelInputReorderDialog::QgsModelInputReorderDialog( QWidget *parent )
86 : QDialog( parent )
87{
88 setWindowTitle( tr( "Reorder Model Inputs" ) );
89 mWidget = new QgsModelInputReorderWidget();
90 QVBoxLayout *vl = new QVBoxLayout();
91 vl->addWidget( mWidget, 1 );
92 QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
93 connect( buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept );
94 connect( buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject );
95 vl->addWidget( buttonBox );
96 setLayout( vl );
97}
98
99void QgsModelInputReorderDialog::setModel( QgsProcessingModelAlgorithm *model )
100{
101 mWidget->setModel( model );
102}
103
104QStringList QgsModelInputReorderDialog::inputOrder() const
105{
106 return mWidget->inputOrder();
107}
108