1 /* 2 Actiona 3 Copyright (C) 2005 Jonathan Mercier-Ganady 4 5 Actiona is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 Actiona is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 Contact : jmgr@jmgr.info 19 */ 20 21 #pragma once 22 23 #include "basewindow.h" 24 25 #include <QFileDialog> 26 #include <QDir> 27 28 namespace Code 29 { 30 class FileDialog : public BaseWindow 31 { 32 Q_OBJECT 33 Q_ENUMS(AcceptMode) 34 Q_ENUMS(FileMode) 35 Q_ENUMS(ViewMode) 36 Q_ENUMS(DialogLabel) 37 Q_ENUMS(Filters) 38 Q_PROPERTY(QScriptValue onClosed READ onClosed WRITE setOnClosed) 39 Q_PROPERTY(QScriptValue onCurrentChanged READ onCurrentChanged WRITE setOnCurrentChanged) 40 Q_PROPERTY(QScriptValue onDirectoryEntered READ onDirectoryEntered WRITE setOnDirectoryEntered) 41 Q_PROPERTY(QScriptValue onFileSelected READ onFileSelected WRITE setOnFileSelected) 42 Q_PROPERTY(QScriptValue onFilesSelected READ onFilesSelected WRITE setOnFilesSelected) 43 Q_PROPERTY(QScriptValue onFilterSelected READ onFilterSelected WRITE setOnFilterSelected) 44 45 public: 46 enum AcceptMode 47 { 48 Open = QFileDialog::AcceptOpen, 49 Save = QFileDialog::AcceptSave 50 }; 51 enum FileMode 52 { 53 AnyFile = QFileDialog::AnyFile, 54 ExistingFile = QFileDialog::ExistingFile, 55 ExistingFiles = QFileDialog::ExistingFiles, 56 Directory = QFileDialog::Directory 57 }; 58 enum ViewMode 59 { 60 Detail = QFileDialog::Detail, 61 List = QFileDialog::List 62 }; 63 enum DialogLabel 64 { 65 LookIn = QFileDialog::LookIn, 66 FileName = QFileDialog::FileName, 67 FileType = QFileDialog::FileType, 68 Accept = QFileDialog::Accept, 69 Reject = QFileDialog::Reject 70 }; 71 enum Filters 72 { 73 Dirs = QDir::Dirs, 74 AllDirs = QDir::AllDirs, 75 Files = QDir::Files, 76 Drives = QDir::Drives, 77 NoSymLinks = QDir::NoSymLinks, 78 NoDotAndDotDot = QDir::NoDotAndDotDot, 79 NoDot = QDir::NoDot, 80 NoDotDot = QDir::NoDotDot, 81 AllEntries = QDir::AllEntries, 82 Readable = QDir::Readable, 83 Writable = QDir::Writable, 84 Executable = QDir::Executable, 85 Modified = QDir::Modified, 86 Hidden = QDir::Hidden, 87 System = QDir::System, 88 CaseSensitive = QDir::CaseSensitive 89 }; 90 91 static QScriptValue constructor(QScriptContext *context, QScriptEngine *engine); 92 93 FileDialog(); 94 ~FileDialog() override; 95 setOnClosed(const QScriptValue & onClosed)96 void setOnClosed(const QScriptValue &onClosed) { mOnClosed = onClosed; } setOnCurrentChanged(const QScriptValue & onCurrentChanged)97 void setOnCurrentChanged(const QScriptValue &onCurrentChanged) { mOnCurrentChanged = onCurrentChanged; } setOnDirectoryEntered(const QScriptValue & onDirectoryEntered)98 void setOnDirectoryEntered(const QScriptValue &onDirectoryEntered) { mOnDirectoryEntered = onDirectoryEntered; } setOnFileSelected(const QScriptValue & onFileSelected)99 void setOnFileSelected(const QScriptValue &onFileSelected) { mOnFileSelected = onFileSelected; } setOnFilesSelected(const QScriptValue & onFilesSelected)100 void setOnFilesSelected(const QScriptValue &onFilesSelected) { mOnFilesSelected = onFilesSelected; } setOnFilterSelected(const QScriptValue & onFilterSelected)101 void setOnFilterSelected(const QScriptValue &onFilterSelected) { mOnFilterSelected = onFilterSelected; } 102 onClosed()103 QScriptValue onClosed() const { return mOnClosed; } onCurrentChanged()104 QScriptValue onCurrentChanged() const { return mOnCurrentChanged; } onDirectoryEntered()105 QScriptValue onDirectoryEntered() const { return mOnDirectoryEntered; } onFileSelected()106 QScriptValue onFileSelected() const { return mOnFileSelected; } onFilesSelected()107 QScriptValue onFilesSelected() const { return mOnFilesSelected; } onFilterSelected()108 QScriptValue onFilterSelected() const { return mOnFilterSelected; } 109 110 public slots: toString()111 QString toString() const override { return QStringLiteral("FileDialog"); } 112 QScriptValue setAcceptMode(AcceptMode acceptMode); 113 QScriptValue setFileMode(FileMode fileMode); 114 QScriptValue setViewMode(ViewMode viewMode); 115 QScriptValue setLabelText(DialogLabel dialogLabel, const QString &text); 116 QScriptValue selectFile(const QString &filename); 117 QScriptValue selectNameFilter(const QString &filter); 118 QScriptValue setDefaultSuffix(const QString &defaultSuffix); 119 QScriptValue setDirectory(const QString &directory); 120 QScriptValue setFilter(Filters filters); 121 QScriptValue setNameFilter(const QString &nameFilter); 122 QScriptValue setNameFilters(const QScriptValue &nameFilters); 123 QScriptValue setShowDirectoriesOnly(bool showDirectoriesOnly); 124 QScriptValue setDontResolveSymlinks(bool dontResolveSymlinks); 125 QScriptValue setDontConfirmOverwrite(bool dontConfirmOverwrite); 126 QScriptValue setDontUseNativeDialog(bool dontUseNativeDialog); 127 QScriptValue setReadOnly(bool readOnly); 128 QScriptValue setHideNameFilterDetails(bool hideNameFilterDetails); 129 QScriptValue setSidebarUrls(const QScriptValue &sidebarUrls); 130 QString selectedFile() const; 131 QScriptValue selectedFiles() const; 132 QString selectedNameFilter() const; 133 QScriptValue show(); 134 int showModal(); 135 136 private slots: 137 void finished(int result); 138 void currentChanged(const QString &path); 139 void directoryEntered(const QString &directory); 140 void fileSelected(const QString &file); 141 void filesSelected(const QStringList &files); 142 void filterSelected(const QString &filter); 143 144 private: 145 QFileDialog *mFileDialog; 146 QScriptValue mOnClosed; 147 QScriptValue mOnCurrentChanged; 148 QScriptValue mOnDirectoryEntered; 149 QScriptValue mOnFileSelected; 150 QScriptValue mOnFilesSelected; 151 QScriptValue mOnFilterSelected; 152 }; 153 } 154 155