Upgrade another enum to get filtering working in processing toolbox

This commit is contained in:
Nyall Dawson 2024-02-10 08:27:42 +10:00
parent 9bdffa8ef9
commit 09dc6838a7
8 changed files with 168 additions and 82 deletions

View File

@ -1,8 +1,24 @@
# The following has been generated automatically from src/gui/processing/qgsprocessingtoolboxmodel.h
QgsProcessingToolboxModelNode.NodeProvider = QgsProcessingToolboxModelNode.NodeType.NodeProvider
QgsProcessingToolboxModelNode.NodeGroup = QgsProcessingToolboxModelNode.NodeType.NodeGroup
QgsProcessingToolboxModelNode.NodeAlgorithm = QgsProcessingToolboxModelNode.NodeType.NodeAlgorithm
QgsProcessingToolboxModelNode.NodeRecent = QgsProcessingToolboxModelNode.NodeType.NodeRecent
# monkey patching scoped based enum
QgsProcessingToolboxModelNode.NodeProvider = QgsProcessingToolboxModelNode.NodeType.Provider
QgsProcessingToolboxModelNode.NodeType.NodeProvider = QgsProcessingToolboxModelNode.NodeType.Provider
QgsProcessingToolboxModelNode.NodeProvider.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeProvider.__doc__ = "Provider node"
QgsProcessingToolboxModelNode.NodeGroup = QgsProcessingToolboxModelNode.NodeType.Group
QgsProcessingToolboxModelNode.NodeType.NodeGroup = QgsProcessingToolboxModelNode.NodeType.Group
QgsProcessingToolboxModelNode.NodeGroup.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeGroup.__doc__ = "Group node"
QgsProcessingToolboxModelNode.NodeAlgorithm = QgsProcessingToolboxModelNode.NodeType.Algorithm
QgsProcessingToolboxModelNode.NodeType.NodeAlgorithm = QgsProcessingToolboxModelNode.NodeType.Algorithm
QgsProcessingToolboxModelNode.NodeAlgorithm.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeAlgorithm.__doc__ = "Algorithm node"
QgsProcessingToolboxModelNode.NodeRecent = QgsProcessingToolboxModelNode.NodeType.Recent
QgsProcessingToolboxModelNode.NodeType.NodeRecent = QgsProcessingToolboxModelNode.NodeType.Recent
QgsProcessingToolboxModelNode.NodeRecent.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeRecent.__doc__ = "Recent algorithms node"
QgsProcessingToolboxModelNode.NodeType.__doc__ = "Enumeration of possible model node types\n\n" + '* ``NodeProvider``: ' + QgsProcessingToolboxModelNode.NodeType.Provider.__doc__ + '\n' + '* ``NodeGroup``: ' + QgsProcessingToolboxModelNode.NodeType.Group.__doc__ + '\n' + '* ``NodeAlgorithm``: ' + QgsProcessingToolboxModelNode.NodeType.Algorithm.__doc__ + '\n' + '* ``NodeRecent``: ' + QgsProcessingToolboxModelNode.NodeType.Recent.__doc__
# --
QgsProcessingToolboxModelNode.NodeType.baseClass = QgsProcessingToolboxModelNode
QgsProcessingToolboxModel.Roles = QgsProcessingToolboxModel.CustomRole
# monkey patching scoped based enum
QgsProcessingToolboxModel.RoleNodeType = QgsProcessingToolboxModel.CustomRole.NodeType
@ -36,10 +52,26 @@ QgsProcessingToolboxModel.RoleProviderFlags.__doc__ = "Returns the node's provid
QgsProcessingToolboxModel.CustomRole.__doc__ = "Custom model roles.\n\n.. note::\n\n Prior to QGIS 3.36 this was available as QgsProcessingToolboxModel.Roles\n\n.. versionadded:: 3.36\n\n" + '* ``RoleNodeType``: ' + QgsProcessingToolboxModel.CustomRole.NodeType.__doc__ + '\n' + '* ``RoleAlgorithmFlags``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmFlags.__doc__ + '\n' + '* ``RoleAlgorithmId``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmId.__doc__ + '\n' + '* ``RoleAlgorithmName``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmName.__doc__ + '\n' + '* ``RoleAlgorithmShortDescription``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmShortDescription.__doc__ + '\n' + '* ``RoleAlgorithmTags``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmTags.__doc__ + '\n' + '* ``RoleProviderFlags``: ' + QgsProcessingToolboxModel.CustomRole.ProviderFlags.__doc__
# --
QgsProcessingToolboxModel.CustomRole.baseClass = QgsProcessingToolboxModel
QgsProcessingToolboxProxyModel.FilterToolbox = QgsProcessingToolboxProxyModel.Filter.FilterToolbox
QgsProcessingToolboxProxyModel.FilterModeler = QgsProcessingToolboxProxyModel.Filter.FilterModeler
QgsProcessingToolboxProxyModel.FilterInPlace = QgsProcessingToolboxProxyModel.Filter.FilterInPlace
QgsProcessingToolboxProxyModel.FilterShowKnownIssues = QgsProcessingToolboxProxyModel.Filter.FilterShowKnownIssues
# monkey patching scoped based enum
QgsProcessingToolboxProxyModel.FilterToolbox = QgsProcessingToolboxProxyModel.Filter.Toolbox
QgsProcessingToolboxProxyModel.Filter.FilterToolbox = QgsProcessingToolboxProxyModel.Filter.Toolbox
QgsProcessingToolboxProxyModel.FilterToolbox.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterToolbox.__doc__ = "Filters out any algorithms and content which should not be shown in the toolbox"
QgsProcessingToolboxProxyModel.FilterModeler = QgsProcessingToolboxProxyModel.Filter.Modeler
QgsProcessingToolboxProxyModel.Filter.FilterModeler = QgsProcessingToolboxProxyModel.Filter.Modeler
QgsProcessingToolboxProxyModel.FilterModeler.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterModeler.__doc__ = "Filters out any algorithms and content which should not be shown in the modeler"
QgsProcessingToolboxProxyModel.FilterInPlace = QgsProcessingToolboxProxyModel.Filter.InPlace
QgsProcessingToolboxProxyModel.Filter.FilterInPlace = QgsProcessingToolboxProxyModel.Filter.InPlace
QgsProcessingToolboxProxyModel.FilterInPlace.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterInPlace.__doc__ = "Only show algorithms which support in-place edits"
QgsProcessingToolboxProxyModel.FilterShowKnownIssues = QgsProcessingToolboxProxyModel.Filter.ShowKnownIssues
QgsProcessingToolboxProxyModel.Filter.FilterShowKnownIssues = QgsProcessingToolboxProxyModel.Filter.ShowKnownIssues
QgsProcessingToolboxProxyModel.FilterShowKnownIssues.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterShowKnownIssues.__doc__ = "Show algorithms with known issues (hidden by default)"
QgsProcessingToolboxProxyModel.Filter.__doc__ = "Available filter flags for filtering the model\n\n" + '* ``FilterToolbox``: ' + QgsProcessingToolboxProxyModel.Filter.Toolbox.__doc__ + '\n' + '* ``FilterModeler``: ' + QgsProcessingToolboxProxyModel.Filter.Modeler.__doc__ + '\n' + '* ``FilterInPlace``: ' + QgsProcessingToolboxProxyModel.Filter.InPlace.__doc__ + '\n' + '* ``FilterShowKnownIssues``: ' + QgsProcessingToolboxProxyModel.Filter.ShowKnownIssues.__doc__
# --
QgsProcessingToolboxProxyModel.Filter.baseClass = QgsProcessingToolboxProxyModel
QgsProcessingToolboxProxyModel.Filters = lambda flags=0: QgsProcessingToolboxProxyModel.Filter(flags)
QgsProcessingToolboxProxyModel.Filters.baseClass = QgsProcessingToolboxProxyModel
Filters = QgsProcessingToolboxProxyModel # dirty hack since SIP seems to introduce the flags in module

View File

@ -30,13 +30,13 @@ Abstract base class for nodes contained within a :py:class:`QgsProcessingToolbox
{
sipType = sipType_QgsProcessingToolboxModelNode;
QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeProvider )
if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Provider )
sipType = sipType_QgsProcessingToolboxModelProviderNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeGroup )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Group )
sipType = sipType_QgsProcessingToolboxModelGroupNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeAlgorithm )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm )
sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeRecent )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent )
sipType = sipType_QgsProcessingToolboxModelRecentNode;
}
else
@ -44,12 +44,13 @@ Abstract base class for nodes contained within a :py:class:`QgsProcessingToolbox
%End
public:
enum NodeType
enum class NodeType /BaseType=IntEnum/
{
NodeProvider,
NodeGroup,
NodeAlgorithm,
NodeRecent,
Provider,
Group,
Algorithm,
Recent,
};
~QgsProcessingToolboxModelNode();
@ -377,12 +378,13 @@ the results.
%End
public:
enum Filter
enum class Filter /BaseType=IntFlag/
{
FilterToolbox,
FilterModeler,
FilterInPlace,
FilterShowKnownIssues,
Toolbox,
Modeler,
InPlace,
ShowKnownIssues,
};
typedef QFlags<QgsProcessingToolboxProxyModel::Filter> Filters;
@ -453,6 +455,7 @@ Returns the current filter string, if set.
};
QFlags<QgsProcessingToolboxProxyModel::Filter> operator|(QgsProcessingToolboxProxyModel::Filter f1, QFlags<QgsProcessingToolboxProxyModel::Filter> f2);
/************************************************************************

View File

@ -1,4 +1,24 @@
# The following has been generated automatically from src/gui/processing/qgsprocessingtoolboxmodel.h
# monkey patching scoped based enum
QgsProcessingToolboxModelNode.NodeProvider = QgsProcessingToolboxModelNode.NodeType.Provider
QgsProcessingToolboxModelNode.NodeType.NodeProvider = QgsProcessingToolboxModelNode.NodeType.Provider
QgsProcessingToolboxModelNode.NodeProvider.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeProvider.__doc__ = "Provider node"
QgsProcessingToolboxModelNode.NodeGroup = QgsProcessingToolboxModelNode.NodeType.Group
QgsProcessingToolboxModelNode.NodeType.NodeGroup = QgsProcessingToolboxModelNode.NodeType.Group
QgsProcessingToolboxModelNode.NodeGroup.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeGroup.__doc__ = "Group node"
QgsProcessingToolboxModelNode.NodeAlgorithm = QgsProcessingToolboxModelNode.NodeType.Algorithm
QgsProcessingToolboxModelNode.NodeType.NodeAlgorithm = QgsProcessingToolboxModelNode.NodeType.Algorithm
QgsProcessingToolboxModelNode.NodeAlgorithm.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeAlgorithm.__doc__ = "Algorithm node"
QgsProcessingToolboxModelNode.NodeRecent = QgsProcessingToolboxModelNode.NodeType.Recent
QgsProcessingToolboxModelNode.NodeType.NodeRecent = QgsProcessingToolboxModelNode.NodeType.Recent
QgsProcessingToolboxModelNode.NodeRecent.is_monkey_patched = True
QgsProcessingToolboxModelNode.NodeRecent.__doc__ = "Recent algorithms node"
QgsProcessingToolboxModelNode.NodeType.__doc__ = "Enumeration of possible model node types\n\n" + '* ``NodeProvider``: ' + QgsProcessingToolboxModelNode.NodeType.Provider.__doc__ + '\n' + '* ``NodeGroup``: ' + QgsProcessingToolboxModelNode.NodeType.Group.__doc__ + '\n' + '* ``NodeAlgorithm``: ' + QgsProcessingToolboxModelNode.NodeType.Algorithm.__doc__ + '\n' + '* ``NodeRecent``: ' + QgsProcessingToolboxModelNode.NodeType.Recent.__doc__
# --
QgsProcessingToolboxModelNode.NodeType.baseClass = QgsProcessingToolboxModelNode
QgsProcessingToolboxModel.Roles = QgsProcessingToolboxModel.CustomRole
# monkey patching scoped based enum
QgsProcessingToolboxModel.RoleNodeType = QgsProcessingToolboxModel.CustomRole.NodeType
@ -32,5 +52,25 @@ QgsProcessingToolboxModel.RoleProviderFlags.__doc__ = "Returns the node's provid
QgsProcessingToolboxModel.CustomRole.__doc__ = "Custom model roles.\n\n.. note::\n\n Prior to QGIS 3.36 this was available as QgsProcessingToolboxModel.Roles\n\n.. versionadded:: 3.36\n\n" + '* ``RoleNodeType``: ' + QgsProcessingToolboxModel.CustomRole.NodeType.__doc__ + '\n' + '* ``RoleAlgorithmFlags``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmFlags.__doc__ + '\n' + '* ``RoleAlgorithmId``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmId.__doc__ + '\n' + '* ``RoleAlgorithmName``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmName.__doc__ + '\n' + '* ``RoleAlgorithmShortDescription``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmShortDescription.__doc__ + '\n' + '* ``RoleAlgorithmTags``: ' + QgsProcessingToolboxModel.CustomRole.AlgorithmTags.__doc__ + '\n' + '* ``RoleProviderFlags``: ' + QgsProcessingToolboxModel.CustomRole.ProviderFlags.__doc__
# --
QgsProcessingToolboxModel.CustomRole.baseClass = QgsProcessingToolboxModel
# monkey patching scoped based enum
QgsProcessingToolboxProxyModel.FilterToolbox = QgsProcessingToolboxProxyModel.Filter.Toolbox
QgsProcessingToolboxProxyModel.Filter.FilterToolbox = QgsProcessingToolboxProxyModel.Filter.Toolbox
QgsProcessingToolboxProxyModel.FilterToolbox.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterToolbox.__doc__ = "Filters out any algorithms and content which should not be shown in the toolbox"
QgsProcessingToolboxProxyModel.FilterModeler = QgsProcessingToolboxProxyModel.Filter.Modeler
QgsProcessingToolboxProxyModel.Filter.FilterModeler = QgsProcessingToolboxProxyModel.Filter.Modeler
QgsProcessingToolboxProxyModel.FilterModeler.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterModeler.__doc__ = "Filters out any algorithms and content which should not be shown in the modeler"
QgsProcessingToolboxProxyModel.FilterInPlace = QgsProcessingToolboxProxyModel.Filter.InPlace
QgsProcessingToolboxProxyModel.Filter.FilterInPlace = QgsProcessingToolboxProxyModel.Filter.InPlace
QgsProcessingToolboxProxyModel.FilterInPlace.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterInPlace.__doc__ = "Only show algorithms which support in-place edits"
QgsProcessingToolboxProxyModel.FilterShowKnownIssues = QgsProcessingToolboxProxyModel.Filter.ShowKnownIssues
QgsProcessingToolboxProxyModel.Filter.FilterShowKnownIssues = QgsProcessingToolboxProxyModel.Filter.ShowKnownIssues
QgsProcessingToolboxProxyModel.FilterShowKnownIssues.is_monkey_patched = True
QgsProcessingToolboxProxyModel.FilterShowKnownIssues.__doc__ = "Show algorithms with known issues (hidden by default)"
QgsProcessingToolboxProxyModel.Filter.__doc__ = "Available filter flags for filtering the model\n\n" + '* ``FilterToolbox``: ' + QgsProcessingToolboxProxyModel.Filter.Toolbox.__doc__ + '\n' + '* ``FilterModeler``: ' + QgsProcessingToolboxProxyModel.Filter.Modeler.__doc__ + '\n' + '* ``FilterInPlace``: ' + QgsProcessingToolboxProxyModel.Filter.InPlace.__doc__ + '\n' + '* ``FilterShowKnownIssues``: ' + QgsProcessingToolboxProxyModel.Filter.ShowKnownIssues.__doc__
# --
QgsProcessingToolboxProxyModel.Filter.baseClass = QgsProcessingToolboxProxyModel
QgsProcessingToolboxProxyModel.Filters.baseClass = QgsProcessingToolboxProxyModel
Filters = QgsProcessingToolboxProxyModel # dirty hack since SIP seems to introduce the flags in module

View File

@ -30,13 +30,13 @@ Abstract base class for nodes contained within a :py:class:`QgsProcessingToolbox
{
sipType = sipType_QgsProcessingToolboxModelNode;
QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeProvider )
if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Provider )
sipType = sipType_QgsProcessingToolboxModelProviderNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeGroup )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Group )
sipType = sipType_QgsProcessingToolboxModelGroupNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeAlgorithm )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm )
sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeRecent )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent )
sipType = sipType_QgsProcessingToolboxModelRecentNode;
}
else
@ -44,12 +44,13 @@ Abstract base class for nodes contained within a :py:class:`QgsProcessingToolbox
%End
public:
enum NodeType
enum class NodeType
{
NodeProvider,
NodeGroup,
NodeAlgorithm,
NodeRecent,
Provider,
Group,
Algorithm,
Recent,
};
~QgsProcessingToolboxModelNode();
@ -377,12 +378,13 @@ the results.
%End
public:
enum Filter
enum class Filter
{
FilterToolbox,
FilterModeler,
FilterInPlace,
FilterShowKnownIssues,
Toolbox,
Modeler,
InPlace,
ShowKnownIssues,
};
typedef QFlags<QgsProcessingToolboxProxyModel::Filter> Filters;
@ -453,6 +455,7 @@ Returns the current filter string, if set.
};
QFlags<QgsProcessingToolboxProxyModel::Filter> operator|(QgsProcessingToolboxProxyModel::Filter f1, QFlags<QgsProcessingToolboxProxyModel::Filter> f2);
/************************************************************************

View File

@ -237,10 +237,10 @@ QgsModelDesignerDialog::QgsModelDesignerDialog( QWidget *parent, Qt::WindowFlags
mAlgorithmsModel = new QgsModelerToolboxModel( this );
mAlgorithmsTree->setToolboxProxyModel( mAlgorithmsModel );
QgsProcessingToolboxProxyModel::Filters filters = QgsProcessingToolboxProxyModel::FilterModeler;
QgsProcessingToolboxProxyModel::Filters filters = QgsProcessingToolboxProxyModel::Filter::Modeler;
if ( settings.value( QStringLiteral( "Processing/Configuration/SHOW_ALGORITHMS_KNOWN_ISSUES" ), false ).toBool() )
{
filters |= QgsProcessingToolboxProxyModel::FilterShowKnownIssues;
filters |= QgsProcessingToolboxProxyModel::Filter::ShowKnownIssues;
}
mAlgorithmsTree->setFilters( filters );
mAlgorithmsTree->setDragDropMode( QTreeWidget::DragOnly );

View File

@ -46,7 +46,7 @@ QgsProcessingToolboxModelGroupNode *QgsProcessingToolboxModelNode::getChildGroup
{
for ( QgsProcessingToolboxModelNode *node : std::as_const( mChildren ) )
{
if ( node->nodeType() == NodeGroup )
if ( node->nodeType() == NodeType::Group )
{
QgsProcessingToolboxModelGroupNode *groupNode = qobject_cast< QgsProcessingToolboxModelGroupNode * >( node );
if ( groupNode && groupNode->id() == groupId )
@ -347,14 +347,14 @@ QVariant QgsProcessingToolboxModel::data( const QModelIndex &index, int role ) c
if ( role == static_cast< int >( CustomRole::NodeType ) )
{
if ( QgsProcessingToolboxModelNode *node = index2node( index ) )
return node->nodeType();
return static_cast< int >( node->nodeType() );
else
return QVariant();
}
bool isRecentNode = false;
if ( QgsProcessingToolboxModelNode *node = index2node( index ) )
isRecentNode = node->nodeType() == QgsProcessingToolboxModelNode::NodeRecent;
isRecentNode = node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent;
QgsProcessingProvider *provider = providerForIndex( index );
QgsProcessingToolboxModelGroupNode *groupNode = qobject_cast< QgsProcessingToolboxModelGroupNode * >( index2node( index ) );
@ -605,7 +605,7 @@ QMimeData *QgsProcessingToolboxModel::mimeData( const QModelIndexList &indexes )
QgsProcessingProvider *QgsProcessingToolboxModel::providerForIndex( const QModelIndex &index ) const
{
QgsProcessingToolboxModelNode *n = index2node( index );
if ( !n || n->nodeType() != QgsProcessingToolboxModelNode::NodeProvider )
if ( !n || n->nodeType() != QgsProcessingToolboxModelNode::NodeType::Provider )
return nullptr;
return qobject_cast< QgsProcessingToolboxModelProviderNode * >( n )->provider();
@ -614,7 +614,7 @@ QgsProcessingProvider *QgsProcessingToolboxModel::providerForIndex( const QModel
QString QgsProcessingToolboxModel::providerIdForIndex( const QModelIndex &index ) const
{
QgsProcessingToolboxModelNode *n = index2node( index );
if ( !n || n->nodeType() != QgsProcessingToolboxModelNode::NodeProvider )
if ( !n || n->nodeType() != QgsProcessingToolboxModelNode::NodeType::Provider )
return nullptr;
return qobject_cast< QgsProcessingToolboxModelProviderNode * >( n )->providerId();
@ -623,7 +623,7 @@ QString QgsProcessingToolboxModel::providerIdForIndex( const QModelIndex &index
const QgsProcessingAlgorithm *QgsProcessingToolboxModel::algorithmForIndex( const QModelIndex &index ) const
{
QgsProcessingToolboxModelNode *n = index2node( index );
if ( !n || n->nodeType() != QgsProcessingToolboxModelNode::NodeAlgorithm )
if ( !n || n->nodeType() != QgsProcessingToolboxModelNode::NodeType::Algorithm )
return nullptr;
return qobject_cast< QgsProcessingToolboxModelAlgorithmNode * >( n )->algorithm();
@ -632,7 +632,7 @@ const QgsProcessingAlgorithm *QgsProcessingToolboxModel::algorithmForIndex( cons
bool QgsProcessingToolboxModel::isAlgorithm( const QModelIndex &index ) const
{
QgsProcessingToolboxModelNode *n = index2node( index );
return ( n && n->nodeType() == QgsProcessingToolboxModelNode::NodeAlgorithm );
return ( n && n->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm );
}
QModelIndex QgsProcessingToolboxModel::indexForProvider( const QString &providerId ) const
@ -723,7 +723,7 @@ bool QgsProcessingToolboxProxyModel::filterAcceptsRow( int sourceRow, const QMod
if ( mModel->isAlgorithm( sourceIndex ) )
{
const bool hasKnownIssues = sourceModel()->data( sourceIndex, static_cast< int >( QgsProcessingToolboxModel::CustomRole::AlgorithmFlags ) ).toInt() & static_cast< int >( Qgis::ProcessingAlgorithmFlag::KnownIssues );
if ( hasKnownIssues && !( mFilters & FilterShowKnownIssues ) )
if ( hasKnownIssues && !( mFilters & Filter::ShowKnownIssues ) )
return false;
if ( !mFilterString.trimmed().isEmpty() )
@ -768,7 +768,7 @@ bool QgsProcessingToolboxProxyModel::filterAcceptsRow( int sourceRow, const QMod
}
}
if ( mFilters & FilterInPlace )
if ( mFilters & Filter::InPlace )
{
const bool supportsInPlace = sourceModel()->data( sourceIndex, static_cast< int >( QgsProcessingToolboxModel::CustomRole::AlgorithmFlags ) ).toInt() & static_cast< int >( Qgis::ProcessingAlgorithmFlag::SupportsInPlaceEdits );
if ( !supportsInPlace )
@ -780,12 +780,12 @@ bool QgsProcessingToolboxProxyModel::filterAcceptsRow( int sourceRow, const QMod
return false;
}
}
if ( mFilters & FilterModeler )
if ( mFilters & Filter::Modeler )
{
bool isHiddenFromModeler = sourceModel()->data( sourceIndex, static_cast< int >( QgsProcessingToolboxModel::CustomRole::AlgorithmFlags ) ).toInt() & static_cast< int >( Qgis::ProcessingAlgorithmFlag::HideFromModeler );
return !isHiddenFromModeler;
}
if ( mFilters & FilterToolbox )
if ( mFilters & Filter::Toolbox )
{
bool isHiddenFromToolbox = sourceModel()->data( sourceIndex, static_cast< int >( QgsProcessingToolboxModel::CustomRole::AlgorithmFlags ) ).toInt() & static_cast< int >( Qgis::ProcessingAlgorithmFlag::HideFromToolbox );
return !isHiddenFromToolbox;
@ -813,17 +813,17 @@ bool QgsProcessingToolboxProxyModel::lessThan( const QModelIndex &left, const QM
QgsProcessingToolboxModelNode::NodeType leftType = static_cast< QgsProcessingToolboxModelNode::NodeType >( sourceModel()->data( left, static_cast< int >( QgsProcessingToolboxModel::CustomRole::NodeType ) ).toInt() );
QgsProcessingToolboxModelNode::NodeType rightType = static_cast< QgsProcessingToolboxModelNode::NodeType >( sourceModel()->data( right, static_cast< int >( QgsProcessingToolboxModel::CustomRole::NodeType ) ).toInt() );
if ( leftType == QgsProcessingToolboxModelNode::NodeRecent )
if ( leftType == QgsProcessingToolboxModelNode::NodeType::Recent )
return true;
else if ( rightType == QgsProcessingToolboxModelNode::NodeRecent )
else if ( rightType == QgsProcessingToolboxModelNode::NodeType::Recent )
return false;
else if ( leftType != rightType )
{
if ( leftType == QgsProcessingToolboxModelNode::NodeProvider )
if ( leftType == QgsProcessingToolboxModelNode::NodeType::Provider )
return false;
else if ( rightType == QgsProcessingToolboxModelNode::NodeProvider )
else if ( rightType == QgsProcessingToolboxModelNode::NodeType::Provider )
return true;
else if ( leftType == QgsProcessingToolboxModelNode::NodeGroup )
else if ( leftType == QgsProcessingToolboxModelNode::NodeType::Group )
return false;
else
return true;
@ -834,7 +834,7 @@ bool QgsProcessingToolboxProxyModel::lessThan( const QModelIndex &left, const QM
QModelIndex parent = left.parent();
while ( parent.isValid() )
{
if ( mModel->data( parent, static_cast< int >( QgsProcessingToolboxModel::CustomRole::NodeType ) ).toInt() == QgsProcessingToolboxModelNode::NodeRecent )
if ( mModel->data( parent, static_cast< int >( QgsProcessingToolboxModel::CustomRole::NodeType ) ).toInt() == static_cast< int >( QgsProcessingToolboxModelNode::NodeType::Recent ) )
{
isRecentNode = true;
break;

View File

@ -47,13 +47,13 @@ class GUI_EXPORT QgsProcessingToolboxModelNode : public QObject
{
sipType = sipType_QgsProcessingToolboxModelNode;
QgsProcessingToolboxModelNode *node = qobject_cast<QgsProcessingToolboxModelNode *>( sipCpp );
if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeProvider )
if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Provider )
sipType = sipType_QgsProcessingToolboxModelProviderNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeGroup )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Group )
sipType = sipType_QgsProcessingToolboxModelGroupNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeAlgorithm )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Algorithm )
sipType = sipType_QgsProcessingToolboxModelAlgorithmNode;
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeRecent )
else if ( node->nodeType() == QgsProcessingToolboxModelNode::NodeType::Recent )
sipType = sipType_QgsProcessingToolboxModelRecentNode;
}
else
@ -63,14 +63,18 @@ class GUI_EXPORT QgsProcessingToolboxModelNode : public QObject
public:
// *INDENT-OFF*
//! Enumeration of possible model node types
enum NodeType
enum class NodeType SIP_MONKEYPATCH_SCOPEENUM_UNNEST( QgsProcessingToolboxModelNode, NodeType ) : int
{
NodeProvider = 0, //!< Provider node
NodeGroup, //!< Group node
NodeAlgorithm, //!< Algorithm node
NodeRecent, //!< Recent algorithms node
Provider SIP_MONKEYPATCH_COMPAT_NAME( NodeProvider ) = 0, //!< Provider node
Group SIP_MONKEYPATCH_COMPAT_NAME( NodeGroup ), //!< Group node
Algorithm SIP_MONKEYPATCH_COMPAT_NAME( NodeAlgorithm ), //!< Algorithm node
Recent SIP_MONKEYPATCH_COMPAT_NAME( NodeRecent ), //!< Recent algorithms node
};
Q_ENUM( NodeType )
// *INDENT-ON*
~QgsProcessingToolboxModelNode() override;
@ -121,7 +125,7 @@ class GUI_EXPORT QgsProcessingToolboxModelNode : public QObject
private:
NodeType mNodeType = NodeProvider;
NodeType mNodeType = NodeType::Provider;
QgsProcessingToolboxModelNode *mParent = nullptr;
QList<QgsProcessingToolboxModelNode *> mChildren;
@ -144,7 +148,7 @@ class GUI_EXPORT QgsProcessingToolboxModelRecentNode : public QgsProcessingToolb
*/
QgsProcessingToolboxModelRecentNode() = default;
NodeType nodeType() const override { return NodeRecent; }
NodeType nodeType() const override { return NodeType::Recent; }
};
@ -166,7 +170,7 @@ class GUI_EXPORT QgsProcessingToolboxModelProviderNode : public QgsProcessingToo
*/
QgsProcessingToolboxModelProviderNode( QgsProcessingProvider *provider );
NodeType nodeType() const override { return NodeProvider; }
NodeType nodeType() const override { return NodeType::Provider; }
/**
* Returns the provider associated with this node.
@ -211,7 +215,7 @@ class GUI_EXPORT QgsProcessingToolboxModelGroupNode : public QgsProcessingToolbo
*/
QgsProcessingToolboxModelGroupNode( const QString &id, const QString &name );
NodeType nodeType() const override { return NodeGroup; }
NodeType nodeType() const override { return NodeType::Group; }
/**
* Returns the group's ID, which is unique and untranslated.
@ -247,7 +251,7 @@ class GUI_EXPORT QgsProcessingToolboxModelAlgorithmNode : public QgsProcessingTo
*/
QgsProcessingToolboxModelAlgorithmNode( const QgsProcessingAlgorithm *algorithm );
NodeType nodeType() const override { return NodeAlgorithm; }
NodeType nodeType() const override { return NodeType::Algorithm; }
/**
* Returns the algorithm associated with this node.
@ -429,16 +433,20 @@ class GUI_EXPORT QgsProcessingToolboxProxyModel: public QSortFilterProxyModel
public:
// *INDENT-OFF*
//! Available filter flags for filtering the model
enum Filter SIP_ENUM_BASETYPE( IntFlag )
enum class Filter SIP_MONKEYPATCH_SCOPEENUM_UNNEST( QgsProcessingToolboxProxyModel, Filter ) : int SIP_ENUM_BASETYPE( IntFlag )
{
FilterToolbox = 1 << 1, //!< Filters out any algorithms and content which should not be shown in the toolbox
FilterModeler = 1 << 2, //!< Filters out any algorithms and content which should not be shown in the modeler
FilterInPlace = 1 << 3, //!< Only show algorithms which support in-place edits
FilterShowKnownIssues = 1 << 4, //!< Show algorithms with known issues (hidden by default)
Toolbox SIP_MONKEYPATCH_COMPAT_NAME( FilterToolbox ) = 1 << 1, //!< Filters out any algorithms and content which should not be shown in the toolbox
Modeler SIP_MONKEYPATCH_COMPAT_NAME( FilterModeler ) = 1 << 2, //!< Filters out any algorithms and content which should not be shown in the modeler
InPlace SIP_MONKEYPATCH_COMPAT_NAME( FilterInPlace ) = 1 << 3, //!< Only show algorithms which support in-place edits
ShowKnownIssues SIP_MONKEYPATCH_COMPAT_NAME( FilterShowKnownIssues ) = 1 << 4, //!< Show algorithms with known issues (hidden by default)
};
Q_ENUM( Filter )
Q_DECLARE_FLAGS( Filters, Filter )
Q_FLAG( Filters )
// *INDENT-ON*
/**
* Constructor for QgsProcessingToolboxProxyModel, with the given \a parent object.
@ -512,6 +520,6 @@ class GUI_EXPORT QgsProcessingToolboxProxyModel: public QSortFilterProxyModel
QString mFilterString;
QPointer<QgsVectorLayer> mInPlaceLayer;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QgsProcessingToolboxProxyModel::Filters )
#endif // QGSPROCESSINGTOOLBOXMODEL_H

View File

@ -156,7 +156,7 @@ void TestQgsProcessingModel::testModel()
QVERIFY( !model.providerForIndex( model.index( 1, 0, QModelIndex() ) ) );
QVERIFY( !model.indexForProvider( nullptr ).isValid() );
QVERIFY( model.index2node( QModelIndex() ) ); // root node
QCOMPARE( model.index2node( QModelIndex() )->nodeType(), QgsProcessingToolboxModelNode::NodeGroup );
QCOMPARE( model.index2node( QModelIndex() )->nodeType(), QgsProcessingToolboxModelNode::NodeType::Group );
QVERIFY( model.index2node( model.index( -1, 0, QModelIndex() ) ) ); // root node
QCOMPARE( model.index2node( QModelIndex() ), model.index2node( model.index( -1, 0, QModelIndex() ) ) );
@ -431,13 +431,13 @@ void TestQgsProcessingModel::testProxyModel()
QCOMPARE( model.data( alg2Index, Qt::DisplayRole ).toString(), QStringLiteral( "a2" ) );
// empty providers/groups should not be shown
model.setFilters( QgsProcessingToolboxProxyModel::FilterModeler );
model.setFilters( QgsProcessingToolboxProxyModel::Filter::Modeler );
group1Index = model.index( 0, 0, QModelIndex() );
QCOMPARE( model.rowCount(), 1 );
QCOMPARE( model.rowCount( group1Index ), 1 );
QCOMPARE( model.data( group1Index, Qt::DisplayRole ).toString(), QStringLiteral( "group1" ) );
QCOMPARE( model.data( model.index( 0, 0, group1Index ), Qt::DisplayRole ).toString(), QStringLiteral( "a2" ) );
model.setFilters( QgsProcessingToolboxProxyModel::FilterToolbox );
model.setFilters( QgsProcessingToolboxProxyModel::Filter::Toolbox );
group2Index = model.index( 0, 0, QModelIndex() );
QCOMPARE( model.rowCount(), 3 );
QCOMPARE( model.rowCount( group2Index ), 1 );
@ -597,8 +597,8 @@ void TestQgsProcessingModel::testView()
QCOMPARE( view.algorithmForIndex( alg1Index )->id(), QStringLiteral( "p2:a1" ) );
// empty providers/groups should not be shown
view.setFilters( QgsProcessingToolboxProxyModel::FilterModeler );
QCOMPARE( view.filters(), QgsProcessingToolboxProxyModel::FilterModeler );
view.setFilters( QgsProcessingToolboxProxyModel::Filter::Modeler );
QCOMPARE( view.filters(), QgsProcessingToolboxProxyModel::Filter::Modeler );
QCOMPARE( view.model()->rowCount(), 1 );
provider2Index = view.model()->index( 0, 0, QModelIndex() );
QCOMPARE( view.model()->data( provider2Index, Qt::DisplayRole ).toString(), QStringLiteral( "provider2" ) );
@ -606,7 +606,7 @@ void TestQgsProcessingModel::testView()
group2Index = view.model()->index( 0, 0, provider2Index );
QCOMPARE( view.model()->rowCount( group2Index ), 1 );
QCOMPARE( view.algorithmForIndex( view.model()->index( 0, 0, group2Index ) )->id(), QStringLiteral( "p2:a1" ) );
view.setFilters( QgsProcessingToolboxProxyModel::FilterToolbox );
view.setFilters( QgsProcessingToolboxProxyModel::Filter::Toolbox );
QCOMPARE( view.model()->rowCount(), 1 );
provider1Index = view.model()->index( 0, 0, QModelIndex() );
QCOMPARE( view.model()->data( provider1Index, Qt::DisplayRole ).toString(), QStringLiteral( "provider1" ) );
@ -683,7 +683,7 @@ void TestQgsProcessingModel::testKnownIssues()
QCOMPARE( proxyModel.data( proxyModel.index( 0, 0, group1Index ), Qt::DisplayRole ).toString(), QStringLiteral( "b1" ) );
QVERIFY( !proxyModel.data( proxyModel.index( 0, 0, group1Index ), Qt::ToolTipRole ).toString().contains( QStringLiteral( "known issues" ) ) );
QCOMPARE( proxyModel.data( proxyModel.index( 0, 0, group1Index ), Qt::ForegroundRole ).value< QBrush >().color().name(), QStringLiteral( "#000000" ) );
proxyModel.setFilters( QgsProcessingToolboxProxyModel::Filters( QgsProcessingToolboxProxyModel::FilterToolbox | QgsProcessingToolboxProxyModel::FilterShowKnownIssues ) );
proxyModel.setFilters( QgsProcessingToolboxProxyModel::Filters( QgsProcessingToolboxProxyModel::Filter::Toolbox | QgsProcessingToolboxProxyModel::Filter::ShowKnownIssues ) );
QCOMPARE( proxyModel.rowCount( group1Index ), 2 );
QCOMPARE( proxyModel.data( proxyModel.index( 0, 0, group1Index ), Qt::DisplayRole ).toString(), QStringLiteral( "a1" ) );
QVERIFY( proxyModel.data( proxyModel.index( 0, 0, group1Index ), Qt::ToolTipRole ).toString().contains( QStringLiteral( "known issues" ) ) );