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
This commit is contained in:
parent
f035fdb5c4
commit
06ebf2c055
1 changed files with 97 additions and 3 deletions
|
@ -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;
|
||||
|
@ -335,6 +377,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(())
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue