Mercurial > projects > dynamin
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