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