diff options
author | Michael Stahl <mst@openoffice.org> | 2011-10-11 14:19:10 +0200 |
---|---|---|
committer | Michael Stahl <mst@openoffice.org> | 2011-10-11 17:57:01 +0200 |
commit | 30e1eaabc4917641943a8fa2befca208d857a14a (patch) | |
tree | e72a0ae2024d1e9e9ce8fce3a1e17ada34a22c7b /xmloff | |
parent | #i108468#: clean up xmluconv code duplication, measured approach: (diff) | |
download | core-30e1eaabc4917641943a8fa2befca208d857a14a.tar.gz core-30e1eaabc4917641943a8fa2befca208d857a14a.zip |
#i108468#: clean up xmluconv: add a pImpl to SvXMLUnitConverter
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/inc/xmloff/xmluconv.hxx | 56 | ||||
-rw-r--r-- | xmloff/source/core/xmluconv.cxx | 119 |
2 files changed, 102 insertions, 73 deletions
diff --git a/xmloff/inc/xmloff/xmluconv.hxx b/xmloff/inc/xmloff/xmluconv.hxx index 9fc53641c0fd..a5064fd67ff0 100644 --- a/xmloff/inc/xmloff/xmluconv.hxx +++ b/xmloff/inc/xmloff/xmluconv.hxx @@ -33,6 +33,7 @@ #include "xmloff/dllapi.h" #include "sal/types.h" +#include <memory> #include <limits.h> #include <tools/solar.h> #include <xmloff/xmlement.hxx> @@ -58,7 +59,6 @@ class OUStringBuffer; namespace com { namespace sun { namespace star { namespace util { struct DateTime; } namespace text { class XNumberingTypeInfo; } - namespace i18n { class XCharacterClassification; } }}} namespace basegfx @@ -92,17 +92,8 @@ public: class XMLOFF_DLLPUBLIC SvXMLUnitConverter { private: - sal_Int16 meCoreMeasureUnit; - sal_Int16 meXMLMeasureUnit; - com::sun::star::util::Date aNullDate; - ::com::sun::star::uno::Reference< - ::com::sun::star::text::XNumberingTypeInfo > xNumTypeInfo; - ::com::sun::star::uno::Reference< - ::com::sun::star::i18n::XCharacterClassification > xCharClass; - // #110680# - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxServiceFactory; - - SAL_DLLPRIVATE void createNumTypeInfo() const; + struct Impl; + ::std::auto_ptr<Impl> m_pImpl; public: /** constructs a SvXMLUnitConverter. The core measure unit is the @@ -119,10 +110,10 @@ public: static sal_Int16 GetMeasureUnit(sal_Int16 const nFieldUnit); /** sets the default unit for numerical measures */ - inline void SetCoreMeasureUnit( sal_Int16 const eCoreMeasureUnit ); + void SetCoreMeasureUnit( sal_Int16 const eCoreMeasureUnit ); /** gets the default unit for numerical measures */ - inline sal_Int16 GetCoreMeasureUnit() const; + sal_Int16 GetCoreMeasureUnit() const; /** sets the default unit for textual measures */ void SetXMLMeasureUnit( sal_Int16 const eXMLMeasureUnit ); @@ -132,12 +123,7 @@ public: /** gets XNumberingTypeInfo */ const ::com::sun::star::uno::Reference< - ::com::sun::star::text::XNumberingTypeInfo >& getNumTypeInfo() const - { - if( !xNumTypeInfo.is() ) - createNumTypeInfo(); - return xNumTypeInfo; - } + ::com::sun::star::text::XNumberingTypeInfo >& getNumTypeInfo() const; /** convert string to measure with meCoreMeasureUnit, using optional min and max values*/ @@ -201,16 +187,16 @@ public: const com::sun::star::uno::Reference <com::sun::star::frame::XModel>& xModel); /** Set the Null Date of the UnitConverter */ - void setNullDate ( const com::sun::star::util::Date& aTempNullDate ) { aNullDate = aTempNullDate; } + void setNullDate ( const com::sun::star::util::Date& aTempNullDate ); /** convert double to ISO Date Time String */ void convertDateTime( ::rtl::OUStringBuffer& rBuffer, const double& fDateTime, - sal_Bool bAddTimeIf0AM=sal_False) { convertDateTime(rBuffer, fDateTime, aNullDate, bAddTimeIf0AM); } + bool const bAddTimeIf0AM = false); /** convert ISO Date Time String to double */ - sal_Bool convertDateTime( double& fDateTime, - const ::rtl::OUString& rString) { return convertDateTime(fDateTime, rString, aNullDate); } + bool convertDateTime(double& fDateTime, + const ::rtl::OUString& rString); /// these 2 functions use tools Date, so they're not yet moved to sax @@ -264,28 +250,6 @@ public: }; -inline void -SvXMLUnitConverter::SetCoreMeasureUnit( sal_Int16 const eCoreMeasureUnit ) -{ - meCoreMeasureUnit = eCoreMeasureUnit; -} - -inline sal_Int16 SvXMLUnitConverter::GetCoreMeasureUnit() const -{ - return meCoreMeasureUnit; -} - -inline void -SvXMLUnitConverter::SetXMLMeasureUnit( sal_Int16 const eXMLMeasureUnit ) -{ - meXMLMeasureUnit = eXMLMeasureUnit; -} - -inline sal_Int16 SvXMLUnitConverter::GetXMLMeasureUnit() const -{ - return meXMLMeasureUnit; -} - #endif // _XMLOFF_XMLUCONV_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/xmloff/source/core/xmluconv.cxx b/xmloff/source/core/xmluconv.cxx index 23a61a4c3ac6..97c8c9bf016d 100644 --- a/xmloff/source/core/xmluconv.cxx +++ b/xmloff/source/core/xmluconv.cxx @@ -69,17 +69,71 @@ const sal_Int8 XML_MAXDIGITSCOUNT_TIME = 11; const sal_Int8 XML_MAXDIGITSCOUNT_DATETIME = 6; #define XML_NULLDATE "NullDate" -void SvXMLUnitConverter::createNumTypeInfo() const +struct SvXMLUnitConverter::Impl { - if( mxServiceFactory.is() ) + sal_Int16 m_eCoreMeasureUnit; + sal_Int16 m_eXMLMeasureUnit; + util::Date m_aNullDate; + uno::Reference< text::XNumberingTypeInfo > m_xNumTypeInfo; + uno::Reference< i18n::XCharacterClassification > m_xCharClass; + uno::Reference< lang::XMultiServiceFactory > m_xServiceFactory; + + Impl(uno::Reference<lang::XMultiServiceFactory> const& xServiceFactory, + sal_Int16 const eCoreMeasureUnit, + sal_Int16 const eXMLMeasureUnit) + : m_eCoreMeasureUnit(eCoreMeasureUnit) + , m_eXMLMeasureUnit(eXMLMeasureUnit) + , m_aNullDate(30, 12, 1899) + , m_xServiceFactory(xServiceFactory) { - ((SvXMLUnitConverter *)this)->xNumTypeInfo = + OSL_ENSURE( m_xServiceFactory.is(), "got no service manager" ); + } + + void createNumTypeInfo() const; +}; + + +void SvXMLUnitConverter::Impl::createNumTypeInfo() const +{ + if (m_xServiceFactory.is()) + { + const_cast<Impl*>(this)->m_xNumTypeInfo = Reference < XNumberingTypeInfo > ( - mxServiceFactory->createInstance( + m_xServiceFactory->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.DefaultNumberingProvider") ) ), UNO_QUERY ); } } +const uno::Reference< text::XNumberingTypeInfo >& +SvXMLUnitConverter::getNumTypeInfo() const +{ + if (!m_pImpl->m_xNumTypeInfo.is()) + { + m_pImpl->createNumTypeInfo(); + } + return m_pImpl->m_xNumTypeInfo; +} + +void SvXMLUnitConverter::SetCoreMeasureUnit(sal_Int16 const eCoreMeasureUnit) +{ + m_pImpl->m_eCoreMeasureUnit = eCoreMeasureUnit; +} + +sal_Int16 SvXMLUnitConverter::GetCoreMeasureUnit() const +{ + return m_pImpl->m_eCoreMeasureUnit; +} + +void SvXMLUnitConverter::SetXMLMeasureUnit(sal_Int16 const eXMLMeasureUnit) +{ + m_pImpl->m_eXMLMeasureUnit = eXMLMeasureUnit; +} + +sal_Int16 SvXMLUnitConverter::GetXMLMeasureUnit() const +{ + return m_pImpl->m_eXMLMeasureUnit; +} + /** constructs a SvXMLUnitConverter. The core measure unit is the default unit for numerical measures, the XML measure unit is the default unit for textual measures @@ -89,14 +143,8 @@ SvXMLUnitConverter::SvXMLUnitConverter( const uno::Reference<lang::XMultiServiceFactory>& xServiceFactory, sal_Int16 const eCoreMeasureUnit, sal_Int16 const eXMLMeasureUnit) -: - aNullDate(30, 12, 1899), - mxServiceFactory( xServiceFactory ) +: m_pImpl(new Impl(xServiceFactory, eCoreMeasureUnit, eXMLMeasureUnit)) { - DBG_ASSERT( mxServiceFactory.is(), "got no service manager" ); - - meCoreMeasureUnit = eCoreMeasureUnit; - meXMLMeasureUnit = eXMLMeasureUnit; } SvXMLUnitConverter::~SvXMLUnitConverter() @@ -136,7 +184,7 @@ bool SvXMLUnitConverter::convertMeasureToCore( sal_Int32& nValue, sal_Int32 nMin, sal_Int32 nMax ) const { return ::sax::Converter::convertMeasure( nValue, rString, - meCoreMeasureUnit, + m_pImpl->m_eCoreMeasureUnit, nMin, nMax ); } @@ -145,8 +193,8 @@ void SvXMLUnitConverter::convertMeasureToXML( OUStringBuffer& rString, sal_Int32 nMeasure ) const { ::sax::Converter::convertMeasure( rString, nMeasure, - meCoreMeasureUnit, - meXMLMeasureUnit ); + m_pImpl->m_eCoreMeasureUnit, + m_pImpl->m_eXMLMeasureUnit ); } /** convert measure with given unit to string */ @@ -156,7 +204,7 @@ void SvXMLUnitConverter::convertMeasureToXML( OUStringBuffer& rString, { ::sax::Converter::convertMeasure( rString, nMeasure, eSrcUnit, - meXMLMeasureUnit ); + m_pImpl->m_eXMLMeasureUnit ); } /** convert string to enum using given enum map, if the enum is @@ -281,7 +329,7 @@ void SvXMLUnitConverter::convertDouble(OUStringBuffer& rBuffer, double fNumber, sal_Bool bWriteUnits) const { ::sax::Converter::convertDouble(rBuffer, fNumber, - bWriteUnits, meCoreMeasureUnit, meXMLMeasureUnit); + bWriteUnits, m_pImpl->m_eCoreMeasureUnit, m_pImpl->m_eXMLMeasureUnit); } /** convert string to double number (using ::rtl::math) */ @@ -290,11 +338,11 @@ sal_Bool SvXMLUnitConverter::convertDouble(double& rValue, { if(bLookForUnits) { - sal_Int16 const eSrcUnit = - ::sax::Converter::GetUnitFromString(rString, meCoreMeasureUnit); + sal_Int16 const eSrcUnit = ::sax::Converter::GetUnitFromString( + rString, m_pImpl->m_eCoreMeasureUnit); return ::sax::Converter::convertDouble(rValue, rString, - eSrcUnit, meCoreMeasureUnit); + eSrcUnit, m_pImpl->m_eCoreMeasureUnit); } else { @@ -309,11 +357,28 @@ sal_Bool SvXMLUnitConverter::setNullDate(const com::sun::star::uno::Reference <c if (xNumberFormatsSupplier.is()) { const com::sun::star::uno::Reference <com::sun::star::beans::XPropertySet> xPropertySet = xNumberFormatsSupplier->getNumberFormatSettings(); - return xPropertySet.is() && (xPropertySet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_NULLDATE))) >>= aNullDate); + return xPropertySet.is() && (xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_NULLDATE))) >>= m_pImpl->m_aNullDate); } return sal_False; } +void SvXMLUnitConverter::setNullDate(const util::Date& aTempNullDate) + { m_pImpl->m_aNullDate = aTempNullDate; } + +/** convert double to ISO Date Time String */ +void SvXMLUnitConverter::convertDateTime(::rtl::OUStringBuffer& rBuffer, + const double& fDateTime, bool const bAddTimeIf0AM) +{ + convertDateTime(rBuffer, fDateTime, m_pImpl->m_aNullDate, bAddTimeIf0AM); +} + +/** convert ISO Date Time String to double */ +bool SvXMLUnitConverter::convertDateTime(double& fDateTime, + const ::rtl::OUString& rString) +{ + return convertDateTime(fDateTime, rString, m_pImpl->m_aNullDate); +} + /** convert double to ISO Date Time String */ void SvXMLUnitConverter::convertDateTime( OUStringBuffer& rBuffer, const double& fDateTime, @@ -782,21 +847,21 @@ OUString SvXMLUnitConverter::encodeStyleName( } else { - if( !xCharClass.is() ) + if (!m_pImpl->m_xCharClass.is()) { - if( mxServiceFactory.is() ) + if (m_pImpl->m_xServiceFactory.is()) { try { const_cast < SvXMLUnitConverter * >(this) - ->xCharClass = + ->m_pImpl->m_xCharClass = Reference < XCharacterClassification >( - mxServiceFactory->createInstance( + m_pImpl->m_xServiceFactory->createInstance( OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.i18n.CharacterClassification_Unicode")) ), UNO_QUERY ); - OSL_ENSURE( xCharClass.is(), + OSL_ENSURE( m_pImpl->m_xCharClass.is(), "can't instantiate character clossification component" ); } catch( com::sun::star::uno::Exception& ) @@ -804,9 +869,9 @@ OUString SvXMLUnitConverter::encodeStyleName( } } } - if( xCharClass.is() ) + if (m_pImpl->m_xCharClass.is()) { - sal_Int16 nType = xCharClass->getType( rName, i ); + sal_Int16 nType = m_pImpl->m_xCharClass->getType(rName, i); switch( nType ) { |