Mercurial > projects > dynamin
comparison dynamin/gui/windows_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 |
comparison
equal
deleted
inserted
replaced
105:97997a544ac0 | 106:acdbb30fee7e |
---|---|
18 OPENFILENAME ofn; | 18 OPENFILENAME ofn; |
19 ofn.lStructSize = OPENFILENAME.sizeof; | 19 ofn.lStructSize = OPENFILENAME.sizeof; |
20 //ofn.hwndOwner = ; | 20 //ofn.hwndOwner = ; |
21 | 21 |
22 ensureAllFilesFilter(); | 22 ensureAllFilesFilter(); |
23 string filterStr; | 23 mstring filterStr; |
24 foreach(filter; _filters) { | 24 foreach(filter; _filters) { |
25 if(filter.shouldShow) | 25 if(filter.shouldShow) |
26 continue; | 26 continue; |
27 string[] exts = filter.extensions.dup; | 27 string[] exts = filter.extensions.dup; |
28 if(exts.length == 0) | 28 if(exts.length == 0) |
29 exts = [cast(string)"*.*"]; | 29 exts = ["*.*"]; |
30 else | 30 else |
31 for(int i = 0; i < exts.length; ++i) | 31 for(int i = 0; i < exts.length; ++i) |
32 exts[i] = "*." ~ exts[i]; | 32 exts[i] = "*." ~ exts[i]; |
33 filterStr ~= filter.name ~ "\0" ~ exts.join(";") ~ "\0"; | 33 filterStr ~= filter.name ~ "\0" ~ exts.join(";") ~ "\0"; |
34 } | 34 } |
69 filesBufferW[i] = 0; | 69 filesBufferW[i] = 0; |
70 int index; // index of null char right after the last non-null char | 70 int index; // index of null char right after the last non-null char |
71 for(index = filesBufferW.length; index > 0; --index) | 71 for(index = filesBufferW.length; index > 0; --index) |
72 if(filesBufferW[index-1] != 0) | 72 if(filesBufferW[index-1] != 0) |
73 break; | 73 break; |
74 auto filesBuffer = Utf.toString(filesBufferW[0..index]); | 74 auto filesBuffer = cast(immutable)Utf.toString(filesBufferW[0..index]); |
75 scope(exit) delete filesBuffer; | |
76 if(filesBuffer.contains('\0')) { // multiple files | 75 if(filesBuffer.contains('\0')) { // multiple files |
77 auto arr = filesBuffer.split("\0"); | 76 auto arr = filesBuffer.split("\0"); |
78 _folder = arr[0]; | 77 _folder = arr[0]; |
79 // make sure folder ends with a backslash | 78 // make sure folder ends with a backslash |
80 // "C:\" does but "C:\Program Files" does not | 79 // "C:\" does but "C:\Program Files" does not |
88 _files[i-1] = _folder ~ arr[i]; | 87 _files[i-1] = _folder ~ arr[i]; |
89 maybeAddExt(_files[i-1]); | 88 maybeAddExt(_files[i-1]); |
90 } | 89 } |
91 } else { //single file | 90 } else { //single file |
92 assert(filesBuffer.contains('\\')); | 91 assert(filesBuffer.contains('\\')); |
93 _folder = filesBuffer[0..filesBuffer.findLast("\\")].dup; | 92 _folder = filesBuffer[0..filesBuffer.findLast("\\")]; |
94 _files = [filesBuffer.dup]; | 93 _files = [filesBuffer]; |
95 maybeAddExt(_files[0]); | 94 maybeAddExt(_files[0]); |
96 } | 95 } |
97 | 96 |
98 return DialogResult.OK; | 97 return DialogResult.OK; |
99 } | 98 } |