1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_extensions.hxx"
26*b1cdbd2cSJim Jagielski #include "formmetadata.hxx"
27*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_FORMCTRLR_FORMHELPID_HRC_
28*b1cdbd2cSJim Jagielski #include "propctrlr.hrc"
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski #include "formstrings.hxx"
31*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_FORMCTRLR_PROPRESID_HRC_
32*b1cdbd2cSJim Jagielski #include "formresid.hrc"
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #include "propctrlr.hrc"
35*b1cdbd2cSJim Jagielski #include <svtools/localresaccess.hxx>
36*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
37*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #include <algorithm>
40*b1cdbd2cSJim Jagielski #include <functional>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //............................................................................
43*b1cdbd2cSJim Jagielski namespace pcr
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski //............................................................................
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::uno;
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski 	//========================================================================
50*b1cdbd2cSJim Jagielski 	//= OPropertyInfoImpl
51*b1cdbd2cSJim Jagielski 	//========================================================================
52*b1cdbd2cSJim Jagielski 	struct OPropertyInfoImpl
53*b1cdbd2cSJim Jagielski 	{
54*b1cdbd2cSJim Jagielski 		String			sName;
55*b1cdbd2cSJim Jagielski 		String			sTranslation;
56*b1cdbd2cSJim Jagielski 		rtl::OString    sHelpId;
57*b1cdbd2cSJim Jagielski 		sal_Int32       nId;
58*b1cdbd2cSJim Jagielski 		sal_uInt16      nPos;
59*b1cdbd2cSJim Jagielski         sal_uInt32      nUIFlags;
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 		OPropertyInfoImpl(
62*b1cdbd2cSJim Jagielski 						const ::rtl::OUString&		rName,
63*b1cdbd2cSJim Jagielski 						sal_Int32					_nId,
64*b1cdbd2cSJim Jagielski 						const String&				aTranslation,
65*b1cdbd2cSJim Jagielski 						sal_uInt16					nPosId,
66*b1cdbd2cSJim Jagielski                         const rtl::OString&,
67*b1cdbd2cSJim Jagielski                         sal_uInt32                  _nUIFlags);
68*b1cdbd2cSJim Jagielski 	};
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
OPropertyInfoImpl(const::rtl::OUString & _rName,sal_Int32 _nId,const String & aString,sal_uInt16 nP,const rtl::OString & sHid,sal_uInt32 _nUIFlags)71*b1cdbd2cSJim Jagielski 	OPropertyInfoImpl::OPropertyInfoImpl(const ::rtl::OUString& _rName, sal_Int32 _nId,
72*b1cdbd2cSJim Jagielski 								   const String& aString, sal_uInt16 nP, const rtl::OString& sHid, sal_uInt32 _nUIFlags)
73*b1cdbd2cSJim Jagielski 	   :sName(_rName)
74*b1cdbd2cSJim Jagielski 	   ,sTranslation(aString)
75*b1cdbd2cSJim Jagielski 	   ,sHelpId(sHid)
76*b1cdbd2cSJim Jagielski 	   ,nId(_nId)
77*b1cdbd2cSJim Jagielski 	   ,nPos(nP)
78*b1cdbd2cSJim Jagielski        ,nUIFlags(_nUIFlags)
79*b1cdbd2cSJim Jagielski 	{
80*b1cdbd2cSJim Jagielski 	}
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
83*b1cdbd2cSJim Jagielski 	// Vergleichen von PropertyInfo
84*b1cdbd2cSJim Jagielski     struct PropertyInfoLessByName : public ::std::binary_function< OPropertyInfoImpl, OPropertyInfoImpl, bool >
85*b1cdbd2cSJim Jagielski     {
operator ()pcr::PropertyInfoLessByName86*b1cdbd2cSJim Jagielski         bool operator()( const OPropertyInfoImpl& _rLHS, const OPropertyInfoImpl& _rRHS )
87*b1cdbd2cSJim Jagielski         {
88*b1cdbd2cSJim Jagielski             return _rLHS.sName.CompareTo( _rRHS.sName ) == COMPARE_LESS;
89*b1cdbd2cSJim Jagielski         }
90*b1cdbd2cSJim Jagielski     };
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 	//========================================================================
93*b1cdbd2cSJim Jagielski 	//= OPropertyInfoService
94*b1cdbd2cSJim Jagielski 	//========================================================================
95*b1cdbd2cSJim Jagielski #define DEF_INFO( ident, uinameres, helpid, flags )   \
96*b1cdbd2cSJim Jagielski     OPropertyInfoImpl( PROPERTY_##ident, PROPERTY_ID_##ident, \
97*b1cdbd2cSJim Jagielski             String( PcrRes( RID_STR_##uinameres ) ), nPos++, HID_PROP_##helpid, flags )
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski #define DEF_INFO_1( ident, uinameres, helpid, flag1 ) \
100*b1cdbd2cSJim Jagielski     DEF_INFO( ident, uinameres, helpid, PROP_FLAG_##flag1 )
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski #define DEF_INFO_2( ident, uinameres, helpid, flag1, flag2 ) \
103*b1cdbd2cSJim Jagielski     DEF_INFO( ident, uinameres, helpid, PROP_FLAG_##flag1 | PROP_FLAG_##flag2 )
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski #define DEF_INFO_3( ident, uinameres, helpid, flag1, flag2, flag3 ) \
106*b1cdbd2cSJim Jagielski     DEF_INFO( ident, uinameres, helpid, PROP_FLAG_##flag1 | PROP_FLAG_##flag2 | PROP_FLAG_##flag3 )
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski #define DEF_INFO_4( ident, uinameres, helpid, flag1, flag2, flag3, flag4 ) \
109*b1cdbd2cSJim Jagielski     DEF_INFO( ident, uinameres, helpid, PROP_FLAG_##flag1 | PROP_FLAG_##flag2 | PROP_FLAG_##flag3 | PROP_FLAG_##flag4 )
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski #define DEF_INFO_5( ident, uinameres, helpid, flag1, flag2, flag3, flag4, flag5 ) \
112*b1cdbd2cSJim Jagielski     DEF_INFO( ident, uinameres, helpid, PROP_FLAG_##flag1 | PROP_FLAG_##flag2 | PROP_FLAG_##flag3 | PROP_FLAG_##flag4 | PROP_FLAG_##flag5 )
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski     sal_uInt16				OPropertyInfoService::s_nCount = 0;
115*b1cdbd2cSJim Jagielski 	OPropertyInfoImpl*		OPropertyInfoService::s_pPropertyInfos = NULL;
116*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyInfo()117*b1cdbd2cSJim Jagielski 	const OPropertyInfoImpl* OPropertyInfoService::getPropertyInfo()
118*b1cdbd2cSJim Jagielski 	{
119*b1cdbd2cSJim Jagielski 		if ( s_pPropertyInfos )
120*b1cdbd2cSJim Jagielski             return s_pPropertyInfos;
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 		PcrClient aResourceAccess;
123*b1cdbd2cSJim Jagielski 		// this ensures that we have our resource file loaded
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 		sal_uInt16 nPos = 1;
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski         static OPropertyInfoImpl aPropertyInfos[] =
128*b1cdbd2cSJim Jagielski 		{
129*b1cdbd2cSJim Jagielski         /*
130*b1cdbd2cSJim Jagielski         DEF_INFO_?( propname and id,   resoure id,         help id,           flags ),
131*b1cdbd2cSJim Jagielski         */
132*b1cdbd2cSJim Jagielski         DEF_INFO_3( NAME,              NAME,               NAME,              FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
133*b1cdbd2cSJim Jagielski         DEF_INFO_2( TITLE,             TITLE,              TITLE,             FORM_VISIBLE, DIALOG_VISIBLE ),
134*b1cdbd2cSJim Jagielski         DEF_INFO_3( LABEL,             LABEL,              LABEL,             FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
135*b1cdbd2cSJim Jagielski         DEF_INFO_2( CONTROLLABEL,      LABELCONTROL,       CONTROLLABEL,      FORM_VISIBLE, COMPOSEABLE ),
136*b1cdbd2cSJim Jagielski         DEF_INFO_3( WRITING_MODE,      WRITING_MODE,       WRITING_MODE,      FORM_VISIBLE, ENUM, COMPOSEABLE ),
137*b1cdbd2cSJim Jagielski         DEF_INFO_2( TEXT,              TEXT,               TEXT,              DIALOG_VISIBLE, COMPOSEABLE ),
138*b1cdbd2cSJim Jagielski         DEF_INFO_3( MAXTEXTLEN,        MAXTEXTLEN,         MAXTEXTLEN,        FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
139*b1cdbd2cSJim Jagielski         DEF_INFO_3( EDITMASK,          EDITMASK,           EDITMASK,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
140*b1cdbd2cSJim Jagielski         DEF_INFO_3( LITERALMASK,       LITERALMASK,        LITERALMASK,       FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
141*b1cdbd2cSJim Jagielski         DEF_INFO_3( STRICTFORMAT,      STRICTFORMAT,       STRICTFORMAT,      FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
142*b1cdbd2cSJim Jagielski         DEF_INFO_3( ENABLED,           ENABLED,            ENABLED,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
143*b1cdbd2cSJim Jagielski         DEF_INFO_3( ENABLE_VISIBLE,    ENABLE_VISIBLE,     ENABLE_VISIBLE,    FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
144*b1cdbd2cSJim Jagielski         DEF_INFO_3( READONLY,          READONLY,           READONLY,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
145*b1cdbd2cSJim Jagielski         DEF_INFO_3( PRINTABLE,         PRINTABLE,          PRINTABLE,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
146*b1cdbd2cSJim Jagielski         DEF_INFO_3( STEP,              STEP,               STEP,              FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
147*b1cdbd2cSJim Jagielski         DEF_INFO_3( TABSTOP,           TABSTOP,            TABSTOP,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
148*b1cdbd2cSJim Jagielski         DEF_INFO_2( TABINDEX,          TABINDEX,           TABINDEX,          FORM_VISIBLE, DIALOG_VISIBLE ),
149*b1cdbd2cSJim Jagielski         DEF_INFO_3( WHEEL_BEHAVIOR,    WHEEL_BEHAVIOR,     WHEEL_BEHAVIOR,    FORM_VISIBLE, ENUM, COMPOSEABLE ),
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski         DEF_INFO_2( BOUND_CELL,        BOUND_CELL,         BOUND_CELL,        FORM_VISIBLE, DATA_PROPERTY ),
152*b1cdbd2cSJim Jagielski         DEF_INFO_3( CELL_EXCHANGE_TYPE,CELL_EXCHANGE_TYPE, CELL_EXCHANGE_TYPE,FORM_VISIBLE, DATA_PROPERTY, ENUM ),
153*b1cdbd2cSJim Jagielski         DEF_INFO_2( LIST_CELL_RANGE,   LIST_CELL_RANGE,    LIST_CELL_RANGE,   FORM_VISIBLE, DATA_PROPERTY ),
154*b1cdbd2cSJim Jagielski         DEF_INFO_3( CONTROLSOURCE,     CONTROLSOURCE,      CONTROLSOURCE,     FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
155*b1cdbd2cSJim Jagielski         DEF_INFO_3( EMPTY_IS_NULL,     EMPTY_IS_NULL,      EMPTY_IS_NULL,     FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
156*b1cdbd2cSJim Jagielski         DEF_INFO_3( INPUT_REQUIRED,    INPUT_REQUIRED,     INPUT_REQUIRED,    FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
157*b1cdbd2cSJim Jagielski         DEF_INFO_3( REFVALUE,          REFVALUE,           REFVALUE,          FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
158*b1cdbd2cSJim Jagielski         DEF_INFO_3( UNCHECKEDREFVALUE, UNCHECKEDREFVALUE,  UNCHECKEDREFVALUE, FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
159*b1cdbd2cSJim Jagielski         DEF_INFO_3( DATASOURCE,        DATASOURCE,         DATASOURCE,        FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
160*b1cdbd2cSJim Jagielski         DEF_INFO_4( COMMANDTYPE,       CURSORSOURCETYPE,   CURSORSOURCETYPE,  FORM_VISIBLE, DATA_PROPERTY, ENUM, COMPOSEABLE ),
161*b1cdbd2cSJim Jagielski         DEF_INFO_3( COMMAND,           CURSORSOURCE,       CURSORSOURCE,      FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
162*b1cdbd2cSJim Jagielski         DEF_INFO_3( ESCAPE_PROCESSING, ESCAPE_PROCESSING,  ESCAPE_PROCESSING, FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
163*b1cdbd2cSJim Jagielski         DEF_INFO_3( FILTER,            FILTER,             FILTER,            FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
164*b1cdbd2cSJim Jagielski         DEF_INFO_3( SORT,              SORT_CRITERIA,      SORT_CRITERIA,     FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
165*b1cdbd2cSJim Jagielski         DEF_INFO_2( MASTERFIELDS,      MASTERFIELDS,       MASTERFIELDS,      FORM_VISIBLE, DATA_PROPERTY ),
166*b1cdbd2cSJim Jagielski         DEF_INFO_2( DETAILFIELDS,      SLAVEFIELDS,        SLAVEFIELDS,       FORM_VISIBLE, DATA_PROPERTY ),
167*b1cdbd2cSJim Jagielski         DEF_INFO_3( ALLOWADDITIONS,    ALLOW_ADDITIONS,    ALLOW_ADDITIONS,   FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
168*b1cdbd2cSJim Jagielski         DEF_INFO_3( ALLOWEDITS,        ALLOW_EDITS,        ALLOW_EDITS,       FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
169*b1cdbd2cSJim Jagielski         DEF_INFO_3( ALLOWDELETIONS,    ALLOW_DELETIONS,    ALLOW_DELETIONS,   FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
170*b1cdbd2cSJim Jagielski         DEF_INFO_4( INSERTONLY,        DATAENTRY,          DATAENTRY,         FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE, COMPOSEABLE ),
171*b1cdbd2cSJim Jagielski         DEF_INFO_4( NAVIGATION,        NAVIGATION,         NAVIGATION,        FORM_VISIBLE, DATA_PROPERTY, ENUM, COMPOSEABLE ),
172*b1cdbd2cSJim Jagielski         DEF_INFO_4( CYCLE,             CYCLE,              CYCLE,             FORM_VISIBLE, DATA_PROPERTY, ENUM, COMPOSEABLE ),
173*b1cdbd2cSJim Jagielski         DEF_INFO_3( FILTERPROPOSAL,    FILTERPROPOSAL,     FILTERPROPOSAL,    FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
174*b1cdbd2cSJim Jagielski         DEF_INFO_4( LISTSOURCETYPE,    LISTSOURCETYPE,     LISTSOURCETYPE,    FORM_VISIBLE, DATA_PROPERTY, ENUM, COMPOSEABLE ),
175*b1cdbd2cSJim Jagielski         DEF_INFO_3( LISTSOURCE,        LISTSOURCE,         LISTSOURCE,        FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
176*b1cdbd2cSJim Jagielski         DEF_INFO_3( BOUNDCOLUMN,       BOUNDCOLUMN,        BOUNDCOLUMN,       FORM_VISIBLE, DATA_PROPERTY, COMPOSEABLE ),
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski         // <!----------------->
179*b1cdbd2cSJim Jagielski         // XML node binding
180*b1cdbd2cSJim Jagielski         DEF_INFO_2( LIST_BINDING,      LIST_BINDING,       LIST_BINDING,      FORM_VISIBLE, DATA_PROPERTY ),
181*b1cdbd2cSJim Jagielski         DEF_INFO_2( XML_DATA_MODEL,    XML_DATA_MODEL,     XML_DATA_MODEL,    FORM_VISIBLE, DATA_PROPERTY ),
182*b1cdbd2cSJim Jagielski         DEF_INFO_2( BINDING_NAME,      BINDING_NAME,       BINDING_NAME,      FORM_VISIBLE, DATA_PROPERTY ),
183*b1cdbd2cSJim Jagielski         DEF_INFO_2( BIND_EXPRESSION,   BIND_EXPRESSION,    BIND_EXPRESSION,   FORM_VISIBLE, DATA_PROPERTY ),
184*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_REQUIRED,      XSD_REQUIRED,       XSD_REQUIRED,      FORM_VISIBLE, DATA_PROPERTY ),
185*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_RELEVANT,      XSD_RELEVANT,       XSD_RELEVANT,      FORM_VISIBLE, DATA_PROPERTY ),
186*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_READONLY,      XSD_READONLY,       XSD_READONLY,      FORM_VISIBLE, DATA_PROPERTY ),
187*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_CONSTRAINT,    XSD_CONSTRAINT,     XSD_CONSTRAINT,    FORM_VISIBLE, DATA_PROPERTY ),
188*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_CALCULATION,   XSD_CALCULATION,    XSD_CALCULATION,   FORM_VISIBLE, DATA_PROPERTY ),
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski         // data type
191*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_DATA_TYPE,     XSD_DATA_TYPE,      XSD_DATA_TYPE,     FORM_VISIBLE, DATA_PROPERTY ),
192*b1cdbd2cSJim Jagielski         // data types facets
193*b1cdbd2cSJim Jagielski         //  common
194*b1cdbd2cSJim Jagielski         DEF_INFO_3( XSD_WHITESPACES,   XSD_WHITESPACES,    XSD_WHITESPACES,   FORM_VISIBLE, DATA_PROPERTY, ENUM ),
195*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_PATTERN,       XSD_PATTERN,        XSD_PATTERN,       FORM_VISIBLE, DATA_PROPERTY ),
196*b1cdbd2cSJim Jagielski         //  string
197*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_LENGTH,        XSD_LENGTH,         XSD_LENGTH,        FORM_VISIBLE, DATA_PROPERTY ),
198*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_LENGTH,    XSD_MIN_LENGTH,     XSD_MIN_LENGTH,    FORM_VISIBLE, DATA_PROPERTY ),
199*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_LENGTH,    XSD_MAX_LENGTH,     XSD_MAX_LENGTH,    FORM_VISIBLE, DATA_PROPERTY ),
200*b1cdbd2cSJim Jagielski         //  decimal
201*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_TOTAL_DIGITS,   XSD_TOTAL_DIGITS,   XSD_TOTAL_DIGITS,   FORM_VISIBLE, DATA_PROPERTY ),
202*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_FRACTION_DIGITS,XSD_FRACTION_DIGITS,XSD_FRACTION_DIGITS,FORM_VISIBLE, DATA_PROPERTY ),
203*b1cdbd2cSJim Jagielski         //  int value types (year, month, day)
204*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_INCLUSIVE_INT, XSD_MAX_INCLUSIVE, XSD_MAX_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
205*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_EXCLUSIVE_INT, XSD_MAX_EXCLUSIVE, XSD_MAX_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
206*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_INCLUSIVE_INT, XSD_MIN_INCLUSIVE, XSD_MIN_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
207*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_EXCLUSIVE_INT, XSD_MIN_EXCLUSIVE, XSD_MIN_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
208*b1cdbd2cSJim Jagielski         //  double value types (double, float, decimal)
209*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_INCLUSIVE_DOUBLE, XSD_MAX_INCLUSIVE, XSD_MAX_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
210*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_EXCLUSIVE_DOUBLE, XSD_MAX_EXCLUSIVE, XSD_MAX_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
211*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_INCLUSIVE_DOUBLE, XSD_MIN_INCLUSIVE, XSD_MIN_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
212*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_EXCLUSIVE_DOUBLE, XSD_MIN_EXCLUSIVE, XSD_MIN_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
213*b1cdbd2cSJim Jagielski         // date value type
214*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_INCLUSIVE_DATE, XSD_MAX_INCLUSIVE, XSD_MAX_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
215*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_EXCLUSIVE_DATE, XSD_MAX_EXCLUSIVE, XSD_MAX_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
216*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_INCLUSIVE_DATE, XSD_MIN_INCLUSIVE, XSD_MIN_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
217*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_EXCLUSIVE_DATE, XSD_MIN_EXCLUSIVE, XSD_MIN_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
218*b1cdbd2cSJim Jagielski         // time value type
219*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_INCLUSIVE_TIME, XSD_MAX_INCLUSIVE, XSD_MAX_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
220*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_EXCLUSIVE_TIME, XSD_MAX_EXCLUSIVE, XSD_MAX_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
221*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_INCLUSIVE_TIME, XSD_MIN_INCLUSIVE, XSD_MIN_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
222*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_EXCLUSIVE_TIME, XSD_MIN_EXCLUSIVE, XSD_MIN_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
223*b1cdbd2cSJim Jagielski         // dateTime value type
224*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_INCLUSIVE_DATE_TIME, XSD_MAX_INCLUSIVE, XSD_MAX_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
225*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MAX_EXCLUSIVE_DATE_TIME, XSD_MAX_EXCLUSIVE, XSD_MAX_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
226*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_INCLUSIVE_DATE_TIME, XSD_MIN_INCLUSIVE, XSD_MIN_INCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
227*b1cdbd2cSJim Jagielski         DEF_INFO_2( XSD_MIN_EXCLUSIVE_DATE_TIME, XSD_MIN_EXCLUSIVE, XSD_MIN_EXCLUSIVE, FORM_VISIBLE, DATA_PROPERTY ),
228*b1cdbd2cSJim Jagielski         // <!----------------->
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski         DEF_INFO_2( HIDDEN_VALUE,      VALUE,              HIDDEN_VALUE,      FORM_VISIBLE, COMPOSEABLE ),
231*b1cdbd2cSJim Jagielski         DEF_INFO_2( VALUE,             VALUE,              VALUE,             DIALOG_VISIBLE, COMPOSEABLE ),
232*b1cdbd2cSJim Jagielski         DEF_INFO_3( VALUEMIN,          VALUEMIN,           VALUEMIN,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
233*b1cdbd2cSJim Jagielski         DEF_INFO_3( VALUEMAX,          VALUEMAX,           VALUEMAX,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
234*b1cdbd2cSJim Jagielski         DEF_INFO_3( VALUESTEP,         VALUESTEP,          VALUESTEP,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
235*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_VALUE,     DEFAULTVALUE,       DEFAULT_LONG_VALUE,FORM_VISIBLE, COMPOSEABLE ),
236*b1cdbd2cSJim Jagielski         DEF_INFO_3( DECIMAL_ACCURACY,  DECIMAL_ACCURACY,   DECIMAL_ACCURACY,  FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
237*b1cdbd2cSJim Jagielski         DEF_INFO_3( SHOWTHOUSANDSEP,   SHOWTHOUSANDSEP,    SHOWTHOUSANDSEP,   FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski         DEF_INFO_3( CURRENCYSYMBOL,    CURRENCYSYMBOL,     CURRENCYSYMBOL,    FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
240*b1cdbd2cSJim Jagielski         DEF_INFO_3( CURRSYM_POSITION,  CURRSYM_POSITION,   CURRSYM_POSITION,  FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski         DEF_INFO_2( DATE,              DATE,               DATE,              DIALOG_VISIBLE, COMPOSEABLE ),
243*b1cdbd2cSJim Jagielski         DEF_INFO_3( DATEMIN,           DATEMIN,            DATEMIN,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
244*b1cdbd2cSJim Jagielski         DEF_INFO_3( DATEMAX,           DATEMAX,            DATEMAX,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
245*b1cdbd2cSJim Jagielski         DEF_INFO_4( DATEFORMAT,        DATEFORMAT,         DATEFORMAT,        FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
246*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_DATE,      DEFAULTDATE,        DEFAULT_DATE,      FORM_VISIBLE, COMPOSEABLE ),
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski         DEF_INFO_2( TIME,              TIME,               TIME,              DIALOG_VISIBLE, COMPOSEABLE ),
249*b1cdbd2cSJim Jagielski         DEF_INFO_3( TIMEMIN,           TIMEMIN,            TIMEMIN,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
250*b1cdbd2cSJim Jagielski         DEF_INFO_3( TIMEMAX,           TIMEMAX,            TIMEMAX,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
251*b1cdbd2cSJim Jagielski         DEF_INFO_4( TIMEFORMAT,        TIMEFORMAT,         TIMEFORMAT,        FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
252*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_TIME,      DEFAULTTIME,        DEFAULT_TIME,      FORM_VISIBLE, COMPOSEABLE ),
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski         DEF_INFO_1( EFFECTIVE_VALUE,   VALUE,              VALUE,             DIALOG_VISIBLE ),
255*b1cdbd2cSJim Jagielski         DEF_INFO_3( EFFECTIVE_MIN,     VALUEMIN,           EFFECTIVEMIN,      FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
256*b1cdbd2cSJim Jagielski         DEF_INFO_3( EFFECTIVE_MAX,     VALUEMAX,           EFFECTIVEMAX,      FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
257*b1cdbd2cSJim Jagielski         DEF_INFO_2( EFFECTIVE_DEFAULT, DEFAULTVALUE,       EFFECTIVEDEFAULT,  FORM_VISIBLE, COMPOSEABLE ),
258*b1cdbd2cSJim Jagielski         DEF_INFO_3( FORMATKEY,         FORMATKEY,          FORMATKEY,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski         DEF_INFO_3( PROGRESSVALUE,     PROGRESSVALUE,      PROGRESSVALUE,     FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
261*b1cdbd2cSJim Jagielski         DEF_INFO_3( PROGRESSVALUE_MIN, PROGRESSVALUE_MIN,  PROGRESSVALUE_MIN, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
262*b1cdbd2cSJim Jagielski         DEF_INFO_3( PROGRESSVALUE_MAX, PROGRESSVALUE_MAX,  PROGRESSVALUE_MAX, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski         DEF_INFO_2( SCROLLVALUE,       SCROLLVALUE,        SCROLLVALUE,       DIALOG_VISIBLE, COMPOSEABLE ),
265*b1cdbd2cSJim Jagielski         DEF_INFO_3( SCROLLVALUE_MIN,   SCROLLVALUE_MIN,    SCROLLVALUE_MIN,   FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
266*b1cdbd2cSJim Jagielski         DEF_INFO_3( SCROLLVALUE_MAX,   SCROLLVALUE_MAX,    SCROLLVALUE_MAX,   FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
267*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_SCROLLVALUE,DEFAULT_SCROLLVALUE,DEFAULT_SCROLLVALUE,FORM_VISIBLE, COMPOSEABLE ),
268*b1cdbd2cSJim Jagielski         DEF_INFO_3( LINEINCREMENT,     LINEINCREMENT,      LINEINCREMENT,     FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
269*b1cdbd2cSJim Jagielski         DEF_INFO_3( BLOCKINCREMENT,    BLOCKINCREMENT,     BLOCKINCREMENT,    FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski         DEF_INFO_2( SPINVALUE,        VALUE,               SPINVALUE,         DIALOG_VISIBLE, COMPOSEABLE ),
272*b1cdbd2cSJim Jagielski         DEF_INFO_3( SPINVALUE_MIN,    VALUEMIN,            SPINVALUE_MIN,     FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
273*b1cdbd2cSJim Jagielski         DEF_INFO_3( SPINVALUE_MAX,    VALUEMAX,            SPINVALUE_MAX,     FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
274*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_SPINVALUE,DEFAULTVALUE,        DEFAULT_SPINVALUE, FORM_VISIBLE, COMPOSEABLE ),
275*b1cdbd2cSJim Jagielski         DEF_INFO_3( SPININCREMENT,    VALUESTEP,           SPININCREMENT,     FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski         DEF_INFO_3( SPIN,              SPIN,               SPIN,              FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
278*b1cdbd2cSJim Jagielski         DEF_INFO_3( REPEAT,            REPEAT,             REPEAT,            FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
279*b1cdbd2cSJim Jagielski         DEF_INFO_3( REPEAT_DELAY,      REPEAT_DELAY,       REPEAT_DELAY,      FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
280*b1cdbd2cSJim Jagielski         DEF_INFO_3( VISIBLESIZE,       VISIBLESIZE,        VISIBLESIZE,       FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
281*b1cdbd2cSJim Jagielski         DEF_INFO_4( ORIENTATION,       ORIENTATION,        ORIENTATION,       FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
282*b1cdbd2cSJim Jagielski         DEF_INFO_3( FOCUSONCLICK,      FOCUSONCLICK,       FOCUSONCLICK,      FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
283*b1cdbd2cSJim Jagielski         DEF_INFO_3( TOGGLE,            TOGGLE,             TOGGLE,            FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
284*b1cdbd2cSJim Jagielski         DEF_INFO_3( DEFAULT_STATE,     DEFAULT_STATE,      DEFAULT_STATE,     FORM_VISIBLE, ENUM, COMPOSEABLE ),
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski         DEF_INFO_3( TEXT_ANCHOR_TYPE,  ANCHOR_TYPE,        ANCHOR_TYPE,       FORM_VISIBLE, ENUM, COMPOSEABLE ),
287*b1cdbd2cSJim Jagielski         DEF_INFO_3( SHEET_ANCHOR_TYPE, ANCHOR_TYPE,        ANCHOR_TYPE,       FORM_VISIBLE, ENUM, COMPOSEABLE ),
288*b1cdbd2cSJim Jagielski         DEF_INFO_3( POSITIONX,         POSITIONX,          POSITIONX,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
289*b1cdbd2cSJim Jagielski         DEF_INFO_3( POSITIONY,         POSITIONY,          POSITIONY,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
290*b1cdbd2cSJim Jagielski         DEF_INFO_3( WIDTH,             WIDTH,              WIDTH,             FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
291*b1cdbd2cSJim Jagielski         DEF_INFO_3( HEIGHT,            HEIGHT,             HEIGHT,            FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski         DEF_INFO_1( LISTINDEX,         LISTINDEX,          LISTINDEX,         FORM_VISIBLE ),
294*b1cdbd2cSJim Jagielski         DEF_INFO_3( STRINGITEMLIST,    STRINGITEMLIST,     STRINGITEMLIST,    FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
295*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_TEXT,      DEFAULTTEXT,        DEFAULTVALUE,      FORM_VISIBLE, COMPOSEABLE ),
296*b1cdbd2cSJim Jagielski         DEF_INFO_3( FONT,              FONT,               FONT,              FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
297*b1cdbd2cSJim Jagielski         DEF_INFO_4( VISUALEFFECT,      VISUALEFFECT,       VISUALEFFECT,      FORM_VISIBLE, DIALOG_VISIBLE, ENUM_ONE, COMPOSEABLE ),
298*b1cdbd2cSJim Jagielski         DEF_INFO_4( ALIGN,             ALIGN,              ALIGN,             FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
299*b1cdbd2cSJim Jagielski         DEF_INFO_3( VERTICAL_ALIGN,    VERTICAL_ALIGN,     VERTICAL_ALIGN,    FORM_VISIBLE, ENUM, COMPOSEABLE ),
300*b1cdbd2cSJim Jagielski         DEF_INFO_3( ROWHEIGHT,         ROWHEIGHT,          ROWHEIGHT,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
301*b1cdbd2cSJim Jagielski         DEF_INFO_3( BACKGROUNDCOLOR,   BACKGROUNDCOLOR,    BACKGROUNDCOLOR,   FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
302*b1cdbd2cSJim Jagielski         DEF_INFO_3( SYMBOLCOLOR,       SYMBOLCOLOR,        SYMBOLCOLOR,       FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
303*b1cdbd2cSJim Jagielski         DEF_INFO_3( FILLCOLOR,         FILLCOLOR,          FILLCOLOR,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
304*b1cdbd2cSJim Jagielski         DEF_INFO_3( LINECOLOR,         LINECOLOR,          LINECOLOR,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
305*b1cdbd2cSJim Jagielski         DEF_INFO_4( BORDER,            BORDER,             BORDER,            FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
306*b1cdbd2cSJim Jagielski         DEF_INFO_3( BORDERCOLOR,       BORDERCOLOR,        BORDERCOLOR,       FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
307*b1cdbd2cSJim Jagielski         DEF_INFO_3( ICONSIZE,          ICONSIZE,           ICONSIZE,          FORM_VISIBLE, ENUM, COMPOSEABLE ),
308*b1cdbd2cSJim Jagielski         DEF_INFO_2( SHOW_POSITION,     SHOW_POSITION,      SHOW_POSITION,     FORM_VISIBLE, COMPOSEABLE ),
309*b1cdbd2cSJim Jagielski         DEF_INFO_2( SHOW_NAVIGATION,   SHOW_NAVIGATION,    SHOW_NAVIGATION,   FORM_VISIBLE, COMPOSEABLE ),
310*b1cdbd2cSJim Jagielski         DEF_INFO_2( SHOW_RECORDACTIONS,SHOW_RECORDACTIONS, SHOW_RECORDACTIONS,FORM_VISIBLE, COMPOSEABLE ),
311*b1cdbd2cSJim Jagielski         DEF_INFO_2( SHOW_FILTERSORT,   SHOW_FILTERSORT,    SHOW_FILTERSORT,   FORM_VISIBLE, COMPOSEABLE ),
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski         DEF_INFO_3( DROPDOWN,          DROPDOWN,           DROPDOWN,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
314*b1cdbd2cSJim Jagielski         DEF_INFO_3( LINECOUNT,         LINECOUNT,          LINECOUNT,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
315*b1cdbd2cSJim Jagielski         DEF_INFO_3( AUTOCOMPLETE,      AUTOCOMPLETE,       AUTOCOMPLETE,      FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
316*b1cdbd2cSJim Jagielski         DEF_INFO_3( MULTILINE,         MULTILINE,          MULTILINE,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
317*b1cdbd2cSJim Jagielski         DEF_INFO_3( WORDBREAK,         WORDBREAK,          WORDBREAK,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
318*b1cdbd2cSJim Jagielski         DEF_INFO_3( TEXTTYPE,          TEXTTYPE,           TEXTTYPE,          FORM_VISIBLE, ENUM, COMPOSEABLE ),
319*b1cdbd2cSJim Jagielski         DEF_INFO_3( LINEEND_FORMAT,    LINEEND_FORMAT,     LINEEND_FORMAT,    FORM_VISIBLE, ENUM_ONE, COMPOSEABLE ),
320*b1cdbd2cSJim Jagielski         DEF_INFO_3( MULTISELECTION,    MULTISELECTION,     MULTISELECTION,    FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
321*b1cdbd2cSJim Jagielski         DEF_INFO_4( SHOW_SCROLLBARS,   SHOW_SCROLLBARS,    SHOW_SCROLLBARS,   FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
322*b1cdbd2cSJim Jagielski         DEF_INFO_3( HSCROLL,           HSCROLL,            HSCROLL,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
323*b1cdbd2cSJim Jagielski         DEF_INFO_3( VSCROLL,           VSCROLL,            VSCROLL,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
324*b1cdbd2cSJim Jagielski         DEF_INFO_3( BUTTONTYPE,        BUTTONTYPE,         BUTTONTYPE,        FORM_VISIBLE, ENUM, COMPOSEABLE ),
325*b1cdbd2cSJim Jagielski         DEF_INFO_2( XFORMS_BUTTONTYPE, BUTTONTYPE,         BUTTONTYPE,        FORM_VISIBLE, ENUM ),
326*b1cdbd2cSJim Jagielski         DEF_INFO_1( SUBMISSION_ID,     SUBMISSION_ID,      SUBMISSION_ID,     FORM_VISIBLE ),
327*b1cdbd2cSJim Jagielski         DEF_INFO_2( PUSHBUTTONTYPE,    PUSHBUTTONTYPE,     PUSHBUTTONTYPE,    DIALOG_VISIBLE, ENUM ),
328*b1cdbd2cSJim Jagielski         DEF_INFO_2( TARGET_URL,        TARGET_URL,         TARGET_URL,        FORM_VISIBLE, COMPOSEABLE ),
329*b1cdbd2cSJim Jagielski         DEF_INFO_1( TARGET_FRAME,      TARGET_FRAME,       TARGET_FRAME,      FORM_VISIBLE ),
330*b1cdbd2cSJim Jagielski         DEF_INFO_2( SUBMIT_ACTION,     SUBMIT_ACTION,      SUBMIT_ACTION,     FORM_VISIBLE, COMPOSEABLE ),
331*b1cdbd2cSJim Jagielski         DEF_INFO_2( SUBMIT_TARGET,     SUBMIT_TARGET,      SUBMIT_TARGET,     FORM_VISIBLE, COMPOSEABLE ),
332*b1cdbd2cSJim Jagielski         DEF_INFO_3( SUBMIT_ENCODING,   SUBMIT_ENCODING,    SUBMIT_ENCODING,   FORM_VISIBLE, ENUM, COMPOSEABLE ),
333*b1cdbd2cSJim Jagielski         DEF_INFO_3( SUBMIT_METHOD,     SUBMIT_METHOD,      SUBMIT_METHOD,     FORM_VISIBLE, ENUM, COMPOSEABLE ),
334*b1cdbd2cSJim Jagielski         DEF_INFO_3( STATE,             STATE,              STATE,             DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
335*b1cdbd2cSJim Jagielski         DEF_INFO_3( DEFAULTBUTTON,     DEFAULT_BUTTON,     DEFAULT_BUTTON,    FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
336*b1cdbd2cSJim Jagielski         DEF_INFO_3( IMAGE_URL,         IMAGE_URL,          IMAGE_URL,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
337*b1cdbd2cSJim Jagielski         DEF_INFO_4( IMAGEPOSITION,     IMAGEPOSITION,      IMAGEPOSITION,     FORM_VISIBLE, DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
338*b1cdbd2cSJim Jagielski         DEF_INFO_3( SCALEIMAGE,        SCALEIMAGE,         SCALEIMAGE,        FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
339*b1cdbd2cSJim Jagielski         DEF_INFO_4( SCALE_MODE,        SCALEIMAGE,         SCALEIMAGE,        FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE, ENUM ),
340*b1cdbd2cSJim Jagielski         DEF_INFO_2( DEFAULT_SELECT_SEQ,DEFAULT_SELECT_SEQ, DEFAULT_SELECT_SEQ,FORM_VISIBLE, COMPOSEABLE ),
341*b1cdbd2cSJim Jagielski         DEF_INFO_2( SELECTEDITEMS,     SELECTEDITEMS,      SELECTEDITEMS,     DIALOG_VISIBLE, COMPOSEABLE ),
342*b1cdbd2cSJim Jagielski         DEF_INFO_3( ECHO_CHAR,         ECHO_CHAR,          ECHO_CHAR,         FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
343*b1cdbd2cSJim Jagielski         DEF_INFO_3( HIDEINACTIVESELECTION, HIDEINACTIVESELECTION, HIDEINACTIVESELECTION, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
344*b1cdbd2cSJim Jagielski         DEF_INFO_3( TRISTATE,          TRISTATE,           TRISTATE,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
345*b1cdbd2cSJim Jagielski         DEF_INFO_2( HASNAVIGATION,     NAVIGATION,         NAVIGATIONBAR,     FORM_VISIBLE, COMPOSEABLE ),
346*b1cdbd2cSJim Jagielski         DEF_INFO_2( RECORDMARKER,      RECORDMARKER,       RECORDMARKER,      FORM_VISIBLE, COMPOSEABLE ),
347*b1cdbd2cSJim Jagielski         DEF_INFO_3( TAG,               TAG,                TAG,               FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
348*b1cdbd2cSJim Jagielski         DEF_INFO_3( HELPTEXT,          HELPTEXT,           HELPTEXT,          FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
349*b1cdbd2cSJim Jagielski         DEF_INFO_3( HELPURL,           HELPURL,            HELPURL,           FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
350*b1cdbd2cSJim Jagielski 		DEF_INFO_3( SELECTION_TYPE,    SELECTION_TYPE,     SELECTION_TYPE,                  DIALOG_VISIBLE, ENUM, COMPOSEABLE ),
351*b1cdbd2cSJim Jagielski 		DEF_INFO_2( ROOT_DISPLAYED,    ROOT_DISPLAYED,     ROOT_DISPLAYED,                  DIALOG_VISIBLE, COMPOSEABLE ),
352*b1cdbd2cSJim Jagielski 		DEF_INFO_2( SHOWS_HANDLES,     SHOWS_HANDLES,      SHOWS_HANDLES,					DIALOG_VISIBLE, COMPOSEABLE ),
353*b1cdbd2cSJim Jagielski 		DEF_INFO_2( SHOWS_ROOT_HANDLES, SHOWS_ROOT_HANDLES, SHOWS_ROOT_HANDLES,				DIALOG_VISIBLE, COMPOSEABLE ),
354*b1cdbd2cSJim Jagielski 		DEF_INFO_2( EDITABLE,          EDITABLE,           EDITABLE,						DIALOG_VISIBLE, COMPOSEABLE ),
355*b1cdbd2cSJim Jagielski 		DEF_INFO_2( INVOKES_STOP_NOT_EDITING, INVOKES_STOP_NOT_EDITING, INVOKES_STOP_NOT_EDITING, DIALOG_VISIBLE, COMPOSEABLE ),
356*b1cdbd2cSJim Jagielski         DEF_INFO_2( DECORATION,        DECORATION,         DECORATION,                      DIALOG_VISIBLE, COMPOSEABLE ),
357*b1cdbd2cSJim Jagielski 		DEF_INFO_2( NOLABEL,           NOLABEL,            NOLABEL,                         DIALOG_VISIBLE, COMPOSEABLE )
358*b1cdbd2cSJim Jagielski 		};
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 		s_pPropertyInfos = aPropertyInfos;
361*b1cdbd2cSJim Jagielski 		s_nCount = sizeof(aPropertyInfos) / sizeof(OPropertyInfoImpl);
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski 		// sort
364*b1cdbd2cSJim Jagielski         ::std::sort( s_pPropertyInfos, s_pPropertyInfos + s_nCount, PropertyInfoLessByName() );
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
367*b1cdbd2cSJim Jagielski         for ( const OPropertyInfoImpl* pCheck = s_pPropertyInfos; pCheck != s_pPropertyInfos + s_nCount - 1; ++pCheck )
368*b1cdbd2cSJim Jagielski         {
369*b1cdbd2cSJim Jagielski             OSL_ENSURE( pCheck->sName != ( pCheck + 1 )->sName, "OPropertyInfoService::getPropertyInfo: duplicate entry in the table!" );
370*b1cdbd2cSJim Jagielski         }
371*b1cdbd2cSJim Jagielski #endif
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski         return s_pPropertyInfos;
374*b1cdbd2cSJim Jagielski 	}
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyId(const String & _rName) const377*b1cdbd2cSJim Jagielski 	sal_Int32 OPropertyInfoService::getPropertyId(const String& _rName) const
378*b1cdbd2cSJim Jagielski 	{
379*b1cdbd2cSJim Jagielski 		const OPropertyInfoImpl* pInfo = getPropertyInfo(_rName);
380*b1cdbd2cSJim Jagielski 		return pInfo ? pInfo->nId : -1;
381*b1cdbd2cSJim Jagielski 	}
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyName(sal_Int32 _nPropId)384*b1cdbd2cSJim Jagielski 	String OPropertyInfoService::getPropertyName( sal_Int32 _nPropId )
385*b1cdbd2cSJim Jagielski     {
386*b1cdbd2cSJim Jagielski 		const OPropertyInfoImpl* pInfo = getPropertyInfo(_nPropId);
387*b1cdbd2cSJim Jagielski 		return pInfo ? pInfo->sName : String();
388*b1cdbd2cSJim Jagielski     }
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyTranslation(sal_Int32 _nId) const391*b1cdbd2cSJim Jagielski 	String OPropertyInfoService::getPropertyTranslation(sal_Int32 _nId) const
392*b1cdbd2cSJim Jagielski 	{
393*b1cdbd2cSJim Jagielski 		const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
394*b1cdbd2cSJim Jagielski 		return (pInfo) ? pInfo->sTranslation : String();
395*b1cdbd2cSJim Jagielski 	}
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyHelpId(sal_Int32 _nId) const398*b1cdbd2cSJim Jagielski 	rtl::OString OPropertyInfoService::getPropertyHelpId(sal_Int32 _nId) const
399*b1cdbd2cSJim Jagielski 	{
400*b1cdbd2cSJim Jagielski 		const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
401*b1cdbd2cSJim Jagielski 		return (pInfo) ? pInfo->sHelpId : rtl::OString();
402*b1cdbd2cSJim Jagielski 	}
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyPos(sal_Int32 _nId) const405*b1cdbd2cSJim Jagielski 	sal_Int16 OPropertyInfoService::getPropertyPos(sal_Int32 _nId) const
406*b1cdbd2cSJim Jagielski 	{
407*b1cdbd2cSJim Jagielski 		const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
408*b1cdbd2cSJim Jagielski 		return (pInfo) ? pInfo->nPos : 0xFFFF;
409*b1cdbd2cSJim Jagielski 	}
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyUIFlags(sal_Int32 _nId) const412*b1cdbd2cSJim Jagielski 	sal_uInt32 OPropertyInfoService::getPropertyUIFlags(sal_Int32 _nId) const
413*b1cdbd2cSJim Jagielski 	{
414*b1cdbd2cSJim Jagielski 		const OPropertyInfoImpl* pInfo = getPropertyInfo(_nId);
415*b1cdbd2cSJim Jagielski 		return (pInfo) ? pInfo->nUIFlags : 0;
416*b1cdbd2cSJim Jagielski 	}
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyEnumRepresentations(sal_Int32 _nId) const419*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OUString > OPropertyInfoService::getPropertyEnumRepresentations(sal_Int32 _nId) const
420*b1cdbd2cSJim Jagielski 	{
421*b1cdbd2cSJim Jagielski         OSL_ENSURE( ( ( getPropertyUIFlags( _nId ) & PROP_FLAG_ENUM ) != 0 ) || ( _nId == PROPERTY_ID_TARGET_FRAME ),
422*b1cdbd2cSJim Jagielski             "OPropertyInfoService::getPropertyEnumRepresentations: this is no enum property!" );
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski         sal_Int16 nStringItemsResId = 0;
425*b1cdbd2cSJim Jagielski         switch ( _nId )
426*b1cdbd2cSJim Jagielski 		{
427*b1cdbd2cSJim Jagielski             case PROPERTY_ID_IMAGEPOSITION:
428*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_IMAGE_POSITION;
429*b1cdbd2cSJim Jagielski 				break;
430*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_BORDER:
431*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_BORDER_TYPE;
432*b1cdbd2cSJim Jagielski 				break;
433*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_ICONSIZE:
434*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_ICONSIZE_TYPE;
435*b1cdbd2cSJim Jagielski 				break;
436*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_COMMANDTYPE:
437*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_COMMAND_TYPE;
438*b1cdbd2cSJim Jagielski 				break;
439*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_LISTSOURCETYPE:
440*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_LISTSOURCE_TYPE;
441*b1cdbd2cSJim Jagielski 				break;
442*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_ALIGN:
443*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_ALIGNMENT;
444*b1cdbd2cSJim Jagielski 				break;
445*b1cdbd2cSJim Jagielski             case PROPERTY_ID_VERTICAL_ALIGN:
446*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_VERTICAL_ALIGN;
447*b1cdbd2cSJim Jagielski                 break;
448*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_BUTTONTYPE:
449*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_BUTTONTYPE;
450*b1cdbd2cSJim Jagielski 				break;
451*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_PUSHBUTTONTYPE:
452*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_PUSHBUTTONTYPE;
453*b1cdbd2cSJim Jagielski 				break;
454*b1cdbd2cSJim Jagielski             case PROPERTY_ID_SUBMIT_METHOD:
455*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_SUBMIT_METHOD;
456*b1cdbd2cSJim Jagielski 				break;
457*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_SUBMIT_ENCODING:
458*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_SUBMIT_ENCODING;
459*b1cdbd2cSJim Jagielski 				break;
460*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_DATEFORMAT:
461*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_DATEFORMAT_LIST;
462*b1cdbd2cSJim Jagielski 				break;
463*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_TIMEFORMAT:
464*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_TIMEFORMAT_LIST;
465*b1cdbd2cSJim Jagielski 				break;
466*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_DEFAULT_STATE:
467*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_STATE:
468*b1cdbd2cSJim Jagielski                 nStringItemsResId = RID_RSC_ENUM_CHECKED;
469*b1cdbd2cSJim Jagielski 				break;
470*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_CYCLE:
471*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_CYCLE;
472*b1cdbd2cSJim Jagielski 				break;
473*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_NAVIGATION:
474*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_NAVIGATION;
475*b1cdbd2cSJim Jagielski 				break;
476*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_TARGET_FRAME:
477*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_SUBMIT_TARGET;
478*b1cdbd2cSJim Jagielski 				break;
479*b1cdbd2cSJim Jagielski 			case PROPERTY_ID_ORIENTATION:
480*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_ORIENTATION;
481*b1cdbd2cSJim Jagielski 				break;
482*b1cdbd2cSJim Jagielski             case PROPERTY_ID_CELL_EXCHANGE_TYPE:
483*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_CELL_EXCHANGE_TYPE;
484*b1cdbd2cSJim Jagielski 				break;
485*b1cdbd2cSJim Jagielski             case PROPERTY_ID_SHOW_SCROLLBARS:
486*b1cdbd2cSJim Jagielski                 nStringItemsResId = RID_RSC_ENUM_SCROLLBARS;
487*b1cdbd2cSJim Jagielski                 break;
488*b1cdbd2cSJim Jagielski             case PROPERTY_ID_VISUALEFFECT:
489*b1cdbd2cSJim Jagielski                 nStringItemsResId = RID_RSC_ENUM_VISUALEFFECT;
490*b1cdbd2cSJim Jagielski                 break;
491*b1cdbd2cSJim Jagielski             case PROPERTY_ID_TEXTTYPE:
492*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_TEXTTYPE;
493*b1cdbd2cSJim Jagielski                 break;
494*b1cdbd2cSJim Jagielski             case PROPERTY_ID_LINEEND_FORMAT:
495*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_LINEEND_FORMAT;
496*b1cdbd2cSJim Jagielski 				break;
497*b1cdbd2cSJim Jagielski             case PROPERTY_ID_XSD_WHITESPACES:
498*b1cdbd2cSJim Jagielski                 nStringItemsResId = RID_RSC_ENUM_WHITESPACE_HANDLING;
499*b1cdbd2cSJim Jagielski                 break;
500*b1cdbd2cSJim Jagielski             case PROPERTY_ID_SELECTION_TYPE:
501*b1cdbd2cSJim Jagielski                 nStringItemsResId = RID_RSC_ENUM_SELECTION_TYPE;
502*b1cdbd2cSJim Jagielski                 break;
503*b1cdbd2cSJim Jagielski             case PROPERTY_ID_SCALE_MODE:
504*b1cdbd2cSJim Jagielski                 nStringItemsResId = RID_RSC_ENUM_SCALE_MODE;
505*b1cdbd2cSJim Jagielski                 break;
506*b1cdbd2cSJim Jagielski             case PROPERTY_ID_WRITING_MODE:
507*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_WRITING_MODE;
508*b1cdbd2cSJim Jagielski                 break;
509*b1cdbd2cSJim Jagielski             case PROPERTY_ID_WHEEL_BEHAVIOR:
510*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_WHEEL_BEHAVIOR;
511*b1cdbd2cSJim Jagielski                 break;
512*b1cdbd2cSJim Jagielski             case PROPERTY_ID_TEXT_ANCHOR_TYPE:
513*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_TEXT_ANCHOR_TYPE;
514*b1cdbd2cSJim Jagielski                 break;
515*b1cdbd2cSJim Jagielski             case PROPERTY_ID_SHEET_ANCHOR_TYPE:
516*b1cdbd2cSJim Jagielski 				nStringItemsResId = RID_RSC_ENUM_SHEET_ANCHOR_TYPE;
517*b1cdbd2cSJim Jagielski                 break;
518*b1cdbd2cSJim Jagielski             default:
519*b1cdbd2cSJim Jagielski                 OSL_ENSURE( sal_False, "OPropertyInfoService::getPropertyEnumRepresentations: unknown enum property!" );
520*b1cdbd2cSJim Jagielski                 break;
521*b1cdbd2cSJim Jagielski 		}
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski         ::std::vector< ::rtl::OUString > aReturn;
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski         if ( nStringItemsResId )
526*b1cdbd2cSJim Jagielski         {
527*b1cdbd2cSJim Jagielski             PcrRes aResId( nStringItemsResId );
528*b1cdbd2cSJim Jagielski             ::svt::OLocalResourceAccess aEnumStrings( aResId, RSC_RESOURCE );
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski             sal_Int16 i = 1;
531*b1cdbd2cSJim Jagielski             PcrRes aLocalId( i );
532*b1cdbd2cSJim Jagielski             while ( aEnumStrings.IsAvailableRes( aLocalId.SetRT( RSC_STRING ) ) )
533*b1cdbd2cSJim Jagielski             {
534*b1cdbd2cSJim Jagielski                 aReturn.push_back( String( aLocalId ) );
535*b1cdbd2cSJim Jagielski                 aLocalId = PcrRes( ++i );
536*b1cdbd2cSJim Jagielski             }
537*b1cdbd2cSJim Jagielski         }
538*b1cdbd2cSJim Jagielski 
539*b1cdbd2cSJim Jagielski 		return aReturn;
540*b1cdbd2cSJim Jagielski 	}
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
isComposeable(const::rtl::OUString & _rPropertyName) const543*b1cdbd2cSJim Jagielski     sal_Bool OPropertyInfoService::isComposeable( const ::rtl::OUString& _rPropertyName ) const
544*b1cdbd2cSJim Jagielski     {
545*b1cdbd2cSJim Jagielski         sal_Int32 nId = getPropertyId( _rPropertyName );
546*b1cdbd2cSJim Jagielski         if ( nId == -1 )
547*b1cdbd2cSJim Jagielski             return sal_False;
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski         sal_uInt32 nFlags = getPropertyUIFlags( nId );
550*b1cdbd2cSJim Jagielski         return ( nFlags & PROP_FLAG_COMPOSEABLE ) != 0;
551*b1cdbd2cSJim Jagielski     }
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyInfo(const String & _rName)554*b1cdbd2cSJim Jagielski 	const OPropertyInfoImpl* OPropertyInfoService::getPropertyInfo(const String& _rName)
555*b1cdbd2cSJim Jagielski 	{
556*b1cdbd2cSJim Jagielski 		// intialisierung
557*b1cdbd2cSJim Jagielski 		if(!s_pPropertyInfos)
558*b1cdbd2cSJim Jagielski 			getPropertyInfo();
559*b1cdbd2cSJim Jagielski 		OPropertyInfoImpl  aSearch(_rName, 0L, String(), 0, "", 0);
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski         const OPropertyInfoImpl* pInfo = ::std::lower_bound(
562*b1cdbd2cSJim Jagielski             s_pPropertyInfos, s_pPropertyInfos + s_nCount, aSearch, PropertyInfoLessByName() );
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski         if ( pInfo == s_pPropertyInfos + s_nCount )
565*b1cdbd2cSJim Jagielski             return NULL;
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski         if ( pInfo->sName != _rName )
568*b1cdbd2cSJim Jagielski             return NULL;
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski 		return pInfo;
571*b1cdbd2cSJim Jagielski 	}
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
getPropertyInfo(sal_Int32 _nId)575*b1cdbd2cSJim Jagielski 	const OPropertyInfoImpl* OPropertyInfoService::getPropertyInfo(sal_Int32 _nId)
576*b1cdbd2cSJim Jagielski 	{
577*b1cdbd2cSJim Jagielski 		// intialisierung
578*b1cdbd2cSJim Jagielski 		if(!s_pPropertyInfos)
579*b1cdbd2cSJim Jagielski 			getPropertyInfo();
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski 		// TODO: a real structure which allows quick access by name as well as by id
582*b1cdbd2cSJim Jagielski 		for (sal_uInt16 i = 0; i < s_nCount; i++)
583*b1cdbd2cSJim Jagielski 			if (s_pPropertyInfos[i].nId == _nId)
584*b1cdbd2cSJim Jagielski 				return &s_pPropertyInfos[i];
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski 		return NULL;
587*b1cdbd2cSJim Jagielski 	}
588*b1cdbd2cSJim Jagielski 
589*b1cdbd2cSJim Jagielski 	//====================================================================
590*b1cdbd2cSJim Jagielski 	//= DefaultEnumRepresentation
591*b1cdbd2cSJim Jagielski 	//====================================================================
DBG_NAME(DefaultEnumRepresentation)592*b1cdbd2cSJim Jagielski     DBG_NAME( DefaultEnumRepresentation )
593*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
594*b1cdbd2cSJim Jagielski     DefaultEnumRepresentation::DefaultEnumRepresentation( const IPropertyInfoService& _rInfo, const Type& _rType, sal_Int32 _nPropertyId )
595*b1cdbd2cSJim Jagielski         :m_refCount( 0 )
596*b1cdbd2cSJim Jagielski         ,m_rMetaData( _rInfo )
597*b1cdbd2cSJim Jagielski         ,m_aType( _rType )
598*b1cdbd2cSJim Jagielski         ,m_nPropertyId( _nPropertyId )
599*b1cdbd2cSJim Jagielski     {
600*b1cdbd2cSJim Jagielski         DBG_CTOR( DefaultEnumRepresentation, NULL );
601*b1cdbd2cSJim Jagielski     }
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
~DefaultEnumRepresentation()604*b1cdbd2cSJim Jagielski     DefaultEnumRepresentation::~DefaultEnumRepresentation()
605*b1cdbd2cSJim Jagielski     {
606*b1cdbd2cSJim Jagielski         DBG_DTOR( DefaultEnumRepresentation, NULL );
607*b1cdbd2cSJim Jagielski     }
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getDescriptions() const610*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OUString > SAL_CALL DefaultEnumRepresentation::getDescriptions() const
611*b1cdbd2cSJim Jagielski     {
612*b1cdbd2cSJim Jagielski         return m_rMetaData.getPropertyEnumRepresentations( m_nPropertyId );
613*b1cdbd2cSJim Jagielski     }
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getValueFromDescription(const::rtl::OUString & _rDescription,Any & _out_rValue) const616*b1cdbd2cSJim Jagielski     void SAL_CALL DefaultEnumRepresentation::getValueFromDescription( const ::rtl::OUString& _rDescription, Any& _out_rValue ) const
617*b1cdbd2cSJim Jagielski     {
618*b1cdbd2cSJim Jagielski         sal_uInt32  nPropertyUIFlags = m_rMetaData.getPropertyUIFlags( m_nPropertyId );
619*b1cdbd2cSJim Jagielski         ::std::vector< ::rtl::OUString > aEnumStrings = m_rMetaData.getPropertyEnumRepresentations( m_nPropertyId );
620*b1cdbd2cSJim Jagielski         ::std::vector< ::rtl::OUString >::const_iterator pos = ::std::find( aEnumStrings.begin(), aEnumStrings.end(), _rDescription );
621*b1cdbd2cSJim Jagielski         if ( pos != aEnumStrings.end() )
622*b1cdbd2cSJim Jagielski         {
623*b1cdbd2cSJim Jagielski             sal_Int32 nPos = pos - aEnumStrings.begin();
624*b1cdbd2cSJim Jagielski             if ( ( nPropertyUIFlags & PROP_FLAG_ENUM_ONE ) == PROP_FLAG_ENUM_ONE )
625*b1cdbd2cSJim Jagielski                 // enum value starting with 1
626*b1cdbd2cSJim Jagielski                 ++nPos;
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski             switch ( m_aType.getTypeClass() )
629*b1cdbd2cSJim Jagielski             {
630*b1cdbd2cSJim Jagielski                 case TypeClass_ENUM:
631*b1cdbd2cSJim Jagielski                     _out_rValue = ::cppu::int2enum( nPos, m_aType );
632*b1cdbd2cSJim Jagielski                     break;
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski                 case TypeClass_SHORT:
635*b1cdbd2cSJim Jagielski                     _out_rValue <<= (sal_Int16)nPos;
636*b1cdbd2cSJim Jagielski                     break;
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski                 case TypeClass_UNSIGNED_SHORT:
639*b1cdbd2cSJim Jagielski                     _out_rValue <<= (sal_uInt16)nPos;
640*b1cdbd2cSJim Jagielski                     break;
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski                 case TypeClass_UNSIGNED_LONG:
643*b1cdbd2cSJim Jagielski                     _out_rValue <<= (sal_uInt32)nPos;
644*b1cdbd2cSJim Jagielski                     break;
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski                 default:
647*b1cdbd2cSJim Jagielski                     _out_rValue <<= (sal_Int32)nPos;
648*b1cdbd2cSJim Jagielski                     break;
649*b1cdbd2cSJim Jagielski             }
650*b1cdbd2cSJim Jagielski         }
651*b1cdbd2cSJim Jagielski         else
652*b1cdbd2cSJim Jagielski         {
653*b1cdbd2cSJim Jagielski             DBG_ERROR( "DefaultEnumRepresentation::getValueFromDescription: could not translate the enum string!" );
654*b1cdbd2cSJim Jagielski             _out_rValue.clear();
655*b1cdbd2cSJim Jagielski         }
656*b1cdbd2cSJim Jagielski     }
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getDescriptionForValue(const Any & _rEnumValue) const659*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL DefaultEnumRepresentation::getDescriptionForValue( const Any& _rEnumValue ) const
660*b1cdbd2cSJim Jagielski     {
661*b1cdbd2cSJim Jagielski         ::rtl::OUString sReturn;
662*b1cdbd2cSJim Jagielski 		sal_Int32 nIntValue = -1;
663*b1cdbd2cSJim Jagielski 		OSL_VERIFY( ::cppu::enum2int( nIntValue, _rEnumValue ) );
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski         sal_uInt32 nUIFlags = m_rMetaData.getPropertyUIFlags( m_nPropertyId );
666*b1cdbd2cSJim Jagielski         if ( ( nUIFlags & PROP_FLAG_ENUM_ONE ) == PROP_FLAG_ENUM_ONE )
667*b1cdbd2cSJim Jagielski             // enum value starting with 1
668*b1cdbd2cSJim Jagielski             --nIntValue;
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski         ::std::vector< ::rtl::OUString > aEnumStrings = m_rMetaData.getPropertyEnumRepresentations( m_nPropertyId );
671*b1cdbd2cSJim Jagielski 		if ( ( nIntValue >= 0 ) && ( nIntValue < (sal_Int32)aEnumStrings.size() ) )
672*b1cdbd2cSJim Jagielski 		{
673*b1cdbd2cSJim Jagielski 			sReturn = aEnumStrings[ nIntValue ];
674*b1cdbd2cSJim Jagielski 		}
675*b1cdbd2cSJim Jagielski 		else
676*b1cdbd2cSJim Jagielski 		{
677*b1cdbd2cSJim Jagielski 			DBG_ERROR( "DefaultEnumRepresentation::getDescriptionForValue: could not translate an enum value" );
678*b1cdbd2cSJim Jagielski 		}
679*b1cdbd2cSJim Jagielski         return sReturn;
680*b1cdbd2cSJim Jagielski     }
681*b1cdbd2cSJim Jagielski 
682*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
acquire()683*b1cdbd2cSJim Jagielski     oslInterlockedCount SAL_CALL DefaultEnumRepresentation::acquire()
684*b1cdbd2cSJim Jagielski     {
685*b1cdbd2cSJim Jagielski         return osl_incrementInterlockedCount( &m_refCount );
686*b1cdbd2cSJim Jagielski     }
687*b1cdbd2cSJim Jagielski 
688*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
release()689*b1cdbd2cSJim Jagielski     oslInterlockedCount SAL_CALL DefaultEnumRepresentation::release()
690*b1cdbd2cSJim Jagielski     {
691*b1cdbd2cSJim Jagielski         if ( 0 == osl_decrementInterlockedCount( &m_refCount ) )
692*b1cdbd2cSJim Jagielski         {
693*b1cdbd2cSJim Jagielski            delete this;
694*b1cdbd2cSJim Jagielski            return 0;
695*b1cdbd2cSJim Jagielski         }
696*b1cdbd2cSJim Jagielski         return m_refCount;
697*b1cdbd2cSJim Jagielski     }
698*b1cdbd2cSJim Jagielski 
699*b1cdbd2cSJim Jagielski //............................................................................
700*b1cdbd2cSJim Jagielski } // namespace pcr
701*b1cdbd2cSJim Jagielski //............................................................................
702*b1cdbd2cSJim Jagielski 
703