xref: /trunk/main/xmloff/source/forms/formattributes.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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 _XMLOFF_FORMATTRIBUTES_HXX_
29 #define _XMLOFF_FORMATTRIBUTES_HXX_
30 
31 #include <com/sun/star/beans/XPropertySet.hpp>
32 #include <sal/types.h>
33 #include <vos/refernce.hxx>
34 #include <comphelper/stl_types.hxx>
35 
36 class SvXMLExport;
37 struct SvXMLEnumMapEntry;
38 
39 //.........................................................................
40 namespace xmloff
41 {
42 //.........................................................................
43 
44     // flags for common control attributes
45     #define CCA_NAME                    0x00000001
46     #define CCA_SERVICE_NAME            0x00000002
47     #define CCA_BUTTON_TYPE             0x00000004
48     #define CCA_CONTROL_ID              0x00000008
49     #define CCA_CURRENT_SELECTED        0x00000010
50     #define CCA_CURRENT_VALUE           0x00000020
51     #define CCA_DISABLED                0x00000040
52     #define CCA_DROPDOWN                0x00000080
53     #define CCA_FOR                     0x00000100
54     #define CCA_IMAGE_DATA              0x00000200
55     #define CCA_LABEL                   0x00000400
56     #define CCA_MAX_LENGTH              0x00000800
57     #define CCA_PRINTABLE               0x00001000
58     #define CCA_READONLY                0x00002000
59     #define CCA_SELECTED                0x00004000
60     #define CCA_SIZE                    0x00008000
61     #define CCA_TAB_INDEX               0x00010000
62     #define CCA_TARGET_FRAME            0x00020000
63     #define CCA_TARGET_LOCATION         0x00040000
64     #define CCA_TAB_STOP                0x00080000
65     #define CCA_TITLE                   0x00100000
66     #define CCA_VALUE                   0x00200000
67     #define CCA_ORIENTATION             0x00400000
68     #define CCA_VISUAL_EFFECT           0x00800000
69     #define CCA_ENABLEVISIBLE                 0x01000000
70 
71     // flags for database control atttributes
72     #define DA_BOUND_COLUMN             0x00000001
73     #define DA_CONVERT_EMPTY            0x00000002
74     #define DA_DATA_FIELD               0x00000004
75     #define DA_LIST_SOURCE              0x00000008
76     #define DA_LIST_SOURCE_TYPE         0x00000010
77     #define DA_INPUT_REQUIRED           0x00000020
78 
79     // flags for binding related control attributes
80     #define BA_LINKED_CELL              0x00000001
81     #define BA_LIST_LINKING_TYPE        0x00000002
82     #define BA_LIST_CELL_RANGE          0x00000004
83     #define BA_XFORMS_BIND              0x00000008
84     #define BA_XFORMS_LISTBIND          0x00000010
85     #define BA_XFORMS_SUBMISSION        0x00000020
86 
87     // flags for event attributes
88     #define EA_CONTROL_EVENTS           0x00000001
89     #define EA_ON_CHANGE                0x00000002
90     #define EA_ON_CLICK                 0x00000004
91     #define EA_ON_DBLCLICK              0x00000008
92     #define EA_ON_SELECT                0x00000010
93 
94     /// attributes in the xml tag representing a form
95     enum FormAttributes
96     {
97         faName,
98         faServiceName,
99         faAction,
100         faEnctype,
101         faMethod,
102         faTargetFrame,
103         faAllowDeletes,
104         faAllowInserts,
105         faAllowUpdates,
106         faApplyFilter,
107         faCommand,
108         faCommandType,
109         faEscapeProcessing,
110         faDatasource,
111         faConnectionResource,
112         faDetailFiels,
113         faFilter,
114         faIgnoreResult,
115         faMasterFields,
116         faNavigationMode,
117         faOrder,
118         faTabbingCycle
119     };
120 
121     // any other attributes, which are special to some control types
122     #define SCA_ECHO_CHAR               0x00000001
123     #define SCA_MAX_VALUE               0x00000002
124     #define SCA_MIN_VALUE               0x00000004
125     #define SCA_VALIDATION              0x00000008
126     #define SCA_MULTI_LINE              0x00000020
127     #define SCA_AUTOMATIC_COMPLETION    0x00000080
128     #define SCA_MULTIPLE                0x00000100
129     #define SCA_DEFAULT_BUTTON          0x00000200
130     #define SCA_CURRENT_STATE           0x00000400
131     #define SCA_IS_TRISTATE             0x00000800
132     #define SCA_STATE                   0x00001000
133     #define SCA_COLUMN_STYLE_NAME       0x00002000
134     #define SCA_STEP_SIZE               0x00004000
135     #define SCA_PAGE_STEP_SIZE          0x00008000
136     #define SCA_REPEAT_DELAY            0x00010000
137     #define SCA_TOGGLE                  0x00020000
138     #define SCA_FOCUS_ON_CLICK          0x00040000
139     #define SCA_IMAGE_POSITION          0x00080000
140 
141     // attributes of the office:forms element
142     enum OfficeFormsAttributes
143     {
144         ofaAutomaticFocus,
145         ofaApplyDesignMode
146     };
147 
148     //=====================================================================
149     //= OAttributeMetaData
150     //=====================================================================
151     /** allows the translation of attribute ids into strings.
152 
153         <p>This class does not allow to connect xml attributes to property names or
154         something like that, it only deals with the xml side</p>
155     */
156     class OAttributeMetaData
157     {
158     public:
159         /** calculates the xml attribute representation of a common control attribute.
160             @param _nId
161                 the id of the attribute. Has to be one of the CCA_* constants.
162         */
163         static const sal_Char* getCommonControlAttributeName(sal_Int32 _nId);
164 
165         /** calculates the xml namespace key to use for a common control attribute
166             @param _nId
167                 the id of the attribute. Has to be one of the CCA_* constants.
168         */
169         static sal_uInt16 getCommonControlAttributeNamespace(sal_Int32 _nId);
170 
171         /** retrieves the name of an attribute of a form xml representation
172             @param  _eAttrib
173                 enum value specifying the attribute
174         */
175         static const sal_Char* getFormAttributeName(FormAttributes _eAttrib);
176 
177         /** calculates the xml namespace key to use for a attribute of a form xml representation
178             @param  _eAttrib
179                 enum value specifying the attribute
180         */
181         static sal_uInt16 getFormAttributeNamespace(FormAttributes _eAttrib);
182 
183         /** calculates the xml attribute representation of a database attribute.
184             @param _nId
185                 the id of the attribute. Has to be one of the DA_* constants.
186         */
187         static const sal_Char* getDatabaseAttributeName(sal_Int32 _nId);
188 
189         /** calculates the xml namespace key to use for a database attribute.
190             @param _nId
191                 the id of the attribute. Has to be one of the DA_* constants.
192         */
193         static sal_uInt16 getDatabaseAttributeNamespace(sal_Int32 _nId);
194 
195         /** calculates the xml attribute representation of a special attribute.
196             @param _nId
197                 the id of the attribute. Has to be one of the SCA_* constants.
198         */
199         static const sal_Char* getSpecialAttributeName(sal_Int32 _nId);
200 
201         /** calculates the xml attribute representation of a binding attribute.
202             @param _nId
203                 the id of the attribute. Has to be one of the BA_* constants.
204         */
205         static const sal_Char* getBindingAttributeName(sal_Int32 _nId);
206 
207         /** calculates the xml namespace key to use for a binding attribute.
208             @param _nId
209                 the id of the attribute. Has to be one of the BA_* constants.
210         */
211         static sal_uInt16 getBindingAttributeNamespace(sal_Int32 _nId);
212 
213         /** calculates the xml namespace key to use for a special attribute.
214             @param _nId
215                 the id of the attribute. Has to be one of the SCA_* constants.
216         */
217         static sal_uInt16 getSpecialAttributeNamespace(sal_Int32 _nId);
218 
219         /** calculates the xml attribute representation of a attribute of the office:forms element
220             @param _nId
221                 the id of the attribute
222         */
223         static const sal_Char* getOfficeFormsAttributeName(OfficeFormsAttributes _eAttrib);
224 
225         /** calculates the xml namedspace key of a attribute of the office:forms element
226             @param _nId
227                 the id of the attribute
228         */
229         static sal_uInt16 getOfficeFormsAttributeNamespace(OfficeFormsAttributes _eAttrib);
230     };
231 
232     //=====================================================================
233     //= OAttribute2Property
234     //=====================================================================
235     /** some kind of opposite to the OAttributeMetaData class. Able to translate
236         attributes into property names/types
237 
238         <p>The construction of this class is rather expensive (or at least it's initialization from outside),
239         so it should be shared</p>
240     */
241     class OAttribute2Property
242     {
243     public:
244         // TODO: maybe the following struct should be used for exports, too. In this case we would not need to
245         // store it's instances in a map, but in a vector for faster access.
246         struct AttributeAssignment
247         {
248             ::rtl::OUString                 sAttributeName;         // the attribute name
249             ::rtl::OUString                 sPropertyName;          // the property name
250             ::com::sun::star::uno::Type     aPropertyType;          // the property type
251             ::rtl::OUString                 sAttributeDefault;      // the default if the attribute is not present
252 
253             // entries which are special to some value types
254             const SvXMLEnumMapEntry*        pEnumMap;               // the enum map, if appliable
255             sal_Bool                        bInverseSemantics;      // for booleanss: attribute and property value have the same or an inverse semantics?
256 
257             AttributeAssignment() : pEnumMap(NULL), bInverseSemantics(sal_False) { }
258         };
259 
260     protected:
261         DECLARE_STL_USTRINGACCESS_MAP( AttributeAssignment, AttributeAssignments );
262         AttributeAssignments        m_aKnownProperties;
263 
264     public:
265         OAttribute2Property();
266         virtual ~OAttribute2Property();
267 
268         /** return the AttributeAssignment which corresponds to the given attribute
269 
270             @param _rAttribName
271                 the name of the attrribute
272             @return
273                 a pointer to the <type>AttributeAssignment</type> structure as requested, NULL if the attribute
274                 does not represent a property.
275         */
276         const AttributeAssignment* getAttributeTranslation(
277             const ::rtl::OUString& _rAttribName);
278 
279         /** add a attribute assignment referring to a string property to the map
280             @param _pAttributeName
281                 the name of the attrribute
282             @param _rPropertyName
283                 the name of the property assigned to the attribute
284             @param _pAttributeDefault
285                 the default value for the attribute, if any. May be NULL, in this case the default is assumed to be
286                 an empty string.
287         */
288         void    addStringProperty(
289             const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
290             const sal_Char* _pAttributeDefault = NULL);
291 
292         /** add a attribute assignment referring to a boolean property to the map
293 
294             @param _pAttributeName
295                 the name of the attrribute
296             @param _rPropertyName
297                 the name of the property assigned to the attribute
298             @param _bAttributeDefault
299                 the default value for the attribute.
300             @param _bInverseSemantics
301                 if <TRUE/>, a attribute value of <TRUE/> means a property value of <FALSE/> and vice verse.<br/>
302                 if <FALSE/>, the attribute value is used as property value directly
303         */
304         void    addBooleanProperty(
305             const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
306             const sal_Bool _bAttributeDefault, const sal_Bool _bInverseSemantics = sal_False);
307 
308         /** add a attribute assignment referring to an int16 property to the map
309 
310             @param _pAttributeName
311                 the name of the attrribute
312             @param _rPropertyName
313                 the name of the property assigned to the attribute
314             @param _nAttributeDefault
315                 the default value for the attribute.
316         */
317         void    addInt16Property(
318             const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
319             const sal_Int16 _nAttributeDefault);
320 
321         /** add a attribute assignment referring to an int32 property to the map
322 
323             @param _pAttributeName
324                 the name of the attrribute
325             @param _rPropertyName
326                 the name of the property assigned to the attribute
327             @param _nAttributeDefault
328                 the default value for the attribute.
329         */
330         void    addInt32Property(
331             const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
332             const sal_Int32 _nAttributeDefault );
333 
334         /** add a attribute assignment referring to an enum property to the map
335 
336             @param _pAttributeName
337                 the name of the attrribute
338             @param _rPropertyName
339                 the name of the property assigned to the attribute
340             @param _nAttributeDefault
341                 the default value for the attribute, as (32bit) integer
342             @param _pValueMap
343                 the map to translate strings into enum values
344             @param _pType
345                 the type of the property. May be NULL, in this case 32bit integer is assumed.
346         */
347         void    addEnumProperty(
348             const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
349             const sal_uInt16 _nAttributeDefault, const SvXMLEnumMapEntry* _pValueMap,
350             const ::com::sun::star::uno::Type* _pType = NULL);
351 
352     protected:
353         /// some common code for the various add*Property methods
354         AttributeAssignment& implAdd(
355             const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
356             const ::com::sun::star::uno::Type& _rType, const ::rtl::OUString& _rDefaultString);
357     };
358 //.........................................................................
359 }   // namespace xmloff
360 //.........................................................................
361 
362 #endif // _XMLOFF_FORMATTRIBUTES_HXX_
363 
364