QGIS API Documentation 3.41.0-Master (3291e9ff48b)
Loading...
Searching...
No Matches
qgsmodeloutputreorderwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmodeloutputreorderwidget.cpp
3 ------------------------------------
4 Date : April 2023
5 Copyright : (C) 2023 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 "moc_qgsmodeloutputreorderwidget.cpp"
18#include "qgsgui.h"
20#include <QDialogButtonBox>
21#include <QStandardItemModel>
23
24QgsModelOutputReorderWidget::QgsModelOutputReorderWidget( QWidget *parent )
25 : QWidget( parent )
26{
27 setupUi( this );
28
29 mItemModel = new QStandardItemModel( 0, 1, this );
30 mOutputsList->setModel( mItemModel );
31
32 mOutputsList->setDropIndicatorShown( true );
33 mOutputsList->setDragDropOverwriteMode( false );
34 mOutputsList->setDragEnabled( true );
35 mOutputsList->setDragDropMode( QAbstractItemView::InternalMove );
36
37 connect( mButtonUp, &QPushButton::clicked, this, [ = ]
38 {
39 int currentRow = mOutputsList->currentIndex().row();
40 if ( currentRow == 0 )
41 return;
42
43 mItemModel->insertRow( currentRow - 1, mItemModel->takeRow( currentRow ) );
44 mOutputsList->setCurrentIndex( mItemModel->index( currentRow - 1, 0 ) );
45 } );
46
47 connect( mButtonDown, &QPushButton::clicked, this, [ = ]
48 {
49 int currentRow = mOutputsList->currentIndex().row();
50 if ( currentRow == mItemModel->rowCount() - 1 )
51 return;
52
53 mItemModel->insertRow( currentRow + 1, mItemModel->takeRow( currentRow ) );
54 mOutputsList->setCurrentIndex( mItemModel->index( currentRow + 1, 0 ) );
55 } );
56
57}
58
59void QgsModelOutputReorderWidget::setModel( QgsProcessingModelAlgorithm *model )
60{
61 mModel = model;
62 mOutputs = mModel->orderedOutputs();
63 mItemModel->clear();
64 for ( const QgsProcessingModelOutput &output : std::as_const( mOutputs ) )
65 {
66 QStandardItem *item = new QStandardItem( output.name() );
67 item->setData( QStringLiteral( "%1:%2" ).arg( output.childId(), output.childOutputName() ), Qt::UserRole + 1 );
68 item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled );
69 // we show the outputs list reversed in the gui, because we want the "higher" outputs to be at the top of the list
70 mItemModel->insertRow( 0, item );
71 }
72
73 mPlaceInGroupCheck->setChecked( !model->outputGroup().isEmpty() );
74 mGroupNameEdit->setText( model->outputGroup() );
75}
76
77QStringList QgsModelOutputReorderWidget::outputOrder() const
78{
79 QStringList order;
80 order.reserve( mItemModel->rowCount( ) );
81 // we show the outputs list reversed in the gui, because we want the "higher" outputs to be at the top of the list
82 for ( int row = mItemModel->rowCount() - 1; row >= 0; --row )
83 {
84 order << mItemModel->data( mItemModel->index( row, 0 ), Qt::UserRole + 1 ).toString();
85 }
86 return order;
87}
88
89QString QgsModelOutputReorderWidget::outputGroup() const
90{
91 return mPlaceInGroupCheck->isChecked() ? mGroupNameEdit->text() : QString();
92}
93
94
95QgsModelOutputReorderDialog::QgsModelOutputReorderDialog( QWidget *parent )
96 : QDialog( parent )
97{
98 setWindowTitle( tr( "Reorder Output Layers" ) );
99 mWidget = new QgsModelOutputReorderWidget();
100 QVBoxLayout *vl = new QVBoxLayout();
101 vl->addWidget( mWidget, 1 );
102 QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
103 connect( buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept );
104 connect( buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject );
105 vl->addWidget( buttonBox );
106 setLayout( vl );
107}
108
109void QgsModelOutputReorderDialog::setModel( QgsProcessingModelAlgorithm *model )
110{
111 mWidget->setModel( model );
112}
113
114QStringList QgsModelOutputReorderDialog::outputOrder() const
115{
116 return mWidget->outputOrder();
117}
118
119QString QgsModelOutputReorderDialog::outputGroup() const
120{
121 return mWidget->outputGroup();
122}
123