1 /* 2 SPDX-FileCopyrightText: 2003 Anders Lund <anders.lund@lund.tdcadsl.dk> 3 SPDX-FileCopyrightText: 2010 Christoph Cullmann <cullmann@kde.org> 4 5 SPDX-License-Identifier: LGPL-2.0-or-later 6 */ 7 8 #ifndef _KateWordCompletion_h_ 9 #define _KateWordCompletion_h_ 10 11 #include <ktexteditor/codecompletioninterface.h> 12 #include <ktexteditor/codecompletionmodel.h> 13 #include <ktexteditor/codecompletionmodelcontrollerinterface.h> 14 #include <ktexteditor/view.h> 15 16 #include <QEvent> 17 #include <QList> 18 #include <QObject> 19 20 #include "katepartdebug.h" 21 #include <ktexteditor_export.h> 22 23 class KTEXTEDITOR_EXPORT KateWordCompletionModel : public KTextEditor::CodeCompletionModel, public KTextEditor::CodeCompletionModelControllerInterface 24 { 25 Q_OBJECT 26 Q_INTERFACES(KTextEditor::CodeCompletionModelControllerInterface) 27 public: 28 explicit KateWordCompletionModel(QObject *parent); 29 ~KateWordCompletionModel() override; 30 31 /** 32 * This function is responsible to generating / updating the list of current 33 * completions. The default implementation does nothing. 34 * 35 * When implementing this function, remember to call setRowCount() (or implement 36 * rowCount()), and to generate the appropriate change notifications (for instance 37 * by calling QAbstractItemModel::reset()). 38 * @param view The view to generate completions for 39 * @param range The range of text to generate completions for 40 * */ 41 void completionInvoked(KTextEditor::View *view, const KTextEditor::Range &range, InvocationType invocationType) override; 42 43 bool shouldStartCompletion(KTextEditor::View *view, const QString &insertedText, bool userInsertion, const KTextEditor::Cursor &position) override; 44 bool shouldAbortCompletion(KTextEditor::View *view, const KTextEditor::Range &range, const QString ¤tCompletion) override; 45 46 void saveMatches(KTextEditor::View *view, const KTextEditor::Range &range); 47 48 int rowCount(const QModelIndex &parent) const override; 49 50 QVariant data(const QModelIndex &index, int role) const override; 51 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 52 QModelIndex parent(const QModelIndex &index) const override; 53 MatchReaction matchingItem(const QModelIndex &matched) override; 54 55 bool shouldHideItemsWithEqualNames() const override; 56 57 QStringList allMatches(KTextEditor::View *view, const KTextEditor::Range &range) const; 58 59 void executeCompletionItem(KTextEditor::View *view, const KTextEditor::Range &word, const QModelIndex &index) const override; 60 61 private: 62 QStringList m_matches; 63 bool m_automatic; 64 }; 65 66 class KateWordCompletionView : public QObject 67 { 68 Q_OBJECT 69 70 public: 71 KateWordCompletionView(KTextEditor::View *view, KActionCollection *ac); 72 ~KateWordCompletionView() override; 73 74 private Q_SLOTS: 75 void completeBackwards(); 76 void completeForwards(); 77 void slotCursorMoved(); 78 79 void shellComplete(); 80 81 void popupCompletionList(); 82 83 private: 84 void complete(bool fw = true); 85 86 QString word() const; 87 KTextEditor::Range range() const; 88 89 QString findLongestUnique(const QStringList &matches, int lead) const; 90 91 KTextEditor::View *m_view; 92 KateWordCompletionModel *m_dWCompletionModel; 93 struct KateWordCompletionViewPrivate *d; 94 }; 95 96 #endif // _DocWordCompletionPlugin_h_ 97