Schim
completer.h
Go to the documentation of this file.
1 #ifndef COMPLETER_H
3 #define COMPLETER_H
4 
5 #include "fileio/database.h"
6 #include "ui/vim.h"
7 
8 #include <QCompleter>
9 #include <QLineEdit>
10 #include <QSortFilterProxyModel>
11 
12 class Completer;
13 
23 class CompleterEdit : public QLineEdit
24 {
25 public:
26  explicit CompleterEdit(QWidget *parent = nullptr);
27 
28 private:
29  // EVENTS
30  void keyPressEvent(QKeyEvent *event);
31  bool processVimAction(const Vim::Action &action);
32 };
33 
37 class CompleterProxyModel : public QAbstractProxyModel
38 {
39 public:
40  explicit CompleterProxyModel(QObject *parent = nullptr);
41 
45  QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
49  QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
50 
51  // BORING PART
52  QModelIndex index(int row, int column, const QModelIndex &parent) const override;
53  QModelIndex parent(const QModelIndex &child) const override;
54  int rowCount(const QModelIndex &parent = {}) const override;
55  int columnCount(const QModelIndex &parent = {}) const override;
56  QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
57 
58  Database *sourceModel() const;
59 };
60 
67 class Completer : public QCompleter
68 {
69  Q_OBJECT
70 
71 public:
72  explicit Completer(QObject *parent = nullptr);
73  explicit Completer(Database *model, QObject *parent = nullptr);
74  ~Completer();
75 
76  CompleterProxyModel *model();
77 };
78 
79 #endif // COMPLETER_H
Derived line edit to use with the completer.
Definition: completer.h:23
A proxy model that flattens a Database into a list model.
Definition: completer.h:37
A database of symbols.
Definition: database.h:77
An action in vim-mode.
Definition: vim.h:81
Custom QCompleter.
Definition: completer.h:67