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"