/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_
#define _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_

#include "propertyinfo.hxx"
#ifndef _EXTENSIONS_PROPCTRLR_MODULEPRC_HXX_
#include "modulepcr.hxx"
#endif
#include "enumrepresentation.hxx"
#include <comphelper/composedprops.hxx>

//............................................................................
namespace pcr
{
//............................................................................

	struct OPropertyInfoImpl;

	//========================================================================
	//= OPropertyInfoService
	//========================================================================
	class OPropertyInfoService
				:public IPropertyInfoService
                ,public ::comphelper::IPropertySetComposerCallback
				,public PcrClient
	{
	protected:
		static sal_uInt16				s_nCount;
		static OPropertyInfoImpl*		s_pPropertyInfos;
		// TODO: a real structure which allows quick access by name as well as by id

	public:
        // IPropertyInfoService
		virtual sal_Int32				            getPropertyId(const String& _rName) const;
		virtual String					            getPropertyTranslation(sal_Int32 _nId) const;
		virtual rtl::OString			            getPropertyHelpId(sal_Int32 _nId) const;
		virtual sal_Int16				            getPropertyPos(sal_Int32 _nId) const;
        virtual sal_uInt32                          getPropertyUIFlags(sal_Int32 _nId) const;
        virtual ::std::vector< ::rtl::OUString >    getPropertyEnumRepresentations(sal_Int32 _nId) const;
        virtual String                              getPropertyName( sal_Int32 _nPropId );

        // IPropertySetComposerCallback
		virtual sal_Bool                isComposeable( const ::rtl::OUString& _rPropertyName ) const;

	protected:
		static const OPropertyInfoImpl* getPropertyInfo();

		static const OPropertyInfoImpl* getPropertyInfo(const String& _rName);
		static const OPropertyInfoImpl* getPropertyInfo(sal_Int32 _nId);
	};

	//========================================================================
	//= DefaultEnumRepresentation
	//========================================================================
    /** an implementation of the IPropertyEnumRepresentation

        To be used with properties which, in formmetadata.cxx, are declared as ENUM.
    */
    class DefaultEnumRepresentation : public IPropertyEnumRepresentation
    {
    private:
        oslInterlockedCount         m_refCount;
        const IPropertyInfoService& m_rMetaData;
        ::com::sun::star::uno::Type m_aType;
        const sal_Int32             m_nPropertyId;

    public:
        /** constructs an instance

            @param _rInfo
                An instance implementing IPropertyInfoService. Must live at least as
                long as the DefaultEnumRepresentation should live.
        */
        DefaultEnumRepresentation( const IPropertyInfoService& _rInfo, const ::com::sun::star::uno::Type& _rType, sal_Int32 _nPropertyId );

    protected:
        ~DefaultEnumRepresentation();

    protected:
        // IPropertyEnumRepresentation implementqation
        virtual ::std::vector< ::rtl::OUString >
                                    SAL_CALL getDescriptions() const;
        virtual void                SAL_CALL getValueFromDescription( const ::rtl::OUString& _rDescription, ::com::sun::star::uno::Any& _out_rValue ) const;
        virtual ::rtl::OUString     SAL_CALL getDescriptionForValue( const ::com::sun::star::uno::Any& _rEnumValue ) const;

        // IReference implementqation
        virtual oslInterlockedCount SAL_CALL acquire();
        virtual oslInterlockedCount SAL_CALL release();

    private:
        DefaultEnumRepresentation();                                                // never implemented
        DefaultEnumRepresentation( const DefaultEnumRepresentation& );              // never implemented
        DefaultEnumRepresentation& operator=( const DefaultEnumRepresentation& );   // never implemented
    };

	//========================================================================
	//= UI flags (for all browseable properties)
	//========================================================================

#define PROP_FLAG_NONE              0x00000000  // no special flag
#define PROP_FLAG_FORM_VISIBLE      0x00000001  // the property is visible when inspecting a form object
#define PROP_FLAG_DIALOG_VISIBLE    0x00000002  // the property is visible when inspecting a dialog object
#define PROP_FLAG_DATA_PROPERTY     0x00000004  // the property is to appear on the "Data" page
#define PROP_FLAG_ENUM              0x00000020  // the property is some kind of enum property, i.e. its
                                                // value is chosen from a fixed list of possible values
#define PROP_FLAG_ENUM_ONE          0x00000060  // the property is an enum property starting with 1
                                                //  (note that this includes PROP_FLAG_ENUM)
#define PROP_FLAG_COMPOSEABLE       0x00000080  // the property is "composeable", i.e. an intersection of property
                                                //  sets should expose it, if all elements do
#define PROP_FLAG_EXPERIMENTAL      0x00000100  // the property is experimental, i.e. should not appear in the
                                                // UI, unless experimental properties are enabled by a configuraiton
                                                // option

	//========================================================================
	//= property ids (for all browseable properties)
	//========================================================================

	#define PROPERTY_ID_NAME				  1
	#define PROPERTY_ID_LABEL				  2
	#define PROPERTY_ID_CONTROLLABEL		  3
	#define PROPERTY_ID_MAXTEXTLEN			  4
	#define PROPERTY_ID_EDITMASK			  5
	#define PROPERTY_ID_LITERALMASK			  6
	#define PROPERTY_ID_STRICTFORMAT		  7
	#define PROPERTY_ID_ENABLED			  	  8
	#define PROPERTY_ID_READONLY			  9
	#define PROPERTY_ID_PRINTABLE			 10
	#define PROPERTY_ID_CONTROLSOURCE		 11
	#define PROPERTY_ID_TABSTOP				 12
	#define PROPERTY_ID_TABINDEX			 13
	#define PROPERTY_ID_DATASOURCE			 14
	#define PROPERTY_ID_COMMAND				 15
	#define PROPERTY_ID_COMMANDTYPE			 16
	#define PROPERTY_ID_FILTER               17
	#define PROPERTY_ID_SORT				 18
	#define PROPERTY_ID_INSERTONLY			 19
	#define PROPERTY_ID_ALLOWADDITIONS		 20
	#define PROPERTY_ID_ALLOWEDITS			 21
	#define PROPERTY_ID_ALLOWDELETIONS		 22
	#define PROPERTY_ID_NAVIGATION			 24
	#define PROPERTY_ID_CYCLE				 25
	#define PROPERTY_ID_HIDDEN_VALUE		 26
	#define PROPERTY_ID_VALUEMIN			 27
	#define PROPERTY_ID_VALUEMAX			 28
	#define PROPERTY_ID_VALUESTEP			 29
	#define PROPERTY_ID_DEFAULT_VALUE		 30
	#define PROPERTY_ID_DECIMAL_ACCURACY	 31
	#define PROPERTY_ID_SHOWTHOUSANDSEP		 32
	#define PROPERTY_ID_REFVALUE			 33
	#define PROPERTY_ID_CURRENCYSYMBOL		 34
	#define PROPERTY_ID_CURRSYM_POSITION	 35
	#define PROPERTY_ID_DATEMIN				 36
	#define PROPERTY_ID_DATEMAX				 37
	#define PROPERTY_ID_DATEFORMAT			 38
    #define PROPERTY_ID_SELECTEDITEMS        39
	#define PROPERTY_ID_DEFAULT_DATE		 40
	#define PROPERTY_ID_TIMEMIN				 41
	#define PROPERTY_ID_TIMEMAX				 42
	#define PROPERTY_ID_TIMEFORMAT			 43
	#define PROPERTY_ID_DEFAULT_TIME		 44
	#define PROPERTY_ID_EFFECTIVE_MIN		 45
	#define PROPERTY_ID_EFFECTIVE_MAX		 46
	#define PROPERTY_ID_EFFECTIVE_DEFAULT	 47
	#define PROPERTY_ID_FORMATKEY			 48
	#define PROPERTY_ID_CLASSID				 50
	#define PROPERTY_ID_HEIGHT				 51
	#define PROPERTY_ID_WIDTH				 52
	#define PROPERTY_ID_BOUNDCOLUMN			 53
	#define PROPERTY_ID_LISTSOURCETYPE		 54
	#define PROPERTY_ID_LISTSOURCE			 55
	#define PROPERTY_ID_LISTINDEX			 56
	#define PROPERTY_ID_STRINGITEMLIST		 57
	#define PROPERTY_ID_DEFAULT_TEXT		 58
	#define PROPERTY_ID_FONT                 59
	#define PROPERTY_ID_ALIGN				 60
	#define PROPERTY_ID_ROWHEIGHT			 61
	#define PROPERTY_ID_BACKGROUNDCOLOR		 62
	#define PROPERTY_ID_FILLCOLOR			 63
	#define PROPERTY_ID_ESCAPE_PROCESSING	 64
	#define PROPERTY_ID_LINECOLOR			 65
	#define PROPERTY_ID_BORDER				 66
	#define PROPERTY_ID_DROPDOWN			 67
	#define PROPERTY_ID_AUTOCOMPLETE		 68
	#define PROPERTY_ID_LINECOUNT			 69
    #define PROPERTY_ID_WORDBREAK            70
	#define PROPERTY_ID_MULTILINE			 71
	#define PROPERTY_ID_MULTISELECTION		 72
    #define PROPERTY_ID_AUTOLINEBREAK        73
	#define PROPERTY_ID_HSCROLL				 74
	#define PROPERTY_ID_VSCROLL				 75
	#define PROPERTY_ID_SPIN				 76
	#define PROPERTY_ID_BUTTONTYPE			 77
	#define PROPERTY_ID_TARGET_URL			 78
	#define PROPERTY_ID_TARGET_FRAME		 79
	#define PROPERTY_ID_SUBMIT_ACTION		 80
	#define PROPERTY_ID_SUBMIT_TARGET		 81
	#define PROPERTY_ID_SUBMIT_METHOD		 82
	#define PROPERTY_ID_SUBMIT_ENCODING		 83
	#define PROPERTY_ID_DEFAULT_STATE		 84
	#define PROPERTY_ID_DEFAULTBUTTON		 85
	#define PROPERTY_ID_IMAGE_URL			 86
	#define PROPERTY_ID_DEFAULT_SELECT_SEQ	 87
	#define PROPERTY_ID_ECHO_CHAR			 88
	#define PROPERTY_ID_EMPTY_IS_NULL		 89
	#define PROPERTY_ID_TRISTATE			 90
	#define PROPERTY_ID_MASTERFIELDS		 91
	#define PROPERTY_ID_DETAILFIELDS		 92
	#define PROPERTY_ID_RECORDMARKER		 93
	#define PROPERTY_ID_FILTERPROPOSAL		 94
	#define PROPERTY_ID_TAG					 95
	#define PROPERTY_ID_HELPTEXT			 96
	#define PROPERTY_ID_HELPURL				 97
	#define PROPERTY_ID_HASNAVIGATION		 98
	#define PROPERTY_ID_POSITIONX			 99
	#define PROPERTY_ID_POSITIONY			 100
	#define PROPERTY_ID_TITLE				 101
	#define PROPERTY_ID_STEP				 102
	#define PROPERTY_ID_PROGRESSVALUE		 103
	#define PROPERTY_ID_PROGRESSVALUE_MIN	 104
	#define PROPERTY_ID_PROGRESSVALUE_MAX	 105
	#define PROPERTY_ID_SCROLLVALUE			 106
	#define PROPERTY_ID_SCROLLVALUE_MAX		 107
	#define PROPERTY_ID_LINEINCREMENT		 108
	#define PROPERTY_ID_BLOCKINCREMENT		 109
	#define PROPERTY_ID_VISIBLESIZE			 110
	#define PROPERTY_ID_ORIENTATION			 111
	#define PROPERTY_ID_IMAGEPOSITION        112
	#define PROPERTY_ID_DATE			     113
	#define PROPERTY_ID_STATE			     114
	#define PROPERTY_ID_TIME			     115
	#define PROPERTY_ID_VALUE			     116
	#define PROPERTY_ID_SCALEIMAGE		     117
	#define PROPERTY_ID_PUSHBUTTONTYPE	     118
	#define PROPERTY_ID_EFFECTIVE_VALUE 	 119
	#define PROPERTY_ID_TEXT        		 120
    #define PROPERTY_ID_BOUND_CELL           121
    #define PROPERTY_ID_LIST_CELL_RANGE      122
    #define PROPERTY_ID_CELL_EXCHANGE_TYPE   123
    #define PROPERTY_ID_SCROLLVALUE_MIN      124
    #define PROPERTY_ID_DEFAULT_SCROLLVALUE  125
    #define PROPERTY_ID_REPEAT_DELAY         126
    #define PROPERTY_ID_SYMBOLCOLOR          127
    #define PROPERTY_ID_SPINVALUE            128
    #define PROPERTY_ID_SPINVALUE_MIN        129
    #define PROPERTY_ID_SPINVALUE_MAX        130
    #define PROPERTY_ID_DEFAULT_SPINVALUE    131
    #define PROPERTY_ID_SPININCREMENT        132
    #define PROPERTY_ID_REPEAT               133
    #define PROPERTY_ID_SHOW_SCROLLBARS      134
    #define PROPERTY_ID_ICONSIZE             135
    #define PROPERTY_ID_SHOW_POSITION        136
    #define PROPERTY_ID_SHOW_NAVIGATION      137
    #define PROPERTY_ID_SHOW_RECORDACTIONS   138
    #define PROPERTY_ID_SHOW_FILTERSORT      139
    #define PROPERTY_ID_TEXTTYPE             140
    #define PROPERTY_ID_LINEEND_FORMAT       141
    #define PROPERTY_ID_TOGGLE               142
    #define PROPERTY_ID_FOCUSONCLICK         143
    #define PROPERTY_ID_HIDEINACTIVESELECTION 144
    #define PROPERTY_ID_VISUALEFFECT         145
    #define PROPERTY_ID_BORDERCOLOR          146
    #define PROPERTY_ID_XML_DATA_MODEL       147
    #define PROPERTY_ID_BIND_EXPRESSION      148
    #define PROPERTY_ID_XSD_REQUIRED         149
    #define PROPERTY_ID_XSD_RELEVANT         150
    #define PROPERTY_ID_XSD_READONLY         151
    #define PROPERTY_ID_XSD_CONSTRAINT       152
    #define PROPERTY_ID_XSD_CALCULATION      153
    #define PROPERTY_ID_XSD_DATA_TYPE        154
    #define PROPERTY_ID_XSD_WHITESPACES      155
    #define PROPERTY_ID_XSD_PATTERN          156
    #define PROPERTY_ID_XSD_LENGTH           157
    #define PROPERTY_ID_XSD_MIN_LENGTH       158
    #define PROPERTY_ID_XSD_MAX_LENGTH       159
    #define PROPERTY_ID_XSD_TOTAL_DIGITS     160
    #define PROPERTY_ID_XSD_FRACTION_DIGITS  161
    #define PROPERTY_ID_XSD_MAX_INCLUSIVE_INT        162
    #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_INT        163
    #define PROPERTY_ID_XSD_MIN_INCLUSIVE_INT        164
    #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_INT        165
    #define PROPERTY_ID_XSD_MAX_INCLUSIVE_DOUBLE     166
    #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DOUBLE     167
    #define PROPERTY_ID_XSD_MIN_INCLUSIVE_DOUBLE     168
    #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DOUBLE     169
    #define PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE       170
    #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE       171
    #define PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE       172
    #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE       173
    #define PROPERTY_ID_XSD_MAX_INCLUSIVE_TIME       174
    #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_TIME       175
    #define PROPERTY_ID_XSD_MIN_INCLUSIVE_TIME       176
    #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_TIME       177
    #define PROPERTY_ID_XSD_MAX_INCLUSIVE_DATE_TIME  178
    #define PROPERTY_ID_XSD_MAX_EXCLUSIVE_DATE_TIME  179
    #define PROPERTY_ID_XSD_MIN_INCLUSIVE_DATE_TIME  180
    #define PROPERTY_ID_XSD_MIN_EXCLUSIVE_DATE_TIME  181
    #define PROPERTY_ID_UNCHECKEDREFVALUE           182
    #define PROPERTY_ID_SUBMISSION_ID               183
    #define PROPERTY_ID_XFORMS_BUTTONTYPE           184
    #define PROPERTY_ID_LIST_BINDING                185
    #define PROPERTY_ID_VERTICAL_ALIGN              186
    #define PROPERTY_ID_BINDING_NAME                187
    #define PROPERTY_ID_DECORATION                  188		
	#define PROPERTY_ID_SELECTION_TYPE				189
	#define PROPERTY_ID_ROOT_DISPLAYED				190
	#define PROPERTY_ID_SHOWS_HANDLES				191
	#define PROPERTY_ID_SHOWS_ROOT_HANDLES			192
	#define PROPERTY_ID_EDITABLE					193
	#define PROPERTY_ID_INVOKES_STOP_NOT_EDITING    194
	#define PROPERTY_ID_NOLABEL				        195
    #define PROPERTY_ID_SCALE_MODE                  196
    #define PROPERTY_ID_INPUT_REQUIRED              197
    #define PROPERTY_ID_WRITING_MODE                198
    #define PROPERTY_ID_ENABLE_VISIBLE              199
    #define PROPERTY_ID_WHEEL_BEHAVIOR              200
    #define PROPERTY_ID_TEXT_ANCHOR_TYPE            201
    #define PROPERTY_ID_SHEET_ANCHOR_TYPE           202

//............................................................................
} // namespace pcr
//............................................................................

#endif // _EXTENSIONS_PROPCTRLR_FORMMETADATA_HXX_

