mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
110 lines
3.6 KiB
C++
110 lines
3.6 KiB
C++
/***************************************************************************
|
|
qgsprocessingtoolboxtreeview.cpp
|
|
-------------------------------
|
|
begin : July 2018
|
|
copyright : (C) 2018 by Nyall Dawso
|
|
email : nyall dot dawson at gmail dot com
|
|
***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "qgsprocessingtoolboxtreeview.h"
|
|
#include "qgsprocessingtoolboxmodel.h"
|
|
|
|
QgsProcessingToolboxTreeView::QgsProcessingToolboxTreeView( QWidget *parent,
|
|
QgsProcessingRegistry *registry,
|
|
QgsProcessingRecentAlgorithmLog *recentLog )
|
|
: QTreeView( parent )
|
|
{
|
|
mModel = new QgsProcessingToolboxProxyModel( this, registry, recentLog );
|
|
mToolboxModel = mModel->toolboxModel();
|
|
setModel( mModel );
|
|
}
|
|
|
|
void QgsProcessingToolboxTreeView::setRegistry( QgsProcessingRegistry *registry, QgsProcessingRecentAlgorithmLog *recentLog )
|
|
{
|
|
QgsProcessingToolboxProxyModel *newModel = new QgsProcessingToolboxProxyModel( this, registry, recentLog );
|
|
mToolboxModel = mModel->toolboxModel();
|
|
setModel( newModel );
|
|
mModel->deleteLater();
|
|
mModel = newModel;
|
|
}
|
|
|
|
void QgsProcessingToolboxTreeView::setToolboxProxyModel( QgsProcessingToolboxProxyModel *model )
|
|
{
|
|
mToolboxModel = mModel->toolboxModel();
|
|
setModel( model );
|
|
mModel->deleteLater();
|
|
mModel = model;
|
|
}
|
|
|
|
void QgsProcessingToolboxTreeView::setFilterString( const QString &filter )
|
|
{
|
|
const QString text = filter.trimmed().toLower();
|
|
mModel->setFilterString( text );
|
|
if ( !text.isEmpty() )
|
|
{
|
|
expandAll();
|
|
if ( !selectedAlgorithm() )
|
|
{
|
|
// if previously selected item was hidden, auto select the first visible algorithm
|
|
QModelIndex firstVisibleIndex = findFirstVisibleAlgorithm( QModelIndex() );
|
|
if ( firstVisibleIndex.isValid() )
|
|
selectionModel()->setCurrentIndex( firstVisibleIndex, QItemSelectionModel::ClearAndSelect );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
collapseAll();
|
|
}
|
|
}
|
|
|
|
const QgsProcessingAlgorithm *QgsProcessingToolboxTreeView::algorithmForIndex( const QModelIndex &index )
|
|
{
|
|
QModelIndex sourceIndex = mModel->mapToSource( index );
|
|
if ( mToolboxModel->isAlgorithm( sourceIndex ) )
|
|
return mToolboxModel->algorithmForIndex( sourceIndex );
|
|
else
|
|
return nullptr;
|
|
}
|
|
|
|
const QgsProcessingAlgorithm *QgsProcessingToolboxTreeView::selectedAlgorithm()
|
|
{
|
|
if ( selectionModel()->hasSelection() )
|
|
{
|
|
QModelIndex index = selectionModel()->selectedIndexes().at( 0 );
|
|
return algorithmForIndex( index );
|
|
}
|
|
else
|
|
{
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
void QgsProcessingToolboxTreeView::setFilters( QgsProcessingToolboxProxyModel::Filters filters )
|
|
{
|
|
mModel->setFilters( filters );
|
|
}
|
|
|
|
QModelIndex QgsProcessingToolboxTreeView::findFirstVisibleAlgorithm( const QModelIndex &parent )
|
|
{
|
|
for ( int r = 0; r < mModel->rowCount( parent ); ++r )
|
|
{
|
|
QModelIndex proxyIndex = mModel->index( r, 0, parent );
|
|
QModelIndex sourceIndex = mModel->mapToSource( proxyIndex );
|
|
if ( mToolboxModel->isAlgorithm( sourceIndex ) )
|
|
return proxyIndex;
|
|
|
|
QModelIndex index = findFirstVisibleAlgorithm( proxyIndex );
|
|
if ( index.isValid() )
|
|
return index;
|
|
}
|
|
return QModelIndex();
|
|
}
|
|
|