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