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 #include "codecompletionitem.h" 0008 0009 #include <QModelIndex> 0010 0011 #include <KLocalizedString> 0012 0013 #include <KTextEditor/CodeCompletionModel> 0014 #include <KTextEditor/Range> 0015 #include <KTextEditor/View> 0016 #include <KTextEditor/Document> 0017 0018 #include <debug.h> 0019 #include "../duchain/declaration.h" 0020 #include "../duchain/duchainutils.h" 0021 0022 using namespace KTextEditor; 0023 namespace KDevelop { 0024 ///Intermediate nodes 0025 struct CompletionTreeNode; 0026 ///Leaf items 0027 class CompletionTreeItem; 0028 0029 CompletionTreeElement::CompletionTreeElement() : m_parent(nullptr) 0030 , m_rowInParent(0) 0031 { 0032 } 0033 0034 CompletionTreeElement::~CompletionTreeElement() 0035 { 0036 } 0037 0038 CompletionTreeElement* CompletionTreeElement::parent() const 0039 { 0040 return m_parent; 0041 } 0042 0043 void CompletionTreeElement::setParent(CompletionTreeElement* parent) 0044 { 0045 Q_ASSERT(m_parent == nullptr); 0046 0047 m_parent = parent; 0048 auto node = parent ? parent->asNode() : nullptr; 0049 if (node) { 0050 m_rowInParent = node->children.count(); 0051 } 0052 } 0053 0054 void CompletionTreeNode::appendChildren( 0055 const QList<QExplicitlySharedDataPointer<KDevelop::CompletionTreeElement>>& children) 0056 { 0057 for (const auto& child : children) { 0058 appendChild(child); 0059 } 0060 } 0061 0062 void CompletionTreeNode::appendChildren( 0063 const QList<QExplicitlySharedDataPointer<KDevelop::CompletionTreeItem>>& children) 0064 { 0065 for (const auto& child : children) { 0066 appendChild(CompletionTreeElementPointer(child.data())); 0067 } 0068 } 0069 0070 void CompletionTreeNode::appendChild(QExplicitlySharedDataPointer<KDevelop::CompletionTreeElement> child) 0071 { 0072 child->setParent(this); 0073 children << child; 0074 } 0075 0076 int CompletionTreeElement::columnInParent() const 0077 { 0078 return 0; 0079 } 0080 0081 CompletionTreeNode::CompletionTreeNode() : CompletionTreeElement() 0082 , role(( KTextEditor::CodeCompletionModel::ExtraItemDataRoles )Qt::DisplayRole) 0083 {} 0084 0085 CompletionTreeNode::~CompletionTreeNode() 0086 { 0087 } 0088 0089 CompletionTreeNode* CompletionTreeElement::asNode() 0090 { 0091 return dynamic_cast<CompletionTreeNode*>(this); 0092 } 0093 0094 CompletionTreeItem* CompletionTreeElement::asItem() 0095 { 0096 return dynamic_cast<CompletionTreeItem*>(this); 0097 } 0098 0099 const CompletionTreeNode* CompletionTreeElement::asNode() const 0100 { 0101 return dynamic_cast<const CompletionTreeNode*>(this); 0102 } 0103 0104 const CompletionTreeItem* CompletionTreeElement::asItem() const 0105 { 0106 return dynamic_cast<const CompletionTreeItem*>(this); 0107 } 0108 0109 int CompletionTreeElement::rowInParent() const 0110 { 0111 return m_rowInParent; 0112 } 0113 0114 void CompletionTreeItem::execute(KTextEditor::View* view, const KTextEditor::Range& word) 0115 { 0116 Q_UNUSED(view) 0117 Q_UNUSED(word) 0118 qCWarning(LANGUAGE) << "doing nothing"; 0119 } 0120 0121 QVariant CompletionTreeItem::data(const QModelIndex& index, int role, const CodeCompletionModel* model) const 0122 { 0123 Q_UNUSED(index) 0124 Q_UNUSED(model) 0125 if (role == Qt::DisplayRole) 0126 return i18n("not implemented"); 0127 return QVariant(); 0128 } 0129 0130 int CompletionTreeItem::inheritanceDepth() const 0131 { 0132 return 0; 0133 } 0134 0135 int CompletionTreeItem::argumentHintDepth() const 0136 { 0137 return 0; 0138 } 0139 0140 KTextEditor::CodeCompletionModel::CompletionProperties CompletionTreeItem::completionProperties() const 0141 { 0142 Declaration* dec = declaration().data(); 0143 if (!dec) { 0144 return {}; 0145 } 0146 0147 return DUChainUtils::completionProperties(dec); 0148 } 0149 0150 DeclarationPointer CompletionTreeItem::declaration() const 0151 { 0152 return DeclarationPointer(); 0153 } 0154 0155 QList<IndexedType> CompletionTreeItem::typeForArgumentMatching() const 0156 { 0157 return QList<IndexedType>(); 0158 } 0159 0160 CompletionCustomGroupNode::CompletionCustomGroupNode(const QString& groupName, int _inheritanceDepth) 0161 { 0162 role = ( KTextEditor::CodeCompletionModel::ExtraItemDataRoles )Qt::DisplayRole; 0163 roleValue = groupName; 0164 inheritanceDepth = _inheritanceDepth; 0165 } 0166 0167 bool CompletionTreeItem::dataChangedWithInput() const 0168 { 0169 return false; 0170 } 0171 }