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 }