1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.widgets.completer;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.abstractitemmodel;
17 import qt.core.coreevent;
18 import qt.core.namespace;
19 import qt.core.object;
20 import qt.core.rect;
21 import qt.core.string;
22 import qt.core.stringlist;
23 import qt.helpers;
24 import qt.widgets.abstractitemview;
25 import qt.widgets.widget;
26 
27 /+ QT_REQUIRE_CONFIG(completer); +/
28 
29 
30 extern(C++, class) struct QCompleterPrivate;
31 
32 /// Binding for C++ class [QCompleter](https://doc.qt.io/qt-6/qcompleter.html).
33 class /+ Q_WIDGETS_EXPORT +/ QCompleter : QObject
34 {
35     mixin(Q_OBJECT);
36     /+ Q_PROPERTY(QString completionPrefix READ completionPrefix WRITE setCompletionPrefix)
37     Q_PROPERTY(ModelSorting modelSorting READ modelSorting WRITE setModelSorting)
38     Q_PROPERTY(Qt::MatchFlags filterMode READ filterMode WRITE setFilterMode)
39     Q_PROPERTY(CompletionMode completionMode READ completionMode WRITE setCompletionMode)
40     Q_PROPERTY(int completionColumn READ completionColumn WRITE setCompletionColumn)
41     Q_PROPERTY(int completionRole READ completionRole WRITE setCompletionRole)
42     Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems)
43     Q_PROPERTY(Qt::CaseSensitivity caseSensitivity READ caseSensitivity WRITE setCaseSensitivity)
44     Q_PROPERTY(bool wrapAround READ wrapAround WRITE setWrapAround) +/
45 
46 public:
47     enum CompletionMode {
48         PopupCompletion,
49         UnfilteredPopupCompletion,
50         InlineCompletion
51     }
52     /+ Q_ENUM(CompletionMode) +/
53 
54     enum ModelSorting {
55         UnsortedModel = 0,
56         CaseSensitivelySortedModel,
57         CaseInsensitivelySortedModel
58     }
59     /+ Q_ENUM(ModelSorting) +/
60 
61     this(QObject parent = null);
62     this(QAbstractItemModel model, QObject parent = null);
63 /+ #if QT_CONFIG(stringlistmodel) +/
64     this(ref const(QStringList) completions, QObject parent = null);
65 /+ #endif +/
66     ~this();
67 
68     final void setWidget(QWidget widget);
69     final QWidget widget() const;
70 
71     final void setModel(QAbstractItemModel c);
72     final QAbstractItemModel model() const;
73 
74     final void setCompletionMode(CompletionMode mode);
75     final CompletionMode completionMode() const;
76 
77     final void setFilterMode(/+ Qt:: +/qt.core.namespace.MatchFlags filterMode);
78     final /+ Qt:: +/qt.core.namespace.MatchFlags filterMode() const;
79 
80     final QAbstractItemView popup() const;
81     final void setPopup(QAbstractItemView popup);
82 
83     final void setCaseSensitivity(/+ Qt:: +/qt.core.namespace.CaseSensitivity caseSensitivity);
84     final /+ Qt:: +/qt.core.namespace.CaseSensitivity caseSensitivity() const;
85 
86     final void setModelSorting(ModelSorting sorting);
87     final ModelSorting modelSorting() const;
88 
89     final void setCompletionColumn(int column);
90     final int  completionColumn() const;
91 
92     final void setCompletionRole(int role);
93     final int  completionRole() const;
94 
95     final bool wrapAround() const;
96 
97     final int maxVisibleItems() const;
98     final void setMaxVisibleItems(int maxItems);
99 
100     final int completionCount() const;
101     final bool setCurrentRow(int row);
102     final int currentRow() const;
103 
104     final QModelIndex currentIndex() const;
105     final QString currentCompletion() const;
106 
107     final QAbstractItemModel completionModel() const;
108 
109     final QString completionPrefix() const;
110 
111 public /+ Q_SLOTS +/:
112     @QSlot final void setCompletionPrefix(ref const(QString) prefix);
113     @QSlot final void complete(ref const(QRect) rect = globalInitVar!QRect);
114     @QSlot final void setWrapAround(bool wrap);
115 
116 public:
117     /+ virtual +/ QString pathFromIndex(ref const(QModelIndex) index) const;
118     /+ virtual +/ QStringList splitPath(ref const(QString) path) const;
119 
120 protected:
121     override bool eventFilter(QObject o, QEvent e);
122     override bool event(QEvent );
123 
124 /+ Q_SIGNALS +/public:
125     @QSignal final void activated(ref const(QString) text);
126     @QSignal final void activated(ref const(QModelIndex) index);
127     @QSignal final void highlighted(ref const(QString) text);
128     @QSignal final void highlighted(ref const(QModelIndex) index);
129 
130 private:
131     /+ Q_DISABLE_COPY(QCompleter) +/
132     /+ Q_DECLARE_PRIVATE(QCompleter) +/
133 
134     /+ Q_PRIVATE_SLOT(d_func(), void _q_complete(QModelIndex))
135     Q_PRIVATE_SLOT(d_func(), void _q_completionSelected(const QItemSelection&))
136     Q_PRIVATE_SLOT(d_func(), void _q_autoResizePopup())
137     Q_PRIVATE_SLOT(d_func(), void _q_fileSystemModelDirectoryLoaded(const QString&)) +/
138     mixin(CREATE_CONVENIENCE_WRAPPERS);
139 }
140