diff --git a/extra/file-picker/windows/windows.factor b/extra/file-picker/windows/windows.factor index d8a9dfacb6..528a8bfa60 100644 --- a/extra/file-picker/windows/windows.factor +++ b/extra/file-picker/windows/windows.factor @@ -1 +1,69 @@ +USING: file-picker windows.shell32 windows.types ; IN: file-picker.windows + +LIBRARY: shell32 + +TYPEDEF: void* PIDLIST_ABSOLUTE +TYPEDEF: void* BFFCALLBACK + +FUNCTION: HRESULT SHGetFolderLocation ( + HWND hwndOwner, + int nFolder, + HANDLE hToken, + DWORD dwReserved, + PIDLIST_ABSOLUTE* ppidl +) ; + +STRUCT: BROWSEINFO + { hwndOwner HWND } + { pidlRoot PCIDLIST_ABSOLUTE } + { pszDisplayName LPTSTR } + { lpszTitle LPCTSTR } + { ulFlags UINT } + { lpfn BFFCALLBACK } + { lParam LPARAM } + { iImage int } +} ; + +CONSTANT: BIF_RETURNONLYFSDIRS 0x00000001 +CONSTANT: BIF_DONTGOBELOWDOMAIN 0x00000002 +CONSTANT: BIF_STATUSTEXT 0x00000004 +CONSTANT: BIF_RETURNFSANCESTORS 0x00000008 +CONSTANT: BIF_EDITBOX 0x00000010 +CONSTANT: BIF_VALIDATE 0x00000020 +CONSTANT: BIF_NEWDIALOGSTYLE 0x00000040 +CONSTANT: BIF_BROWSEINCLUDEURLS 0x00000080 +CONSTANT: BIF_USENEWUI flags{ BIF_EDITBOX BIF_NEWDIALOGSTYLE } +CONSTANT: BIF_UAHINT 0x00000100 +CONSTANT: BIF_NONEWFOLDERBUTTON 0x00000200 +CONSTANT: BIF_NOTRANSLATETARGETS 0x00000400 +CONSTANT: BIF_BROWSEFORCOMPUTER 0x00001000 +CONSTANT: BIF_BROWSEFORPRINTER 0x00002000 +CONSTANT: BIF_BROWSEINCLUDEFILES 0x00004000 +CONSTANT: BIF_SHAREABLE 0x00008000 +CONSTANT: BIF_BROWSEFILEJUNCTIONS 0x00010000 + +FUNCTION: PIDLIST_ABSOLUTE SHBrowseForFolder ( + BROWSEINFO* lpbi +) ; + +FUNCTION: BOOL SHGetPathFromIDList ( + PCIDLIST_ABSOLUTE pidl, + LPTSTR pszPath +) ; + + +M: windows open-file-dialog + BROWSEINFO + GetDesktopWindow >>hwndOwner + 0 CSIDL_PERSONAL 0 0 SHGetFolderLocation >>pidlRoot + "Select a file or folder" >>lpszTitle + BIF_BROWSEINCLUDEFILES >>ulFlags + SHBrowseForFolder [ + void* [ SHGetPathFromIDList ] keep + alien>native-string + ] [ + f + ] if* ; + +M: windows save-file-dialog ;