QGIS API Documentation 3.43.0-Master (a93bf8b6462)
qgsprocessingtoolboxtreeview.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsprocessingtoolboxtreeview.cpp
3 -------------------------------
4 begin : July 2018
5 copyright : (C) 2018 by 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_qgsprocessingtoolboxtreeview.cpp"
19
20#include <QKeyEvent>
21
23
24QgsProcessingToolboxTreeView::QgsProcessingToolboxTreeView( QWidget *parent, QgsProcessingRegistry *registry, QgsProcessingRecentAlgorithmLog *recentLog, QgsProcessingFavoriteAlgorithmManager *favoriteManager )
25 : QTreeView( parent )
26{
27 mModel = new QgsProcessingToolboxProxyModel( this, registry, recentLog, favoriteManager );
28 mToolboxModel = mModel->toolboxModel();
29 setModel( mModel );
30}
31
32void QgsProcessingToolboxTreeView::setRegistry( QgsProcessingRegistry *registry, QgsProcessingRecentAlgorithmLog *recentLog, QgsProcessingFavoriteAlgorithmManager *favoriteManager )
33{
34 QgsProcessingToolboxProxyModel *newModel = new QgsProcessingToolboxProxyModel( this, registry, recentLog, favoriteManager );
35 mToolboxModel = newModel->toolboxModel();
36 setModel( newModel );
37 mModel->deleteLater();
38 mModel = newModel;
39}
40
41void QgsProcessingToolboxTreeView::setToolboxProxyModel( QgsProcessingToolboxProxyModel *model )
42{
43 mToolboxModel = mModel->toolboxModel();
44 setModel( model );
45 mModel->deleteLater();
46 mModel = model;
47}
48
49void QgsProcessingToolboxTreeView::setFilterString( const QString &filter )
50{
51 const QString text = filter.trimmed().toLower();
52 mModel->setFilterString( text );
53 if ( !text.isEmpty() )
54 {
55 expandAll();
56 if ( !selectedAlgorithm() )
57 {
58 // if previously selected item was hidden, auto select the first visible algorithm
59 const QModelIndex firstVisibleIndex = findFirstVisibleAlgorithm( QModelIndex() );
60 if ( firstVisibleIndex.isValid() )
61 selectionModel()->setCurrentIndex( firstVisibleIndex, QItemSelectionModel::ClearAndSelect );
62 }
63 }
64 else
65 {
66 collapseAll();
67 }
68}
69
70void QgsProcessingToolboxTreeView::reset()
71{
72 QTreeView::reset();
73
74 if ( !mModel->filterString().isEmpty() )
75 {
76 expandAll();
77 }
78}
79
80const QgsProcessingAlgorithm *QgsProcessingToolboxTreeView::algorithmForIndex( const QModelIndex &index )
81{
82 const QModelIndex sourceIndex = mModel->mapToSource( index );
83 if ( mToolboxModel->isAlgorithm( sourceIndex ) )
84 return mToolboxModel->algorithmForIndex( sourceIndex );
85 else
86 return nullptr;
87}
88
89const QgsProcessingAlgorithm *QgsProcessingToolboxTreeView::selectedAlgorithm()
90{
91 if ( selectionModel()->hasSelection() )
92 {
93 const QModelIndex index = selectionModel()->selectedIndexes().at( 0 );
94 return algorithmForIndex( index );
95 }
96 else
97 {
98 return nullptr;
99 }
100}
101
102const QgsProcessingParameterType *QgsProcessingToolboxTreeView::parameterTypeForIndex( const QModelIndex &index )
103{
104 const QModelIndex sourceIndex = mModel->mapToSource( index );
105 if ( mToolboxModel->isParameter( sourceIndex ) )
106 return mToolboxModel->parameterTypeForIndex( sourceIndex );
107 else
108 return nullptr;
109}
110
111const QgsProcessingParameterType *QgsProcessingToolboxTreeView::selectedParameterType()
112{
113 if ( selectionModel()->hasSelection() )
114 {
115 const QModelIndex index = selectionModel()->selectedIndexes().at( 0 );
116 return parameterTypeForIndex( index );
117 }
118 else
119 {
120 return nullptr;
121 }
122}
123
124void QgsProcessingToolboxTreeView::setFilters( QgsProcessingToolboxProxyModel::Filters filters )
125{
126 mModel->setFilters( filters );
127}
128
129QgsProcessingToolboxProxyModel::Filters QgsProcessingToolboxTreeView::filters() const
130{
131 return mModel->filters();
132}
133
134void QgsProcessingToolboxTreeView::setInPlaceLayer( QgsVectorLayer *layer )
135{
136 mModel->setInPlaceLayer( layer );
137}
138
139QModelIndex QgsProcessingToolboxTreeView::findFirstVisibleAlgorithm( const QModelIndex &parent )
140{
141 for ( int r = 0; r < mModel->rowCount( parent ); ++r )
142 {
143 QModelIndex proxyIndex = mModel->index( r, 0, parent );
144 const QModelIndex sourceIndex = mModel->mapToSource( proxyIndex );
145 if ( mToolboxModel->isAlgorithm( sourceIndex ) )
146 return proxyIndex;
147
148 QModelIndex index = findFirstVisibleAlgorithm( proxyIndex );
149 if ( index.isValid() )
150 return index;
151 }
152 return QModelIndex();
153}
154
155void QgsProcessingToolboxTreeView::keyPressEvent( QKeyEvent *event )
156{
157 if ( event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter )
158 emit doubleClicked( currentIndex() );
159 else
160 QTreeView::keyPressEvent( event );
161}
162
Abstract base class for processing algorithms.
Makes metadata of processing parameters available.
Registry for various processing components, including providers, algorithms and various parameters an...
A proxy model for providers and algorithms shown within the Processing toolbox.
void setFilterString(const QString &filter)
Sets a filter string, such that only algorithms matching the specified string will be shown.
QgsProcessingToolboxModel * toolboxModel()
Returns the underlying source Processing toolbox model.
Represents a vector layer which manages a vector based dataset.