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