diff 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
line wrap: on
line diff
--- a/dynamin/gui/windows_file_dialog.d	Sat Jul 18 21:32:19 2009 -0500
+++ b/dynamin/gui/windows_file_dialog.d	Fri Jul 24 00:35:42 2009 -0500
@@ -34,12 +34,7 @@
 		ofn.lStructSize = OPENFILENAME.sizeof;
 		//ofn.hwndOwner = ;
 
-		bool allFilesFilter = false;
-		foreach(filter; _filters)
-			if(filter.extensions.length == 0)
-				allFilesFilter = true;
-		if(!allFilesFilter) addFilter("All Files (*.*)");
-
+		ensureAllFilesFilter();
 		string filterStr;
 		foreach(filter; _filters) {
 			if(filter.shouldShow)
@@ -70,7 +65,7 @@
 		ofn.Flags |= OFN_FILEMUSTEXIST;
 		ofn.Flags |= OFN_HIDEREADONLY;
 		ofn.Flags |= OFN_OVERWRITEPROMPT;
-		if(_multipleSelection)
+		if(_multipleSelection && fileDialogType == Open)
 			ofn.Flags |= OFN_ALLOWMULTISELECT;
 
 		auto GetFileName = fileDialogType == Open ?
@@ -106,25 +101,13 @@
 					_files[i-1] = arr[i];
 				else
 					_files[i-1] = _directory ~ arr[i];
+				maybeAddExt(_files[i-1]);
 			}
 		} else { //single file
 			assert(filesBuffer.contains('\\'));
 			_directory = filesBuffer[0..filesBuffer.findLast("\\")].dup;
 			_files = [filesBuffer.dup];
-		}
-
-		// if "All Files (*.*)" filter is not selected
-		if(_filters[selectedFilter].extensions.length > 0) {
-			// go over every chosen file and add the selected filter's
-			// extension if the file doesn't already have one from the selected filter
-			for(int i = 0; i < _files.length; ++i) {
-				bool validExt = false;
-				foreach(ext; _filters[selectedFilter].extensions)
-					if(_files[i].downcase().endsWith(ext.downcase()))
-						validExt = true;
-				if(!validExt)
-					_files[i] ~= "." ~ _filters[selectedFilter].extensions[0].downcase();
-			}
+			maybeAddExt(_files[0]);
 		}
 
 		return DialogResult.OK;