File indexing completed on 2024-04-28 04:37:05
0001 /* 0002 SPDX-FileCopyrightText: 2008 Aleix Pol <aleixpol@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "projectproxymodel.h" 0008 #include <project/projectmodel.h> 0009 0010 ProjectProxyModel::ProjectProxyModel(QObject * parent) 0011 : QSortFilterProxyModel(parent) 0012 , m_showTargets(true) 0013 { 0014 setDynamicSortFilter(true); 0015 sort(0); //initiate sorting regardless of the view 0016 } 0017 0018 KDevelop::ProjectModel * ProjectProxyModel::projectModel() const 0019 { 0020 return qobject_cast<KDevelop::ProjectModel*>( sourceModel() ); 0021 } 0022 0023 bool ProjectProxyModel::lessThan(const QModelIndex & left, const QModelIndex & right) const 0024 { 0025 KDevelop::ProjectBaseItem *iLeft=projectModel()->itemFromIndex(left), *iRight=projectModel()->itemFromIndex(right); 0026 if(!iLeft || !iRight) return false; 0027 0028 return( iLeft->lessThan( iRight ) ); 0029 } 0030 0031 void ProjectProxyModel::showTargets(bool visible) 0032 { 0033 if (visible != m_showTargets) { 0034 m_showTargets = visible; 0035 invalidateFilter(); 0036 } 0037 } 0038 0039 bool ProjectProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const 0040 { 0041 if (m_showTargets) { 0042 return true; 0043 } 0044 else { 0045 // Get the base item for the associated parent and row. 0046 QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); 0047 auto *item = projectModel()->itemFromIndex(index); 0048 // If it's a target, return false, otherwise true. 0049 return item->type() != KDevelop::ProjectBaseItem::Target 0050 && item->type() != KDevelop::ProjectBaseItem::LibraryTarget 0051 && item->type() != KDevelop::ProjectBaseItem::ExecutableTarget; 0052 } 0053 } 0054 0055 QModelIndex ProjectProxyModel::proxyIndexFromItem(KDevelop::ProjectBaseItem* item) const 0056 { 0057 return mapFromSource(projectModel()->indexFromItem(item)); 0058 } 0059 0060 KDevelop::ProjectBaseItem* ProjectProxyModel::itemFromProxyIndex( const QModelIndex& idx ) const 0061 { 0062 return projectModel()->itemFromIndex( mapToSource(idx)); 0063 } 0064 0065 #include "moc_projectproxymodel.cpp"