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