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 }