summaryrefslogtreecommitdiff
path: root/xmloff
diff options
context:
space:
mode:
authorMichael Stahl <mst@openoffice.org>2011-10-11 14:19:10 +0200
committerMichael Stahl <mst@openoffice.org>2011-10-11 17:57:01 +0200
commit30e1eaabc4917641943a8fa2befca208d857a14a (patch)
treee72a0ae2024d1e9e9ce8fce3a1e17ada34a22c7b /xmloff
parent8666469d7b0f450ec1448f80eda3c591f8d8d318 (diff)
#i108468#: clean up xmluconv: add a pImpl to SvXMLUnitConverter
Diffstat (limited to 'xmloff')
-rw-r--r--xmloff/inc/xmloff/xmluconv.hxx56
-rw-r--r--xmloff/source/core/xmluconv.cxx119
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 )
{