/**************************************************************
 * 
 * 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 DBAUI_FIELDDESCRIPTIONS_HXX
#define DBAUI_FIELDDESCRIPTIONS_HXX

#ifndef DBAUI_ENUMTYPES_HXX
#include "QEnumTypes.hxx"
#endif
#ifndef _SVX_SVXENUM_HXX 
#include <editeng/svxenum.hxx>
#endif
#ifndef DBAUI_TYPEINFO_HXX
#include "TypeInfo.hxx"
#endif
#ifndef _OSL_DIAGNOSE_H_ 
#include <osl/diagnose.h>
#endif
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
#include <com/sun/star/beans/XPropertySet.hpp>
#endif			   
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#endif

namespace dbaui
{
	class OFieldDescription
	{
	private:
		::com::sun::star::uno::Any		m_aDefaultValue;	// the default value from the database
		::com::sun::star::uno::Any		m_aControlDefault;	// the value which the control inserts as default
		::com::sun::star::uno::Any		m_aWidth;				// sal_Int32 or void
		::com::sun::star::uno::Any		m_aRelativePosition;	// sal_Int32 or void

		TOTypeInfoSP	m_pType;

		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >		m_xDest;
		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >	m_xDestInfo;

		::rtl::OUString		m_sName;
		::rtl::OUString		m_sTypeName;
		::rtl::OUString		m_sDescription;
        ::rtl::OUString		m_sHelpText;
		
		::rtl::OUString		m_sAutoIncrementValue;
		sal_Int32			m_nType;	// only used when m_pType is null
		sal_Int32			m_nPrecision;
		sal_Int32			m_nScale;
		sal_Int32			m_nIsNullable;
		sal_Int32			m_nFormatKey;
		SvxCellHorJustify	m_eHorJustify;
		sal_Bool			m_bIsAutoIncrement;
		sal_Bool			m_bIsPrimaryKey;
		sal_Bool			m_bIsCurrency;
		sal_Bool			m_bHidden;

	public:
		OFieldDescription();
		OFieldDescription( const OFieldDescription& rDescr );
		OFieldDescription(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xAffectedCol
						 ,sal_Bool _bUseAsDest = sal_False);
		~OFieldDescription();

		void SetName(const ::rtl::OUString& _rName);							
		void SetDescription(const ::rtl::OUString& _rDescription);
        void SetHelpText(const ::rtl::OUString& _sHelptext);
		void SetDefaultValue(const ::com::sun::star::uno::Any& _rDefaultValue);	
		void SetControlDefault(const ::com::sun::star::uno::Any& _rControlDefault);
		void SetAutoIncrementValue(const ::rtl::OUString& _sAutoIncValue);	
		void SetType(TOTypeInfoSP _pType);
		void SetTypeValue(sal_Int32 _nType);
		void SetTypeName(const ::rtl::OUString& _sTypeName);
		void SetPrecision(const sal_Int32& _rPrecision);						
		void SetScale(const sal_Int32& _rScale);								
		void SetIsNullable(const sal_Int32& _rIsNullable);					
		void SetFormatKey(const sal_Int32& _rFormatKey);						
		void SetHorJustify(const SvxCellHorJustify& _rHorJustify);			
		void SetAutoIncrement(sal_Bool _bAuto);								
		void SetPrimaryKey(sal_Bool _bPKey);									
		void SetCurrency(sal_Bool _bIsCurrency);

		/** copies the content of the field eescription into the column
			@param	_rxColumn the dest
		*/
		void copyColumnSettingsTo(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumn);

		void FillFromTypeInfo(const TOTypeInfoSP& _pType,sal_Bool _bForce,sal_Bool _bReset);

		::rtl::OUString				GetName()				const;
		::rtl::OUString				GetDescription()		const;
        ::rtl::OUString				GetHelpText()		    const;
		::com::sun::star::uno::Any	GetControlDefault()		const;
		::rtl::OUString				GetAutoIncrementValue()	const;
		sal_Int32					GetType()				const;
		::rtl::OUString				GetTypeName()			const;
		sal_Int32					GetPrecision()			const;
		sal_Int32					GetScale()				const;
		sal_Int32					GetIsNullable()			const;
		sal_Int32					GetFormatKey()			const;
		SvxCellHorJustify			GetHorJustify()			const;
		TOTypeInfoSP				getTypeInfo()			const;
        TOTypeInfoSP				getSpecialTypeInfo()	const;
		sal_Bool					IsAutoIncrement()		const;
		sal_Bool					IsPrimaryKey()			const;
		sal_Bool					IsCurrency()			const;
		sal_Bool					IsNullable()			const;
	};
}
#endif // DBAUI_FIELDDESCRIPTIONS_HXX


