1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 use shared::guiddef::REFGUID; 7 use shared::minwindef::{BOOL, DWORD, UINT}; 8 use shared::windef::HWND; 9 use um::propsys::{IPropertyDescriptionList, IPropertyStore}; 10 use um::shobjidl_core::{IModalWindow, IModalWindowVtbl, IShellItem, IShellItemFilter}; 11 use um::shtypes::COMDLG_FILTERSPEC; 12 use um::unknwnbase::{IUnknown, IUnknownVtbl}; 13 use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR}; 14 pub type IFileOperationProgressSink = IUnknown; // TODO 15 pub use um::shobjidl_core::{IShellItemArray, SIATTRIBFLAGS}; // FIXME: Remove these in the next major release 16 ENUM!{enum FDE_OVERWRITE_RESPONSE { 17 FDEOR_DEFAULT = 0, 18 FDEOR_ACCEPT = 1, 19 FDEOR_REFUSE = 2, 20 }} 21 ENUM!{enum FDE_SHAREVIOLATION_RESPONSE { 22 FDESVR_DEFAULT = 0, 23 FDESVR_ACCEPT = 1, 24 FDESVR_REFUSE = 2, 25 }} 26 ENUM!{enum FDAP { 27 FDAP_BOTTOM = 0, 28 FDAP_TOP = 1, 29 }} 30 RIDL!{#[uuid(0x973510db, 0x7d7f, 0x452b, 0x89, 0x75, 0x74, 0xa8, 0x58, 0x28, 0xd3, 0x54)] 31 interface IFileDialogEvents(IFileDialogEventsVtbl): IUnknown(IUnknownVtbl) { 32 fn OnFileOk( 33 pfd: *mut IFileDialog, 34 ) -> HRESULT, 35 fn OnFolderChanging( 36 pfd: *mut IFileDialog, 37 psiFolder: *mut IShellItem, 38 ) -> HRESULT, 39 fn OnFolderChange( 40 pfd: *mut IFileDialog, 41 ) -> HRESULT, 42 fn OnSelectionChange( 43 pfd: *mut IFileDialog, 44 ) -> HRESULT, 45 fn OnShareViolation( 46 pfd: *mut IFileDialog, 47 psi: *mut IShellItem, 48 pResponse: *mut FDE_SHAREVIOLATION_RESPONSE, 49 ) -> HRESULT, 50 fn OnTypeChange( 51 pfd: *mut IFileDialog, 52 ) -> HRESULT, 53 fn OnOverwrite( 54 pfd: *mut IFileDialog, 55 psi: *mut IShellItem, 56 pResponse: *mut FDE_OVERWRITE_RESPONSE, 57 ) -> HRESULT, 58 }} 59 ENUM!{enum FILEOPENDIALOGOPTIONS { 60 FOS_OVERWRITEPROMPT = 0x2, 61 FOS_STRICTFILETYPES = 0x4, 62 FOS_NOCHANGEDIR = 0x8, 63 FOS_PICKFOLDERS = 0x20, 64 FOS_FORCEFILESYSTEM = 0x40, 65 FOS_ALLNONSTORAGEITEMS = 0x80, 66 FOS_NOVALIDATE = 0x100, 67 FOS_ALLOWMULTISELECT = 0x200, 68 FOS_PATHMUSTEXIST = 0x800, 69 FOS_FILEMUSTEXIST = 0x1000, 70 FOS_CREATEPROMPT = 0x2000, 71 FOS_SHAREAWARE = 0x4000, 72 FOS_NOREADONLYRETURN = 0x8000, 73 FOS_NOTESTFILECREATE = 0x10000, 74 FOS_HIDEMRUPLACES = 0x20000, 75 FOS_HIDEPINNEDPLACES = 0x40000, 76 FOS_NODEREFERENCELINKS = 0x100000, 77 FOS_DONTADDTORECENT = 0x2000000, 78 FOS_FORCESHOWHIDDEN = 0x10000000, 79 FOS_DEFAULTNOMINIMODE = 0x20000000, 80 FOS_FORCEPREVIEWPANEON = 0x40000000, 81 FOS_SUPPORTSTREAMABLEITEMS = 0x80000000, 82 }} 83 RIDL!{#[uuid(0x42f85136, 0xdb7e, 0x439c, 0x85, 0xf1, 0xe4, 0x07, 0x5d, 0x13, 0x5f, 0xc8)] 84 interface IFileDialog(IFileDialogVtbl): IModalWindow(IModalWindowVtbl) { 85 fn SetFileTypes( 86 cFileTypes: UINT, 87 rgFilterSpec: *const COMDLG_FILTERSPEC, 88 ) -> HRESULT, 89 fn SetFileTypeIndex( 90 iFileType: UINT, 91 ) -> HRESULT, 92 fn GetFileTypeIndex( 93 piFileType: *mut UINT, 94 ) -> HRESULT, 95 fn Advise( 96 pfde: *mut IFileDialogEvents, 97 pdwCookie: *mut DWORD, 98 ) -> HRESULT, 99 fn Unadvise( 100 dwCookie: DWORD, 101 ) -> HRESULT, 102 fn SetOptions( 103 fos: FILEOPENDIALOGOPTIONS, 104 ) -> HRESULT, 105 fn GetOptions( 106 pfos: *mut FILEOPENDIALOGOPTIONS, 107 ) -> HRESULT, 108 fn SetDefaultFolder( 109 psi: *mut IShellItem, 110 ) -> HRESULT, 111 fn SetFolder( 112 psi: *mut IShellItem, 113 ) -> HRESULT, 114 fn GetFolder( 115 ppsi: *mut *mut IShellItem, 116 ) -> HRESULT, 117 fn GetCurrentSelection( 118 ppsi: *mut *mut IShellItem, 119 ) -> HRESULT, 120 fn SetFileName( 121 pszName: LPCWSTR, 122 ) -> HRESULT, 123 fn GetFileName( 124 pszName: *mut LPWSTR, 125 ) -> HRESULT, 126 fn SetTitle( 127 pszTitle: LPCWSTR, 128 ) -> HRESULT, 129 fn SetOkButtonLabel( 130 pszText: LPCWSTR, 131 ) -> HRESULT, 132 fn SetFileNameLabel( 133 pszLabel: LPCWSTR, 134 ) -> HRESULT, 135 fn GetResult( 136 ppsi: *mut *mut IShellItem, 137 ) -> HRESULT, 138 fn AddPlace( 139 psi: *mut IShellItem, 140 fdap: FDAP, 141 ) -> HRESULT, 142 fn SetDefaultExtension( 143 pszDefaultExtension: LPCWSTR, 144 ) -> HRESULT, 145 fn Close( 146 hr: HRESULT, 147 ) -> HRESULT, 148 fn SetClientGuid( 149 guid: REFGUID, 150 ) -> HRESULT, 151 fn ClearClientData() -> HRESULT, 152 fn SetFilter( 153 pFilter: *mut IShellItemFilter, 154 ) -> HRESULT, 155 }} 156 RIDL!{#[uuid(0x84bccd23, 0x5fde, 0x4cdb, 0xae, 0xa4, 0xaf, 0x64, 0xb8, 0x3d, 0x78, 0xab)] 157 interface IFileSaveDialog(IFileSaveDialogVtbl): IFileDialog(IFileDialogVtbl) { 158 fn SetSaveAsItem( 159 psi: *mut IShellItem, 160 ) -> HRESULT, 161 fn SetProperties( 162 pStore: *mut IPropertyStore, 163 ) -> HRESULT, 164 fn SetCollectedProperties( 165 pList: *mut IPropertyDescriptionList, 166 fAppendDefault: BOOL, 167 ) -> HRESULT, 168 fn GetProperties( 169 ppStore: *mut *mut IPropertyStore, 170 ) -> HRESULT, 171 fn ApplyProperties( 172 psi: *mut IShellItem, 173 pStore: *mut IPropertyStore, 174 hwnd: HWND, 175 pSink: *mut IFileOperationProgressSink, 176 ) -> HRESULT, 177 }} 178 RIDL!{#[uuid(0xd57c7288, 0xd4ad, 0x4768, 0xbe, 0x02, 0x9d, 0x96, 0x95, 0x32, 0xd9, 0x60)] 179 interface IFileOpenDialog(IFileOpenDialogVtbl): IFileDialog(IFileDialogVtbl) { 180 fn GetResults( 181 ppenum: *mut *mut IShellItemArray, 182 ) -> HRESULT, 183 fn GetSelectedItems( 184 ppsai: *mut *mut IShellItemArray, 185 ) -> HRESULT, 186 }} 187 ENUM!{enum CDCONTROLSTATEF { 188 CDCS_INACTIVE = 0, 189 CDCS_ENABLED = 0x1, 190 CDCS_VISIBLE = 0x2, 191 CDCS_ENABLEDVISIBLE = 0x3, 192 }} 193 RIDL!{#[uuid(0xe6fdd21a, 0x163f, 0x4975, 0x9c, 0x8c, 0xa6, 0x9f, 0x1b, 0xa3, 0x70, 0x34)] 194 interface IFileDialogCustomize(IFileDialogCustomizeVtbl): IUnknown(IUnknownVtbl) { 195 fn EnableOpenDropDown( 196 dwIDCtl: DWORD, 197 ) -> HRESULT, 198 fn AddMenu( 199 dwIDCtl: DWORD, 200 pszLabel: LPCWSTR, 201 ) -> HRESULT, 202 fn AddPushButton( 203 dwIDCtl: DWORD, 204 pszLabel: LPCWSTR, 205 ) -> HRESULT, 206 fn AddComboBox( 207 dwIDCtl: DWORD, 208 ) -> HRESULT, 209 fn AddRadioButtonList( 210 dwIDCtl: DWORD, 211 ) -> HRESULT, 212 fn AddCheckButton( 213 dwIDCtl: DWORD, 214 pszLabel: LPCWSTR, 215 bChecked: BOOL, 216 ) -> HRESULT, 217 fn AddEditBox( 218 dwIDCtl: DWORD, 219 pszText: LPCWSTR, 220 ) -> HRESULT, 221 fn AddSeparator( 222 dwIDCtl: DWORD, 223 ) -> HRESULT, 224 fn AddText( 225 dwIDCtl: DWORD, 226 pszText: LPCWSTR, 227 ) -> HRESULT, 228 fn SetControlLabel( 229 dwIDCtl: DWORD, 230 pszLabel: LPCWSTR, 231 ) -> HRESULT, 232 fn GetControlState( 233 dwIDCtl: DWORD, 234 pdwState: *mut CDCONTROLSTATEF, 235 ) -> HRESULT, 236 fn SetControlState( 237 dwIDCtl: DWORD, 238 dwState: CDCONTROLSTATEF, 239 ) -> HRESULT, 240 fn GetEditBoxText( 241 dwIDCtl: DWORD, 242 ppszText: *mut *mut WCHAR, 243 ) -> HRESULT, 244 fn SetEditBoxText( 245 dwIDCtl: DWORD, 246 pszText: LPCWSTR, 247 ) -> HRESULT, 248 fn GetCheckButtonState( 249 dwIDCtl: DWORD, 250 pbChecked: *mut BOOL, 251 ) -> HRESULT, 252 fn SetCheckButtonState( 253 dwIDCtl: DWORD, 254 bChecked: BOOL, 255 ) -> HRESULT, 256 fn AddControlItem( 257 dwIDCtl: DWORD, 258 dwIDItem: DWORD, 259 pszLabel: LPCWSTR, 260 ) -> HRESULT, 261 fn RemoveControlItem( 262 dwIDCtl: DWORD, 263 dwIDItem: DWORD, 264 ) -> HRESULT, 265 fn RemoveAllControlItems( 266 dwIDCtl: DWORD, 267 ) -> HRESULT, 268 fn GetControlItemState( 269 dwIDCtl: DWORD, 270 dwIDItem: DWORD, 271 pdwState: *mut CDCONTROLSTATEF, 272 ) -> HRESULT, 273 fn SetControlItemState( 274 dwIDCtl: DWORD, 275 dwIDItem: DWORD, 276 dwState: CDCONTROLSTATEF, 277 ) -> HRESULT, 278 fn GetSelectedControlItem( 279 dwIDCtl: DWORD, 280 pdwIDItem: *mut DWORD, 281 ) -> HRESULT, 282 fn SetSelectedControlItem( 283 dwIDCtl: DWORD, 284 dwIDItem: DWORD, 285 ) -> HRESULT, 286 fn StartVisualGroup( 287 dwIDCtl: DWORD, 288 pszLabel: LPCWSTR, 289 ) -> HRESULT, 290 fn EndVisualGroup() -> HRESULT, 291 fn MakeProminent( 292 dwIDCtl: DWORD, 293 ) -> HRESULT, 294 fn SetControlItemText( 295 dwIDCtl: DWORD, 296 dwIDItem: DWORD, 297 pszLabel: LPCWSTR, 298 ) -> HRESULT, 299 }} 300 RIDL!{#[uuid(0x36116642, 0xd713, 0x4b97, 0x9b, 0x83, 0x74, 0x84, 0xa9, 0xd0, 0x04, 0x33)] 301 interface IFileDialogControlEvents(IFileDialogControlEventsVtbl): IUnknown(IUnknownVtbl) { 302 fn OnItemSelected( 303 pfdc: *mut IFileDialogCustomize, 304 dwIDCtl: DWORD, 305 dwIDItem: DWORD, 306 ) -> HRESULT, 307 fn OnButtonClicked( 308 pfdc: *mut IFileDialogCustomize, 309 dwIDCtl: DWORD, 310 ) -> HRESULT, 311 fn OnCheckButtonToggled( 312 pfdc: *mut IFileDialogCustomize, 313 dwIDCtl: DWORD, 314 bChecked: BOOL, 315 ) -> HRESULT, 316 fn OnControlActivating( 317 pfdc: *mut IFileDialogCustomize, 318 dwIDCtl: DWORD, 319 ) -> HRESULT, 320 }} 321 RIDL!{#[uuid(0x61744fc7, 0x85b5, 0x4791, 0xa9, 0xb0, 0x27, 0x22, 0x76, 0x30, 0x9b, 0x13)] 322 interface IFileDialog2(IFileDialog2Vtbl): IFileDialog(IFileDialogVtbl) { 323 fn SetCancelButtonLabel( 324 pszLabel: LPCWSTR, 325 ) -> HRESULT, 326 fn SetNavigationRoot( 327 psi: IShellItem, 328 ) -> HRESULT, 329 }} 330