File indexing completed on 2024-05-05 04:39:44

0001 /*
0002     SPDX-FileCopyrightText: 2005 Adam Treat <treat@kde.org>
0003     SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "kdevdocumentmodel.h"
0009 #include <KFileItem>
0010 
0011 using namespace KDevelop;
0012 
0013 KDevDocumentItem::KDevDocumentItem( const QString &name )
0014     : QStandardItem(name)
0015     , m_documentState(IDocument::Clean)
0016 {
0017     setIcon( icon() );
0018 }
0019 
0020 KDevDocumentItem::~KDevDocumentItem()
0021 {}
0022 
0023 QIcon KDevDocumentItem::icon() const
0024 {
0025     switch(m_documentState)
0026     {
0027     case IDocument::Clean:
0028         return QIcon::fromTheme(m_fileIcon);
0029     case IDocument::Modified:
0030         return QIcon::fromTheme(QStringLiteral("document-save"));
0031     case IDocument::Dirty:
0032         return QIcon::fromTheme(QStringLiteral("document-revert"));
0033     case IDocument::DirtyAndModified:
0034         return QIcon::fromTheme(QStringLiteral("edit-delete"));
0035     }
0036     Q_UNREACHABLE();
0037 }
0038 
0039 IDocument::DocumentState KDevDocumentItem::documentState() const
0040 {
0041     return m_documentState;
0042 }
0043 
0044 void KDevDocumentItem::setDocumentState(IDocument::DocumentState state)
0045 {
0046     m_documentState = state;
0047     setIcon(icon());
0048 }
0049 
0050 const QUrl KDevDocumentItem::url() const
0051 {
0052     return m_url;
0053 }
0054 
0055 void KDevDocumentItem::setUrl(const QUrl& url)
0056 {
0057     m_url = url;
0058 }
0059 
0060 QVariant KDevDocumentItem::data(int role) const
0061 {
0062     if (role == UrlRole) {
0063         return m_url;
0064     }
0065     return QStandardItem::data(role);
0066 }
0067 
0068 KDevCategoryItem::KDevCategoryItem( const QString &name )
0069     : KDevDocumentItem( name )
0070 {
0071     setFlags(Qt::ItemIsEnabled);
0072     setToolTip( name );
0073     setIcon( QIcon::fromTheme( QStringLiteral( "folder") ) );
0074 }
0075 
0076 KDevCategoryItem::~KDevCategoryItem()
0077 {}
0078 
0079 QList<KDevFileItem*> KDevCategoryItem::fileList() const
0080 {
0081     QList<KDevFileItem*> lst;
0082 
0083     for ( int i = 0; i < rowCount(); ++i )
0084     {
0085         if (KDevFileItem* item = static_cast<KDevDocumentItem*>(child(i))->fileItem())
0086             lst.append( item );
0087     }
0088 
0089     return lst;
0090 }
0091 
0092 KDevFileItem* KDevCategoryItem::file( const QUrl &url ) const
0093 {
0094     const auto fileList = this->fileList();
0095     for (KDevFileItem* item : fileList) {
0096         if ( item->url() == url )
0097             return item;
0098     }
0099 
0100     return nullptr;
0101 }
0102 
0103 KDevFileItem::KDevFileItem( const QUrl &url )
0104         : KDevDocumentItem( url.fileName() )
0105 {
0106     setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
0107     setUrl( url );
0108     if (!url.isEmpty()) {
0109         m_fileIcon = KFileItem(url, QString(), 0).iconName();
0110     }
0111     setIcon( QIcon::fromTheme( m_fileIcon ) );
0112 }
0113 
0114 KDevFileItem::~KDevFileItem()
0115 {}
0116 
0117 KDevDocumentModel::KDevDocumentModel( QObject *parent )
0118     : QStandardItemModel( parent )
0119 {
0120     setRowCount(0);
0121     setColumnCount(1);
0122 }
0123 
0124 KDevDocumentModel::~KDevDocumentModel()
0125 {}
0126 
0127 QList<KDevCategoryItem*> KDevDocumentModel::categoryList() const
0128 {
0129     QList<KDevCategoryItem*> lst;
0130     for ( int i = 0; i < rowCount() ; ++i )
0131     {
0132         if (KDevCategoryItem* categoryitem = static_cast<KDevDocumentItem*>(item(i))->categoryItem()) {
0133             lst.append( categoryitem );
0134         }
0135     }
0136 
0137     return lst;
0138 }
0139 
0140 KDevCategoryItem* KDevDocumentModel::category( const QString& category ) const
0141 {
0142     const auto categoryList = this->categoryList();
0143     for (KDevCategoryItem* item : categoryList) {
0144         if ( item->toolTip() == category )
0145             return item;
0146     }
0147 
0148     return nullptr;
0149 }
0150 
0151 #include "moc_kdevdocumentmodel.cpp"