File indexing completed on 2024-03-24 04:00:10
0001 /* 0002 SPDX-FileCopyrightText: 2003 Anders Lund <anders.lund@lund.tdcadsl.dk> 0003 SPDX-FileCopyrightText: 2010 Christoph Cullmann <cullmann@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef _KateWordCompletion_h_ 0009 #define _KateWordCompletion_h_ 0010 0011 #include <ktexteditor/codecompletionmodel.h> 0012 #include <ktexteditor/codecompletionmodelcontrollerinterface.h> 0013 #include <ktexteditor/view.h> 0014 0015 #include <QEvent> 0016 #include <QList> 0017 #include <QObject> 0018 0019 #include "katepartdebug.h" 0020 #include <ktexteditor_export.h> 0021 0022 class KateWordCompletionModel : public KTextEditor::CodeCompletionModel, public KTextEditor::CodeCompletionModelControllerInterface 0023 { 0024 Q_OBJECT 0025 Q_INTERFACES(KTextEditor::CodeCompletionModelControllerInterface) 0026 public: 0027 KTEXTEDITOR_EXPORT explicit KateWordCompletionModel(QObject *parent); 0028 KTEXTEDITOR_EXPORT ~KateWordCompletionModel() override; 0029 0030 /** 0031 * This function is responsible to generating / updating the list of current 0032 * completions. The default implementation does nothing. 0033 * 0034 * When implementing this function, remember to call setRowCount() (or implement 0035 * rowCount()), and to generate the appropriate change notifications (for instance 0036 * by calling QAbstractItemModel::reset()). 0037 * @param view The view to generate completions for 0038 * @param range The range of text to generate completions for 0039 * */ 0040 void completionInvoked(KTextEditor::View *view, const KTextEditor::Range &range, InvocationType invocationType) override; 0041 0042 bool shouldStartCompletion(KTextEditor::View *view, const QString &insertedText, bool userInsertion, const KTextEditor::Cursor &position) override; 0043 bool shouldAbortCompletion(KTextEditor::View *view, const KTextEditor::Range &range, const QString ¤tCompletion) override; 0044 0045 void saveMatches(KTextEditor::View *view, const KTextEditor::Range &range); 0046 0047 int rowCount(const QModelIndex &parent) const override; 0048 0049 QVariant data(const QModelIndex &index, int role) const override; 0050 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0051 QModelIndex parent(const QModelIndex &index) const override; 0052 MatchReaction matchingItem(const QModelIndex &matched) override; 0053 0054 bool shouldHideItemsWithEqualNames() const override; 0055 0056 KTEXTEDITOR_EXPORT QStringList allMatches(KTextEditor::View *view, const KTextEditor::Range &range); 0057 0058 void executeCompletionItem(KTextEditor::View *view, const KTextEditor::Range &word, const QModelIndex &index) const override; 0059 0060 private: 0061 QStringList m_matches; 0062 bool m_automatic; 0063 }; 0064 0065 class KateWordCompletionView : public QObject 0066 { 0067 public: 0068 KateWordCompletionView(KTextEditor::View *view, KActionCollection *ac); 0069 ~KateWordCompletionView() override; 0070 0071 private: 0072 void completeBackwards(); 0073 void completeForwards(); 0074 void slotCursorMoved(); 0075 0076 void shellComplete(); 0077 0078 void popupCompletionList(); 0079 0080 private: 0081 void complete(bool fw = true); 0082 0083 QString word() const; 0084 KTextEditor::Range range() const; 0085 0086 static QString findLongestUnique(const QStringList &matches, int lead); 0087 0088 KTextEditor::View *m_view; 0089 KateWordCompletionModel *m_dWCompletionModel; 0090 struct KateWordCompletionViewPrivate *d; 0091 }; 0092 0093 #endif // _DocWordCompletionPlugin_h_