summaryrefslogtreecommitdiff
path: root/reportdesign/source/filter
diff options
context:
space:
mode:
Diffstat (limited to 'reportdesign/source/filter')
-rw-r--r--reportdesign/source/filter/xml/xmlExport.cxx68
-rw-r--r--reportdesign/source/filter/xml/xmlExportDocumentHandler.cxx46
-rw-r--r--reportdesign/source/filter/xml/xmlExportDocumentHandler.hxx2
-rw-r--r--reportdesign/source/filter/xml/xmlHelper.cxx81
-rw-r--r--reportdesign/source/filter/xml/xmlHelper.hxx4
-rw-r--r--reportdesign/source/filter/xml/xmlImage.cxx16
-rw-r--r--reportdesign/source/filter/xml/xmlImportDocumentHandler.cxx52
-rw-r--r--reportdesign/source/filter/xml/xmlImportDocumentHandler.hxx2
-rw-r--r--reportdesign/source/filter/xml/xmlPropertyHandler.cxx2
-rw-r--r--reportdesign/source/filter/xml/xmlfilter.cxx4
10 files changed, 181 insertions, 96 deletions
diff --git a/reportdesign/source/filter/xml/xmlExport.cxx b/reportdesign/source/filter/xml/xmlExport.cxx
index add9ea18b7a8..63a76c047195 100644
--- a/reportdesign/source/filter/xml/xmlExport.cxx
+++ b/reportdesign/source/filter/xml/xmlExport.cxx
@@ -323,7 +323,7 @@ ORptExport::ORptExport(const Reference< XMultiServiceFactory >& _rxMSF,sal_uInt1
UniReference < XMLPropertySetMapper > xPropMapper(new XMLTextPropertySetMapper( TEXT_PROP_MAP_PARA ));
m_xParaPropMapper = new OSpecialHanldeXMLExportPropertyMapper( xPropMapper);
- //m_xParaPropMapper->ChainExportMapper(XMLTextParagraphExport::CreateParaExtPropMapper(*this));
+ // m_xParaPropMapper->ChainExportMapper(XMLTextParagraphExport::CreateParaExtPropMapper(*this));
::rtl::OUString sFamily( GetXMLToken(XML_PARAGRAPH) );
::rtl::OUString aPrefix( String( 'P' ) );
@@ -948,6 +948,10 @@ void ORptExport::exportContainer(const Reference< XSection>& _xSection)
AddAttribute(XML_NAMESPACE_FORM, XML_IMAGE_DATA,sTargetLocation);
}
bExportData = sal_True;
+ ::rtl::OUStringBuffer sValue;
+ const SvXMLEnumMapEntry* aXML_ImageScaleEnumMap = OXMLHelper::GetImageScaleOptions();
+ if ( SvXMLUnitConverter::convertEnum( sValue, xImage->getScaleMode(),aXML_ImageScaleEnumMap ) )
+ AddAttribute(XML_NAMESPACE_REPORT, XML_SCALE, sValue.makeStringAndClear() );
}
else if ( xReportDefinition.is() )
{
@@ -1268,37 +1272,37 @@ void ORptExport::exportAutoStyle(XPropertySet* _xProp,const Reference<XFormatted
}
else
{
- sal_Int32 nTextAlignIndex = m_xCellStylesExportPropertySetMapper->getPropertySetMapper()->FindEntryIndex( CTF_SD_SHAPE_PARA_ADJUST );
- if ( nTextAlignIndex != -1 )
- {
- ::std::vector< XMLPropertyState >::iterator aIter = aPropertyStates.begin();
- ::std::vector< XMLPropertyState >::iterator aEnd = aPropertyStates.end();
- for (; aIter != aEnd; ++aIter)
- {
- if ( aIter->mnIndex == nTextAlignIndex )
- {
- sal_Int16 nTextAlign = 0;
- aIter->maValue >>= nTextAlign;
- switch(nTextAlign)
- {
- case awt::TextAlign::LEFT:
- nTextAlign = style::ParagraphAdjust_LEFT;
- break;
- case awt::TextAlign::CENTER:
- nTextAlign = style::ParagraphAdjust_CENTER;
- break;
- case awt::TextAlign::RIGHT:
- nTextAlign = style::ParagraphAdjust_RIGHT;
- break;
- default:
- OSL_ENSURE(0,"Illegal text alignment value!");
- break;
- }
- aIter->maValue <<= nTextAlign;
- break;
- }
- }
- }
+ //sal_Int32 nTextAlignIndex = m_xCellStylesExportPropertySetMapper->getPropertySetMapper()->FindEntryIndex( CTF_SD_SHAPE_PARA_ADJUST );
+ //if ( nTextAlignIndex != -1 )
+ //{
+ // ::std::vector< XMLPropertyState >::iterator aIter = aPropertyStates.begin();
+ // ::std::vector< XMLPropertyState >::iterator aEnd = aPropertyStates.end();
+ // for (; aIter != aEnd; ++aIter)
+ // {
+ // if ( aIter->mnIndex == nTextAlignIndex )
+ // {
+ // sal_Int16 nTextAlign = 0;
+ // aIter->maValue >>= nTextAlign;
+ // switch(nTextAlign)
+ // {
+ // case awt::TextAlign::LEFT:
+ // nTextAlign = style::ParagraphAdjust_LEFT;
+ // break;
+ // case awt::TextAlign::CENTER:
+ // nTextAlign = style::ParagraphAdjust_CENTER;
+ // break;
+ // case awt::TextAlign::RIGHT:
+ // nTextAlign = style::ParagraphAdjust_RIGHT;
+ // break;
+ // default:
+ // OSL_ENSURE(0,"Illegal text alignment value!");
+ // break;
+ // }
+ // aIter->maValue <<= nTextAlign;
+ // break;
+ // }
+ // }
+ //}
const Reference<XFormattedField> xFormattedField(_xProp,uno::UNO_QUERY);
if ( (_xParentFormattedField.is() || xFormattedField.is()) && !aPropertyStates.empty() )
{
diff --git a/reportdesign/source/filter/xml/xmlExportDocumentHandler.cxx b/reportdesign/source/filter/xml/xmlExportDocumentHandler.cxx
index f4a394263234..73df0a049241 100644
--- a/reportdesign/source/filter/xml/xmlExportDocumentHandler.cxx
+++ b/reportdesign/source/filter/xml/xmlExportDocumentHandler.cxx
@@ -88,9 +88,11 @@ void lcl_correctCellAddress(const ::rtl::OUString & _sName, const uno::Reference
ExportDocumentHandler::ExportDocumentHandler(uno::Reference< uno::XComponentContext > const & context) :
m_xContext(context)
,m_nCurrentCellIndex(0)
+ ,m_nColumnCount(0)
,m_bTableRowsStarted(false)
,m_bFirstRowExported(false)
,m_bExportChar(false)
+ ,m_bCountColumnHeader(false)
{
}
// -----------------------------------------------------------------------------
@@ -189,6 +191,17 @@ void SAL_CALL ExportDocumentHandler::startElement(const ::rtl::OUString & _sName
pList->AddAttribute(lcl_createAttribute(XML_NP_OFFICE,XML_MIMETYPE),MIMETYPE_OASIS_OPENDOCUMENT_CHART);
m_xDelegatee->startElement(lcl_createAttribute(XML_NP_OFFICE,XML_REPORT),xNewAttribs);
+
+ const ::rtl::OUString sTableCalc = lcl_createAttribute(XML_NP_TABLE,XML_CALCULATION_SETTINGS);
+ m_xDelegatee->startElement(sTableCalc,NULL);
+ pList = new SvXMLAttributeList();
+ uno::Reference< xml::sax::XAttributeList > xNullAttr = pList;
+ pList->AddAttribute(lcl_createAttribute(XML_NP_TABLE,XML_DATE_VALUE),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("1900-01-01")));
+
+ const ::rtl::OUString sNullDate = lcl_createAttribute(XML_NP_TABLE,XML_NULL_DATE);
+ m_xDelegatee->startElement(sNullDate,xNullAttr);
+ m_xDelegatee->endElement(sNullDate);
+ m_xDelegatee->endElement(sTableCalc);
bExport = false;
}
else if ( _sName.equalsAscii("table:table") )
@@ -196,6 +209,14 @@ void SAL_CALL ExportDocumentHandler::startElement(const ::rtl::OUString & _sName
m_xDelegatee->startElement(lcl_createAttribute(XML_NP_RPT,XML_DETAIL),NULL);
lcl_exportPrettyPrinting(m_xDelegatee);
}
+ else if ( _sName.equalsAscii("table:table-header-rows") )
+ {
+ m_bCountColumnHeader = true;
+ }
+ else if ( m_bCountColumnHeader && _sName.equalsAscii("table:table-cell") )
+ {
+ ++m_nColumnCount;
+ }
else if ( _sName.equalsAscii("table:table-rows") )
{
m_xDelegatee->startElement(_sName,xAttribs);
@@ -249,6 +270,10 @@ void SAL_CALL ExportDocumentHandler::endElement(const ::rtl::OUString & _sName)
lcl_exportPrettyPrinting(m_xDelegatee);
sNewName = lcl_createAttribute(XML_NP_RPT,XML_DETAIL);
}
+ else if ( _sName.equalsAscii("table:table-header-rows") )
+ {
+ m_bCountColumnHeader = false;
+ }
else if ( _sName.equalsAscii("table:table-rows") )
m_bTableRowsStarted = false;
else if ( m_bTableRowsStarted && m_bFirstRowExported && (_sName.equalsAscii("table:table-row") || _sName.equalsAscii("table:table-cell")) )
@@ -360,8 +385,26 @@ void ExportDocumentHandler::exportTableRows()
uno::Reference< xml::sax::XAttributeList > xCellAtt = pCellAtt;
pCellAtt->AddAttribute(sValueType,s_sString);
+ bool bRemoveString = true;
::rtl::OUString sFormula;
const sal_Int32 nCount = m_aColumns.getLength();
+ if ( m_nColumnCount > nCount )
+ {
+ const sal_Int32 nEmptyCellCount = m_nColumnCount - nCount;
+ for(sal_Int32 i = 0; i < nEmptyCellCount ; ++i)
+ {
+ m_xDelegatee->startElement(sCell,xCellAtt);
+ if ( bRemoveString )
+ {
+ bRemoveString = false;
+ pCellAtt->RemoveAttribute(sValueType);
+ pCellAtt->AddAttribute(sValueType,s_sFloat);
+ } // if ( i == 0 )
+ m_xDelegatee->startElement(sP,NULL);
+ m_xDelegatee->endElement(sP);
+ m_xDelegatee->endElement(sCell);
+ }
+ }
for(sal_Int32 i = 0; i < nCount ; ++i)
{
sFormula = s_sFieldPrefix;
@@ -372,8 +415,9 @@ void ExportDocumentHandler::exportTableRows()
pList->AddAttribute(sFormulaAttrib,sFormula);
m_xDelegatee->startElement(sCell,xCellAtt);
- if ( i == 0 )
+ if ( bRemoveString )
{
+ bRemoveString = false;
pCellAtt->RemoveAttribute(sValueType);
pCellAtt->AddAttribute(sValueType,s_sFloat);
}
diff --git a/reportdesign/source/filter/xml/xmlExportDocumentHandler.hxx b/reportdesign/source/filter/xml/xmlExportDocumentHandler.hxx
index 33cad946997a..3da9f99ca9d1 100644
--- a/reportdesign/source/filter/xml/xmlExportDocumentHandler.hxx
+++ b/reportdesign/source/filter/xml/xmlExportDocumentHandler.hxx
@@ -96,9 +96,11 @@ private:
::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDatabaseDataProvider > m_xDatabaseDataProvider;
::com::sun::star::uno::Sequence< ::rtl::OUString > m_aColumns;
sal_Int32 m_nCurrentCellIndex;
+ sal_Int32 m_nColumnCount;
bool m_bTableRowsStarted;
bool m_bFirstRowExported;
bool m_bExportChar;
+ bool m_bCountColumnHeader;
};
// -----------------------------------------------------------------------------
} // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlHelper.cxx b/reportdesign/source/filter/xml/xmlHelper.cxx
index 1b81d87a1119..d0e75499ace0 100644
--- a/reportdesign/source/filter/xml/xmlHelper.cxx
+++ b/reportdesign/source/filter/xml/xmlHelper.cxx
@@ -43,6 +43,7 @@
#include <com/sun/star/awt/FontDescriptor.hpp>
#include <com/sun/star/awt/TextAlign.hpp>
#include <com/sun/star/awt/ImagePosition.hpp>
+#include <com/sun/star/awt/ImageScaleMode.hpp>
#include <xmloff/prstylei.hxx>
#include "xmlstrings.hrc"
#include "xmlEnums.hxx"
@@ -59,7 +60,7 @@
#include <com/sun/star/report/XReportControlFormat.hpp>
#include <com/sun/star/form/ListSourceType.hpp>
#include <com/sun/star/sdb/CommandType.hpp>
-#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
+#include <com/sun/star/style/VerticalAlignment.hpp>
#include <xmloff/EnumPropertyHdl.hxx>
#define XML_RPT_ALGINMENT (XML_DB_TYPES_START+1)
@@ -85,21 +86,22 @@ OPropertyHandlerFactory::~OPropertyHandlerFactory()
const XMLPropertyHandler* OPropertyHandlerFactory::GetPropertyHandler(sal_Int32 _nType) const
{
const XMLPropertyHandler* pHandler = NULL;
+ sal_Int32 nType = _nType;
+ nType &= MID_FLAG_MASK;
- switch(_nType)
+ switch(nType)
{
case XML_RPT_ALGINMENT:
{
static SvXMLEnumMapEntry __READONLY_DATA pXML_VerticalAlign_Enum[] =
{
- { XML_TOP, drawing::TextVerticalAdjust_TOP },
- { XML_MIDDLE, drawing::TextVerticalAdjust_CENTER },
- { XML_BOTTOM, drawing::TextVerticalAdjust_BOTTOM },
- { XML_JUSTIFY, drawing::TextVerticalAdjust_BLOCK },
+ { XML_TOP, style::VerticalAlignment_TOP },
+ { XML_MIDDLE, style::VerticalAlignment_MIDDLE },
+ { XML_BOTTOM, style::VerticalAlignment_BOTTOM },
{ XML_TOKEN_INVALID, 0 }
};
- pHandler = new XMLEnumPropertyHdl( pXML_VerticalAlign_Enum, ::getCppuType((const com::sun::star::drawing::TextVerticalAdjust*)0) );
+ pHandler = new XMLEnumPropertyHdl( pXML_VerticalAlign_Enum, ::getCppuType((const com::sun::star::style::VerticalAlignment*)0) );
}
break;
case (XML_SD_TYPES_START+34):
@@ -110,6 +112,8 @@ const XMLPropertyHandler* OPropertyHandlerFactory::GetPropertyHandler(sal_Int32
if ( !pHandler )
pHandler = OControlPropertyHandlerFactory::GetPropertyHandler(_nType);
+ else
+ PutHdlCache(nType, pHandler);
return pHandler;
}
// -----------------------------------------------------------------------------
@@ -134,13 +138,13 @@ UniReference < XMLPropertySetMapper > OXMLHelper::GetCellStylePropertyMap(bool _
MAP_CONST_C( PROPERTY_CONTROLBACKGROUND,
FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
+ MAP_CONST_C( PROPERTY_VERTICALALIGN, STYLE, VERTICAL_ALIGN, XML_RPT_ALGINMENT, 0 ),
MAP_CONST_C( PROPERTY_CONTROLBACKGROUNDTRANSPARENT,
FO, BACKGROUND_COLOR, XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
MAP_CONST_P( PROPERTY_CONTROLBACKGROUND,
FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
MAP_CONST_P( PROPERTY_CONTROLBACKGROUNDTRANSPARENT,
FO, BACKGROUND_COLOR, XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
- GMAP( PROPERTY_SCALEMODE,STYLE,REPEAT, (XML_SD_TYPES_START+34)|MID_FLAG_MULTI_PROPERTY, 0 ),
MAP_CONST_C_ASCII( "BorderLeft", FO, BORDER_LEFT, XML_TYPE_BORDER, 0 ),
MAP_CONST_C_ASCII( "BorderRight", FO, BORDER_RIGHT, XML_TYPE_BORDER, 0 ),
MAP_CONST_C_ASCII( "BorderTop", FO, BORDER_TOP, XML_TYPE_BORDER, 0 ),
@@ -159,7 +163,8 @@ UniReference < XMLPropertySetMapper > OXMLHelper::GetCellStylePropertyMap(bool _
FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
MAP_CONST_C( PROPERTY_CONTROLBACKGROUNDTRANSPARENT,
FO, BACKGROUND_COLOR, XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
- GMAP( PROPERTY_SCALEMODE,STYLE,REPEAT, (XML_SD_TYPES_START+34)|MID_FLAG_MULTI_PROPERTY, 0 ),
+ MAP_CONST_C( PROPERTY_VERTICALALIGN,
+ STYLE, VERTICAL_ALIGN, XML_RPT_ALGINMENT, 0 ),
MAP_CONST_C_ASCII( "BorderLeft", FO, BORDER_LEFT, XML_TYPE_BORDER, 0 ),
MAP_CONST_C_ASCII( "BorderRight", FO, BORDER_RIGHT, XML_TYPE_BORDER, 0 ),
MAP_CONST_C_ASCII( "BorderTop", FO, BORDER_TOP, XML_TYPE_BORDER, 0 ),
@@ -231,26 +236,6 @@ const SvXMLEnumMapEntry* OXMLHelper::GetForceNewPageOptions()
return s_aXML_EnumMap;
}
// -----------------------------------------------------------------------------
-//// -----------------------------------------------------------------------------
-//const SvXMLEnumMapEntry* OXMLHelper::GetGroupOnOptions()
-//{
-// static SvXMLEnumMapEntry s_aXML_EnumMap[] =
-// {
-// // { XML_DEFAULT ,report::GroupOn::DEFAULT }, // default
-// { XML_PREFIX_CHARACTERS ,report::GroupOn::PREFIX_CHARACTERS },
-// { XML_YEAR ,report::GroupOn::YEAR },
-// { XML_QUARTAL , report::GroupOn::QUARTAL },
-// { XML_MONTH , report::GroupOn::MONTH },
-// { XML_WEEK , report::GroupOn::WEEK },
-// { XML_DAY , report::GroupOn::DAY },
-// { XML_HOUR , report::GroupOn::HOUR },
-// { XML_MINUTE , report::GroupOn::MINUTE },
-// { XML_INTERVAL , report::GroupOn::INTERVAL },
-// { XML_TOKEN_INVALID, 0 }
-// };
-// return s_aXML_EnumMap;
-//}
-// -----------------------------------------------------------------------------
const SvXMLEnumMapEntry* OXMLHelper::GetKeepTogetherOptions()
{
static SvXMLEnumMapEntry s_aXML_EnumMap[] =
@@ -352,33 +337,10 @@ void OXMLHelper::copyStyleElements(const bool _bOld,const ::rtl::OUString& _sSty
xProp->getPropertyValue(PROPERTY_FONTTYPE) >>= aFont.Type;
uno::Reference<report::XReportControlFormat> xReportControlModel(_xProp,uno::UNO_QUERY);
if ( xReportControlModel.is() && aFont.Name.getLength() )
- try
- {
- xReportControlModel->setFontDescriptor(aFont);
- }
- catch(beans::UnknownPropertyException){}
-
- if ( xReportControlModel.is() )
{
try
{
- sal_Int16 nTextAlign = xReportControlModel->getParaAdjust();
- switch(nTextAlign)
- {
- case style::ParagraphAdjust_LEFT:
- nTextAlign = awt::TextAlign::LEFT;
- break;
- case style::ParagraphAdjust_CENTER:
- nTextAlign = awt::TextAlign::CENTER;
- break;
- case style::ParagraphAdjust_RIGHT:
- nTextAlign = awt::TextAlign::RIGHT;
- break;
- default:
- OSL_ENSURE(0,"Illegal text alignment value!");
- break;
- }
- xReportControlModel->setParaAdjust(nTextAlign);
+ xReportControlModel->setFontDescriptor(aFont);
}
catch(beans::UnknownPropertyException){}
}
@@ -442,5 +404,18 @@ SvXMLTokenMap* OXMLHelper::GetSubDocumentElemTokenMap()
return new SvXMLTokenMap( aElemTokenMap );
}
// -----------------------------------------------------------------------------
+const SvXMLEnumMapEntry* OXMLHelper::GetImageScaleOptions()
+{
+ static SvXMLEnumMapEntry s_aXML_EnumMap[] =
+ {
+ // { XML_NONE, awt::ImageScaleMode::None }, // default
+ { XML_ISOTROPIC, awt::ImageScaleMode::Isotropic },
+ { XML_ANISOTROPIC, awt::ImageScaleMode::Anisotropic },
+ { XML_TOKEN_INVALID, 0 }
+ };
+ return s_aXML_EnumMap;
+}
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
} // rptxml
// -----------------------------------------------------------------------------
diff --git a/reportdesign/source/filter/xml/xmlHelper.hxx b/reportdesign/source/filter/xml/xmlHelper.hxx
index cfb0df81a213..909ae9defeda 100644
--- a/reportdesign/source/filter/xml/xmlHelper.hxx
+++ b/reportdesign/source/filter/xml/xmlHelper.hxx
@@ -39,8 +39,7 @@
#include <memory>
-#define CTF_RPT_NUMBERFORMAT (XML_DB_CTF_START + 1)
-#define CTF_RPT_PARAVERTALIGNMENT (XML_DB_CTF_START + 2)
+#define CTF_RPT_NUMBERFORMAT (XML_DB_CTF_START + 1)
#define XML_STYLE_FAMILY_REPORT_ID 700
#define XML_STYLE_FAMILY_REPORT_NAME "report-element"
@@ -76,6 +75,7 @@ namespace rptxml
static const SvXMLEnumMapEntry* GetForceNewPageOptions();
static const SvXMLEnumMapEntry* GetKeepTogetherOptions();
static const SvXMLEnumMapEntry* GetCommandTypeOptions();
+ static const SvXMLEnumMapEntry* GetImageScaleOptions();
static const XMLPropertyMapEntry* GetTableStyleProps();
static const XMLPropertyMapEntry* GetColumnStyleProps();
diff --git a/reportdesign/source/filter/xml/xmlImage.cxx b/reportdesign/source/filter/xml/xmlImage.cxx
index 33c0b58646b2..b1341a35c365 100644
--- a/reportdesign/source/filter/xml/xmlImage.cxx
+++ b/reportdesign/source/filter/xml/xmlImage.cxx
@@ -33,10 +33,12 @@
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmlnmspe.hxx>
#include <xmloff/nmspmap.hxx>
+#include <xmloff/xmluconv.hxx>
#include "xmlEnums.hxx"
#include "xmlComponent.hxx"
#include "xmlReportElement.hxx"
#include "xmlControlProperty.hxx"
+#include "xmlHelper.hxx"
#include <tools/debug.hxx>
#include <svtools/pathoptions.hxx>
@@ -90,7 +92,19 @@ OXMLImage::OXMLImage( ORptFilter& rImport,
_xComponent->setPreserveIRI(s_sTRUE == sValue);
break;
case XML_TOK_SCALE:
- _xComponent->setScaleMode(s_sTRUE == sValue ? awt::ImageScaleMode::Anisotropic : awt::ImageScaleMode::None );
+ {
+ sal_uInt16 nRet = awt::ImageScaleMode::None;
+ if ( s_sTRUE == sValue )
+ {
+ nRet = awt::ImageScaleMode::Anisotropic;
+ }
+ else
+ {
+ const SvXMLEnumMapEntry* aXML_EnumMap = OXMLHelper::GetImageScaleOptions();
+ SvXMLUnitConverter::convertEnum( nRet, sValue, aXML_EnumMap );
+ }
+ _xComponent->setScaleMode( nRet );
+ }
break;
case XML_TOK_DATA_FORMULA:
_xComponent->setDataField(ORptFilter::convertFormula(sValue));
diff --git a/reportdesign/source/filter/xml/xmlImportDocumentHandler.cxx b/reportdesign/source/filter/xml/xmlImportDocumentHandler.cxx
index 32944bc81998..ea1095258261 100644
--- a/reportdesign/source/filter/xml/xmlImportDocumentHandler.cxx
+++ b/reportdesign/source/filter/xml/xmlImportDocumentHandler.cxx
@@ -58,7 +58,8 @@ using namespace ::xmloff::token;
::rtl::OUString lcl_createAttribute(const xmloff::token::XMLTokenEnum& _eNamespace,const xmloff::token::XMLTokenEnum& _eAttribute);
ImportDocumentHandler::ImportDocumentHandler(uno::Reference< uno::XComponentContext > const & context) :
- m_xContext(context)
+ m_xContext(context)
+ ,m_bOnlyOnce(true)
{
}
// -----------------------------------------------------------------------------
@@ -167,7 +168,6 @@ void SAL_CALL ImportDocumentHandler::startElement(const ::rtl::OUString & _sName
break;
}
}
- m_xDatabaseDataProvider->execute();
}
catch(uno::Exception&)
{
@@ -224,10 +224,52 @@ void SAL_CALL ImportDocumentHandler::startElement(const ::rtl::OUString & _sName
bExport = false;
else if ( _sName.equalsAscii("chart:plot-area"))
{
+ sal_Bool bHasCategories = sal_True;
+ const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0;
+ ::std::auto_ptr<SvXMLTokenMap> pMasterElemTokenMap( OXMLHelper::GetSubDocumentElemTokenMap());
+ for(sal_Int16 i = 0; i < nLength; ++i)
+ {
+ ::rtl::OUString sLocalName;
+ const rtl::OUString sAttrName = _xAttrList->getNameByIndex( i );
+ const sal_Int32 nColonPos = sAttrName.indexOf( sal_Unicode(':') );
+ if( -1L == nColonPos )
+ sLocalName = sAttrName;
+ else
+ sLocalName = sAttrName.copy( nColonPos + 1L );
+ if ( sLocalName.equalsAscii("data-source-has-labels") )
+ {
+ const rtl::OUString sValue = _xAttrList->getValueByIndex( i );
+ bHasCategories = sValue.equalsAscii("both");
+ break;
+ }
+ } // for(sal_Int16 i = 0; i < nLength; ++i)
+ beans::PropertyValue* pArgIter = m_aArguments.getArray();
+ beans::PropertyValue* pArgEnd = pArgIter + m_aArguments.getLength();
+ for(;pArgIter != pArgEnd;++pArgIter)
+ {
+ if ( pArgIter->Name.equalsAscii("HasCategories") )
+ {
+ pArgIter->Value <<= bHasCategories;
+ break;
+ }
+ } // for(;pArgIter != pArgEnd;++pArgIter)
+
+ if ( m_bOnlyOnce )
+ {
+ try
+ {
+ m_xDatabaseDataProvider->createDataSource(m_aArguments);
+ m_bOnlyOnce = false;
+ }
+ catch(uno::Exception)
+ {}
+ } // if ( m_bOnlyOnce )
+
SvXMLAttributeList* pList = new SvXMLAttributeList();
xNewAttribs = pList;
pList->AppendAttributeList(_xAttrList);
pList->AddAttribute(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("table:cell-range-address")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("local-table.$A$1:.$Z$65536")));
+
}
if ( bExport )
@@ -239,7 +281,9 @@ void SAL_CALL ImportDocumentHandler::endElement(const ::rtl::OUString & _sName)
bool bExport = true;
::rtl::OUString sNewName = _sName;
if ( _sName.equalsAscii("office:report") )
+ {
sNewName = lcl_createAttribute(XML_NP_OFFICE,XML_CHART);
+ }
else if ( _sName.equalsAscii("rpt:master-detail-fields") )
{
if ( !m_aMasterFields.empty() )
@@ -302,7 +346,9 @@ void SAL_CALL ImportDocumentHandler::initialize( const uno::Sequence< uno::Any >
uno::Reference< chart2::data::XDataReceiver > xReceiver(m_xModel,uno::UNO_QUERY_THROW);
xReceiver->attachDataProvider(m_xDatabaseDataProvider.get());
- }
+ } // if ( !m_xDatabaseDataProvider.is() )
+
+ m_aArguments = m_xDatabaseDataProvider->detectArguments(NULL);
uno::Reference< reflection::XProxyFactory > xProxyFactory( m_xContext->getServiceManager()->createInstanceWithContext(
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.reflection.ProxyFactory")),m_xContext),
diff --git a/reportdesign/source/filter/xml/xmlImportDocumentHandler.hxx b/reportdesign/source/filter/xml/xmlImportDocumentHandler.hxx
index 8a8b126828fa..068fac8cb5f9 100644
--- a/reportdesign/source/filter/xml/xmlImportDocumentHandler.hxx
+++ b/reportdesign/source/filter/xml/xmlImportDocumentHandler.hxx
@@ -90,6 +90,7 @@ private:
::osl::Mutex m_aMutex;
::std::vector< ::rtl::OUString> m_aMasterFields;
::std::vector< ::rtl::OUString> m_aDetailFields;
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aArguments;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xDelegatee;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation > m_xProxy;
@@ -99,6 +100,7 @@ private:
::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDatabaseDataProvider > m_xDatabaseDataProvider;
::std::auto_ptr<SvXMLTokenMap> m_pReportElemTokenMap;
+ bool m_bOnlyOnce;
};
// -----------------------------------------------------------------------------
} // namespace rptxml
diff --git a/reportdesign/source/filter/xml/xmlPropertyHandler.cxx b/reportdesign/source/filter/xml/xmlPropertyHandler.cxx
index a11965caf4be..33f04d81af30 100644
--- a/reportdesign/source/filter/xml/xmlPropertyHandler.cxx
+++ b/reportdesign/source/filter/xml/xmlPropertyHandler.cxx
@@ -48,12 +48,10 @@ DBG_NAME( rpt_OXMLRptPropHdlFactory )
OXMLRptPropHdlFactory::OXMLRptPropHdlFactory()
{
DBG_CTOR( rpt_OXMLRptPropHdlFactory,NULL);
-
}
// -----------------------------------------------------------------------------
OXMLRptPropHdlFactory::~OXMLRptPropHdlFactory()
{
-
DBG_DTOR( rpt_OXMLRptPropHdlFactory,NULL);
}
// -----------------------------------------------------------------------------
diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx
index 80c2c2d885f6..51307c956c65 100644
--- a/reportdesign/source/filter/xml/xmlfilter.cxx
+++ b/reportdesign/source/filter/xml/xmlfilter.cxx
@@ -566,8 +566,8 @@ sal_Bool ORptFilter::implImport( const Sequence< PropertyValue >& rDescriptor )
{ MAP_LEN( "OldFormat" ), 1, &::getCppuType((const sal_Bool*)0), beans::PropertyAttribute::BOUND, 0 },
{ MAP_LEN( "StreamName"), 0, &::getCppuType( (::rtl::OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 },
{ MAP_LEN("PrivateData"), 0, &::getCppuType( (uno::Reference<XInterface> *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 },
- { MAP_LEN( "BaseURI"), 0,&::getCppuType( (::rtl::OUString *)0 ),beans::PropertyAttribute::MAYBEVOID, 0 },
- { MAP_LEN( "StreamRelPath"), 0,&::getCppuType( (::rtl::OUString *)0 ),beans::PropertyAttribute::MAYBEVOID, 0 },
+ { MAP_LEN( "BaseURI"), 0, &::getCppuType( (::rtl::OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 },
+ { MAP_LEN( "StreamRelPath"), 0, &::getCppuType( (::rtl::OUString *)0 ), beans::PropertyAttribute::MAYBEVOID, 0 },
{ NULL, 0, 0, NULL, 0, 0 }
};
::comphelper::MediaDescriptor aDescriptor(rDescriptor);