Implemented processing for actions: SPI_GET/SETGRIDGRANULARITY,
[wine] / include / wine / obj_propertystorage.h
1 /*
2  * Defines the COM interfaces and APIs related to saving properties to file.
3  */
4
5 #ifndef __WINE_WINE_OBJ_PROPERTYSTORAGE_H
6 #define __WINE_WINE_OBJ_PROPERTYSTORAGE_H
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif /* defined(__cplusplus) */
11
12 /*****************************************************************************
13  * Predeclare the interfaces
14  */
15 DEFINE_OLEGUID(IID_IEnumSTATPROPSETSTG, 0x0000013bL, 0, 0);
16 typedef struct IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG,*LPENUMSTATPROPSETSTG;
17
18 DEFINE_OLEGUID(IID_IEnumSTATPROPSTG,    0x00000139L, 0, 0);
19 typedef struct IEnumSTATPROPSTG IEnumSTATPROPSTG,*LPENUMSTATPROPSTG;
20
21 DEFINE_OLEGUID(IID_IPropertySetStorage, 0x0000013aL, 0, 0);
22 typedef struct IPropertySetStorage IPropertySetStorage,*LPPROPERTYSETSTORAGE;
23
24 DEFINE_OLEGUID(IID_IPropertyStorage,    0x00000138L, 0, 0);
25 typedef struct IPropertyStorage IPropertyStorage,*LPPROPERTYSTORAGE;
26
27
28 /*****************************************************************************
29  * Predeclare the structures
30  */
31
32 typedef struct tagSTATPROPSETSTG STATPROPSETSTG;
33 typedef struct tagSTATPROPSTG STATPROPSTG;
34
35 extern const FMTID FMTID_SummaryInformation;
36 extern const FMTID FMTID_DocSummaryInformation;
37 extern const FMTID FMTID_UserDefinedProperties;
38
39 /*****************************************************************************
40  * PROPSPEC structure
41  */
42
43 /* Reserved global Property IDs */
44 #define PID_DICTIONARY  ( 0 )
45
46 #define PID_CODEPAGE    ( 0x1 )
47
48 #define PID_FIRST_USABLE        ( 0x2 )
49
50 #define PID_FIRST_NAME_DEFAULT  ( 0xfff )
51
52 #define PID_LOCALE      ( 0x80000000 )
53
54 #define PID_MODIFY_TIME ( 0x80000001 )
55
56 #define PID_SECURITY    ( 0x80000002 )
57
58 #define PID_ILLEGAL     ( 0xffffffff )
59
60 /* Property IDs for the SummaryInformation Property Set */
61
62 #define PIDSI_TITLE               0x00000002L  /* VT_LPSTR */
63 #define PIDSI_SUBJECT             0x00000003L  /* VT_LPSTR */
64 #define PIDSI_AUTHOR              0x00000004L  /* VT_LPSTR */
65 #define PIDSI_KEYWORDS            0x00000005L  /* VT_LPSTR */
66 #define PIDSI_COMMENTS            0x00000006L  /* VT_LPSTR */
67 #define PIDSI_TEMPLATE            0x00000007L  /* VT_LPSTR */
68 #define PIDSI_LASTAUTHOR          0x00000008L  /* VT_LPSTR */
69 #define PIDSI_REVNUMBER           0x00000009L  /* VT_LPSTR */
70 #define PIDSI_EDITTIME            0x0000000aL  /* VT_FILETIME (UTC) */
71 #define PIDSI_LASTPRINTED         0x0000000bL  /* VT_FILETIME (UTC) */
72 #define PIDSI_CREATE_DTM          0x0000000cL  /* VT_FILETIME (UTC) */
73 #define PIDSI_LASTSAVE_DTM        0x0000000dL  /* VT_FILETIME (UTC) */
74 #define PIDSI_PAGECOUNT           0x0000000eL  /* VT_I4 */
75 #define PIDSI_WORDCOUNT           0x0000000fL  /* VT_I4 */
76 #define PIDSI_CHARCOUNT           0x00000010L  /* VT_I4 */
77 #define PIDSI_THUMBNAIL           0x00000011L  /* VT_CF */
78 #define PIDSI_APPNAME             0x00000012L  /* VT_LPSTR */
79 #define PIDSI_DOC_SECURITY        0x00000013L  /* VT_I4 */
80 #define PRSPEC_INVALID  ( 0xffffffff )
81
82
83 #define PRSPEC_LPWSTR   ( 0 )
84 #define PRSPEC_PROPID   ( 1 )
85
86 typedef struct tagPROPSPEC
87 {
88     ULONG ulKind;
89     union 
90     {
91         PROPID propid;
92         LPOLESTR lpwstr;
93     } u;
94 } PROPSPEC;
95
96
97 /*****************************************************************************
98  * STATPROPSETSTG structure
99  */
100 /* Macros for parsing the OS Version of the Property Set Header */
101 #define PROPSETHDR_OSVER_KIND(dwOSVer)      HIWORD( (dwOSVer) )
102 #define PROPSETHDR_OSVER_MAJOR(dwOSVer)     LOBYTE(LOWORD( (dwOSVer) ))
103 #define PROPSETHDR_OSVER_MINOR(dwOSVer)     HIBYTE(LOWORD( (dwOSVer) ))
104 #define PROPSETHDR_OSVERSION_UNKNOWN        0xFFFFFFFF
105
106 struct tagSTATPROPSETSTG
107 {
108     FMTID fmtid;
109     CLSID clsid;
110     DWORD grfFlags;
111     FILETIME mtime;
112     FILETIME ctime;
113     FILETIME atime;
114     DWORD dwOSVersion;
115 };
116
117
118 /*****************************************************************************
119  * STATPROPSTG structure
120  */
121 struct tagSTATPROPSTG
122 {
123     LPOLESTR lpwstrName;
124     PROPID propid;
125     VARTYPE vt;
126 };
127
128
129 /*****************************************************************************
130  * IEnumSTATPROPSETSTG interface
131  */
132 #define ICOM_INTERFACE IEnumSTATPROPSETSTG
133 #define IEnumSTATPROPSETSTG_METHODS \
134     ICOM_METHOD3(HRESULT,Next,  ULONG,celt, STATPROPSETSTG*,rgelt, ULONG*,pceltFethed) \
135     ICOM_METHOD1(HRESULT,Skip,  ULONG,celt) \
136     ICOM_METHOD (HRESULT,Reset) \
137     ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSETSTG**,ppenum)
138 #define IEnumSTATPROPSETSTG_IMETHODS \
139                 IUnknown_IMETHODS \
140                 IEnumSTATPROPSETSTG_METHODS
141 ICOM_DEFINE(IEnumSTATPROPSETSTG,IUnknown)
142 #undef ICOM_INTERFACE
143
144 /*** IUnknown methods ***/
145 #define IEnumSTATPROPSETSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
146 #define IEnumSTATPROPSETSTG_AddRef(p)             ICOM_CALL (AddRef,p)
147 #define IEnumSTATPROPSETSTG_Release(p)            ICOM_CALL (Release,p)
148 /*** IEnumSTATPROPSETSTG methods ***/
149 #define IEnumSTATPROPSETSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
150 #define IEnumSTATPROPSETSTG_Skip(p,a)     ICOM_CALL1(Skip,p,a)
151 #define IEnumSTATPROPSETSTG_Reset(p)      ICOM_CALL (Reset,p)
152 #define IEnumSTATPROPSETSTG_Clone(p,a)    ICOM_CALL1(Clone,p,a)
153
154
155 /*****************************************************************************
156  * IEnumSTATPROPSTG interface
157  */
158 #define ICOM_INTERFACE IEnumSTATPROPSTG
159 #define IEnumSTATPROPSTG_METHODS \
160     ICOM_METHOD3(HRESULT,Next,  ULONG,celt, STATPROPSTG*,rgelt, ULONG*,pceltFethed) \
161     ICOM_METHOD1(HRESULT,Skip,  ULONG,celt) \
162     ICOM_METHOD (HRESULT,Reset) \
163     ICOM_METHOD1(HRESULT,Clone, IEnumSTATPROPSTG**,ppenum)
164 #define IEnumSTATPROPSTG_IMETHODS \
165                 IUnknown_IMETHODS \
166                 IEnumSTATPROPSTG_METHODS 
167 ICOM_DEFINE(IEnumSTATPROPSTG,IUnknown)
168 #undef ICOM_INTERFACE
169
170 /*** IUnknown methods ***/
171 #define IEnumSTATPROPSTG_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
172 #define IEnumSTATPROPSTG_AddRef(p)             ICOM_CALL (AddRef,p)
173 #define IEnumSTATPROPSTG_Release(p)            ICOM_CALL (Release,p)
174 /*** IEnumSTATPROPSTG methods ***/
175 #define IEnumSTATPROPSTG_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
176 #define IEnumSTATPROPSTG_Skip(p,a)     ICOM_CALL1(Skip,p,a)
177 #define IEnumSTATPROPSTG_Reset(p)      ICOM_CALL (Reset,p)
178 #define IEnumSTATPROPSTG_Clone(p,a)    ICOM_CALL1(Clone,p,a)
179
180
181 /*****************************************************************************
182  * IPropertySetStorage interface
183  */
184 #define ICOM_INTERFACE IPropertySetStorage
185 #define IPropertySetStorage_METHODS \
186     ICOM_METHOD5(HRESULT,Create, REFFMTID,rfmtid, const CLSID*,pclsid, DWORD,grfFlags, DWORD,grfMode, IPropertyStorage**,ppprstg) \
187     ICOM_METHOD3(HRESULT,Open,   REFFMTID,rfmtid, DWORD,grfMode, IPropertyStorage**,ppprstg) \
188     ICOM_METHOD1(HRESULT,Delete, REFFMTID,rfmtid) \
189     ICOM_METHOD1(HRESULT,Enum,   IEnumSTATPROPSETSTG**,ppenum)
190 #define IPropertySetStorage_IMETHODS \
191                 IUnknown_IMETHODS \
192                 IPropertySetStorage_METHODS
193 ICOM_DEFINE(IPropertySetStorage,IUnknown)
194 #undef ICOM_INTERFACE
195
196 /*** IUnknown methods ***/
197 #define IPropertySetStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
198 #define IPropertySetStorage_AddRef(p)             ICOM_CALL (AddRef,p)
199 #define IPropertySetStorage_Release(p)            ICOM_CALL (Release,p)
200 /*** IPropertySetStorage methods ***/
201 #define IPropertySetStorage_Create(p,a,b,c,d,e) ICOM_CALL5(Create,p,a,b,c,d,e)
202 #define IPropertySetStorage_Open(p,a,b,c)       ICOM_CALL3(Open,p,a,b,c)
203 #define IPropertySetStorage_Delete(p,a)         ICOM_CALL1(Delete,p,a)
204 #define IPropertySetStorage_Enum(p,a)           ICOM_CALL1(Enum,p,a)
205
206
207 /*****************************************************************************
208  * IPropertyStorage interface
209  */
210 typedef struct tagPROPVARIANT PROPVARIANT,*LPPROPVARIANT;
211
212 /* Flags for IPropertySetStorage::Create */
213 #define PROPSETFLAG_DEFAULT     ( 0 )
214 #define PROPSETFLAG_NONSIMPLE   ( 1 )
215 #define PROPSETFLAG_ANSI        ( 2 )
216
217 typedef struct  tagCAUB
218 {
219     ULONG cElems;
220     unsigned char *pElems;
221 } CAUB;
222
223 typedef struct tagCAI
224 {
225     ULONG cElems;
226     short *pElems;
227 } CAI;
228
229 typedef struct tagCAUI
230 {
231     ULONG cElems;
232     USHORT *pElems;
233 } CAUI;
234
235 typedef struct tagCAL
236 {
237     ULONG cElems;
238     long *pElems;
239 } CAL;
240
241 typedef struct tagCAUL
242 {
243     ULONG cElems;
244     ULONG *pElems;
245 } CAUL;
246
247 typedef struct tagCAFLT
248 {
249     ULONG cElems;
250     float *pElems;
251 } CAFLT;
252
253 typedef struct tagCADBL
254 {
255     ULONG cElems;
256     double *pElems;
257 } CADBL;
258
259 typedef struct tagCACY
260 {
261     ULONG cElems;
262     CY *pElems;
263 } CACY;
264
265 typedef struct tagCADATE
266 {
267     ULONG cElems;
268     DATE *pElems;
269 } CADATE;
270
271 typedef struct tagCABSTR
272 {
273     ULONG cElems;
274     BSTR *pElems;
275 } CABSTR;
276
277 typedef struct tagCABOOL
278 {
279     ULONG cElems;
280     VARIANT_BOOL *pElems;
281 } CABOOL;
282
283 typedef struct tagCASCODE
284 {
285     ULONG cElems;
286     SCODE *pElems;
287 } CASCODE;
288
289 typedef struct tagCAPROPVARIANT
290 {
291     ULONG cElems;
292     PROPVARIANT *pElems;
293 } CAPROPVARIANT;
294
295 typedef struct tagCAH
296 {
297     ULONG cElems;
298     LARGE_INTEGER *pElems;
299 } CAH;
300
301 typedef struct tagCAUH
302 {
303     ULONG cElems;
304     ULARGE_INTEGER *pElems;
305 } CAUH;
306
307 typedef struct tagCALPSTR
308 {
309     ULONG cElems;
310     LPSTR *pElems;
311 } CALPSTR;
312
313 typedef struct tagCALPWSTR
314 {
315     ULONG cElems;
316     LPWSTR *pElems;
317 } CALPWSTR;
318
319 typedef struct tagCAFILETIME
320 {
321     ULONG cElems;
322     FILETIME *pElems;
323 } CAFILETIME;
324
325 typedef struct tagCACLIPDATA
326 {
327     ULONG cElems;
328     CLIPDATA *pElems;
329 } CACLIPDATA;
330
331 typedef struct tagCACLSID
332 {
333     ULONG cElems;
334     CLSID *pElems;
335 } CACLSID;
336
337 struct tagPROPVARIANT
338 {
339     VARTYPE vt;
340     WORD wReserved1;
341     WORD wReserved2;
342     WORD wReserved3;
343     union 
344     {
345          /* Empty union arm */ 
346         UCHAR bVal;
347         short iVal;
348         USHORT uiVal;
349         VARIANT_BOOL boolVal;
350 #ifndef __cplusplus
351        /* FIXME: bool is reserved in C++, how can we deal with that ? */
352         _VARIANT_BOOL bool;
353 #endif
354         long lVal;
355         ULONG ulVal;
356         float fltVal;
357         SCODE scode;
358         LARGE_INTEGER hVal;
359         ULARGE_INTEGER uhVal;
360         double dblVal;
361         CY cyVal;
362         DATE date;
363         FILETIME filetime;
364         CLSID *puuid;
365         BLOB blob;
366         CLIPDATA *pclipdata;
367         IStream *pStream;
368         IStorage *pStorage;
369         BSTR bstrVal;
370         LPSTR pszVal;
371         LPWSTR pwszVal;
372         CAUB caub;
373         CAI cai;
374         CAUI caui;
375         CABOOL cabool;
376         CAL cal;
377         CAUL caul;
378         CAFLT caflt;
379         CASCODE cascode;
380         CAH cah;
381         CAUH cauh;
382         CADBL cadbl;
383         CACY cacy;
384         CADATE cadate;
385         CAFILETIME cafiletime;
386         CACLSID cauuid;
387         CACLIPDATA caclipdata;
388         CABSTR cabstr;
389         CALPSTR calpstr;
390         CALPWSTR calpwstr;
391         CAPROPVARIANT capropvar;
392     } u;
393 };
394
395
396 #define ICOM_INTERFACE IPropertyStorage
397 #define IPropertyStorage_METHODS \
398     ICOM_METHOD3(HRESULT,ReadMultiple,        ULONG,cpspec, const PROPSPEC*,rgpspec, PROPVARIANT*,rgpropvar) \
399     ICOM_METHOD4(HRESULT,WriteMultiple,       ULONG,cpspec, const PROPSPEC*,rgpspec, const PROPVARIANT*,rgpropvar, PROPID,propidNameFirst) \
400     ICOM_METHOD2(HRESULT,DeleteMultiple,      ULONG,cpspec, const PROPSPEC*,rgpspec) \
401     ICOM_METHOD2(HRESULT,ReadPropertyNames,   const PROPID*,rgpropid, LPOLESTR*,rglpwstrName) \
402     ICOM_METHOD3(HRESULT,WritePropertyNames,  ULONG,cpropid, const PROPID*,rgpropid, LPOLESTR*,rglpwstrName) \
403     ICOM_METHOD2(HRESULT,DeletePropertyNames, ULONG,cpropid, const PROPID*,rgpropid) \
404     ICOM_METHOD1(HRESULT,Commit,              DWORD,grfCommitFlags) \
405     ICOM_METHOD (HRESULT,Revert) \
406     ICOM_METHOD1(HRESULT,Enum,                IEnumSTATPROPSTG**,ppenum) \
407     ICOM_METHOD3(HRESULT,SetTimes,            const FILETIME*,pctime, const FILETIME*,patime, const FILETIME*,pmtime) \
408     ICOM_METHOD1(HRESULT,SetClass,            REFCLSID,clsid) \
409     ICOM_METHOD1(HRESULT,Stat,                STATPROPSETSTG*,pstatpsstg)
410 #define IPropertyStorage_IMETHODS \
411                 IUnknown_IMETHODS \
412                 IPropertyStorage_METHODS
413 ICOM_DEFINE(IPropertyStorage,IUnknown)
414 #undef ICOM_INTERFACE
415
416 /*** IUnknown methods ***/
417 #define IPropertyStorage_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
418 #define IPropertyStorage_AddRef(p)             ICOM_CALL (AddRef,p)
419 #define IPropertyStorage_Release(p)            ICOM_CALL (Release,p)
420 /*** IPropertyStorage methods ***/
421 #define IPropertyStorage_ReadMultiple(p,a,b,c)       ICOM_CALL3(ReadMultiple,p,a,b,c)
422 #define IPropertyStorage_WriteMultiple(p,a,b,c,d)    ICOM_CALL4(WriteMultiple,p,a,b,c,d)
423 #define IPropertyStorage_DeleteMultiple(p,a,b)       ICOM_CALL2(DeleteMultiple,p,a,b)
424 #define IPropertyStorage_ReadPropertyNames(p,a,b)    ICOM_CALL2(ReadPropertyNames,p,a,b)
425 #define IPropertyStorage_WritePropertyNames(p,a,b,c) ICOM_CALL3(WritePropertyNames,p,a,b,c)
426 #define IPropertyStorage_DeletePropertyNames(p,a,b)  ICOM_CALL2(DeletePropertyNames,p,a,b)
427 #define IPropertyStorage_Commit(p,a)                 ICOM_CALL1(Commit,p,a)
428 #define IPropertyStorage_Revert(p)                   ICOM_CALL (Revert,p)
429 #define IPropertyStorage_Enum(p,a)                   ICOM_CALL1(Enum,p,a)
430 #define IPropertyStorage_SetTimes(p,a,b,c)           ICOM_CALL3(SetTimes,p,a,b,c)
431 #define IPropertyStorage_SetClass(p,a)               ICOM_CALL1(SetClass,p,a)
432 #define IPropertyStorage_Stat(p,a)                   ICOM_CALL1(Stat,p,a)
433
434 #ifdef __cplusplus
435 } /* extern "C" */
436 #endif /* defined(__cplusplus) */
437
438 #endif /* __WINE_WINE_OBJ_PROPERTYSTORAGE_H */