winapi_ui_automation/um/
shobjidl.rs

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.
6use 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; // TODO
15pub use um::shobjidl_core::{IShellItemArray, SIATTRIBFLAGS}; // FIXME: Remove these in the next major release
16ENUM!{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}}