source: trunk/include/win/wine/obj_propertystorage.h

Last change on this file was 10435, checked in by bird, 22 years ago

#682: Drag & Drop fixes.

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