diff options
author | Release Engineering <releng@openoffice.org> | 2011-02-18 11:14:19 +0100 |
---|---|---|
committer | Release Engineering <releng@openoffice.org> | 2011-02-18 11:14:19 +0100 |
commit | e756bcc72319554ef962ca1badbb2895784a1576 (patch) | |
tree | 4636c4102550dd3f40e83b9e8c36404cee03dd64 /oox | |
parent | f684c501959268d1e4ce6c47a204af1b756f8451 (diff) | |
parent | 40d16ca36b0bcbad4420f5fe64fb7859e69b73ff (diff) |
merged DEV300
Diffstat (limited to 'oox')
-rw-r--r-- | oox/inc/oox/drawingml/chart/converterbase.hxx | 5 | ||||
-rw-r--r-- | oox/source/drawingml/chart/converterbase.cxx | 43 | ||||
-rw-r--r-- | oox/source/drawingml/chart/titleconverter.cxx | 38 | ||||
-rw-r--r-- | oox/source/token/properties.txt | 1 |
4 files changed, 52 insertions, 35 deletions
diff --git a/oox/inc/oox/drawingml/chart/converterbase.hxx b/oox/inc/oox/drawingml/chart/converterbase.hxx index aec646d4c610..12c6c2294b32 100644 --- a/oox/inc/oox/drawingml/chart/converterbase.hxx +++ b/oox/inc/oox/drawingml/chart/converterbase.hxx @@ -138,9 +138,10 @@ public: OOXML layout model. Returns true, if returned rectangle is valid. */ bool calcAbsRectangle( ::com::sun::star::awt::Rectangle& orRect ) const; - /** Tries to set the position from the contained OOXML layout model. - Returns true, if a manual position could be calculated. */ + /** Tries to set the position and size from the contained OOXML layout model. + Returns true, if a manual position and size could be calculated. */ bool convertFromModel( PropertySet& rPropSet ); + /** Tries to set the position from the contained OOXML layout model. Returns true, if a manual position could be calculated. */ bool convertFromModel( diff --git a/oox/source/drawingml/chart/converterbase.cxx b/oox/source/drawingml/chart/converterbase.cxx index df4d40e952ac..7e601ff016af 100644 --- a/oox/source/drawingml/chart/converterbase.cxx +++ b/oox/source/drawingml/chart/converterbase.cxx @@ -33,6 +33,7 @@ #include <com/sun/star/chart/XChartDocument.hpp> #include <com/sun/star/chart/XSecondAxisTitleSupplier.hpp> #include <com/sun/star/chart2/RelativePosition.hpp> +#include <com/sun/star/chart2/RelativeSize.hpp> #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/drawing/LineStyle.hpp> #include <com/sun/star/frame/XModel.hpp> @@ -78,8 +79,7 @@ struct TitleLayoutInfo { typedef Reference< XShape > (*GetShapeFunc)( const Reference< cssc::XChartDocument >& ); - ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XTitle > - mxTitle; /// The API title object. + Reference< XTitle > mxTitle; /// The API title object. ModelRef< LayoutModel > mxLayout; /// The layout model, if existing. GetShapeFunc mpGetShape; /// Helper function to receive the title shape. @@ -323,9 +323,9 @@ sal_Int32 lclCalcSize( sal_Int32 nPos, sal_Int32 nChartSize, double fSize, sal_I sal_Int32 nValue = getLimitedValue< sal_Int32, double >( nChartSize * fSize + 0.5, 0, nChartSize ); switch( nSizeMode ) { - case XML_factor: // size as factor of chart size + case XML_factor: // passed value is width/height return nValue; - case XML_edge: // absolute end position as factor of chart size + case XML_edge: // passed value is right/bottom position return nValue - nPos + 1; }; @@ -333,6 +333,23 @@ sal_Int32 lclCalcSize( sal_Int32 nPos, sal_Int32 nChartSize, double fSize, sal_I return -1; } +/** Returns a relative size value in the chart area. */ +double lclCalcRelSize( double fPos, double fSize, sal_Int32 nSizeMode ) +{ + switch( nSizeMode ) + { + case XML_factor: // passed value is width/height + break; + case XML_edge: // passed value is right/bottom position + fSize -= fPos; + break; + default: + OSL_ENSURE( false, "lclCalcRelSize - unknown size mode" ); + fSize = 0.0; + }; + return getLimitedValue< double, double >( fSize, 0.0, 1.0 - fPos ); +} + } // namespace // ---------------------------------------------------------------------------- @@ -369,12 +386,20 @@ bool LayoutConverter::convertFromModel( PropertySet& rPropSet ) (mrModel.mnXMode == XML_edge) && (mrModel.mfX >= 0.0) && (mrModel.mnYMode == XML_edge) && (mrModel.mfY >= 0.0) ) { - RelativePosition aPos; - aPos.Primary = getLimitedValue< double, double >( mrModel.mfX, 0.0, 1.0 ); - aPos.Secondary = getLimitedValue< double, double >( mrModel.mfY, 0.0, 1.0 ); - aPos.Anchor = ::com::sun::star::drawing::Alignment_TOP_LEFT; + RelativePosition aPos( + getLimitedValue< double, double >( mrModel.mfX, 0.0, 1.0 ), + getLimitedValue< double, double >( mrModel.mfY, 0.0, 1.0 ), + Alignment_TOP_LEFT ); rPropSet.setProperty( PROP_RelativePosition, aPos ); - return true; + + RelativeSize aSize( + lclCalcRelSize( aPos.Primary, mrModel.mfW, mrModel.mnWMode ), + lclCalcRelSize( aPos.Secondary, mrModel.mfH, mrModel.mnHMode ) ); + if( (aSize.Primary > 0.0) && (aSize.Secondary > 0.0) ) + { + rPropSet.setProperty( PROP_RelativeSize, aSize ); + return true; + } } return false; } diff --git a/oox/source/drawingml/chart/titleconverter.cxx b/oox/source/drawingml/chart/titleconverter.cxx index fdc4969f7c5e..8163241e5a31 100644 --- a/oox/source/drawingml/chart/titleconverter.cxx +++ b/oox/source/drawingml/chart/titleconverter.cxx @@ -27,7 +27,7 @@ #include "oox/drawingml/chart/titleconverter.hxx" -#include <com/sun/star/chart2/LegendExpansion.hpp> +#include <com/sun/star/chart/ChartLegendExpansion.hpp> #include <com/sun/star/chart2/LegendPosition.hpp> #include <com/sun/star/chart2/XDiagram.hpp> #include <com/sun/star/chart2/XFormattedString.hpp> @@ -198,6 +198,7 @@ void LegendConverter::convertFromModel( const Reference< XDiagram >& rxDiagram ) { if( rxDiagram.is() ) try { + namespace cssc = ::com::sun::star::chart; namespace cssc2 = ::com::sun::star::chart2; // create the legend @@ -211,46 +212,35 @@ void LegendConverter::convertFromModel( const Reference< XDiagram >& rxDiagram ) // predefined legend position and expansion cssc2::LegendPosition eLegendPos = cssc2::LegendPosition_CUSTOM; - cssc2::LegendExpansion eLegendExpand = cssc2::LegendExpansion_HIGH; + cssc::ChartLegendExpansion eLegendExpand = cssc::ChartLegendExpansion_CUSTOM; switch( mrModel.mnPosition ) { case XML_l: eLegendPos = cssc2::LegendPosition_LINE_START; - eLegendExpand = cssc2::LegendExpansion_HIGH; + eLegendExpand = cssc::ChartLegendExpansion_HIGH; break; case XML_r: + case XML_tr: // top-right not supported eLegendPos = cssc2::LegendPosition_LINE_END; - eLegendExpand = cssc2::LegendExpansion_HIGH; + eLegendExpand = cssc::ChartLegendExpansion_HIGH; break; case XML_t: eLegendPos = cssc2::LegendPosition_PAGE_START; - eLegendExpand = cssc2::LegendExpansion_WIDE; + eLegendExpand = cssc::ChartLegendExpansion_WIDE; break; case XML_b: eLegendPos = cssc2::LegendPosition_PAGE_END; - eLegendExpand = cssc2::LegendExpansion_WIDE; - break; - case XML_tr: - eLegendPos = cssc2::LegendPosition_LINE_END; // top-right not supported - eLegendExpand = cssc2::LegendExpansion_HIGH; + eLegendExpand = cssc::ChartLegendExpansion_WIDE; break; } - // manual positioning - LayoutModel& rLayout = mrModel.mxLayout.getOrCreate(); - LayoutConverter aLayoutConv( *this, rLayout ); - aLayoutConv.convertFromModel( aPropSet ); - Rectangle aLegendRect; - if( aLayoutConv.calcAbsRectangle( aLegendRect ) ) + // manual positioning and size + if( mrModel.mxLayout.get() ) { - // #i71697# it is not possible to set the size directly, do some magic here - double fRatio = static_cast< double >( aLegendRect.Width ) / aLegendRect.Height; - if( fRatio > 1.5 ) - eLegendExpand = cssc2::LegendExpansion_WIDE; - else if( fRatio < 0.75 ) - eLegendExpand = cssc2::LegendExpansion_HIGH; - else - eLegendExpand = cssc2::LegendExpansion_BALANCED; + LayoutConverter aLayoutConv( *this, *mrModel.mxLayout ); + // manual size needs ChartLegendExpansion_CUSTOM + if( aLayoutConv.convertFromModel( aPropSet ) ) + eLegendExpand = cssc::ChartLegendExpansion_CUSTOM; } // set position and expansion properties diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index 016ffc28bac5..b0726f86657e 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -348,6 +348,7 @@ RegularExpressions RelId RelativeHorizontalTabbarWidth RelativePosition +RelativeSize Repeat RepeatDelay Representation |