KD System Rewrite:
[reactos.git] / reactos / include / schemadef.h
1 #ifndef SCHEMA_STRINGS
2
3 # ifndef SCHEMADEF_H
4 # define SCHEMADEF_H
5
6 # define SCHEMADEF_VERSION (1)
7
8 struct TMPROPINFO
9 {
10 LPCWSTR pszName;
11 SHORT sEnumVal;
12 BYTE bPrimVal;
13 };
14
15 struct TMSCHEMAINFO
16 {
17 DWORD dwSize;
18 int iSchemaDefVersion;
19 int iThemeMgrVersion;
20 int iPropCount;
21 const struct TMPROPINFO * pPropTable;
22 };
23
24 # define BEGIN_TM_SCHEMA(NAME__)
25 # define BEGIN_TM_PROPS() enum PropValues { DummyProp = 49,
26 # define BEGIN_TM_ENUM(NAME__) enum NAME__ {
27
28 # define BEGIN_TM_CLASS_PARTS(NAME__) \
29 enum NAME__##PARTS { NAME__##PartFiller0,
30
31 # define BEGIN_TM_PART_STATES(NAME__) \
32 enum NAME__##STATES { NAME__##StateFiller0,
33
34
35 # define TM_PROP(VAL__, PREFIX__, NAME__, PRIMVAL__) \
36 PREFIX__##_##NAME__ = VAL__,
37
38 # define TM_ENUM(VAL__, PREFIX__, NAME__) PREFIX__##_##NAME__ = VAL__,
39 # define TM_PART(VAL__, PREFIX__, NAME__) PREFIX__##_##NAME__ = VAL__,
40 # define TM_STATE(VAL__, PREFIX__, NAME__) PREFIX__##_##NAME__ = VAL__,
41
42 # define END_TM_CLASS_PARTS() };
43 # define END_TM_PART_STATES() };
44 # define END_TM_PROPS() };
45 # define END_TM_ENUM() };
46 # define END_TM_SCHEMA(NAME__)
47
48 # endif
49
50 # else
51
52 # undef BEGIN_TM_SCHEMA
53 # undef BEGIN_TM_PROPS
54 # undef BEGIN_TM_ENUM
55 # undef BEGIN_TM_CLASS_PARTS
56 # undef BEGIN_TM_PART_STATES
57 # undef TM_PROP
58 # undef TM_PART
59 # undef TM_STATE
60 # undef TM_ENUM
61 # undef END_TM_CLASS_PARTS
62 # undef END_TM_PART_STATES
63 # undef END_TM_PROPS
64 # undef END_TM_ENUM
65 # undef END_TM_SCHEMA
66
67 # define BEGIN_TM_SCHEMA(NAME__) static const TMPROPINFO NAME__[] = {
68 # define BEGIN_TM_PROPS()
69 # define BEGIN_TM_ENUM(NAME__) { L#NAME__, TMT_ENUMDEF, TMT_ENUMDEF },
70
71 # define BEGIN_TM_CLASS_PARTS(NAME__) \
72 { L#NAME__ L"PARTS", TMT_ENUMDEF, TMT_ENUMDEF },
73
74 # define BEGIN_TM_PART_STATES(NAME__) \
75 { L#NAME__ L"STATES", TMT_ENUMDEF, TMT_ENUMDEF },
76
77
78 # define TM_PROP(VAL__, PREFIX__, NAME__, PRIMVAL__) \
79 { L#NAME__, PREFIX__##_##NAME__, TMT_##PRIMVAL__ },
80
81 # define TM_PART(VAL__, PREFIX__, NAME__) \
82 { L#NAME__, PREFIX__##_##NAME__, TMT_ENUMVAL },
83
84 # define TM_STATE(VAL__, PREFIX__, NAME__) \
85 { L#NAME__, PREFIX__##_##NAME__, TMT_ENUMVAL },
86
87 # define TM_ENUM(VAL__, PREFIX__, NAME__) \
88 { L#NAME__, PREFIX__##_##NAME__, TMT_ENUMVAL },
89
90
91 # define END_TM_CLASS_PARTS()
92 # define END_TM_PART_STATES()
93 # define END_TM_PROPS()
94 # define END_TM_ENUM()
95 # define END_TM_SCHEMA(NAME__) \
96 }; \
97 \
98 static const TMSCHEMAINFO * GetSchemaInfo(void) \
99 { \
100 static TMSCHEMAINFO si = { sizeof(si) }; \
101 si.iSchemaDefVersion = SCHEMADEF_VERSION; \
102 si.iThemeMgrVersion = THEMEMGR_VERSION; \
103 si.iPropCount = sizeof(NAME__) / sizeof(NAME__[0]); \
104 si.pPropTable = NAME__; \
105 \
106 return &si; \
107 }
108
109 # endif
110
111 /* EOF */