changeset 21:d0ce1db78819

Directories can now be preselected on Windows
author Jordan Miner <jminer7@gmail.com>
date Fri, 24 Jul 2009 15:14:01 -0500
parents 63cbfb167240
children 9a50d6d96815
files dynamin/c/windows.d dynamin/gui/windows_directory_dialog.d
diffstat 2 files changed, 30 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/dynamin/c/windows.d	Fri Jul 24 15:11:22 2009 -0500
+++ b/dynamin/c/windows.d	Fri Jul 24 15:14:01 2009 -0500
@@ -1372,6 +1372,22 @@
 	BIF_USENEWUI         = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
 }
 
+enum {
+	BFFM_INITIALIZED     = 1,
+	BFFM_SELCHANGED      = 2,
+	BFFM_VALIDATEFAILEDA = 3,
+	BFFM_VALIDATEFAILEDW = 4,
+	BFFM_IUNKNOWN        = 5,
+
+	BFFM_SETSTATUSTEXTA = WM_USER + 100,
+	BFFM_ENABLEOK       = WM_USER + 101,
+	BFFM_SETSELECTIONA  = WM_USER + 102,
+	BFFM_SETSELECTIONW  = WM_USER + 103,
+	BFFM_SETSTATUSTEXTW = WM_USER + 104,
+	BFFM_SETOKTEXT      = WM_USER + 105,
+	BFFM_SETEXPANDED    = WM_USER + 106,
+}
+
 ITEMIDLIST* SHBrowseForFolderW(BROWSEINFO* lpbi);
 
 BOOL SHGetPathFromIDListW(ITEMIDLIST* pidl, LPWSTR pszPath);
@@ -1555,6 +1571,9 @@
 alias SHBrowseForFolderW       SHBrowseForFolder;
 alias SHGetPathFromIDListW     SHGetPathFromIDList;
 alias SHGetFolderPathW         SHGetFolderPath;
+alias BFFM_VALIDATEFAILEDW     BFFM_VALIDATEFAILED;
+alias BFFM_SETSELECTIONW       BFFM_SETSELECTION;
+alias BFFM_SETSTATUSTEXTW      BFFM_SETSTATUSTEXT;
 
 alias LOGFONTW          LOGFONT;
 alias NONCLIENTMETRICSW NONCLIENTMETRICS;
--- a/dynamin/gui/windows_directory_dialog.d	Fri Jul 24 15:11:22 2009 -0500
+++ b/dynamin/gui/windows_directory_dialog.d	Fri Jul 24 15:14:01 2009 -0500
@@ -28,22 +28,25 @@
 public import Utf = tango.text.convert.Utf;
 
 template DirectoryDialogBackend() {
+	extern(Windows) static int setSelectedDirectory(HWND hwnd,
+			UINT uMsg, LPARAM lParam, LPARAM lpData) {
+		if(uMsg == BFFM_INITIALIZED)
+			SendMessage(hwnd, BFFM_SETSELECTION, true, lpData);
+		return 0;
+	}
+
 	DialogResult backend_showDialog() {
 		BROWSEINFO bi;
 		//bi.hwndOwner = ;
 		bi.lpszTitle = "Choose a folder:";
 		bi.ulFlags |= BIF_RETURNONLYFSDIRS;
 		bi.ulFlags |= BIF_USENEWUI;
-
-		//IShellFolder shf;
-		//SHGetDesktopFolder(&shf);
-		//ITEMIDLIST* pidlInit;
-		//shf.ParseDisplayName(null, null, toWcharPtr(directory), null, &pidlInit, null);
-		//shf.Release();
-		//bi.pidlRoot = pidlInit;
+		if(directory) {
+			bi.lpfn = &setSelectedDirectory;
+			bi.lParam = cast(LPARAM)toWcharPtr(directory);
+		}
 
 		ITEMIDLIST* pidl = SHBrowseForFolder(&bi);
-		//CoTaskMemFree(pidlInit);
 		if(!pidl)
 			return DialogResult.Cancel;
 		wchar[MAX_PATH+1] dirBuffer; // MAX_PATH is 260