diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2005-03-23 10:59:24 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2005-03-23 10:59:24 +0000 |
commit | 06ebf2c055ab4f88127049734d0c4f92a51773cc (patch) | |
tree | bddd045789f0fe4654fe53766c79052289d7b2ce | |
parent | f035fdb5c40e8c72dfe1f882046e2f468e94a544 (diff) |
INTEGRATION: CWS eforms4 (1.2.16); FILE MERGED
2004/12/27 14:50:23 fs 1.2.16.2: properly determine whether we're inspecting a formatted field
2004/12/10 10:39:41 fs 1.2.16.1: #i36359# when setting the DataType of a formatted field, init the format so that it matches the DataType
-rw-r--r-- | extensions/source/propctrlr/xsdvalidationhelper.cxx | 100 |
1 files changed, 97 insertions, 3 deletions
diff --git a/extensions/source/propctrlr/xsdvalidationhelper.cxx b/extensions/source/propctrlr/xsdvalidationhelper.cxx index 242bdd89395f..1adf34e00aa5 100644 --- a/extensions/source/propctrlr/xsdvalidationhelper.cxx +++ b/extensions/source/propctrlr/xsdvalidationhelper.cxx @@ -2,9 +2,9 @@ * * $RCSfile: xsdvalidationhelper.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: obo $ $Date: 2004-11-16 12:14:16 $ + * last change: $Author: vg $ $Date: 2005-03-23 11:59:24 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -70,11 +70,30 @@ #endif /** === begin UNO includes === **/ +#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_ +#include <com/sun/star/lang/XServiceInfo.hpp> +#endif +#ifndef _COM_SUN_STAR_XSD_DATATYPECLASS_HPP_ +#include <com/sun/star/xsd/DataTypeClass.hpp> +#endif +#ifndef _COM_SUN_STAR_UTIL_NUMBERFORMAT_HPP_ +#include <com/sun/star/util/NumberFormat.hpp> +#endif +#ifndef _COM_SUN_STAR_UTIL_XNUMBERFORMATTYPES_HPP_ +#include <com/sun/star/util/XNumberFormatTypes.hpp> +#endif +#ifndef _COM_SUN_STAR_UTIL_XNUMBERFORMATSSUPPLIER_HPP_ +#include <com/sun/star/util/XNumberFormatsSupplier.hpp> +#endif #ifndef _COM_SUN_STAR_XFORMS_XDATATYPEREPOSITORY_HPP_ #include <com/sun/star/xforms/XDataTypeRepository.hpp> #endif /** === end UNO includes === **/ +#ifndef INCLUDED_SVTOOLS_SYSLOCALE_HXX +#include <svtools/syslocale.hxx> +#endif + //........................................................................ namespace pcr { @@ -84,15 +103,38 @@ namespace pcr using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::xsd; + using namespace ::com::sun::star::util; + using namespace ::com::sun::star::lang; using namespace ::com::sun::star::xforms; + namespace NumberFormat = ::com::sun::star::util::NumberFormat; + //==================================================================== //= XSDValidationHelper //==================================================================== //-------------------------------------------------------------------- XSDValidationHelper::XSDValidationHelper( const Reference< XPropertySet >& _rxIntrospectee, const Reference< frame::XModel >& _rxContextDocument ) :EFormsHelper( _rxIntrospectee, _rxContextDocument ) + ,m_bInspectingFormattedField( false ) { + try + { + Reference< XPropertySetInfo > xPSI; + Reference< XServiceInfo > xSI( _rxIntrospectee, UNO_QUERY ); + if ( m_xControlModel.is() ) + xPSI = m_xControlModel->getPropertySetInfo(); + if ( xPSI.is() + && xPSI->hasPropertyByName( PROPERTY_FORMATKEY ) + && xPSI->hasPropertyByName( PROPERTY_FORMATSSUPPLIER ) + && xSI.is() + && xSI->supportsService( SERVICE_COMPONENT_FORMATTEDFIELD ) + ) + m_bInspectingFormattedField = true; + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "XSDValidationHelper::XSDValidationHelper: caught an exception while examining the introspectee!" ); + } } //-------------------------------------------------------------------- @@ -191,7 +233,7 @@ namespace pcr } catch( const Exception& ) { - OSL_ENSURE( sal_False, "XSDValidationHelper::getValidatingDataType: caught an exception!" ); + OSL_ENSURE( sal_False, "XSDValidationHelper::getDataTypeByName: caught an exception!" ); } return pReturn; @@ -336,6 +378,58 @@ namespace pcr } //-------------------------------------------------------------------- + void XSDValidationHelper::findDefaultFormatForIntrospectee() SAL_THROW(()) + { + try + { + ::rtl::Reference< XSDDataType > xDataType = getValidatingDataType(); + if ( xDataType.is() ) + { + // find a NumberFormat type corresponding to the DataTypeClass + sal_Int16 nNumberFormatType = NumberFormat::NUMBER; + switch ( xDataType->classify() ) + { + case DataTypeClass::DATETIME: + nNumberFormatType = NumberFormat::DATETIME; + break; + case DataTypeClass::DATE: + nNumberFormatType = NumberFormat::DATE; + break; + case DataTypeClass::TIME: + nNumberFormatType = NumberFormat::TIME; + break; + case DataTypeClass::STRING: + case DataTypeClass::anyURI: + case DataTypeClass::QName: + case DataTypeClass::NOTATION: + nNumberFormatType = NumberFormat::TEXT; + break; + } + + // get the number formatter from the introspectee + Reference< XNumberFormatsSupplier > xSupplier; + Reference< XNumberFormatTypes > xFormatTypes; + OSL_VERIFY( m_xControlModel->getPropertyValue( PROPERTY_FORMATSSUPPLIER ) >>= xSupplier ); + if ( xSupplier.is() ) + xFormatTypes = xFormatTypes.query( xSupplier->getNumberFormats() ); + OSL_ENSURE( xFormatTypes.is(), "XSDValidationHelper::findDefaultFormatForIntrospectee: no number formats for the introspectee!" ); + if ( !xFormatTypes.is() ) + return; + + // and the standard format for the given NumberFormat type + sal_Int32 nDesiredFormat = xFormatTypes->getStandardFormat( nNumberFormatType, SvtSysLocale().GetLocaleData().getLocale() ); + + // set this at the introspectee + m_xControlModel->setPropertyValue( PROPERTY_FORMATKEY, makeAny( nDesiredFormat ) ); + } + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "XSDValidationHelper::findDefaultFormatForIntrospectee: caught an exception!" ); + } + } + + //-------------------------------------------------------------------- ::rtl::OUString XSDValidationHelper::getBasicTypeNameForClass( sal_Int16 _nClass ) const SAL_THROW(()) { return getBasicTypeNameForClass( _nClass, getDataTypeRepository() ); |