1#![allow(non_camel_case_types, non_snake_case)]
2
3use std::marker::PhantomData;
4
5use crate::co;
6use crate::decl::*;
7use crate::kernel::{ffi_types::*, privs::*};
8
9#[repr(C)]
12pub struct COMDLG_FILTERSPEC<'a, 'b> {
13 pszName: *mut u16,
14 pszSpec: *mut u16,
15
16 _pszName: PhantomData<&'a mut u16>,
17 _pszSpec: PhantomData<&'b mut u16>,
18}
19
20impl_default!(COMDLG_FILTERSPEC, 'a, 'b);
21
22impl<'a, 'b> COMDLG_FILTERSPEC<'a, 'b> {
23 pub_fn_string_ptr_get_set!('a, pszName, set_pszName);
24 pub_fn_string_ptr_get_set!('b, pszSpec, set_pszSpec);
25}
26
27#[repr(C)]
30pub struct ITEMIDLIST {
31 pub mkid: SHITEMID,
32}
33
34#[repr(C)]
37pub struct NOTIFYICONDATA {
38 cbSize: u32,
39 pub hWnd: HWND,
40 pub uID: u32,
41 pub uFlags: co::NIF,
42 pub uCallbackMessage: co::WM,
43 pub hIcon: HICON,
44 szTip: [u16; 128],
45 pub dwState: co::NIS,
46 pub dwStateMask: co::NIS,
47 szInfo: [u16; 256],
48 pub uVersion: u32, szInfoTitle: [u16; 64],
50 pub dwInfoFlags: co::NIIF,
51 pub guidItem: GUID,
52 pub hBalloonIcon: HICON,
53}
54
55impl_default!(NOTIFYICONDATA, cbSize);
56
57impl NOTIFYICONDATA {
58 pub_fn_string_arr_get_set!(szTip, set_szTip);
59 pub_fn_string_arr_get_set!(szInfo, set_szInfo);
60 pub_fn_string_arr_get_set!(szInfoTitle, set_szInfoTitle);
61}
62
63#[repr(transparent)]
86pub struct PIDL(*mut ITEMIDLIST);
87
88impl PIDL {
89 #[must_use]
99 pub const unsafe fn from_ptr(p: *mut ITEMIDLIST) -> Self {
100 Self(p)
101 }
102
103 #[must_use]
105 pub const fn ptr(&self) -> *mut ITEMIDLIST {
106 self.0
107 }
108}
109
110#[repr(C)]
113pub struct SHFILEINFO {
114 pub hIcon: HICON,
115 pub iIcon: i32,
116 dwAttributes: u32,
117 szDisplayName: [u16; MAX_PATH],
118 szTypeName: [u16; 80],
119}
120
121impl_default!(SHFILEINFO);
122
123impl SHFILEINFO {
124 pub_fn_string_arr_get_set!(szDisplayName, set_szDisplayName);
125 pub_fn_string_arr_get_set!(szTypeName, set_szTypeName);
126}
127
128#[repr(C)]
131pub struct SHFILEOPSTRUCT<'a, 'b, 'c> {
132 pub hwnd: HWND,
133 pub wFunc: co::FO,
134 pFrom: *mut u16, pTo: *mut u16, pub fFlags: co::FOF,
137 fAnyOperationsAborted: BOOL,
138 hNameMappings: *mut std::ffi::c_void, lpszProgressTitle: *mut u16,
140
141 _pFrom: PhantomData<&'a mut u16>,
142 _pTo: PhantomData<&'b mut u16>,
143 _lpszProgressTitle: PhantomData<&'c mut u16>,
144}
145
146impl_default!(SHFILEOPSTRUCT, 'a, 'b, 'c);
147
148impl<'a, 'b, 'c> SHFILEOPSTRUCT<'a, 'b, 'c> {
149 pub_fn_bool_get_set!(fAnyOperationsAborted, set_fAnyOperationsAborted);
150
151 #[must_use]
153 pub fn pFrom(&self) -> Option<Vec<String>> {
154 unsafe { self.pFrom.as_mut().map(|p| parse_multi_z_str(p, None)) }
155 }
156
157 pub fn set_pFrom(&mut self, val: Option<&'a mut WString>) {
162 self.pFrom = val.map_or(std::ptr::null_mut(), |v| unsafe { v.as_mut_ptr() });
163 }
164
165 #[must_use]
167 pub fn pTo(&self) -> Option<Vec<String>> {
168 unsafe { self.pTo.as_mut().map(|p| parse_multi_z_str(p, None)) }
169 }
170
171 pub fn set_pTo(&mut self, val: Option<&'b mut WString>) {
176 self.pTo = val.map_or(std::ptr::null_mut(), |v| unsafe { v.as_mut_ptr() });
177 }
178
179 pub_fn_string_ptr_get_set!('c, lpszProgressTitle, set_lpszProgressTitle);
180}
181
182#[repr(C, packed)]
185pub struct SHITEMID {
186 cb: u16,
187 abID: [u8; 1],
188}
189
190#[repr(C)]
193pub struct SHSTOCKICONINFO {
194 cbSize: u32,
195 pub hIcon: HICON,
196 pub iSysImageIndex: i32,
197 pub iIcon: i32,
198 szPath: [u16; MAX_PATH],
199}
200
201impl_default!(SHSTOCKICONINFO, cbSize);
202
203impl SHSTOCKICONINFO {
204 pub_fn_string_arr_get_set!(szPath, get_szPath);
205}