Mercurial > projects > dynamin
comparison dynamin/gui/windows_file_dialog.d @ 18:836a064828e8
Implement FileDialog/DirectoryDialog with GTK
and start a glib/gdk/gtk binding. Add invoke/invokeNow stubs to fix build on X.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Fri, 24 Jul 2009 00:35:42 -0500 |
parents | fc2420d39e3c |
children | 127b9d99c01c |
comparison
equal
deleted
inserted
replaced
17:ef81af74a306 | 18:836a064828e8 |
---|---|
32 DialogResult backend_showDialog() { | 32 DialogResult backend_showDialog() { |
33 OPENFILENAME ofn; | 33 OPENFILENAME ofn; |
34 ofn.lStructSize = OPENFILENAME.sizeof; | 34 ofn.lStructSize = OPENFILENAME.sizeof; |
35 //ofn.hwndOwner = ; | 35 //ofn.hwndOwner = ; |
36 | 36 |
37 bool allFilesFilter = false; | 37 ensureAllFilesFilter(); |
38 foreach(filter; _filters) | |
39 if(filter.extensions.length == 0) | |
40 allFilesFilter = true; | |
41 if(!allFilesFilter) addFilter("All Files (*.*)"); | |
42 | |
43 string filterStr; | 38 string filterStr; |
44 foreach(filter; _filters) { | 39 foreach(filter; _filters) { |
45 if(filter.shouldShow) | 40 if(filter.shouldShow) |
46 continue; | 41 continue; |
47 string[] exts = filter.extensions.dup; | 42 string[] exts = filter.extensions.dup; |
68 //if(canChooseLinks) | 63 //if(canChooseLinks) |
69 // ofn.Flags |= OFN_NODEREFERENCELINKS; | 64 // ofn.Flags |= OFN_NODEREFERENCELINKS; |
70 ofn.Flags |= OFN_FILEMUSTEXIST; | 65 ofn.Flags |= OFN_FILEMUSTEXIST; |
71 ofn.Flags |= OFN_HIDEREADONLY; | 66 ofn.Flags |= OFN_HIDEREADONLY; |
72 ofn.Flags |= OFN_OVERWRITEPROMPT; | 67 ofn.Flags |= OFN_OVERWRITEPROMPT; |
73 if(_multipleSelection) | 68 if(_multipleSelection && fileDialogType == Open) |
74 ofn.Flags |= OFN_ALLOWMULTISELECT; | 69 ofn.Flags |= OFN_ALLOWMULTISELECT; |
75 | 70 |
76 auto GetFileName = fileDialogType == Open ? | 71 auto GetFileName = fileDialogType == Open ? |
77 &GetOpenFileName : &GetSaveFileName ; | 72 &GetOpenFileName : &GetSaveFileName ; |
78 if(!GetFileName(&ofn)) { | 73 if(!GetFileName(&ofn)) { |
104 for(int i = 1; i < arr.length; ++i) { | 99 for(int i = 1; i < arr.length; ++i) { |
105 if(arr[i].contains('\\')) // a dereferenced link--absolute | 100 if(arr[i].contains('\\')) // a dereferenced link--absolute |
106 _files[i-1] = arr[i]; | 101 _files[i-1] = arr[i]; |
107 else | 102 else |
108 _files[i-1] = _directory ~ arr[i]; | 103 _files[i-1] = _directory ~ arr[i]; |
104 maybeAddExt(_files[i-1]); | |
109 } | 105 } |
110 } else { //single file | 106 } else { //single file |
111 assert(filesBuffer.contains('\\')); | 107 assert(filesBuffer.contains('\\')); |
112 _directory = filesBuffer[0..filesBuffer.findLast("\\")].dup; | 108 _directory = filesBuffer[0..filesBuffer.findLast("\\")].dup; |
113 _files = [filesBuffer.dup]; | 109 _files = [filesBuffer.dup]; |
114 } | 110 maybeAddExt(_files[0]); |
115 | |
116 // if "All Files (*.*)" filter is not selected | |
117 if(_filters[selectedFilter].extensions.length > 0) { | |
118 // go over every chosen file and add the selected filter's | |
119 // extension if the file doesn't already have one from the selected filter | |
120 for(int i = 0; i < _files.length; ++i) { | |
121 bool validExt = false; | |
122 foreach(ext; _filters[selectedFilter].extensions) | |
123 if(_files[i].downcase().endsWith(ext.downcase())) | |
124 validExt = true; | |
125 if(!validExt) | |
126 _files[i] ~= "." ~ _filters[selectedFilter].extensions[0].downcase(); | |
127 } | |
128 } | 111 } |
129 | 112 |
130 return DialogResult.OK; | 113 return DialogResult.OK; |
131 } | 114 } |
132 } | 115 } |