File indexing completed on 2024-05-12 04:37:44
0001 /* 0002 SPDX-FileCopyrightText: 2007-2008 David Nolden <david.nolden.kdevelop@art-master.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KDEVPLATFORM_ABSTRACTINCLUDEFILECOMPLETIONITEM_H 0008 #define KDEVPLATFORM_ABSTRACTINCLUDEFILECOMPLETIONITEM_H 0009 0010 #include "codecompletionitem.h" 0011 #include <language/languageexport.h> 0012 #include "../util/includeitem.h" 0013 #include "../duchain/duchain.h" 0014 #include "../duchain/duchainlock.h" 0015 #include "codecompletionmodel.h" 0016 0017 namespace KDevelop { 0018 //A completion item used for completing include-files 0019 template <typename NavigationWidget> 0020 class AbstractIncludeFileCompletionItem 0021 : public CompletionTreeItem 0022 { 0023 public: 0024 AbstractIncludeFileCompletionItem(const IncludeItem& include) : includeItem(include) 0025 { 0026 } 0027 0028 QVariant data(const QModelIndex& index, int role, const KDevelop::CodeCompletionModel* model) const override 0029 { 0030 DUChainReadLocker lock(DUChain::lock(), 500); 0031 if (!lock.locked()) { 0032 qDebug() << "Failed to lock the du-chain in time"; 0033 return QVariant(); 0034 } 0035 0036 const IncludeItem& item(includeItem); 0037 0038 switch (role) { 0039 case CodeCompletionModel::IsExpandable: 0040 return QVariant(true); 0041 case CodeCompletionModel::ExpandingWidget: { 0042 auto* nav = new NavigationWidget(item, model->currentTopContext()); 0043 0044 QVariant v; 0045 v.setValue<QWidget*>(( QWidget* )nav); 0046 return v; 0047 } 0048 case Qt::DisplayRole: 0049 switch (index.column()) { 0050 case CodeCompletionModel::Prefix: 0051 if (item.isDirectory) 0052 return QStringLiteral("directory"); 0053 else 0054 return QStringLiteral("file"); 0055 case CodeCompletionModel::Name: { 0056 return item.isDirectory ? (item.name + QLatin1Char('/')) : item.name; 0057 } 0058 } 0059 break; 0060 case CodeCompletionModel::ItemSelected: 0061 { 0062 return QVariant(NavigationWidget::shortDescription(item)); 0063 } 0064 } 0065 0066 return QVariant(); 0067 } 0068 0069 void execute(KTextEditor::View* view, const KTextEditor::Range& word) override = 0; 0070 0071 int inheritanceDepth() const override 0072 { 0073 return includeItem.pathNumber; 0074 } 0075 int argumentHintDepth() const override 0076 { 0077 return 0; 0078 } 0079 0080 IncludeItem includeItem; 0081 }; 0082 } 0083 0084 #endif // KDEVPLATFORM_ABSTRACTINCLUDEFILECOMPLETIONITEM_H