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