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