diff options
Diffstat (limited to 'reportdesign/source/filter')
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); |