annotate dynamin/gui/file_dialog.d @ 106:acdbb30fee7e

Port to D2. Most of the effort was dealing with immutable and const.
author Jordan Miner <jminer7@gmail.com>
date Mon, 17 Dec 2012 23:41:50 -0600
parents 73060bc3f004
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
1
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
2 /*
103
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
3 * Copyright Jordan Miner
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
4 *
103
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
5 * This Source Code Form is subject to the terms of the Mozilla Public
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
73060bc3f004 Change license to Boost 1.0 and MPL 2.0.
Jordan Miner <jminer7@gmail.com>
parents: 46
diff changeset
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
8 *
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
9 */
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
10
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
11 module dynamin.gui.file_dialog;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
12
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
13 import dynamin.all_core;
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
14 import dynamin.gui_backend;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
15
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
16 // not used by programs
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
17 struct FileDialogFilter {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
18 string name;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
19 string[] extensions;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
20 // ignored for now
106
acdbb30fee7e Port to D2.
Jordan Miner <jminer7@gmail.com>
parents: 103
diff changeset
21 bool delegate(cstring fileName) shouldShow;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
22 }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
23
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
24 /**
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
25 * As this is an abstract class, use OpenFileDialog or SaveFileDialog instead.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
26 *
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
27 * TODO: figure out a way to allow the user to type in a custom filter?
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
28 * TODO: on Linux, use a GTK dialog if available, otherwise use a custom one.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
29 *
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
30 * The appearance of a file dialog with Windows Classic:
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
31 *
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
32 * $(IMAGE ../web/example_file_dialog.png)
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
33 */
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
34 abstract class FileDialog {
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
35 private:
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
36 mixin FileDialogBackend;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
37 protected:
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
38 bool _multipleSelection;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
39 string _initialFileName;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
40 string _text;
46
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
41 string _folder;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
42 string[] _files;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
43 FileDialogFilter[] _filters;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
44 int _selectedFilter;
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
45
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
46 uint fileDialogType;
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
47 enum {
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
48 Open, Save
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
49 }
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
50 invariant() {
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
51 assert(fileDialogType == Open || fileDialogType == Save);
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
52 }
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
53 public:
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
54 /**
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
55 * Adds a filter that only shows files with the specified extensions.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
56 * Note that the "All Files (*.*)" filter is added automatically when the
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
57 * dialog is shown if not added previously because I don't like when
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
58 * programs don't let me have control over what extension to use and
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
59 * don't let me be able to see all the files.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
60 * Examples:
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
61 * -----
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
62 * dialog.addFilter("All Files (*.*)");
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
63 * dialog.addFilter("Cascading Style Sheets (*.css)", "css");
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
64 * dialog.addFilter("Web Pages (*.html, *.htm)", "html", "htm");
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
65 * -----
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
66 */
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
67 void addFilter(string name, string[] exts...) {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
68 FileDialogFilter filter;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
69 filter.name = name;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
70 filter.extensions = exts;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
71
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
72 _filters.length = _filters.length + 1;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
73 _filters[_filters.length-1] = filter;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
74 }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
75 /**
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
76 * Adds a filter that only shows files with which the specified delegate
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
77 * returns true for.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
78 * BUG: not implemented
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
79 */
106
acdbb30fee7e Port to D2.
Jordan Miner <jminer7@gmail.com>
parents: 103
diff changeset
80 void addFilter(string name, string ext, bool delegate(cstring fileName) shouldShow) {
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
81 // TODO:
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
82 throw new Exception("addFilter(string, string, delegate) not implemented");
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
83 FileDialogFilter filter;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
84 filter.name = name;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
85 filter.extensions = [ext];
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
86 filter.shouldShow = shouldShow;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
87
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
88 _filters.length = _filters.length + 1;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
89 _filters[_filters.length-1] = filter;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
90 }
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
91
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
92 /// Gets or sets the selected filter. An index of 0 is the first one added.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
93 int selectedFilter() { return _selectedFilter; }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
94 /// ditto
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
95 void selectedFilter(int index) { _selectedFilter = index; }
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
96
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
97 /**
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
98 * Gets or sets whether more than one file can be selected.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
99 * The default is true for an OpenFileDialog and false for SaveFileDialog.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
100 */
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
101 bool multipleSelection() { return _multipleSelection; }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
102 /// ditto
14
e6e201c3a439 Remove ANSI functions from Windows binding and convert inner tabs to spaces
Jordan Miner <jminer7@gmail.com>
parents: 5
diff changeset
103 void multipleSelection(bool b) { _multipleSelection = b; }
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
104
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
105 /// Gets or sets the text that is displayed in the dialog's title bar.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
106 string text() { return _text; }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
107 /// ditto
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
108 void text(string str) { _text = str; }
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
109
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
110 /**
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
111 * Sets the text in the file name text box to the specified string.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
112 * Example:
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
113 * -----
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
114 * dialog.initialFileName = "Untitled";
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
115 * -----
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
116 */
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
117 void initialFileName(string str) {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
118 // TODO: make sure str is not a path?
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
119 _initialFileName = str;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
120 }
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
121
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
122 /**
46
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
123 * Sets the folder that the FileDialog shows. If this is null,
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
124 * the default folder is used when the dialog is first shown.
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
125 * After the dialog has been shown, this is set to the folder
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
126 * the user was last looking at.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
127 */
46
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
128 void folder(string str) {
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
129 _folder = str;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
130 }
46
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
131 /// TODO: Should this be selectedFolder ?
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
132 string folder() {
127b9d99c01c Rename uses of 'directory' to 'folder' in method names and comments.
Jordan Miner <jminer7@gmail.com>
parents: 18
diff changeset
133 return _folder;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
134 }
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
135
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
136 /**
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
137 * Gets the files selected by the user.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
138 * If the user did not type a file name extension, the correct one
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
139 * will be added according to the selected filter.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
140 */
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
141 string[] files() { return _files; }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
142 /// Gets the first of the files selected by the user.
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
143 string file() { return _files[0]; }
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
144
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
145 // TODO: parameters
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
146 // TODO: should showDialog take any parameters?
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
147 // what should happen if no owner is set?
5
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
148 // WinForms sets the owner to the currently active window in the app
4029d5af7542 Add blank lines and rewrap some comments.
Jordan Miner <jminer7@gmail.com>
parents: 4
diff changeset
149 // do the same? or have no owner (annoying, as window can get below)?
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
150 DialogResult showDialog() {
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
151 return backend_showDialog();
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
152 }
18
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
153 private void ensureAllFilesFilter() {
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
154 foreach(filter; _filters)
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
155 if(filter.extensions.length == 0)
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
156 return;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
157 addFilter("All Files (*.*)");
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
158 }
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
159 private void maybeAddExt(ref string file) {
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
160 auto selFilter = _filters[selectedFilter];
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
161
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
162 // return if the "All Files (*.*)" filter is selected
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
163 if(selFilter.extensions.length == 0)
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
164 return;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
165
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
166 // return if the file already has an extension from the selected filter
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
167 foreach(ext; selFilter.extensions)
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
168 if(file.downcase().endsWith(ext.downcase()))
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
169 return;
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
170
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
171 file ~= "." ~ selFilter.extensions[0].downcase();
836a064828e8 Implement FileDialog/DirectoryDialog with GTK
Jordan Miner <jminer7@gmail.com>
parents: 14
diff changeset
172 }
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
173 }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
174
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
175 ///
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
176 class OpenFileDialog : FileDialog {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
177 this() {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
178 _multipleSelection = true;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
179 // different settings
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
180 fileDialogType = Open;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
181 }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
182 }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
183
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
184 ///
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
185 class SaveFileDialog : FileDialog {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
186 this() {
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
187 _multipleSelection = false;
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
188 // different settings
4
fc2420d39e3c Separate out Windows backend of FileDialog.
Jordan Miner <jminer7@gmail.com>
parents: 0
diff changeset
189 fileDialogType = Save;
0
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
190 }
aa4efef0f0b1 Initial commit of code.
Jordan Miner <jminer7@gmail.com>
parents:
diff changeset
191 }