1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_
29 #define _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_
30 
31 #include "propertyinfo.hxx"
32 #ifndef _EXTENSIONS_PROPCTRLR_MODULEPRC_HXX_
33 #include "modulepcr.hxx"
34 #endif
35 #include "enumrepresentation.hxx"
36 #include <comphelper/composedprops.hxx>
37 
38 //............................................................................
39 namespace pcr
40 {
41 //............................................................................
42 
43 	struct OPropertyInfoImpl;
44 
45 	//========================================================================
46 	//= OPropertyInfoService
47 	//========================================================================
48 	class OPropertyInfoService
49 				:public IPropertyInfoService
50                 ,public ::comphelper::IPropertySetComposerCallback
51 				,public PcrClient
52 	{
53 	protected:
54 		static sal_uInt16				s_nCount;
55 		static OPropertyInfoImpl*		s_pPropertyInfos;
56 		// TODO: a real structure which allows quick access by name as well as by id
57 
58 	public:
59         // IPropertyInfoService
60 		virtual sal_Int32				            getPropertyId(const String& _rName) const;
61 		virtual String					            getPropertyTranslation(sal_Int32 _nId) const;
62 		virtual rtl::OString			            getPropertyHelpId(sal_Int32 _nId) const;
63 		virtual sal_Int16				            getPropertyPos(sal_Int32 _nId) const;
64         virtual sal_uInt32                          getPropertyUIFlags(sal_Int32 _nId) const;
65         virtual ::std::vector< ::rtl::OUString >    getPropertyEnumRepresentations(sal_Int32 _nId) const;
66         virtual String                              getPropertyName( sal_Int32 _nPropId );
67 
68         // IPropertySetComposerCallback
69 		virtual sal_Bool                isComposeable( const ::rtl::OUString& _rPropertyName ) const;
70 
71 	protected:
72 		static const OPropertyInfoImpl* getPropertyInfo();
73 
74 		static const OPropertyInfoImpl* getPropertyInfo(const String& _rName);
75 		static const OPropertyInfoImpl* getPropertyInfo(sal_Int32 _nId);
76 	};
77 
78 	//========================================================================
79 	//= DefaultEnumRepresentation
80 	//========================================================================
81     /** an implementation of the IPropertyEnumRepresentation
82 
83         To be used with properties which, in formmetadata.cxx, are declared as ENUM.
84     */
85     class DefaultEnumRepresentation : public IPropertyEnumRepresentation
86     {
87     private:
88         oslInterlockedCount         m_refCount;
89         const IPropertyInfoService& m_rMetaData;
90         ::com::sun::star::uno::Type m_aType;
91         const sal_Int32             m_nPropertyId;
92 
93     public:
94         /** constructs an instance
95 
96             @param _rInfo
97                 An instance implementing IPropertyInfoService. Must live at least as
98                 long as the DefaultEnumRepresentation should live.
99         */
100         DefaultEnumRepresentation( const IPropertyInfoService& _rInfo, const ::com::sun::star::uno::Type& _rType, sal_Int32 _nPropertyId );
101 
102     protected:
103         ~DefaultEnumRepresentation();
104 
105     protected:
106         // IPropertyEnumRepresentation implementqation
107         virtual ::std::vector< ::rtl::OUString >
108                                     SAL_CALL getDescriptions() const;
109         virtual void                SAL_CALL getValueFromDescription( const ::rtl::OUString& _rDescription, ::com::sun::star::uno::Any& _out_rValue ) const;
110         virtual ::rtl::OUString     SAL_CALL getDescriptionForValue( const ::com::sun::star::uno::Any& _rEnumValue ) const;
111 
112         // IReference implementqation
113         virtual oslInterlockedCount SAL_CALL acquire();
114         virtual oslInterlockedCount SAL_CALL release();
115 
116     private:
117         DefaultEnumRepresentation();                                                // never implemented
118         DefaultEnumRepresentation( const DefaultEnumRepresentation& );              // never implemented
119         DefaultEnumRepresentation& operator=( const DefaultEnumRepresentation& );   // never implemented
120     };
121 
122 	//========================================================================
123 	//= UI flags (for all browseable properties)
124 	//========================================================================
125 
126 #define PROP_FLAG_NONE              0x00000000  // no special flag
127 #define PROP_FLAG_FORM_VISIBLE      0x00000001  // the property is visible when inspecting a form object
128 #define PROP_FLAG_DIALOG_VISIBLE    0x00000002  // the property is visible when inspecting a dialog object
129 #define PROP_FLAG_DATA_PROPERTY     0x00000004  // the property is to appear on the "Data" page
130 #define PROP_FLAG_ENUM              0x00000020  // the property is some kind of enum property, i.e. its
131                                                 // value is chosen from a fixed list of possible values
132 #define PROP_FLAG_ENUM_ONE          0x00000060  // the property is an enum property starting with 1
133                                                 //  (note that this includes PROP_FLAG_ENUM)
134 #define PROP_FLAG_COMPOSEABLE       0x00000080  // the property is "composeable", i.e. an intersection of property
135                                                 //  sets should expose it, if all elements do
136 #define PROP_FLAG_EXPERIMENTAL      0x00000100  // the property is experimental, i.e. should not appear in the
137                                                 // UI, unless experimental properties are enabled by a configuraiton
138                                                 // option
139 
140 	//========================================================================
141 	//= property ids (for all browseable properties)
142 	//========================================================================
143 
144 	#define PROPERTY_ID_NAME				  1
145 	#define PROPERTY_ID_LABEL				  2
146 	#define PROPERTY_ID_CONTROLLABEL		  3
147 	#define PROPERTY_ID_MAXTEXTLEN			  4
148 	#define PROPERTY_ID_EDITMASK			  5
149 	#define PROPERTY_ID_LITERALMASK			  6
150 	#define PROPERTY_ID_STRICTFORMAT		  7
151 	#define PROPERTY_ID_ENABLED			  	  8
152 	#define PROPERTY_ID_READONLY			  9
153 	#define PROPERTY_ID_PRINTABLE			 10
154 	#define PROPERTY_ID_CONTROLSOURCE		 11
155 	#define PROPERTY_ID_TABSTOP				 12
156 	#define PROPERTY_ID_TABINDEX			 13
157 	#define PROPERTY_ID_DATASOURCE			 14
158 	#define PROPERTY_ID_COMMAND				 15
159 	#define PROPERTY_ID_COMMANDTYPE			 16
160 	#define PROPERTY_ID_FILTER               17
161 	#define PROPERTY_ID_SORT				 18
162 	#define PROPERTY_ID_INSERTONLY			 19
163 	#define PROPERTY_ID_ALLOWADDITIONS		 20
164 	#define PROPERTY_ID_ALLOWEDITS			 21
165 	#define PROPERTY_ID_ALLOWDELETIONS		 22
166 	#define PROPERTY_ID_NAVIGATION			 24
167 	#define PROPERTY_ID_CYCLE				 25
168 	#define PROPERTY_ID_HIDDEN_VALUE		 26
169 	#define PROPERTY_ID_VALUEMIN			 27
170 	#define PROPERTY_ID_VALUEMAX			 28
171 	#define PROPERTY_ID_VALUESTEP			 29
172 	#define PROPERTY_ID_DEFAULT_VALUE		 30
173 	#define PROPERTY_ID_DECIMAL_ACCURACY	 31
174 	#define PROPERTY_ID_SHOWTHOUSANDSEP		 32
175 	#define PROPERTY_ID_REFVALUE			 33
176 	#define PROPERTY_ID_CURRENCYSYMBOL		 34
177 	#define PROPERTY_ID_CURRSYM_POSITION	 35
178 	#define PROPERTY_ID_DATEMIN				 36
179 	#define PROPERTY_ID_DATEMAX				 37
180 	#define PROPERTY_ID_DATEFORMAT			 38
181     #define PROPERTY_ID_SELECTEDITEMS        39
182 	#define PROPERTY_ID_DEFAULT_DATE		 40
183 	#define PROPERTY_ID_TIMEMIN				 41
184 	#define PROPERTY_ID_TIMEMAX				 42
185 	#define PROPERTY_ID_TIMEFORMAT			 43
186 	#define PROPERTY_ID_DEFAULT_TIME		 44
187 	#define PROPERTY_ID_EFFECTIVE_MIN		 45
188 	#define PROPERTY_ID_EFFECTIVE_MAX		 46
189 	#define PROPERTY_ID_EFFECTIVE_DEFAULT	 47
190 	#define PROPERTY_ID_FORMATKEY			 48
191 	#define PROPERTY_ID_CLASSID				 50
192 	#define PROPERTY_ID_HEIGHT				 51
193 	#define PROPERTY_ID_WIDTH				 52
194 	#define PROPERTY_ID_BOUNDCOLUMN			 53
195 	#define PROPERTY_ID_LISTSOURCETYPE		 54
196 	#define PROPERTY_ID_LISTSOURCE			 55
197 	#define PROPERTY_ID_LISTINDEX			 56
198 	#define PROPERTY_ID_STRINGITEMLIST		 57
199 	#define PROPERTY_ID_DEFAULT_TEXT		 58
200 	#define PROPERTY_ID_FONT                 59
201 	#define PROPERTY_ID_ALIGN				 60
202 	#define PROPERTY_ID_ROWHEIGHT			 61
203 	#define PROPERTY_ID_BACKGROUNDCOLOR		 62
204 	#define PROPERTY_ID_FILLCOLOR			 63
205 	#define PROPERTY_ID_ESCAPE_PROCESSING	 64
206 	#define PROPERTY_ID_LINECOLOR			 65
207 	#define PROPERTY_ID_BORDER				 66
208 	#define PROPERTY_ID_DROPDOWN			 67
209 	#define PROPERTY_ID_AUTOCOMPLETE		 68
210 	#define PROPERTY_ID_LINECOUNT			 69
211     #define PROPERTY_ID_WORDBREAK            70
212 	#define PROPERTY_ID_MULTILINE			 71
213 	#define PROPERTY_ID_MULTISELECTION		 72
214     #define PROPERTY_ID_AUTOLINEBREAK        73
215 	#define PROPERTY_ID_HSCROLL				 74
216 	#define PROPERTY_ID_VSCROLL				 75
217 	#define PROPERTY_ID_SPIN				 76
218 	#define PROPERTY_ID_BUTTONTYPE			 77
219 	#define PROPERTY_ID_TARGET_URL			 78
220 	#define PROPERTY_ID_TARGET_FRAME		 79
221 	#define PROPERTY_ID_SUBMIT_ACTION		 80
222 	#define PROPERTY_ID_SUBMIT_TARGET		 81
223 	#define PROPERTY_ID_SUBMIT_METHOD		 82
224 	#define PROPERTY_ID_SUBMIT_ENCODING		 83
225 	#define PROPERTY_ID_DEFAULT_STATE		 84
226 	#define PROPERTY_ID_DEFAULTBUTTON		 85
227 	#define PROPERTY_ID_IMAGE_URL			 86
228 	#define PROPERTY_ID_DEFAULT_SELECT_SEQ	 87
229 	#define PROPERTY_ID_ECHO_CHAR			 88
230 	#define PROPERTY_ID_EMPTY_IS_NULL		 89
231 	#define PROPERTY_ID_TRISTATE			 90
232 	#define PROPERTY_ID_MASTERFIELDS		 91
233 	#define PROPERTY_ID_DETAILFIELDS		 92
234 	#define PROPERTY_ID_RECORDMARKER		 93
235 	#define PROPERTY_ID_FILTERPROPOSAL		 94
236 	#define PROPERTY_ID_TAG					 95
237 	#define PROPERTY_ID_HELPTEXT			 96
238 	#define PROPERTY_ID_HELPURL				 97
239 	#define PROPERTY_ID_HASNAVIGATION		 98
240 	#define PROPERTY_ID_POSITIONX			 99
241 	#define PROPERTY_ID_POSITIONY			 100
242 	#define PROPERTY_ID_TITLE				 101
243 	#define PROPERTY_ID_STEP				 102
244 	#define PROPERTY_ID_PROGRESSVALUE		 103
245 	#define PROPERTY_ID_PROGRESSVALUE_MIN	 104
246 	#define PROPERTY_ID_PROGRESSVALUE_MAX	 105
247 	#define PROPERTY_ID_SCROLLVALUE			 106
248 	#define PROPERTY_ID_SCROLLVALUE_MAX		 107
249 	#define PROPERTY_ID_LINEINCREMENT		 108
250 	#define PROPERTY_ID_BLOCKINCREMENT		 109
251 	#define PROPERTY_ID_VISIBLESIZE			 110
252 	#define PROPERTY_ID_ORIENTATION			 111
253 	#define PROPERTY_ID_IMAGEPOSITION        112
254 	#define PROPERTY_ID_DATE			     113
255 	#define PROPERTY_ID_STATE			     114
256 	#define PROPERTY_ID_TIME			     115
257 	#define PROPERTY_ID_VALUE			     116
258 	#define PROPERTY_ID_SCALEIMAGE		     117
259 	#define PROPERTY_ID_PUSHBUTTONTYPE	     118
260 	#define PROPERTY_ID_EFFECTIVE_VALUE 	 119
261 	#define PROPERTY_ID_TEXT        		 120
262     #define PROPERTY_ID_BOUND_CELL           121
263     #define PROPERTY_ID_LIST_CELL_RANGE      122
264     #define PROPERTY_ID_CELL_EXCHANGE_TYPE   123
265     #define PROPERTY_ID_SCROLLVALUE_MIN      124
266     #define PROPERTY_ID_DEFAULT_SCROLLVALUE  125
267     #define PROPERTY_ID_REPEAT_DELAY         126
268     #define PROPERTY_ID_SYMBOLCOLOR          127
269     #define PROPERTY_ID_SPINVALUE            128
270     #define PROPERTY_ID_SPINVALUE_MIN        129
271     #define PROPERTY_ID_SPINVALUE_MAX        130
272     #define PROPERTY_ID_DEFAULT_SPINVALUE    131
273     #define PROPERTY_ID_SPININCREMENT        132
274     #define PROPERTY_ID_REPEAT               133
275     #define PROPERTY_ID_SHOW_SCROLLBARS      134
276     #define PROPERTY_ID_ICONSIZE             135
277     #define PROPERTY_ID_SHOW_POSITION        136
278     #define PROPERTY_ID_SHOW_NAVIGATION      137
279     #define PROPERTY_ID_SHOW_RECORDACTIONS   138
280     #define PROPERTY_ID_SHOW_FILTERSORT      139
281     #define PROPERTY_ID_TEXTTYPE             140
282     #define PROPERTY_ID_LINEEND_FORMAT       141
283     #define PROPERTY_ID_TOGGLE               142
284     #define PROPERTY_ID_FOCUSONCLICK         143
285     #define PROPERTY_ID_HIDEINACTIVESELECTION 144
286     #define PROPERTY_ID_VISUALEFFECT         145
287     #define PROPERTY_ID_BORDERCOLOR          146
288     #define PROPERTY_ID_XML_DATA_MODEL       147
289     #define PROPERTY_ID_BIND_EXPRESSION      148
290     #define PROPERTY_ID_XSD_REQUIRED         149
291     #define PROPERTY_ID_XSD_RELEVANT         150
292     #define PROPERTY_ID_XSD_READONLY         151
293     #define PROPERTY_ID_XSD_CONSTRAINT       152
294     #define PROPERTY_ID_XSD_CALCULATION      153
295     #define PROPERTY_ID_XSD_DATA_TYPE        154
296     #define PROPERTY_ID_XSD_WHITESPACES      155
297     #define PROPERTY_ID_XSD_PATTERN          156
298     #define PROPERTY_ID_XSD_LENGTH           157
299     #define PROPERTY_ID_XSD_MIN_LENGTH       158
300     #define PROPERTY_ID_XSD_MAX_LENGTH       159
301     #define PROPERTY_ID_XSD_TOTAL_DIGITS     160
302     #define PROPERTY_ID_XSD_FRACTION_DIGITS  161
303     #define PROPERTY_ID_XSD_MAX_INCLUSIVE_INT        162
304     #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_INT        163
305     #define PROPERTY_ID_XSD_MIN_INCLUSIVE_INT        164
306     #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_INT        165
307     #define PROPERTY_ID_XSD_MAX_INCLUSIVE_DOUBLE     166
308     #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DOUBLE     167
309     #define PROPERTY_ID_XSD_MIN_INCLUSIVE_DOUBLE     168
310     #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DOUBLE     169
311     #define PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE       170
312     #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE       171
313     #define PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE       172
314     #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE       173
315     #define PROPERTY_ID_XSD_MAX_INCLUSIVE_TIME       174
316     #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_TIME       175
317     #define PROPERTY_ID_XSD_MIN_INCLUSIVE_TIME       176
318     #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_TIME       177
319     #define PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE_TIME  178
320     #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE_TIME  179
321     #define PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE_TIME  180
322     #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE_TIME  181
323     #define PROPERTY_ID_UNCHECKEDREFVALUE           182
324     #define PROPERTY_ID_SUBMISSION_ID               183
325     #define PROPERTY_ID_XFORMS_BUTTONTYPE           184
326     #define PROPERTY_ID_LIST_BINDING                185
327     #define PROPERTY_ID_VERTICAL_ALIGN              186
328     #define PROPERTY_ID_BINDING_NAME                187
329     #define PROPERTY_ID_DECORATION                  188
330 	#define PROPERTY_ID_SELECTION_TYPE				189
331 	#define PROPERTY_ID_ROOT_DISPLAYED				190
332 	#define PROPERTY_ID_SHOWS_HANDLES				191
333 	#define PROPERTY_ID_SHOWS_ROOT_HANDLES			192
334 	#define PROPERTY_ID_EDITABLE					193
335 	#define PROPERTY_ID_INVOKES_STOP_NOT_EDITING    194
336 	#define PROPERTY_ID_NOLABEL				        195
337     #define PROPERTY_ID_SCALE_MODE                  196
338     #define PROPERTY_ID_INPUT_REQUIRED              197
339     #define PROPERTY_ID_WRITING_MODE                198
340     #define PROPERTY_ID_ENABLE_VISIBLE              199
341     #define PROPERTY_ID_WHEEL_BEHAVIOR              200
342     #define PROPERTY_ID_TEXT_ANCHOR_TYPE            201
343     #define PROPERTY_ID_SHEET_ANCHOR_TYPE           202
344 
345 //............................................................................
346 } // namespace pcr
347 //............................................................................
348 
349 #endif // _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_
350 
351