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) +/