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.filedialog; 13 extern(C++): 14 15 import qt.config; 16 import qt.core.abstractproxymodel; 17 import qt.core.bytearray; 18 import qt.core.coreevent; 19 import qt.core.dir; 20 import qt.core.flags; 21 import qt.core.list; 22 import qt.core.namespace; 23 import qt.core.object; 24 import qt.core.string; 25 import qt.core.stringlist; 26 import qt.core.url; 27 import qt.gui.abstractfileiconprovider; 28 import qt.helpers; 29 import qt.widgets.abstractitemdelegate; 30 import qt.widgets.dialog; 31 import qt.widgets.widget; 32 33 /+ QT_REQUIRE_CONFIG(filedialog); +/ 34 35 36 struct QFileDialogArgs; 37 extern(C++, class) struct QFileDialogPrivate; 38 39 /// Binding for C++ class [QFileDialog](https://doc.qt.io/qt-6/qfiledialog.html). 40 class /+ Q_WIDGETS_EXPORT +/ QFileDialog : QDialog 41 { 42 mixin(Q_OBJECT); 43 /+ Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode) 44 Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode) 45 Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode) 46 Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix) 47 Q_PROPERTY(Options options READ options WRITE setOptions) 48 Q_PROPERTY(QStringList supportedSchemes READ supportedSchemes WRITE setSupportedSchemes) +/ 49 50 public: 51 enum ViewMode { Detail, List } 52 /+ Q_ENUM(ViewMode) +/ 53 enum FileMode { AnyFile, ExistingFile, Directory, ExistingFiles } 54 /+ Q_ENUM(FileMode) +/ 55 enum AcceptMode { AcceptOpen, AcceptSave } 56 /+ Q_ENUM(AcceptMode) +/ 57 enum DialogLabel { LookIn, FileName, FileType, Accept, Reject } 58 59 // keep this in sync with QFileDialogOption::FileDialogOptions 60 enum Option 61 { 62 ShowDirsOnly = 0x00000001, 63 DontResolveSymlinks = 0x00000002, 64 DontConfirmOverwrite = 0x00000004, 65 DontUseNativeDialog = 0x00000008, 66 ReadOnly = 0x00000010, 67 HideNameFilterDetails = 0x00000020, 68 DontUseCustomDirectoryIcons = 0x00000040 69 } 70 /+ Q_ENUM(Option) +/ 71 /+ Q_DECLARE_FLAGS(Options, Option) +/ 72 alias Options = QFlags!(Option); /+ Q_FLAG(Options) +/ 73 74 this(QWidget parent, /+ Qt:: +/qt.core.namespace.WindowFlags f); 75 /+ explicit +/this(QWidget parent = null, 76 ref const(QString) caption = globalInitVar!QString, 77 ref const(QString) directory = globalInitVar!QString, 78 ref const(QString) filter = globalInitVar!QString); 79 ~this(); 80 81 final void setDirectory(ref const(QString) directory); 82 pragma(inline, true) final void setDirectory(ref const(QDir) adirectory) 83 { auto tmp = adirectory.absolutePath(); setDirectory(tmp); } 84 final QDir directory() const; 85 86 final void setDirectoryUrl(ref const(QUrl) directory); 87 final QUrl directoryUrl() const; 88 89 final void selectFile(ref const(QString) filename); 90 final QStringList selectedFiles() const; 91 92 final void selectUrl(ref const(QUrl) url); 93 final QList!(QUrl) selectedUrls() const; 94 95 final void setNameFilter(ref const(QString) filter); 96 final void setNameFilters(ref const(QStringList) filters); 97 final QStringList nameFilters() const; 98 final void selectNameFilter(ref const(QString) filter); 99 final QString selectedMimeTypeFilter() const; 100 final QString selectedNameFilter() const; 101 102 /+ #if QT_CONFIG(mimetype) +/ 103 final void setMimeTypeFilters(ref const(QStringList) filters); 104 final QStringList mimeTypeFilters() const; 105 final void selectMimeTypeFilter(ref const(QString) filter); 106 /+ #endif +/ 107 108 final QDir.Filters filter() const; 109 final void setFilter(QDir.Filters filters); 110 111 final void setViewMode(ViewMode mode); 112 final ViewMode viewMode() const; 113 114 final void setFileMode(FileMode mode); 115 final FileMode fileMode() const; 116 117 final void setAcceptMode(AcceptMode mode); 118 final AcceptMode acceptMode() const; 119 120 final void setSidebarUrls(ref const(QList!(QUrl)) urls); 121 final QList!(QUrl) sidebarUrls() const; 122 123 final QByteArray saveState() const; 124 final bool restoreState(ref const(QByteArray) state); 125 126 final void setDefaultSuffix(ref const(QString) suffix); 127 final QString defaultSuffix() const; 128 129 final void setHistory(ref const(QStringList) paths); 130 final QStringList history() const; 131 132 final void setItemDelegate(QAbstractItemDelegate delegate_); 133 final QAbstractItemDelegate itemDelegate() const; 134 135 final void setIconProvider(QAbstractFileIconProvider provider); 136 final QAbstractFileIconProvider iconProvider() const; 137 138 final void setLabelText(DialogLabel label, ref const(QString) text); 139 final QString labelText(DialogLabel label) const; 140 141 final void setSupportedSchemes(ref const(QStringList) schemes); 142 final QStringList supportedSchemes() const; 143 144 /+ #if QT_CONFIG(proxymodel) +/ 145 final void setProxyModel(QAbstractProxyModel model); 146 final QAbstractProxyModel proxyModel() const; 147 /+ #endif +/ 148 149 final void setOption(Option option, bool on = true); 150 final bool testOption(Option option) const; 151 final void setOptions(Options options); 152 final Options options() const; 153 154 /+ using QDialog::open; +/ 155 final void open(QObject receiver, const(char)* member); 156 override void setVisible(bool visible); 157 158 /+ Q_SIGNALS +/public: 159 @QSignal final void fileSelected(ref const(QString) file); 160 @QSignal final void filesSelected(ref const(QStringList) files); 161 @QSignal final void currentChanged(ref const(QString) path); 162 @QSignal final void directoryEntered(ref const(QString) directory); 163 164 @QSignal final void urlSelected(ref const(QUrl) url); 165 @QSignal final void urlsSelected(ref const(QList!(QUrl)) urls); 166 @QSignal final void currentUrlChanged(ref const(QUrl) url); 167 @QSignal final void directoryUrlEntered(ref const(QUrl) directory); 168 169 @QSignal final void filterSelected(ref const(QString) filter); 170 171 public: 172 173 static QString getOpenFileName(QWidget parent = null, 174 ref const(QString) caption = globalInitVar!QString, 175 ref const(QString) dir = globalInitVar!QString, 176 ref const(QString) filter = globalInitVar!QString, 177 QString* selectedFilter = null, 178 Options options = Options()); 179 180 static QUrl getOpenFileUrl(QWidget parent = null, 181 ref const(QString) caption = globalInitVar!QString, 182 ref const(QUrl) dir = globalInitVar!QUrl, 183 ref const(QString) filter = globalInitVar!QString, 184 QString* selectedFilter = null, 185 Options options = Options(), 186 ref const(QStringList) supportedSchemes = globalInitVar!QStringList); 187 188 static QString getSaveFileName(QWidget parent = null, 189 ref const(QString) caption = globalInitVar!QString, 190 ref const(QString) dir = globalInitVar!QString, 191 ref const(QString) filter = globalInitVar!QString, 192 QString* selectedFilter = null, 193 Options options = Options()); 194 195 static QUrl getSaveFileUrl(QWidget parent = null, 196 ref const(QString) caption = globalInitVar!QString, 197 ref const(QUrl) dir = globalInitVar!QUrl, 198 ref const(QString) filter = globalInitVar!QString, 199 QString* selectedFilter = null, 200 Options options = Options(), 201 ref const(QStringList) supportedSchemes = globalInitVar!QStringList); 202 203 static QString getExistingDirectory(QWidget parent = null, 204 ref const(QString) caption = globalInitVar!QString, 205 ref const(QString) dir = globalInitVar!QString, 206 Options options = Option.ShowDirsOnly); 207 208 static QUrl getExistingDirectoryUrl(QWidget parent = null, 209 ref const(QString) caption = globalInitVar!QString, 210 ref const(QUrl) dir = globalInitVar!QUrl, 211 Options options = Option.ShowDirsOnly, 212 ref const(QStringList) supportedSchemes = globalInitVar!QStringList); 213 214 static QStringList getOpenFileNames(QWidget parent = null, 215 ref const(QString) caption = globalInitVar!QString, 216 ref const(QString) dir = globalInitVar!QString, 217 ref const(QString) filter = globalInitVar!QString, 218 QString* selectedFilter = null, 219 Options options = Options()); 220 221 static QList!(QUrl) getOpenFileUrls(QWidget parent = null, 222 ref const(QString) caption = globalInitVar!QString, 223 ref const(QUrl) dir = globalInitVar!QUrl, 224 ref const(QString) filter = globalInitVar!QString, 225 QString* selectedFilter = null, 226 Options options = Options(), 227 ref const(QStringList) supportedSchemes = globalInitVar!QStringList); 228 229 /+ static void getOpenFileContent(const QString &nameFilter, 230 const std::function<void(const QString &, const QByteArray &)> &fileContentsReady); +/ 231 static void saveFileContent(ref const(QByteArray) fileContent, ref const(QString) fileNameHint = globalInitVar!QString); 232 233 protected: 234 this(ref const(QFileDialogArgs) args); 235 override void done(int result); 236 override void accept(); 237 override void changeEvent(QEvent e); 238 239 private: 240 /+ Q_DECLARE_PRIVATE(QFileDialog) +/ 241 /+ Q_DISABLE_COPY(QFileDialog) +/ 242 243 /+ Q_PRIVATE_SLOT(d_func(), void _q_pathChanged(const QString &)) 244 245 Q_PRIVATE_SLOT(d_func(), void _q_navigateBackward()) 246 Q_PRIVATE_SLOT(d_func(), void _q_navigateForward()) 247 Q_PRIVATE_SLOT(d_func(), void _q_navigateToParent()) 248 Q_PRIVATE_SLOT(d_func(), void _q_createDirectory()) 249 Q_PRIVATE_SLOT(d_func(), void _q_showListView()) 250 Q_PRIVATE_SLOT(d_func(), void _q_showDetailsView()) 251 Q_PRIVATE_SLOT(d_func(), void _q_showContextMenu(const QPoint &)) 252 Q_PRIVATE_SLOT(d_func(), void _q_renameCurrent()) 253 Q_PRIVATE_SLOT(d_func(), void _q_deleteCurrent()) 254 Q_PRIVATE_SLOT(d_func(), void _q_showHidden()) 255 Q_PRIVATE_SLOT(d_func(), void _q_updateOkButton()) 256 Q_PRIVATE_SLOT(d_func(), void _q_currentChanged(const QModelIndex &index)) 257 Q_PRIVATE_SLOT(d_func(), void _q_enterDirectory(const QModelIndex &index)) 258 Q_PRIVATE_SLOT(d_func(), void _q_emitUrlSelected(const QUrl &)) 259 Q_PRIVATE_SLOT(d_func(), void _q_emitUrlsSelected(const QList<QUrl> &)) 260 Q_PRIVATE_SLOT(d_func(), void _q_nativeCurrentChanged(const QUrl &)) 261 Q_PRIVATE_SLOT(d_func(), void _q_nativeEnterDirectory(const QUrl&)) 262 Q_PRIVATE_SLOT(d_func(), void _q_goToDirectory(const QString &path)) 263 Q_PRIVATE_SLOT(d_func(), void _q_useNameFilter(int index)) 264 Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged()) 265 Q_PRIVATE_SLOT(d_func(), void _q_goToUrl(const QUrl &url)) 266 Q_PRIVATE_SLOT(d_func(), void _q_goHome()) 267 Q_PRIVATE_SLOT(d_func(), void _q_showHeader(QAction *)) 268 Q_PRIVATE_SLOT(d_func(), void _q_autoCompleteFileName(const QString &text)) 269 Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex & parent)) 270 Q_PRIVATE_SLOT(d_func(), void _q_fileRenamed(const QString &path, 271 const QString &oldName, 272 const QString &newName)) +/ 273 /+ friend class QPlatformDialogHelper; +/ 274 mixin(CREATE_CONVENIENCE_WRAPPERS); 275 } 276 /+pragma(inline, true) QFlags!(QFileDialog.Options.enum_type) operator |(QFileDialog.Options.enum_type f1, QFileDialog.Options.enum_type f2)/+noexcept+/{return QFlags!(QFileDialog.Options.enum_type)(f1)|f2;}+/ 277 /+pragma(inline, true) QFlags!(QFileDialog.Options.enum_type) operator |(QFileDialog.Options.enum_type f1, QFlags!(QFileDialog.Options.enum_type) f2)/+noexcept+/{return f2|f1;}+/ 278 /+pragma(inline, true) QFlags!(QFileDialog.Options.enum_type) operator &(QFileDialog.Options.enum_type f1, QFileDialog.Options.enum_type f2)/+noexcept+/{return QFlags!(QFileDialog.Options.enum_type)(f1)&f2;}+/ 279 /+pragma(inline, true) QFlags!(QFileDialog.Options.enum_type) operator &(QFileDialog.Options.enum_type f1, QFlags!(QFileDialog.Options.enum_type) f2)/+noexcept+/{return f2&f1;}+/ 280 /+pragma(inline, true) void operator +(QFileDialog.Options.enum_type f1, QFileDialog.Options.enum_type f2)/+noexcept+/;+/ 281 /+pragma(inline, true) void operator +(QFileDialog.Options.enum_type f1, QFlags!(QFileDialog.Options.enum_type) f2)/+noexcept+/;+/ 282 /+pragma(inline, true) void operator +(int f1, QFlags!(QFileDialog.Options.enum_type) f2)/+noexcept+/;+/ 283 /+pragma(inline, true) void operator -(QFileDialog.Options.enum_type f1, QFileDialog.Options.enum_type f2)/+noexcept+/;+/ 284 /+pragma(inline, true) void operator -(QFileDialog.Options.enum_type f1, QFlags!(QFileDialog.Options.enum_type) f2)/+noexcept+/;+/ 285 /+pragma(inline, true) void operator -(int f1, QFlags!(QFileDialog.Options.enum_type) f2)/+noexcept+/;+/ 286 /+pragma(inline, true) QIncompatibleFlag operator |(QFileDialog.Options.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/ 287 /+pragma(inline, true) void operator +(int f1, QFileDialog.Options.enum_type f2)/+noexcept+/;+/ 288 /+pragma(inline, true) void operator +(QFileDialog.Options.enum_type f1, int f2)/+noexcept+/;+/ 289 /+pragma(inline, true) void operator -(int f1, QFileDialog.Options.enum_type f2)/+noexcept+/;+/ 290 /+pragma(inline, true) void operator -(QFileDialog.Options.enum_type f1, int f2)/+noexcept+/;+/ 291 292 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QFileDialog::Options) +/