Rebased ref, commits from common ancestor: commit 8ab457543b0e3444029bb46c29111aa11f2c04ba Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri Jun 17 16:38:54 2022 +0200 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:17 2022 +0200
chart2: remove unneeded class prefix in ObjectHierarchy.cxx Change-Id: Iee007f7ff4d9665ee089712e7ba98090a8090609 diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx b/chart2/source/controller/main/ObjectHierarchy.cxx index ab1fa891377e..c696a94d8fcd 100644 --- a/chart2/source/controller/main/ObjectHierarchy.cxx +++ b/chart2/source/controller/main/ObjectHierarchy.cxx @@ -115,7 +115,7 @@ void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xCh ObjectIdentifier aDiaOID; if( xDiagram.is() ) aDiaOID = ObjectIdentifier( ObjectIdentifier::createClassifiedIdentifierForObject( static_cast<cppu::OWeakObject*>(xDiagram.get()), xChartDocument ) ); - ObjectHierarchy::tChildContainer aTopLevelContainer; + tChildContainer aTopLevelContainer; // First Level @@ -158,7 +158,7 @@ void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xCh createDiagramTree( aTopLevelContainer, xChartDocument, xDiagram ); else { - ObjectHierarchy::tChildContainer aSubContainer; + tChildContainer aSubContainer; createDiagramTree( aSubContainer, xChartDocument, xDiagram ); if( !aSubContainer.empty() ) m_aChildMap[ aDiaOID ] = aSubContainer; @@ -179,11 +179,11 @@ void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xCh aTopLevelContainer.emplace_back( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_PAGE, u"" ) ); if( ! aTopLevelContainer.empty()) - m_aChildMap[ ObjectHierarchy::getRootNodeOID() ] = aTopLevelContainer; + m_aChildMap[ObjectHierarchy::getRootNodeOID()] = aTopLevelContainer; } void ObjectHierarchy::createLegendTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, const rtl::Reference< Diagram > & xDiagram ) { @@ -199,7 +199,7 @@ void ObjectHierarchy::createLegendTree( rtl::Reference< SvxShapeGroupAnyD > xLegendShapeContainer = dynamic_cast<SvxShapeGroupAnyD*>( m_pExplicitValueProvider->getShapeForCID( aLegendOID.getObjectCID() ).get() ); - ObjectHierarchy::tChildContainer aLegendEntryOIDs; + tChildContainer aLegendEntryOIDs; lcl_getChildOIDs( aLegendEntryOIDs, xLegendShapeContainer ); m_aChildMap[ aLegendOID ] = aLegendEntryOIDs; @@ -207,7 +207,7 @@ void ObjectHierarchy::createLegendTree( } void ObjectHierarchy::createAxesTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, const rtl::Reference< Diagram > & xDiagram ) { @@ -271,7 +271,7 @@ void ObjectHierarchy::createAxesTree( } void ObjectHierarchy::createWallAndFloor( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference< Diagram > & xDiagram ) { sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram ); @@ -289,7 +289,7 @@ void ObjectHierarchy::createWallAndFloor( } void ObjectHierarchy::createDiagramTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, const rtl::Reference< Diagram > & xDiagram ) { @@ -307,7 +307,7 @@ void ObjectHierarchy::createDiagramTree( } void ObjectHierarchy::createDataSeriesTree( - ObjectHierarchy::tChildContainer & rOutDiagramSubContainer, + tChildContainer & rOutDiagramSubContainer, const rtl::Reference< Diagram > & xDiagram ) { try @@ -334,7 +334,7 @@ void ObjectHierarchy::createDataSeriesTree( ObjectIdentifier( ObjectIdentifier::createClassifiedIdentifierForParticle( aSeriesParticle ) ) ); rOutDiagramSubContainer.push_back( aSeriesOID ); - ObjectHierarchy::tChildContainer aSeriesSubContainer; + tChildContainer aSeriesSubContainer; rtl::Reference< DataSeries > const & xSeries = aSeriesSeq[nSeriesIdx]; @@ -406,7 +406,7 @@ void ObjectHierarchy::createDataSeriesTree( } } -void ObjectHierarchy::createAdditionalShapesTree( ObjectHierarchy::tChildContainer& rContainer ) +void ObjectHierarchy::createAdditionalShapesTree(tChildContainer& rContainer) { try { @@ -453,7 +453,7 @@ const ObjectHierarchy::tChildContainer & ObjectHierarchy::getChildren( const Obj if( aIt != m_aChildMap.end()) return aIt->second; } - static const ObjectHierarchy::tChildContainer EMPTY; + static const tChildContainer EMPTY; return EMPTY; } @@ -463,13 +463,13 @@ const ObjectHierarchy::tChildContainer & ObjectHierarchy::getSiblings( const Obj { for (auto const& child : m_aChildMap) { - ObjectHierarchy::tChildContainer::const_iterator aElemIt( + tChildContainer::const_iterator aElemIt( std::find( child.second.begin(), child.second.end(), rNode )); if( aElemIt != child.second.end()) return child.second; } } - static const ObjectHierarchy::tChildContainer EMPTY; + static const tChildContainer EMPTY; return EMPTY; } @@ -478,8 +478,8 @@ ObjectIdentifier ObjectHierarchy::getParentImpl( const ObjectIdentifier & rOID ) const { // search children - ObjectHierarchy::tChildContainer aChildren( getChildren( rParentOID )); - ObjectHierarchy::tChildContainer::const_iterator aIt( + tChildContainer aChildren( getChildren( rParentOID )); + tChildContainer::const_iterator aIt( std::find( aChildren.begin(), aChildren.end(), rOID )); // recursion end if( aIt != aChildren.end()) commit fd626e3db456a171d1d4864157fea7aef6dd57d9 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri Jun 17 16:29:23 2022 +0200 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:17 2022 +0200 chart2: call clear instead of creating a new empty map Change-Id: I8b21909e92b558240e84cffd9432e0d9e270284e diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx b/chart2/source/controller/main/ObjectHierarchy.cxx index e1f3697e6250..ab1fa891377e 100644 --- a/chart2/source/controller/main/ObjectHierarchy.cxx +++ b/chart2/source/controller/main/ObjectHierarchy.cxx @@ -105,7 +105,7 @@ namespace chart void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>& xChartDocument ) { - m_aChildMap = tChildMap();//clear tree + m_aChildMap.clear(); if( !xChartDocument.is() ) return; commit 75cfc6a50b0fb50c670a9fe37155b3b639afcc53 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri Jun 17 16:28:38 2022 +0200 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:17 2022 +0200 chart2: remove unneeded class prefix in ObjectHierarchy.hxx Change-Id: I1c851933e9b25dcd9a0dc29758baad8f3be7cb2e diff --git a/chart2/source/controller/inc/ObjectHierarchy.hxx b/chart2/source/controller/inc/ObjectHierarchy.hxx index 1255b7ac9910..1531866aaf2b 100644 --- a/chart2/source/controller/inc/ObjectHierarchy.hxx +++ b/chart2/source/controller/inc/ObjectHierarchy.hxx @@ -52,11 +52,10 @@ public: static bool isRootNode( const ObjectIdentifier& rOID ); /// equal to getChildren( getRootNodeOID()) - const tChildContainer & getTopLevelChildren() const; - bool hasChildren( const ObjectIdentifier& rParent ) const; - const tChildContainer & getChildren( const ObjectIdentifier& rParent ) const; - - const tChildContainer & getSiblings( const ObjectIdentifier& rNode ) const; + const tChildContainer& getTopLevelChildren() const; + bool hasChildren(const ObjectIdentifier& rParent) const; + const tChildContainer& getChildren(const ObjectIdentifier& rParent) const; + const tChildContainer& getSiblings(const ObjectIdentifier& rNode) const; /// The result is empty, if the node cannot be found in the tree ObjectIdentifier getParent( const ObjectIdentifier& rNode ) const; @@ -66,30 +65,29 @@ public: private: void createTree( const rtl::Reference<::chart::ChartModel> & xChartDocument ); void createAxesTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, const rtl::Reference< ::chart::Diagram > & xDiagram ); void createDiagramTree( - ObjectHierarchy::tChildContainer& rContainer, + tChildContainer& rContainer, const rtl::Reference<::chart::ChartModel>& xChartDoc, const rtl::Reference< ::chart::Diagram >& xDiagram ); void createDataSeriesTree( - ObjectHierarchy::tChildContainer & rOutDiagramSubContainer, + tChildContainer & rOutDiagramSubContainer, const rtl::Reference< ::chart::Diagram > & xDiagram ); static void createWallAndFloor( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference< ::chart::Diagram > & xDiagram ); void createLegendTree( - ObjectHierarchy::tChildContainer & rContainer, + tChildContainer & rContainer, const rtl::Reference<::chart::ChartModel> & xChartDoc, const rtl::Reference< ::chart::Diagram > & xDiagram ); - void createAdditionalShapesTree( ObjectHierarchy::tChildContainer& rContainer ); + void createAdditionalShapesTree(tChildContainer& rContainer); ObjectIdentifier getParentImpl( const ObjectIdentifier& rParentOID, const ObjectIdentifier& rOID ) const; - typedef std::map< ObjectIdentifier, ObjectHierarchy::tChildContainer > - tChildMap; + typedef std::map<ObjectIdentifier, tChildContainer> tChildMap; tChildMap m_aChildMap; ExplicitValueProvider* m_pExplicitValueProvider; bool m_bFlattenDiagram; commit 0787eeec35ddf44de9189683addf1b2c5bbae3a6 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon May 23 15:50:59 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 oox export: export line/fill and text props. of a data table Change-Id: I02a4c35693b599578e073d52a2d22ad59bc31786 diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 988fe4413529..458f72112907 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -2066,6 +2066,9 @@ void ChartExport::exportDataTable( ) if (bShowKeys) pFS->singleElement(FSNS(XML_c, XML_showKeys), XML_val, "1"); + exportShapeProps(aPropSet); + exportTextProps(aPropSet); + pFS->endElement(FSNS(XML_c, XML_dTable)); } commit 8a9973b2c37b989aad94e41ed4b504930412ea81 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat May 21 10:52:51 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 chart2: set the char props. to the cells of a data table from model This copies the char. properties from the model to the cells of a data table, so the correct char width, font is used for text when the table is rendered. Also add margin to the text, so it looks better. Change-Id: Ib74a8136459a31d64a86dec36a6ba14d2c313cf2 diff --git a/chart2/source/view/main/DataTableView.cxx b/chart2/source/view/main/DataTableView.cxx index 3992ea84d012..c8e2adae6fbe 100644 --- a/chart2/source/view/main/DataTableView.cxx +++ b/chart2/source/view/main/DataTableView.cxx @@ -5,7 +5,6 @@ * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * */ #include <DataTableView.hxx> @@ -59,11 +58,70 @@ void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet) xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); } + +void copyProperty(uno::Reference<beans::XPropertySet>& xOut, + uno::Reference<beans::XPropertySet>& xIn, OUString const& sPropertyName) +{ + xOut->setPropertyValue(sPropertyName, xIn->getPropertyValue(sPropertyName)); +} } void DataTableView::setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet, bool bLeft, bool bTop, bool bRight, bool bBottom) { + uno::Reference<beans::XPropertySet> xDataTableProperties = m_xDataTableModel.get(); + + copyProperty(xPropertySet, xDataTableProperties, "CharColor"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontFamily"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontFamilyAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontFamilyComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontCharSet"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontCharSetAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontCharSetComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontName"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontNameAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontNameComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontPitch"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontPitchAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontPitchComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontStyleName"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontStyleNameAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharFontStyleNameComplex"); + + copyProperty(xPropertySet, xDataTableProperties, "CharHeight"); + copyProperty(xPropertySet, xDataTableProperties, "CharHeightAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharHeightComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharKerning"); + copyProperty(xPropertySet, xDataTableProperties, "CharLocale"); + copyProperty(xPropertySet, xDataTableProperties, "CharLocaleAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharLocaleComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharPosture"); + copyProperty(xPropertySet, xDataTableProperties, "CharPostureAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharPostureComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharRelief"); + copyProperty(xPropertySet, xDataTableProperties, "CharShadowed"); + copyProperty(xPropertySet, xDataTableProperties, "CharStrikeout"); + copyProperty(xPropertySet, xDataTableProperties, "CharUnderline"); + copyProperty(xPropertySet, xDataTableProperties, "CharUnderlineColor"); + copyProperty(xPropertySet, xDataTableProperties, "CharUnderlineHasColor"); + copyProperty(xPropertySet, xDataTableProperties, "CharOverline"); + copyProperty(xPropertySet, xDataTableProperties, "CharOverlineColor"); + copyProperty(xPropertySet, xDataTableProperties, "CharOverlineHasColor"); + copyProperty(xPropertySet, xDataTableProperties, "CharWeight"); + copyProperty(xPropertySet, xDataTableProperties, "CharWeightAsian"); + copyProperty(xPropertySet, xDataTableProperties, "CharWeightComplex"); + copyProperty(xPropertySet, xDataTableProperties, "CharWordMode"); + + float fFontHeight = 0.0; + xDataTableProperties->getPropertyValue("CharHeight") >>= fFontHeight; + fFontHeight = o3tl::convert(fFontHeight, o3tl::Length::pt, o3tl::Length::mm100); + uno::Any aXDistanceAny(sal_Int32(std::round(fFontHeight * 0.18f))); + uno::Any aYDistanceAny(sal_Int32(std::round(fFontHeight * 0.30f))); + xPropertySet->setPropertyValue("TextLeftDistance", aXDistanceAny); + xPropertySet->setPropertyValue("TextRightDistance", aXDistanceAny); + xPropertySet->setPropertyValue("TextUpperDistance", aYDistanceAny); + xPropertySet->setPropertyValue("TextLowerDistance", aYDistanceAny); + xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF))); xPropertySet->setPropertyValue("TextVerticalAdjust", uno::Any(drawing::TextVerticalAdjust_TOP)); xPropertySet->setPropertyValue("ParaAdjust", uno::Any(style::ParagraphAdjust_CENTER)); commit bd65f5f39fc76b5e466f74537d04e42749d2a4d5 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat May 21 10:51:55 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 chart2: add char properties to the DataTable model Change-Id: Ie4b49f36def7d20f89695157c3b95e6ee5d16d83 diff --git a/chart2/source/model/main/DataTable.cxx b/chart2/source/model/main/DataTable.cxx index 0b7fba3176e2..b57566005e83 100644 --- a/chart2/source/model/main/DataTable.cxx +++ b/chart2/source/model/main/DataTable.cxx @@ -95,8 +95,9 @@ private: { std::vector<beans::Property> aProperties; lcl_AddPropertiesToVector(aProperties); - chart::LinePropertiesHelper::AddPropertiesToVector(aProperties); - chart::FillProperties::AddPropertiesToVector(aProperties); + ::chart::LinePropertiesHelper::AddPropertiesToVector(aProperties); + ::chart::FillProperties::AddPropertiesToVector(aProperties); + ::chart::CharacterProperties::AddPropertiesToVector(aProperties); std::sort(aProperties.begin(), aProperties.end(), chart::PropertyNameLess()); return comphelper::containerToSequence(aProperties); @@ -214,7 +215,8 @@ sal_Bool SAL_CALL DataTable::supportsService(const OUString& rServiceName) uno::Sequence<OUString> SAL_CALL DataTable::getSupportedServiceNames() { return { "com.sun.star.chart2.DataTable", "com.sun.star.beans.PropertySet", - "com.sun.star.drawing.FillProperties", "com.sun.star.drawing.LineProperties" }; + "com.sun.star.drawing.FillProperties", "com.sun.star.drawing.LineProperties", + "com.sun.star.style.CharacterProperties" }; } IMPLEMENT_FORWARD_XINTERFACE2(DataTable, DataTable_Base, ::property::OPropertySet) commit 1e1d3dfd87e50e324b66cef9ae517b4882fafc27 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat May 21 00:00:30 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 oox export: add export of basic properties of a data table Change-Id: I2c8b76125fc788a9e4df164171d6cbd351bc1c4a diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index 8a6d5fa7d298..988fe4413529 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -1732,6 +1732,7 @@ void ChartExport::exportPlotArea(const Reference< css::chart::XChartDocument >& } //Axis Data exportAxes( ); + // Data Table exportDataTable(); @@ -2033,35 +2034,41 @@ void ChartExport::exportGradientFill( const Reference< XPropertySet >& xPropSet void ChartExport::exportDataTable( ) { + auto xDataTable = mxNewDiagram->getDataTable(); + if (!xDataTable.is()) + return; + FSHelperPtr pFS = GetFS(); - Reference< beans::XPropertySet > aPropSet( mxDiagram, uno::UNO_QUERY ); + uno::Reference<beans::XPropertySet> aPropSet(xDataTable, uno::UNO_QUERY); bool bShowVBorder = false; bool bShowHBorder = false; bool bShowOutline = false; + bool bShowKeys = false; - if (GetProperty( aPropSet, "DataTableHBorder")) + if (GetProperty(aPropSet, "HBorder")) mAny >>= bShowHBorder; - if (GetProperty( aPropSet, "DataTableVBorder")) + if (GetProperty(aPropSet, "VBorder")) mAny >>= bShowVBorder; - if (GetProperty( aPropSet, "DataTableOutline")) + if (GetProperty(aPropSet, "Outline")) + mAny >>= bShowOutline; + if (GetProperty(aPropSet, "Keys")) mAny >>= bShowOutline; - - if (!(bShowVBorder || bShowHBorder || bShowOutline)) - return; pFS->startElement(FSNS(XML_c, XML_dTable)); + if (bShowHBorder) - pFS->singleElement( FSNS( XML_c, XML_showHorzBorder ), - XML_val, "1" ); + pFS->singleElement(FSNS(XML_c, XML_showHorzBorder), XML_val, "1" ); if (bShowVBorder) pFS->singleElement(FSNS(XML_c, XML_showVertBorder), XML_val, "1"); if (bShowOutline) pFS->singleElement(FSNS(XML_c, XML_showOutline), XML_val, "1"); + if (bShowKeys) + pFS->singleElement(FSNS(XML_c, XML_showKeys), XML_val, "1"); - pFS->endElement( FSNS( XML_c, XML_dTable)); - + pFS->endElement(FSNS(XML_c, XML_dTable)); } + void ChartExport::exportAreaChart( const Reference< chart2::XChartType >& xChartType ) { FSHelperPtr pFS = GetFS(); commit 905fce909f1ce0df4caad36d48afeb14b9dfd05b Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri May 20 23:55:45 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 chart2: apply line props. to borders when rendering a data table This sets the color, line width, line style to the borders of the table when rendering the data table. We also need the ChartModel inside DataTableView, so we can access the needed line dashes. Change-Id: Id3bef23b75e88517d6569ad87a716f178ed64343 diff --git a/chart2/source/view/axes/VAxisBase.cxx b/chart2/source/view/axes/VAxisBase.cxx index 96ddc893643f..cb61145178c0 100644 --- a/chart2/source/view/axes/VAxisBase.cxx +++ b/chart2/source/view/axes/VAxisBase.cxx @@ -244,7 +244,8 @@ void VAxisBase::updateUnscaledValuesAtTicks( TickIter& rIter ) } void VAxisBase::createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>& /*rSeriesPlotterList*/, - uno::Reference<util::XNumberFormatsSupplier> const& /*xNumberFormatsSupplier*/) + uno::Reference<util::XNumberFormatsSupplier> const& /*xNumberFormatsSupplier*/, + rtl::Reference<::chart::ChartModel> const& /*xChartDoc*/) { } diff --git a/chart2/source/view/axes/VAxisBase.hxx b/chart2/source/view/axes/VAxisBase.hxx index ac18257b4d4c..1934c604650f 100644 --- a/chart2/source/view/axes/VAxisBase.hxx +++ b/chart2/source/view/axes/VAxisBase.hxx @@ -29,6 +29,7 @@ namespace chart class VSeriesPlotter; class DataTableView; +class ChartModel; class VAxisBase : public VAxisOrGridBase { @@ -63,7 +64,8 @@ public: void setExtraLinePositionAtOtherAxis( double fCrossingAt ); virtual void createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>& rSeriesPlotterList, - css::uno::Reference<css::util::XNumberFormatsSupplier> const& xNumberFormatsSupplier); + css::uno::Reference<css::util::XNumberFormatsSupplier> const& xNumberFormatsSupplier, + rtl::Reference<::chart::ChartModel> const& xChartDoc); std::shared_ptr<DataTableView> getDataTableView() { return m_pDataTableView; } diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx index 096586279454..d7e78d5d2e85 100644 --- a/chart2/source/view/axes/VCartesianAxis.cxx +++ b/chart2/source/view/axes/VCartesianAxis.cxx @@ -37,6 +37,7 @@ #include <svx/unoshtxt.hxx> #include <VSeriesPlotter.hxx> #include <DataTableView.hxx> +#include <ChartModel.hxx> #include <comphelper/scopeguard.hxx> @@ -1993,11 +1994,12 @@ void VCartesianAxis::createShapes() } void VCartesianAxis::createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>& rSeriesPlotterList, - Reference<util::XNumberFormatsSupplier> const& xNumberFormatsSupplier) + Reference<util::XNumberFormatsSupplier> const& xNumberFormatsSupplier, + rtl::Reference<::chart::ChartModel> const& xChartDoc) { if (m_aAxisProperties.m_bDisplayDataTable) { - m_pDataTableView.reset(new DataTableView(m_aAxisProperties.m_xDataTableModel)); + m_pDataTableView.reset(new DataTableView(xChartDoc, m_aAxisProperties.m_xDataTableModel)); m_pDataTableView->initializeValues(rSeriesPlotterList); m_xNumberFormatsSupplier = xNumberFormatsSupplier; } diff --git a/chart2/source/view/axes/VCartesianAxis.hxx b/chart2/source/view/axes/VCartesianAxis.hxx index 9f396fef43b8..a9baca907bdd 100644 --- a/chart2/source/view/axes/VCartesianAxis.hxx +++ b/chart2/source/view/axes/VCartesianAxis.hxx @@ -100,7 +100,8 @@ public: }; void createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>& rSeriesPlotterList, - css::uno::Reference<css::util::XNumberFormatsSupplier> const& xNumberFormatsSupplier) override; + css::uno::Reference<css::util::XNumberFormatsSupplier> const& xNumberFormatsSupplier, + rtl::Reference<::chart::ChartModel> const& xChartDoc) override; private: //methods /** * Go through all tick label positions and decide which labels to display diff --git a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx index cd0d49188a1c..3ea42cb087a0 100644 --- a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx +++ b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx @@ -166,7 +166,7 @@ void VCartesianCoordinateSystem::createVAxisList( apVAxis->set3DWallPositions( m_eLeftWallPos, m_eBackWallPos, m_eBottomPos ); apVAxis->initAxisLabelProperties(rFontReferenceSize,rMaximumSpaceForLabels); - apVAxis->createDataTableView(rSeriesPlotterList, xNumberFormatsSupplier); + apVAxis->createDataTableView(rSeriesPlotterList, xNumberFormatsSupplier, xChartDoc); } } } diff --git a/chart2/source/view/inc/DataTableView.hxx b/chart2/source/view/inc/DataTableView.hxx index 3f4d97629035..0967768af93e 100644 --- a/chart2/source/view/inc/DataTableView.hxx +++ b/chart2/source/view/inc/DataTableView.hxx @@ -13,23 +13,32 @@ #include <svx/unodraw/SvxTableShape.hxx> #include <com/sun/star/awt/Rectangle.hpp> #include <DataTable.hxx> +#include <VLineProperties.hxx> namespace chart { class VSeriesPlotter; +class ChartModel; class DataTableView final { +private: + rtl::Reference<::chart::ChartModel> const& m_xChartModel; rtl::Reference<SvxShapeGroupAnyD> m_xTarget; rtl::Reference<SvxTableShape> m_xTableShape; rtl::Reference<DataTable> m_xDataTableModel; + VLineProperties m_aLineProperties; std::vector<OUString> m_aDataSeriesNames; std::vector<OUString> m_aXValues; std::vector<std::vector<OUString>> m_pDataSeriesValues; + void setCellDefaults(css::uno::Reference<css::beans::XPropertySet>& xPropertySet, bool bLeft, + bool bTop, bool bRight, bool bBottom); + public: - DataTableView(rtl::Reference<DataTable> const& rDataTableModel); + DataTableView(rtl::Reference<::chart::ChartModel> const& xChartDoc, + rtl::Reference<DataTable> const& rDataTableModel); void initializeShapes(const rtl::Reference<SvxShapeGroupAnyD>& xTarget); void initializeValues(std::vector<std::unique_ptr<VSeriesPlotter>>& rSeriesPlotterList); void createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector const& rEnd, diff --git a/chart2/source/view/main/DataTableView.cxx b/chart2/source/view/main/DataTableView.cxx index 92714a8a85ba..3992ea84d012 100644 --- a/chart2/source/view/main/DataTableView.cxx +++ b/chart2/source/view/main/DataTableView.cxx @@ -12,6 +12,7 @@ #include <VSeriesPlotter.hxx> #include <ShapeFactory.hxx> #include <ExplicitCategoriesProvider.hxx> +#include <ChartModel.hxx> #include <svx/svdotable.hxx> @@ -19,10 +20,14 @@ #include <com/sun/star/table/BorderLine.hpp> #include <com/sun/star/table/BorderLine2.hpp> #include <com/sun/star/table/TableBorder.hpp> +#include <com/sun/star/table/BorderLineStyle.hpp> #include <com/sun/star/style/ParagraphAdjust.hpp> #include <com/sun/star/drawing/TextHorizontalAdjust.hpp> #include <com/sun/star/drawing/TextVerticalAdjust.hpp> +#include <com/sun/star/drawing/LineDash.hpp> +#include <com/sun/star/drawing/LineStyle.hpp> #include <com/sun/star/util/XBroadcaster.hpp> +#include <com/sun/star/container/XNameContainer.hpp> #include <o3tl/unit_conversion.hxx> @@ -30,48 +35,97 @@ using namespace css; namespace chart { -DataTableView::DataTableView(rtl::Reference<DataTable> const& rDataTableModel) - : m_xDataTableModel(rDataTableModel) +DataTableView::DataTableView(rtl::Reference<::chart::ChartModel> const& xChartModel, + rtl::Reference<DataTable> const& rDataTableModel) + : m_xChartModel(xChartModel) + , m_xDataTableModel(rDataTableModel) { + uno::Reference<beans::XPropertySet> xProp = m_xDataTableModel.get(); + m_aLineProperties.initFromPropertySet(xProp); } namespace { -void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet, bool bLeft, bool bTop, - bool bRight, bool bBottom) +void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet) { xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF))); xPropertySet->setPropertyValue("TextVerticalAdjust", uno::Any(drawing::TextVerticalAdjust_TOP)); xPropertySet->setPropertyValue("ParaAdjust", uno::Any(style::ParagraphAdjust_CENTER)); table::BorderLine2 aBorderLine; - aBorderLine.LineWidth = o3tl::convert(0.5, o3tl::Length::pt, o3tl::Length::mm100); + aBorderLine.LineWidth = 0; aBorderLine.Color = 0x000000; - if (bLeft) - xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); - if (bTop) - xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); - if (bRight) - xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine)); - if (bBottom) - xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine)); + xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); + xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); +} } -void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet) +void DataTableView::setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet, bool bLeft, + bool bTop, bool bRight, bool bBottom) { xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF))); xPropertySet->setPropertyValue("TextVerticalAdjust", uno::Any(drawing::TextVerticalAdjust_TOP)); xPropertySet->setPropertyValue("ParaAdjust", uno::Any(style::ParagraphAdjust_CENTER)); - table::BorderLine2 aBorderLine; - aBorderLine.LineWidth = 0; - aBorderLine.Color = 0x000000; + drawing::LineStyle eStyle = drawing::LineStyle_NONE; + m_aLineProperties.LineStyle >>= eStyle; - xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); - xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); -} + if (eStyle != drawing::LineStyle_NONE) + { + table::BorderLine2 aBorderLine; + + sal_Int32 nWidth = 0; + m_aLineProperties.Width >>= nWidth; + aBorderLine.LineWidth = o3tl::convert(nWidth, o3tl::Length::mm100, o3tl::Length::twip); + + sal_Int32 nColor = 0; + m_aLineProperties.Color >>= nColor; + aBorderLine.Color = nColor; + + aBorderLine.LineStyle = table::BorderLineStyle::SOLID; + + if (eStyle == drawing::LineStyle_DASH) + { + OUString aDashName; + m_aLineProperties.DashName >>= aDashName; + if (!aDashName.isEmpty()) + { + uno::Reference<container::XNameContainer> xDashTable( + m_xChartModel->createInstance("com.sun.star.drawing.DashTable"), + uno::UNO_QUERY); + if (xDashTable.is() && xDashTable->hasByName(aDashName)) + { + drawing::LineDash aLineDash; + xDashTable->getByName(aDashName) >>= aLineDash; + + if (aLineDash.Dots == 0 && aLineDash.Dashes == 0) + aBorderLine.LineStyle = table::BorderLineStyle::SOLID; + else if (aLineDash.Dots == 1 && aLineDash.Dashes == 0) + aBorderLine.LineStyle = table::BorderLineStyle::DOTTED; + else if (aLineDash.Dots == 0 && aLineDash.Dashes == 1) + aBorderLine.LineStyle = table::BorderLineStyle::DASHED; + else if (aLineDash.Dots == 1 && aLineDash.Dashes == 1) + aBorderLine.LineStyle = table::BorderLineStyle::DASH_DOT; + else if (aLineDash.Dots == 2 && aLineDash.Dashes == 1) + aBorderLine.LineStyle = table::BorderLineStyle::DASH_DOT_DOT; + else + aBorderLine.LineStyle = table::BorderLineStyle::DASHED; + } + } + } + + if (bLeft) + xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); + if (bTop) + xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); + if (bRight) + xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine)); + if (bBottom) + xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine)); + } } + void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector const& rEnd, sal_Int32 nColumnWidth) { commit 488f8543537ac5e1570f9a6f594891c2289dbb0d Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri May 20 18:39:34 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 chart2: better readable DataTable properties definition Change-Id: Ib9cadee39f58b73782e6a3268d86b688183de1fb diff --git a/chart2/source/model/main/DataTable.cxx b/chart2/source/model/main/DataTable.cxx index 12e08e28b3e4..0b7fba3176e2 100644 --- a/chart2/source/model/main/DataTable.cxx +++ b/chart2/source/model/main/DataTable.cxx @@ -34,23 +34,21 @@ enum DataTableProperty_Keys, }; -void lcl_AddPropertiesToVector(std::vector<beans::Property>& rOutProperties) -{ - rOutProperties.emplace_back("Show", DataTableProperty_Show, cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT); - rOutProperties.emplace_back( - "HBorder", DataTableProperty_HorizontalBorder, cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT); - rOutProperties.emplace_back( - "VBorder", DataTableProperty_VerticalBorder, cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT); - rOutProperties.emplace_back("Outline", DataTableProperty_Outilne, cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT); - rOutProperties.emplace_back("Keys", DataTableProperty_Keys, cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT); +void lcl_AddPropertiesToVector(std::vector<beans::Property>& rProps) +{ + auto const nBound = beans::PropertyAttribute::BOUND; + auto const nMaybeDefault = beans::PropertyAttribute::MAYBEDEFAULT; + + rProps.emplace_back("Show", DataTableProperty_Show, cppu::UnoType<bool>::get(), + nBound | nMaybeDefault); + rProps.emplace_back("HBorder", DataTableProperty_HorizontalBorder, cppu::UnoType<bool>::get(), + nBound | nMaybeDefault); + rProps.emplace_back("VBorder", DataTableProperty_VerticalBorder, cppu::UnoType<bool>::get(), + nBound | nMaybeDefault); + rProps.emplace_back("Outline", DataTableProperty_Outilne, cppu::UnoType<bool>::get(), + nBound | nMaybeDefault); + rProps.emplace_back("Keys", DataTableProperty_Keys, cppu::UnoType<bool>::get(), + nBound | nMaybeDefault); } struct StaticLegendDefaults_Initializer commit 79bbbdb60eb84819d4c39297e40a04b3a9597615 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Fri May 20 18:20:51 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:16 2022 +0200 chart2: remove setting DataTable* props. from old chart::XDialog No API change needed as the properties were not officialy part of the API in the first place. Change-Id: I8682087d13ab2e9eb1c619646b87cde59c3a8e45 diff --git a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx index db1abe739787..0fea6c4da7f9 100644 --- a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx @@ -137,9 +137,6 @@ enum PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE, PROP_DIAGRAM_AUTOMATIC_SIZE, - PROP_DIAGRAM_DATATABLEHBORDER, - PROP_DIAGRAM_DATATABLEVBORDER, - PROP_DIAGRAM_DATATABLEOUTLINE, PROP_DIAGRAM_EXTERNALDATA }; @@ -381,21 +378,7 @@ void lcl_AddPropertiesToVector( cppu::UnoType<bool>::get(), beans::PropertyAttribute::BOUND | beans::PropertyAttribute::MAYBEDEFAULT ); - rOutProperties.emplace_back( "DataTableHBorder", - PROP_DIAGRAM_DATATABLEHBORDER, - cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); - rOutProperties.emplace_back( "DataTableVBorder", - PROP_DIAGRAM_DATATABLEVBORDER, - cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); - rOutProperties.emplace_back( "DataTableOutline", - PROP_DIAGRAM_DATATABLEOUTLINE, - cppu::UnoType<bool>::get(), - beans::PropertyAttribute::BOUND - | beans::PropertyAttribute::MAYBEDEFAULT ); + rOutProperties.emplace_back( "ExternalData", PROP_DIAGRAM_EXTERNALDATA, cppu::UnoType<OUString>::get(), commit fee5e31c368f533b2991ca25d044b3536af5a651 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Thu May 19 21:52:15 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:15 2022 +0200 chart2: use {V,H}Border, Outline Data Table props. at rendering insert DataTable class into DataTableView, so it is possible to take the properties into account when rendering. Change rendering: VBorder - draw vert. border of data table HBorder - draw horiz. border of data table Outline - draw the outline borders of a data table Change-Id: I8348d0672d9c188014d664d667abddde8ebbc7c0 diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx index 2266dd143d2e..096586279454 100644 --- a/chart2/source/view/axes/VCartesianAxis.cxx +++ b/chart2/source/view/axes/VCartesianAxis.cxx @@ -1997,7 +1997,7 @@ void VCartesianAxis::createDataTableView(std::vector<std::unique_ptr<VSeriesPlot { if (m_aAxisProperties.m_bDisplayDataTable) { - m_pDataTableView.reset(new DataTableView); + m_pDataTableView.reset(new DataTableView(m_aAxisProperties.m_xDataTableModel)); m_pDataTableView->initializeValues(rSeriesPlotterList); m_xNumberFormatsSupplier = xNumberFormatsSupplier; } diff --git a/chart2/source/view/inc/DataTableView.hxx b/chart2/source/view/inc/DataTableView.hxx index 517de9699d9e..3f4d97629035 100644 --- a/chart2/source/view/inc/DataTableView.hxx +++ b/chart2/source/view/inc/DataTableView.hxx @@ -12,6 +12,7 @@ #include <svx/unoshape.hxx> #include <svx/unodraw/SvxTableShape.hxx> #include <com/sun/star/awt/Rectangle.hpp> +#include <DataTable.hxx> namespace chart { @@ -21,17 +22,18 @@ class DataTableView final { rtl::Reference<SvxShapeGroupAnyD> m_xTarget; rtl::Reference<SvxTableShape> m_xTableShape; + rtl::Reference<DataTable> m_xDataTableModel; std::vector<OUString> m_aDataSeriesNames; std::vector<OUString> m_aXValues; std::vector<std::vector<OUString>> m_pDataSeriesValues; public: - DataTableView(); + DataTableView(rtl::Reference<DataTable> const& rDataTableModel); void initializeShapes(const rtl::Reference<SvxShapeGroupAnyD>& xTarget); void initializeValues(std::vector<std::unique_ptr<VSeriesPlotter>>& rSeriesPlotterList); void createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector const& rEnd, - sal_Int32 nDistance); + sal_Int32 nColumnWidth); }; } //namespace chart diff --git a/chart2/source/view/main/DataTableView.cxx b/chart2/source/view/main/DataTableView.cxx index 7d29f0e4276d..92714a8a85ba 100644 --- a/chart2/source/view/main/DataTableView.cxx +++ b/chart2/source/view/main/DataTableView.cxx @@ -30,11 +30,15 @@ using namespace css; namespace chart { -DataTableView::DataTableView() = default; +DataTableView::DataTableView(rtl::Reference<DataTable> const& rDataTableModel) + : m_xDataTableModel(rDataTableModel) +{ +} namespace { -void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet) +void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet, bool bLeft, bool bTop, + bool bRight, bool bBottom) { xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF))); xPropertySet->setPropertyValue("TextVerticalAdjust", uno::Any(drawing::TextVerticalAdjust_TOP)); @@ -44,10 +48,14 @@ void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet) aBorderLine.LineWidth = o3tl::convert(0.5, o3tl::Length::pt, o3tl::Length::mm100); aBorderLine.Color = 0x000000; - xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); - xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine)); - xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); - xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine)); + if (bLeft) + xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine)); + if (bTop) + xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine)); + if (bRight) + xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine)); + if (bBottom) + xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine)); } void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet) @@ -65,7 +73,7 @@ void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet) } } void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector const& rEnd, - sal_Int32 nColumnSize) + sal_Int32 nColumnWidth) { if (!m_xTarget.is()) return; @@ -74,7 +82,6 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV m_xTableShape = ShapeFactory::createTable(m_xTarget); uno::Reference<table::XTable> xTable; - uno::Reference<util::XBroadcaster> xBroadcaster; try { auto rDelta = rEnd - rStart; @@ -86,18 +93,31 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV return; } - if (xTable.is()) - xBroadcaster.set(xTable, uno::UNO_QUERY); + if (!xTable.is()) + return; + + uno::Reference<util::XBroadcaster> xBroadcaster(xTable, uno::UNO_QUERY); if (!xBroadcaster.is()) return; xBroadcaster->lockBroadcasts(); + + bool bHBorder = false; + bool bVBorder = false; + bool bOutline = false; + + m_xDataTableModel->getPropertyValue("HBorder") >>= bHBorder; + m_xDataTableModel->getPropertyValue("VBorder") >>= bVBorder; + m_xDataTableModel->getPropertyValue("Outline") >>= bOutline; + + sal_Int32 nColumnCount = m_aXValues.size(); uno::Reference<table::XTableColumns> xTableColumns = xTable->getColumns(); - xTableColumns->insertByIndex(0, m_aXValues.size()); + xTableColumns->insertByIndex(0, nColumnCount); + sal_Int32 nRowCount = m_aDataSeriesNames.size(); uno::Reference<table::XTableRows> xTableRows = xTable->getRows(); - xTableRows->insertByIndex(0, m_aDataSeriesNames.size()); + xTableRows->insertByIndex(0, nRowCount); { uno::Reference<table::XCell> xCell = xTable->getCellByPosition(0, 0); @@ -120,7 +140,8 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV if (xCellTextRange.is()) { xCellTextRange->setString(rString); - setCellDefaults(xPropertySet); + bool bLeft = bOutline || (bVBorder && nColumn > 1); + setCellDefaults(xPropertySet, bLeft, bOutline, bOutline, bOutline); } nColumn++; } @@ -133,8 +154,9 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV uno::Reference<text::XTextRange> xCellTextRange(xCell, uno::UNO_QUERY); if (xCellTextRange.is()) { + bool bTop = bOutline || (bHBorder && nRow > 1); xCellTextRange->setString(rSeriesName); - setCellDefaults(xPropertySet); + setCellDefaults(xPropertySet, bOutline, bTop, bOutline, bOutline); } nRow++; } @@ -151,7 +173,25 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV if (xCellTextRange.is()) { xCellTextRange->setString(rValue); - setCellDefaults(xPropertySet); + + bool bLeft = false; + bool bTop = false; + bool bRight = false; + bool bBottom = false; + + if (nColumn > 1 && bVBorder) + bLeft = true; + + if (nRow > 1 && bHBorder) + bTop = true; + + if (nRow == nRowCount && bOutline) + bBottom = true; + + if (nColumn == nColumnCount && bOutline) + bRight = true; + + setCellDefaults(xPropertySet, bLeft, bTop, bRight, bBottom); } nColumn++; } @@ -161,7 +201,7 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV xBroadcaster->unlockBroadcasts(); auto* pTableObject = static_cast<sdr::table::SdrTableObj*>(m_xTableShape->GetSdrObject()); - pTableObject->DistributeColumns(0, pTableObject->getColumnCount() - 1, true, true); + pTableObject->DistributeColumns(0, nColumnCount - 1, true, true); uno::Reference<beans::XPropertySet> xPropertySet(xTableColumns->getByIndex(0), uno::UNO_QUERY); sal_Int32 nWidth = 0; @@ -172,7 +212,7 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV for (sal_Int32 i = 1; i < xTableColumns->getCount(); ++i) { xPropertySet.set(xTableColumns->getByIndex(i), uno::UNO_QUERY); - xPropertySet->setPropertyValue("Width", uno::Any(nColumnSize)); + xPropertySet->setPropertyValue("Width", uno::Any(nColumnWidth)); } } commit 721529a9a89c1c2f1e4834c0af28be0a75ffb093 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon May 16 16:19:39 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:15 2022 +0200 oox: support reading text and shape properties for a data table Change-Id: I740d3bd6af11457ecb54878be648ad1e22b9d4b8 diff --git a/oox/inc/drawingml/chart/datatablemodel.hxx b/oox/inc/drawingml/chart/datatablemodel.hxx index 5c7fe7901200..937dbb3c60a6 100644 --- a/oox/inc/drawingml/chart/datatablemodel.hxx +++ b/oox/inc/drawingml/chart/datatablemodel.hxx @@ -28,6 +28,9 @@ struct DataTableModel bool mbShowOutline : 1; /// Show outline bool mbShowKeys : 1; + ModelRef<Shape> mxShapeProp; /// frame formatting. + ModelRef<TextBody> mxTextProp; /// text formatting. + DataTableModel() : mbShowHBorder(false) , mbShowVBorder(false) diff --git a/oox/source/drawingml/chart/datatablecontext.cxx b/oox/source/drawingml/chart/datatablecontext.cxx index 0813a6424312..c277dae5f4d6 100644 --- a/oox/source/drawingml/chart/datatablecontext.cxx +++ b/oox/source/drawingml/chart/datatablecontext.cxx @@ -18,7 +18,8 @@ */ #include <drawingml/chart/datatablecontext.hxx> - +#include <drawingml/shapepropertiescontext.hxx> +#include <drawingml/textbodycontext.hxx> #include <drawingml/chart/plotareamodel.hxx> #include <oox/core/xmlfilterbase.hxx> #include <oox/helper/attributelist.hxx> @@ -57,6 +58,10 @@ ContextHandlerRef DataTableContext::onCreateContext(sal_Int32 nElement, case C_TOKEN(showKeys): mrModel.mbShowKeys = rAttribs.getBool(XML_val, false); break; + case C_TOKEN(spPr): + return new ShapePropertiesContext(*this, mrModel.mxShapeProp.create()); + case C_TOKEN(txPr): + return new TextBodyContext(*this, mrModel.mxTextProp.create()); } break; } diff --git a/oox/source/drawingml/chart/datatableconverter.cxx b/oox/source/drawingml/chart/datatableconverter.cxx index 3c477c5d7507..4e42b7468ebc 100644 --- a/oox/source/drawingml/chart/datatableconverter.cxx +++ b/oox/source/drawingml/chart/datatableconverter.cxx @@ -55,6 +55,9 @@ void DataTableConverter::convertFromModel(uno::Reference<chart2::XDiagram> const aPropSet.setProperty(PROP_Outline, mrModel.mbShowOutline); if (mrModel.mbShowKeys) aPropSet.setProperty(PROP_Keys, mrModel.mbShowKeys); + + getFormatter().convertFormatting(aPropSet, mrModel.mxShapeProp, mrModel.mxTextProp, + OBJECTTYPE_DATATABLE); } catch (uno::Exception&) { commit c55234a7fc50d6234534272ba943ac5e5c122bc8 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon May 16 16:10:02 2022 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Fri Jun 17 17:52:08 2022 +0200 chart2: add DataTable to AxisProperties, take account at rendering The Diagram model has the DataTable class, but now we need to take this into account at rendering. First add the DataTable to AxisProperties, to decide if the data table should be rendered or not. Change-Id: Ia18fcffccc632e4d36011544066072ae3cdfbfc7 diff --git a/chart2/source/view/axes/VAxisProperties.cxx b/chart2/source/view/axes/VAxisProperties.cxx index 8cb9e0eec7ee..f39420c9ce02 100644 --- a/chart2/source/view/axes/VAxisProperties.cxx +++ b/chart2/source/view/axes/VAxisProperties.cxx @@ -153,8 +153,9 @@ TickmarkProperties AxisProperties::getBiggestTickmarkProperties() return aTickmarkProperties; } -AxisProperties::AxisProperties( rtl::Reference< Axis > xAxisModel - , ExplicitCategoriesProvider* pExplicitCategoriesProvider ) +AxisProperties::AxisProperties(rtl::Reference<::chart::Axis> xAxisModel, + ExplicitCategoriesProvider* pExplicitCategoriesProvider, + rtl::Reference<::chart::DataTable> const& xDataTableModel) : m_xAxisModel(std::move(xAxisModel)) , m_nDimensionIndex(0) , m_bIsMainAxis(true) @@ -174,6 +175,7 @@ AxisProperties::AxisProperties( rtl::Reference< Axis > xAxisModel , m_bComplexCategories(false) , m_pExplicitCategoriesProvider(pExplicitCategoriesProvider) , m_bLimitSpaceForLabels(false) + , m_xDataTableModel(xDataTableModel) { } @@ -256,7 +258,9 @@ void AxisProperties::init( bool bCartesian ) if( bCartesian ) { if (m_nDimensionIndex == 0) - m_bDisplayDataTable = true; + { + m_bDisplayDataTable = m_xDataTableModel.is(); + } if( m_nDimensionIndex == 0 && m_nAxisType == AxisType::CATEGORY && m_pExplicitCategoriesProvider && m_pExplicitCategoriesProvider->hasComplexCategories() ) diff --git a/chart2/source/view/axes/VAxisProperties.hxx b/chart2/source/view/axes/VAxisProperties.hxx index d66b2f3a919e..6b6b7c361ea2 100644 --- a/chart2/source/view/axes/VAxisProperties.hxx +++ b/chart2/source/view/axes/VAxisProperties.hxx @@ -21,6 +21,7 @@ #include "TickmarkProperties.hxx" #include <Axis.hxx> #include <LabelAlignment.hxx> +#include <DataTable.hxx> #include <com/sun/star/chart/ChartAxisLabelPosition.hpp> #include <com/sun/star/chart/ChartAxisMarkPosition.hpp> @@ -139,10 +140,13 @@ struct AxisProperties final bool m_bLimitSpaceForLabels; + rtl::Reference<::chart::DataTable> m_xDataTableModel; + //methods: - AxisProperties( rtl::Reference< ::chart::Axis > xAxisModel - , ExplicitCategoriesProvider* pExplicitCategoriesProvider ); + AxisProperties(rtl::Reference<::chart::Axis> xAxisModel, + ExplicitCategoriesProvider* pExplicitCategoriesProvider, + rtl::Reference<::chart::DataTable> const& xDataTableModel); void init(bool bCartesian=false);//init from model data (m_xAxisModel) diff --git a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx index e1a2ba5046e3..cd0d49188a1c 100644 --- a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx +++ b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx @@ -23,6 +23,8 @@ #include <BaseCoordinateSystem.hxx> #include <AxisIndexDefines.hxx> #include <Axis.hxx> +#include <DataTable.hxx> +#include <Diagram.hxx> #include <AxisHelper.hxx> #include <cppuhelper/implbase.hxx> #include <ChartModel.hxx> @@ -130,7 +132,8 @@ void VCartesianCoordinateSystem::createVAxisList( if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis, m_xCooSysModel )) continue; - AxisProperties aAxisProperties(xAxis,getExplicitCategoriesProvider()); + rtl::Reference<Diagram> xDiagram(xChartDoc->getFirstChartDiagram()); + AxisProperties aAxisProperties(xAxis, getExplicitCategoriesProvider(), xDiagram->getDataTableRef()); aAxisProperties.m_nDimensionIndex = nDimensionIndex; aAxisProperties.m_bSwapXAndY = bSwapXAndY; aAxisProperties.m_bIsMainAxis = (nAxisIndex==0); diff --git a/chart2/source/view/axes/VPolarCoordinateSystem.cxx b/chart2/source/view/axes/VPolarCoordinateSystem.cxx index 3a3351a54fc3..338a1c4ab7ed 100644 --- a/chart2/source/view/axes/VPolarCoordinateSystem.cxx +++ b/chart2/source/view/axes/VPolarCoordinateSystem.cxx @@ -24,6 +24,8 @@ #include <AxisIndexDefines.hxx> #include <Axis.hxx> #include <AxisHelper.hxx> +#include <Diagram.hxx> +#include <DataTable.hxx> #include <ChartModel.hxx> namespace chart @@ -90,7 +92,9 @@ void VPolarCoordinateSystem::createVAxisList( rtl::Reference< Axis > xAxis = getAxisByDimension(nDimensionIndex,nAxisIndex); if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis, m_xCooSysModel )) continue; - AxisProperties aAxisProperties(xAxis,getExplicitCategoriesProvider()); + + rtl::Reference<Diagram> xDiagram(xChartDoc->getFirstChartDiagram()); + AxisProperties aAxisProperties(xAxis,getExplicitCategoriesProvider(), xDiagram->getDataTableRef()); aAxisProperties.init(); if(aAxisProperties.m_bDisplayLabels) aAxisProperties.m_nNumberFormatKey = getNumberFormatKeyForAxis(xAxis, xChartDoc);