# HG changeset patch # User Jordan Miner # Date 1248466441 18000 # Node ID d0ce1db78819ad63424fdea2c7b019474e8bac52 # Parent 63cbfb167240c3f5c13301dcb465be210781e519 Directories can now be preselected on Windows diff -r 63cbfb167240 -r d0ce1db78819 dynamin/c/windows.d --- 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; diff -r 63cbfb167240 -r d0ce1db78819 dynamin/gui/windows_directory_dialog.d --- 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