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.gui.filesystemmodel;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.abstractitemmodel;
17 import qt.core.bytearray;
18 import qt.core.coreevent;
19 import qt.core.datetime;
20 import qt.core.dir;
21 import qt.core.file;
22 import qt.core.fileinfo;
23 import qt.core.flags;
24 import qt.core.global;
25 import qt.core.hash;
26 import qt.core.mimedata;
27 import qt.core.namespace;
28 import qt.core.object;
29 import qt.core.string;
30 import qt.core.stringlist;
31 import qt.core.variant;
32 import qt.gui.abstractfileiconprovider;
33 import qt.gui.icon;
34 import qt.helpers;
35 
36 /+ QT_REQUIRE_CONFIG(filesystemmodel); +/
37 
38 
39 extern(C++, class) struct ExtendedInformation;
40 extern(C++, class) struct QFileSystemModelPrivate;
41 
42 /// Binding for C++ class [QFileSystemModel](https://doc.qt.io/qt-6/qfilesystemmodel.html).
43 class /+ Q_GUI_EXPORT +/ QFileSystemModel : QAbstractItemModel
44 {
45     mixin(Q_OBJECT);
46     /+ Q_PROPERTY(bool resolveSymlinks READ resolveSymlinks WRITE setResolveSymlinks)
47     Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
48     Q_PROPERTY(bool nameFilterDisables READ nameFilterDisables WRITE setNameFilterDisables)
49     Q_PROPERTY(Options options READ options WRITE setOptions) +/
50 
51 /+ Q_SIGNALS +/public:
52     @QSignal final void rootPathChanged(ref const(QString) newPath);
53     @QSignal final void fileRenamed(ref const(QString) path, ref const(QString) oldName, ref const(QString) newName);
54     @QSignal final void directoryLoaded(ref const(QString) path);
55 
56 public:
57     enum Roles {
58         FileIconRole = uint(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole),
59         FilePathRole = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole + 1,
60         FileNameRole = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole + 2,
61         FilePermissions = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole + 3
62     }
63 
64     enum Option
65     {
66         DontWatchForChanges         = 0x00000001,
67         DontResolveSymlinks         = 0x00000002,
68         DontUseCustomDirectoryIcons = 0x00000004
69     }
70     /+ Q_ENUM(Option) +/
71     /+ Q_DECLARE_FLAGS(Options, Option) +/
72 alias Options = QFlags!(Option);
73     /+ explicit +/this(QObject parent = null);
74     ~this();
75 
76     override QModelIndex index(int row, int column, ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
77     final QModelIndex index(ref const(QString) path, int column = 0) const;
78     override QModelIndex parent(ref const(QModelIndex) child) const;
79     /+ using QObject::parent; +/
80     override QModelIndex sibling(int row, int column, ref const(QModelIndex) idx) const;
81     override bool hasChildren(ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
82     override bool canFetchMore(ref const(QModelIndex) parent) const;
83     override void fetchMore(ref const(QModelIndex) parent);
84 
85     override int rowCount(ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
86     override int columnCount(ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
87 
88     final QVariant myComputer(int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole) const;
89     override QVariant data(ref const(QModelIndex) index, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole) const;
90     override bool setData(ref const(QModelIndex) index, ref const(QVariant) value, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.EditRole);
91 
92     override QVariant headerData(int section, /+ Qt:: +/qt.core.namespace.Orientation orientation, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole) const;
93 
94     override /+ Qt:: +/qt.core.namespace.ItemFlags flags(ref const(QModelIndex) index) const;
95 
96     override void sort(int column, /+ Qt:: +/qt.core.namespace.SortOrder order = /+ Qt:: +/qt.core.namespace.SortOrder.AscendingOrder);
97 
98     override QStringList mimeTypes() const;
99     override QMimeData mimeData(ref const(QModelIndexList) indexes) const;
100     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
101     override bool dropMimeData(const(QMimeData) data, /+ Qt:: +/qt.core.namespace.DropAction action,
102                           int row, int column, ref const(QModelIndex) parent);
103     }));
104     override /+ Qt:: +/qt.core.namespace.DropActions supportedDropActions() const;
105     override QHash!(int, QByteArray) roleNames() const;
106 
107     // QFileSystemModel specific API
108     final QModelIndex setRootPath(ref const(QString) path);
109     final QString rootPath() const;
110     final QDir rootDirectory() const;
111 
112     final void setIconProvider(QAbstractFileIconProvider provider);
113     final QAbstractFileIconProvider iconProvider() const;
114 
115     final void setFilter(QDir.Filters filters);
116     final QDir.Filters filter() const;
117 
118     final void setResolveSymlinks(bool enable);
119     final bool resolveSymlinks() const;
120 
121     final void setReadOnly(bool enable);
122     final bool isReadOnly() const;
123 
124     final void setNameFilterDisables(bool enable);
125     final bool nameFilterDisables() const;
126 
127     final void setNameFilters(ref const(QStringList) filters);
128     final QStringList nameFilters() const;
129 
130     final void setOption(Option option, bool on = true);
131     final bool testOption(Option option) const;
132     final void setOptions(Options options);
133     final Options options() const;
134 
135     final QString filePath(ref const(QModelIndex) index) const;
136     final bool isDir(ref const(QModelIndex) index) const;
137     final qint64 size(ref const(QModelIndex) index) const;
138     final QString type(ref const(QModelIndex) index) const;
139     final QDateTime lastModified(ref const(QModelIndex) index) const;
140 
141     final QModelIndex mkdir(ref const(QModelIndex) parent, ref const(QString) name);
142     final bool rmdir(ref const(QModelIndex) index);
143     pragma(inline, true) final QString fileName(ref const(QModelIndex) aindex) const
144     { return aindex.data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole).toString(); }
145     pragma(inline, true) final QIcon fileIcon(ref const(QModelIndex) aindex) const
146     { return qvariant_cast!(QIcon)(aindex.data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole)); }
147     final QFile.Permissions permissions(ref const(QModelIndex) index) const;
148     final QFileInfo fileInfo(ref const(QModelIndex) index) const;
149     final bool remove(ref const(QModelIndex) index);
150 
151 protected:
152     this(ref QFileSystemModelPrivate , QObject parent = null);
153     override void timerEvent(QTimerEvent event);
154     override bool event(QEvent event);
155 
156 private:
157     /+ Q_DECLARE_PRIVATE(QFileSystemModel) +/
158     /+ Q_DISABLE_COPY(QFileSystemModel) +/
159 
160     /+ Q_PRIVATE_SLOT(d_func(), void _q_directoryChanged(const QString &directory, const QStringList &list))
161     Q_PRIVATE_SLOT(d_func(), void _q_performDelayedSort())
162     Q_PRIVATE_SLOT(d_func(),
163                    void _q_fileSystemChanged(const QString &path,
164                                              const QList<QPair<QString, QFileInfo>> &))
165     Q_PRIVATE_SLOT(d_func(), void _q_resolvedName(const QString &fileName, const QString &resolvedName)) +/
166 
167     /+ friend class QFileDialogPrivate; +/
168     mixin(CREATE_CONVENIENCE_WRAPPERS);
169 }
170 /+pragma(inline, true) QFlags!(QFileSystemModel.Options.enum_type) operator |(QFileSystemModel.Options.enum_type f1, QFileSystemModel.Options.enum_type f2)/+noexcept+/{return QFlags!(QFileSystemModel.Options.enum_type)(f1)|f2;}+/
171 /+pragma(inline, true) QFlags!(QFileSystemModel.Options.enum_type) operator |(QFileSystemModel.Options.enum_type f1, QFlags!(QFileSystemModel.Options.enum_type) f2)/+noexcept+/{return f2|f1;}+/
172 /+pragma(inline, true) QFlags!(QFileSystemModel.Options.enum_type) operator &(QFileSystemModel.Options.enum_type f1, QFileSystemModel.Options.enum_type f2)/+noexcept+/{return QFlags!(QFileSystemModel.Options.enum_type)(f1)&f2;}+/
173 /+pragma(inline, true) QFlags!(QFileSystemModel.Options.enum_type) operator &(QFileSystemModel.Options.enum_type f1, QFlags!(QFileSystemModel.Options.enum_type) f2)/+noexcept+/{return f2&f1;}+/
174 /+pragma(inline, true) void operator +(QFileSystemModel.Options.enum_type f1, QFileSystemModel.Options.enum_type f2)/+noexcept+/;+/
175 /+pragma(inline, true) void operator +(QFileSystemModel.Options.enum_type f1, QFlags!(QFileSystemModel.Options.enum_type) f2)/+noexcept+/;+/
176 /+pragma(inline, true) void operator +(int f1, QFlags!(QFileSystemModel.Options.enum_type) f2)/+noexcept+/;+/
177 /+pragma(inline, true) void operator -(QFileSystemModel.Options.enum_type f1, QFileSystemModel.Options.enum_type f2)/+noexcept+/;+/
178 /+pragma(inline, true) void operator -(QFileSystemModel.Options.enum_type f1, QFlags!(QFileSystemModel.Options.enum_type) f2)/+noexcept+/;+/
179 /+pragma(inline, true) void operator -(int f1, QFlags!(QFileSystemModel.Options.enum_type) f2)/+noexcept+/;+/
180 /+pragma(inline, true) QIncompatibleFlag operator |(QFileSystemModel.Options.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/
181 /+pragma(inline, true) void operator +(int f1, QFileSystemModel.Options.enum_type f2)/+noexcept+/;+/
182 /+pragma(inline, true) void operator +(QFileSystemModel.Options.enum_type f1, int f2)/+noexcept+/;+/
183 /+pragma(inline, true) void operator -(int f1, QFileSystemModel.Options.enum_type f2)/+noexcept+/;+/
184 /+pragma(inline, true) void operator -(QFileSystemModel.Options.enum_type f1, int f2)/+noexcept+/;+/
185 
186 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileSystemModel::Options) +/