1use shared::guiddef::REFGUID;
7use shared::minwindef::{BOOL, DWORD, UINT};
8use shared::windef::HWND;
9use um::propsys::{IPropertyDescriptionList, IPropertyStore};
10use um::shobjidl_core::{IModalWindow, IModalWindowVtbl, IShellItem, IShellItemFilter};
11use um::shtypes::COMDLG_FILTERSPEC;
12use um::unknwnbase::{IUnknown, IUnknownVtbl};
13use um::winnt::{HRESULT, LPCWSTR, LPWSTR, WCHAR};
14pub type IFileOperationProgressSink = IUnknown; pub use um::shobjidl_core::{IShellItemArray, SIATTRIBFLAGS}; ENUM!{enum FDE_OVERWRITE_RESPONSE {
17 FDEOR_DEFAULT = 0,
18 FDEOR_ACCEPT = 1,
19 FDEOR_REFUSE = 2,
20}}
21ENUM!{enum FDE_SHAREVIOLATION_RESPONSE {
22 FDESVR_DEFAULT = 0,
23 FDESVR_ACCEPT = 1,
24 FDESVR_REFUSE = 2,
25}}
26ENUM!{enum FDAP {
27 FDAP_BOTTOM = 0,
28 FDAP_TOP = 1,
29}}
30RIDL!{#[uuid(0x973510db, 0x7d7f, 0x452b, 0x89, 0x75, 0x74, 0xa8, 0x58, 0x28, 0xd3, 0x54)]
31interface 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}}
59ENUM!{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}}
83RIDL!{#[uuid(0x42f85136, 0xdb7e, 0x439c, 0x85, 0xf1, 0xe4, 0x07, 0x5d, 0x13, 0x5f, 0xc8)]
84interface 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}}
156RIDL!{#[uuid(0x84bccd23, 0x5fde, 0x4cdb, 0xae, 0xa4, 0xaf, 0x64, 0xb8, 0x3d, 0x78, 0xab)]
157interface 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}}
178RIDL!{#[uuid(0xd57c7288, 0xd4ad, 0x4768, 0xbe, 0x02, 0x9d, 0x96, 0x95, 0x32, 0xd9, 0x60)]
179interface 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}}
187ENUM!{enum CDCONTROLSTATEF {
188 CDCS_INACTIVE = 0,
189 CDCS_ENABLED = 0x1,
190 CDCS_VISIBLE = 0x2,
191 CDCS_ENABLEDVISIBLE = 0x3,
192}}
193RIDL!{#[uuid(0xe6fdd21a, 0x163f, 0x4975, 0x9c, 0x8c, 0xa6, 0x9f, 0x1b, 0xa3, 0x70, 0x34)]
194interface 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}}
300RIDL!{#[uuid(0x36116642, 0xd713, 0x4b97, 0x9b, 0x83, 0x74, 0x84, 0xa9, 0xd0, 0x04, 0x33)]
301interface 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}}
321RIDL!{#[uuid(0x61744fc7, 0x85b5, 0x4791, 0xa9, 0xb0, 0x27, 0x22, 0x76, 0x30, 0x9b, 0x13)]
322interface IFileDialog2(IFileDialog2Vtbl): IFileDialog(IFileDialogVtbl) {
323 fn SetCancelButtonLabel(
324 pszLabel: LPCWSTR,
325 ) -> HRESULT,
326 fn SetNavigationRoot(
327 psi: IShellItem,
328 ) -> HRESULT,
329}}