[ooo-build-commit] Branch 'ooo/master' - 2 commits - filter/source oox/inc oox/source
Jan Holesovsky
kendy at kemper.freedesktop.org
Thu Jun 4 17:28:16 PDT 2009
filter/source/pdf/pdffilter.cxx | 1
oox/inc/oox/drawingml/chart/objectformatter.hxx | 3
oox/inc/oox/dump/biffdumper.hxx | 1
oox/inc/oox/dump/dumperbase.hxx | 44 ++++++++
oox/inc/oox/helper/helper.hxx | 20 ++++
oox/inc/oox/xls/biffhelper.hxx | 8 +
oox/source/drawingml/chart/axisconverter.cxx | 114 ++++++++++++++---------
oox/source/drawingml/chart/objectformatter.cxx | 18 ++-
oox/source/drawingml/chart/plotareaconverter.cxx | 4
oox/source/drawingml/chart/seriesconverter.cxx | 3
oox/source/drawingml/chart/titleconverter.cxx | 2
oox/source/dump/biffdumper.cxx | 77 ++++++++++++---
oox/source/dump/biffdumper.ini | 42 ++++++--
13 files changed, 257 insertions(+), 80 deletions(-)
New commits:
commit f0735142c9b3e44a9d99f31138e4b561ad54b8dc
Author: Jens-Heiner Rechtien <hr at openoffice.org>
Date: Thu Jun 4 15:06:14 2009 +0000
CWS-TOOLING: integrate CWS vcl102
pl: resync to m49
pl: #i102082# correct index access
pl: #i102082# correct index access
pl: merge tag
pl: #i101674# update selection background markers for toolbars and menus
pl: fix debug compile
pl: #i101461# improve xdg functionality (thanks oblin)
pl: #i100501# get IsAddStream from configuration setting in direct export case
pl: #i100725# check for null ptr
pl: #i100617# fix got lost in merge
diff --git a/filter/source/pdf/pdffilter.cxx b/filter/source/pdf/pdffilter.cxx
index 3ff78b6..93258b3 100644
--- a/filter/source/pdf/pdffilter.cxx
+++ b/filter/source/pdf/pdffilter.cxx
@@ -100,6 +100,7 @@ sal_Bool PDFFilter::implExport( const Sequence< PropertyValue >& rDescriptor )
aCfgItem.ReadInt32( String( RTL_CONSTASCII_USTRINGPARAM( "Magnification" ) ), 0 );
aCfgItem.ReadInt32( String( RTL_CONSTASCII_USTRINGPARAM( "PageLayout" ) ), 0 );
aCfgItem.ReadBool( String( RTL_CONSTASCII_USTRINGPARAM( "FirstPageOnLeft" ) ), sal_False );
+ aCfgItem.ReadBool( String( RTL_CONSTASCII_USTRINGPARAM( "IsAddStream" ) ), sal_False );
//
// the encryption is not available when exporting directly, since the encryption is off by default and the selection
// (encrypt or not) is not persistent; it's available through macro though,
commit b86068747b1d0077e147a99862a5cb46535c1819
Author: Kurt Zenker <kz at openoffice.org>
Date: Thu Jun 4 09:41:18 2009 +0000
CWS-TOOLING: integrate CWS chart37
2009-05-22 09:10:36 +0200 iha r272170 : #i102130# color of pies is not loaded correctly
2009-04-27 17:16:20 +0200 iha r271294 : #i24203# compiler problem
2009-04-27 16:43:21 +0200 iha r271292 : #i101281# missing API documentation for secondary axis title properties
2009-04-27 15:26:05 +0200 hde r271276 : #i100987
2009-04-27 15:24:42 +0200 hde r271273 : #i100987
2009-04-24 15:08:33 +0200 iha r271214 : #i100995# crash with some logarithmic scalings
2009-04-22 18:50:56 +0200 dr r271134 : #i82177# write out deleted point labels
2009-04-22 18:40:48 +0200 iha r271133 : #i101281# missing API documentation for secondary axis title properties
2009-04-22 16:39:42 +0200 dr r271128 : #i82177# extensions for bubble charts
2009-04-22 14:37:00 +0200 dr r271114 : #i82177# import/export data label type and separator
2009-04-22 14:36:24 +0200 dr r271113 : #i82177# import/export data label type and separator
2009-04-21 15:25:26 +0200 dr r271038 : #i82177# import data label type and separator from BIFF8 CHFR records
2009-04-21 14:37:16 +0200 dr r271037 : #i82177# dump BIFF8 chart future records
2009-04-20 17:44:27 +0200 iha r271002 : #i96898# reduce library exports
2009-04-20 13:01:13 +0200 iha r270975 : #i24203# rotate data labels - help ids
2009-04-20 11:40:33 +0200 dr r270969 : #i96600# export of axis scaling/positioning properties
2009-04-16 16:02:31 +0200 dr r270892 : #i69599# keep Y axis left in 3d charts
2009-04-15 18:16:46 +0200 dr r270859 : #i69599# import of axis position settings
2009-04-15 18:16:01 +0200 dr r270858 : #i69599# correct handling of logarithmic crossing axes
2009-04-14 16:27:48 +0200 dr r270794 : #i96599# handle auto axis position on logarithmic axes
2009-04-09 19:59:51 +0200 dr r270722 : #i96599# import axis crossing settings, fix import of logarithmic scaling settings
2009-04-09 18:26:00 +0200 iha r270720 : #i96898# reduce library exports
2009-04-09 15:17:04 +0200 iha r270710 : #i96898# reduce library exports
2009-04-09 10:50:14 +0200 dr r270682 : #i24203# import/export of data label rotation, fixed some other broken stuff too
2009-04-08 16:54:54 +0200 dr r270657 : #i24203# import rotation for data point labels
2009-04-06 18:19:17 +0200 iha r270571 : #i100876# Axis scaling settings dialog wrong after API usage (anys different from double type)
2009-04-06 15:57:05 +0200 iha r270567 : #i100105# #i58585# leftover ->
2009-04-06 15:55:48 +0200 iha r270564 : #i58585# leftover ->
2009-04-02 16:41:07 +0200 iha r270422 : #i99721# remove unused code
2009-04-02 14:29:03 +0200 iha r270407 : #i99721# remove unused code
2009-03-26 10:58:23 +0100 iha r270059 : #i96898# reduce library exports
2009-03-26 10:13:49 +0100 iha r270055 : #i96898# reduce library exports
2009-03-25 09:39:13 +0100 iha r269998 : CWS-TOOLING: rebase CWS chart37 to trunk at 269781 (milestone: DEV300:m44)
2009-03-24 17:56:56 +0100 iha r269986 : #i96898# reduce library exports
2009-03-24 16:56:44 +0100 iha r269974 : #i99721# remove unused code
2009-03-24 16:48:48 +0100 iha r269970 : #i89731# remove unused string
2009-03-24 15:44:04 +0100 iha r269961 : remove unused code
2009-03-24 15:22:45 +0100 iha r269959 : remove unused code
2009-03-24 15:17:17 +0100 iha r269957 : remove unused code
2009-03-24 11:14:53 +0100 iha r269923 : #i24203# rotate data labels
2009-03-09 12:10:25 +0100 hde r269076 : #i99300#
2009-03-06 15:56:26 +0100 iha r269011 : #i93953# Source Format for secondary axis without data
2009-02-17 15:59:05 +0100 iha r268177 : avoid warning during build
2009-02-17 15:01:59 +0100 iha r268173 : avoid warning during build
2009-02-13 09:39:03 +0100 ufi r267693 : i96999
2009-02-11 15:12:35 +0100 iha r267604 : removed unused string
2009-02-11 14:00:29 +0100 iha r267600 : #i96999# Corrected wording from 'correlation coefficient' to 'coefficient of determination'
2009-02-11 10:56:45 +0100 iha r267584 : #i89731# typo in resource string
2009-02-11 10:01:29 +0100 iha r267582 : #i89031# compile error on asian windows systems
2009-02-10 16:15:16 +0100 iha r267552 : #i24203# rotate data labels
2009-02-04 18:00:33 +0100 iha r267395 : #i98893# don't export defaults to file
2009-02-04 15:48:15 +0100 iha r267390 : #i92128# asian typography for chart elements
2009-02-04 15:17:41 +0100 iha r267386 : #i92128# asian typography for chart elements
2009-01-30 14:41:10 +0100 iha r267197 : CWS-TOOLING: rebase CWS chart37 to trunk at 267171 (milestone: DEV300:m41)
diff --git a/oox/inc/oox/drawingml/chart/objectformatter.hxx b/oox/inc/oox/drawingml/chart/objectformatter.hxx
index 15487a8..8ee9397 100644
--- a/oox/inc/oox/drawingml/chart/objectformatter.hxx
+++ b/oox/inc/oox/drawingml/chart/objectformatter.hxx
@@ -128,7 +128,8 @@ public:
/** Sets text rotation properties to the passed property set. */
void convertTextRotation(
PropertySet& rPropSet,
- const ModelRef< TextBody >& rxTextProp );
+ const ModelRef< TextBody >& rxTextProp,
+ bool bSupportsStacked );
/** Sets number format properties to the passed property set. */
void convertNumberFormat(
diff --git a/oox/inc/oox/dump/biffdumper.hxx b/oox/inc/oox/dump/biffdumper.hxx
index 85f761e..a7f021e 100644
--- a/oox/inc/oox/dump/biffdumper.hxx
+++ b/oox/inc/oox/dump/biffdumper.hxx
@@ -216,6 +216,7 @@ protected:
FormatType eFmtType = FORMATTYPE_DEC );
sal_uInt16 dumpRepeatedRecId();
+ void dumpFrHeader( bool bWithFlags, bool bWithRange );
void dumpDffClientRect();
void dumpEmbeddedDff();
diff --git a/oox/inc/oox/dump/dumperbase.hxx b/oox/inc/oox/dump/dumperbase.hxx
index fea1726..0c5314c 100644
--- a/oox/inc/oox/dump/dumperbase.hxx
+++ b/oox/inc/oox/dump/dumperbase.hxx
@@ -1408,6 +1408,11 @@ protected:
template< typename Type >
void writeValueItem( const ItemFormat& rItemFmt, Type nData );
+ template< typename Type >
+ void writeDecPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep = ',' );
+ template< typename Type >
+ void writeHexPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep = ',' );
+
private:
OutputRef mxOut;
};
@@ -1503,6 +1508,24 @@ void OutputObjectBase::writeValueItem( const ItemFormat& rItemFmt, Type nData )
writeValueItem( aNameUtf8.getStr(), nData, rItemFmt.meFmtType, rItemFmt.maListName );
}
+template< typename Type >
+void OutputObjectBase::writeDecPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep )
+{
+ ItemGuard aItem( *mxOut, rName );
+ mxOut->writeDec( nData1 );
+ mxOut->writeChar( cSep );
+ mxOut->writeDec( nData2 );
+}
+
+template< typename Type >
+void OutputObjectBase::writeHexPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep )
+{
+ ItemGuard aItem( *mxOut, rName );
+ mxOut->writeHex( nData1 );
+ mxOut->writeChar( cSep );
+ mxOut->writeHex( nData2 );
+}
+
// ============================================================================
// ============================================================================
@@ -1589,6 +1612,11 @@ protected:
template< typename Type1, typename Type2 >
Type1 dumpValue( bool bType1, const ItemFormat& rItemFmt );
+ template< typename Type >
+ void dumpDecPair( const String& rName, sal_Unicode cSep = ',' );
+ template< typename Type >
+ void dumpHexPair( const String& rName, sal_Unicode cSep = ',' );
+
private:
BinaryInputStreamRef mxStrm;
};
@@ -1702,6 +1730,22 @@ Type1 InputObjectBase::dumpValue( bool bType1, const ItemFormat& rItemFmt )
return bType1 ? dumpValue< Type1 >( rItemFmt ) : static_cast< Type1 >( dumpValue< Type2 >( rItemFmt ) );
}
+template< typename Type >
+void InputObjectBase::dumpDecPair( const String& rName, sal_Unicode cSep )
+{
+ Type nData1, nData2;
+ *mxStrm >> nData1 >> nData2;
+ writeDecPairItem( rName, nData1, nData2, cSep );
+}
+
+template< typename Type >
+void InputObjectBase::dumpHexPair( const String& rName, sal_Unicode cSep )
+{
+ Type nData1, nData2;
+ *mxStrm >> nData1 >> nData2;
+ writeHexPairItem( rName, nData1, nData2, cSep );
+}
+
// ============================================================================
// ============================================================================
diff --git a/oox/inc/oox/helper/helper.hxx b/oox/inc/oox/helper/helper.hxx
index 53e3b90..f22bc56 100644
--- a/oox/inc/oox/helper/helper.hxx
+++ b/oox/inc/oox/helper/helper.hxx
@@ -32,7 +32,10 @@
#define OOX_HELPER_HELPER_HXX
#include <algorithm>
+#include <limits>
+#include <boost/static_assert.hpp>
#include <osl/endian.h>
+#include <rtl/math.hxx>
#include <rtl/string.hxx>
#include <rtl/ustring.hxx>
#include <string.h>
@@ -79,6 +82,23 @@ inline ReturnType getLimitedValue( Type nValue, Type nMin, Type nMax )
return static_cast< ReturnType >( ::std::min( ::std::max( nValue, nMin ), nMax ) );
}
+template< typename ReturnType, typename Type >
+inline ReturnType getIntervalValue( Type nValue, Type nBegin, Type nEnd )
+{
+ BOOST_STATIC_ASSERT( ::std::numeric_limits< Type >::is_integer );
+ Type nInterval = nEnd - nBegin;
+ Type nCount = (nValue < nBegin) ? -((nBegin - nValue - 1) / nInterval + 1) : ((nValue - nBegin) / nInterval);
+ return static_cast< ReturnType >( nValue - nCount * nInterval );
+}
+
+template< typename ReturnType >
+inline ReturnType getDoubleIntervalValue( double fValue, double fBegin, double fEnd )
+{
+ double fInterval = fEnd - fBegin;
+ double fCount = (fValue < fBegin) ? -(::rtl::math::approxFloor( (fBegin - fValue - 1.0) / fInterval ) + 1.0) : ::rtl::math::approxFloor( (fValue - fBegin) / fInterval );
+ return static_cast< ReturnType >( fValue - fCount * fInterval );
+}
+
// Read from bitfields --------------------------------------------------------
/** Returns true, if at least one of the bits set in nMask is set in nBitField. */
diff --git a/oox/inc/oox/xls/biffhelper.hxx b/oox/inc/oox/xls/biffhelper.hxx
index 09d3ffc..e2adab6 100644
--- a/oox/inc/oox/xls/biffhelper.hxx
+++ b/oox/inc/oox/xls/biffhelper.hxx
@@ -293,6 +293,12 @@ const sal_uInt16 BIFF_ID_CHFORMAT = 0x104E;
const sal_uInt16 BIFF_ID_CHFORMATRUNS = 0x1050;
const sal_uInt16 BIFF_ID_CHFRAME = 0x1032;
const sal_uInt16 BIFF_ID_CHFRAMEPOS = 0x104F;
+const sal_uInt16 BIFF_ID_CHFRBLOCKBEGIN = 0x0852;
+const sal_uInt16 BIFF_ID_CHFRBLOCKEND = 0x0853;
+const sal_uInt16 BIFF_ID_CHFRINFO = 0x0850;
+const sal_uInt16 BIFF_ID_CHFRLABELPROPS = 0x086B;
+const sal_uInt16 BIFF_ID_CHFRUNITPROPS = 0x0857;
+const sal_uInt16 BIFF_ID_CHFRWRAPPER = 0x0851;
const sal_uInt16 BIFF_ID_CHLABELRANGE = 0x1020;
const sal_uInt16 BIFF_ID_CHLABELRANGE2 = 0x1062;
const sal_uInt16 BIFF_ID_CHLEGEND = 0x1015;
@@ -324,9 +330,7 @@ const sal_uInt16 BIFF_ID_CHSURFACE = 0x103F;
const sal_uInt16 BIFF_ID_CHTEXT = 0x1025;
const sal_uInt16 BIFF_ID_CHTICK = 0x101E;
const sal_uInt16 BIFF_ID_CHTYPEGROUP = 0x1014;
-const sal_uInt16 BIFF_ID_CHUNITPROPERTIES = 0x0857;
const sal_uInt16 BIFF_ID_CHVALUERANGE = 0x101F;
-const sal_uInt16 BIFF_ID_CHWRAPPEDRECORD = 0x0851;
const sal_uInt16 BIFF_ID_CFHEADER = 0x01B0;
const sal_uInt16 BIFF_ID_CFRULE = 0x01B1;
const sal_uInt16 BIFF_ID_CODENAME = 0x01BA;
diff --git a/oox/source/drawingml/chart/axisconverter.cxx b/oox/source/drawingml/chart/axisconverter.cxx
index 57fe995..1fd8dbd 100644
--- a/oox/source/drawingml/chart/axisconverter.cxx
+++ b/oox/source/drawingml/chart/axisconverter.cxx
@@ -30,6 +30,9 @@
************************************************************************/
#include "oox/drawingml/chart/axisconverter.hxx"
+#include <com/sun/star/chart/ChartAxisArrangeOrderType.hpp>
+#include <com/sun/star/chart/ChartAxisLabelPosition.hpp>
+#include <com/sun/star/chart/ChartAxisMarkPosition.hpp>
#include <com/sun/star/chart/ChartAxisPosition.hpp>
#include <com/sun/star/chart2/TickmarkStyle.hpp>
#include <com/sun/star/chart2/AxisType.hpp>
@@ -80,6 +83,23 @@ void lclSetScaledValueOrClearAny( Any& orAny, const OptValue< double >& rofValue
lclSetValueOrClearAny( orAny, rofValue );
}
+bool lclIsLogarithmicScale( const AxisModel& rAxisModel )
+{
+ return rAxisModel.mofLogBase.has() && (2.0 <= rAxisModel.mofLogBase.get()) && (rAxisModel.mofLogBase.get() <= 1000.0);
+}
+
+::com::sun::star::chart::ChartAxisLabelPosition lclGetLabelPosition( sal_Int32 nToken )
+{
+ using namespace ::com::sun::star::chart;
+ switch( nToken )
+ {
+ case XML_high: return ChartAxisLabelPosition_OUTSIDE_END;
+ case XML_low: return ChartAxisLabelPosition_OUTSIDE_START;
+ case XML_nextTo: return ChartAxisLabelPosition_NEAR_AXIS;
+ }
+ return ChartAxisLabelPosition_NEAR_AXIS;
+}
+
sal_Int32 lclGetTickMark( sal_Int32 nToken )
{
using namespace ::com::sun::star::chart2::TickmarkStyle;
@@ -127,17 +147,19 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo
// show axis labels
aAxisProp.setProperty( PROP_DisplayLabels, mrModel.mnTickLabelPos != XML_none );
+ aAxisProp.setProperty( PROP_LabelPosition, lclGetLabelPosition( mrModel.mnTickLabelPos ) );
// no X axis line in radar charts
if( (nAxisIdx == API_X_AXIS) && (rTypeInfo.meTypeCategory == TYPECATEGORY_RADAR) )
mrModel.mxShapeProp.getOrCreate().getLineProperties().maLineFill.moFillType = XML_noFill;
// axis line and tick label formatting
rFormatter.convertFormatting( aAxisProp, mrModel.mxShapeProp, mrModel.mxTextProp, OBJECTTYPE_AXIS );
// tick label rotation
- rFormatter.convertTextRotation( aAxisProp, mrModel.mxTextProp );
+ rFormatter.convertTextRotation( aAxisProp, mrModel.mxTextProp, true );
// tick mark style
aAxisProp.setProperty( PROP_MajorTickmarks, lclGetTickMark( mrModel.mnMajorTickMark ) );
aAxisProp.setProperty( PROP_MinorTickmarks, lclGetTickMark( mrModel.mnMinorTickMark ) );
+ aAxisProp.setProperty( PROP_MarkPosition, cssc::ChartAxisMarkPosition_AT_AXIS );
// main grid
PropertySet aGridProp( xAxis->getGridProperties() );
@@ -159,7 +181,6 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo
ScaleData aScaleData = xAxis->getScaleData();
// set axis type
- namespace ApiAxisType = ::com::sun::star::chart2::AxisType;
switch( nAxisIdx )
{
case API_X_AXIS:
@@ -167,23 +188,23 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo
{
OSL_ENSURE( (mrModel.mnTypeId == C_TOKEN( catAx )) || (mrModel.mnTypeId == C_TOKEN( dateAx )),
"AxisConverter::convertFromModel - unexpected axis model type (must: c:catAx or c:dateEx)" );
- aScaleData.AxisType = ApiAxisType::CATEGORY;
+ aScaleData.AxisType = cssc2::AxisType::CATEGORY;
aScaleData.Categories = rTypeGroup.createCategorySequence();
}
else
{
OSL_ENSURE( mrModel.mnTypeId == C_TOKEN( valAx ), "AxisConverter::convertFromModel - unexpected axis model type (must: c:valAx)" );
- aScaleData.AxisType = ApiAxisType::REALNUMBER;
+ aScaleData.AxisType = cssc2::AxisType::REALNUMBER;
}
break;
case API_Y_AXIS:
OSL_ENSURE( mrModel.mnTypeId == C_TOKEN( valAx ), "AxisConverter::convertFromModel - unexpected axis model type (must: c:valAx)" );
- aScaleData.AxisType = rTypeGroup.isPercent() ? ApiAxisType::PERCENT : ApiAxisType::REALNUMBER;
+ aScaleData.AxisType = rTypeGroup.isPercent() ? cssc2::AxisType::PERCENT : cssc2::AxisType::REALNUMBER;
break;
case API_Z_AXIS:
OSL_ENSURE( mrModel.mnTypeId == C_TOKEN( serAx ), "AxisConverter::convertFromModel - unexpected axis model type (must: c:serAx)" );
OSL_ENSURE( rTypeGroup.isDeep3dChart(), "AxisConverter::convertFromModel - series axis not supported by this chart type" );
- aScaleData.AxisType = ApiAxisType::SERIES;
+ aScaleData.AxisType = cssc2::AxisType::SERIES;
break;
}
@@ -191,61 +212,62 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo
switch( aScaleData.AxisType )
{
- case ApiAxisType::CATEGORY:
- case ApiAxisType::SERIES:
+ case cssc2::AxisType::CATEGORY:
+ case cssc2::AxisType::SERIES:
{
- // do not overlap text
- aAxisProp.setProperty( PROP_TextOverlap, false );
+ // do not overlap text unless all labels are visible
+ aAxisProp.setProperty( PROP_TextOverlap, mrModel.mnTickLabelSkip == 1 );
// do not break text into several lines
aAxisProp.setProperty( PROP_TextBreak, false );
- // origin (min-cross or max-cross not supported, fall back to auto-cross)
- if( pCrossingAxis && (mrModel.mnCrossAxisId == pCrossingAxis->mnAxisId) )
- lclSetValueOrClearAny( aScaleData.Origin, pCrossingAxis->mofCrossesAt );
+ // do not stagger labels in two lines
+ aAxisProp.setProperty( PROP_ArrangeOrder, cssc::ChartAxisArrangeOrderType_SIDE_BY_SIDE );
//! TODO #i58731# show n-th category
}
break;
- case ApiAxisType::REALNUMBER:
- case ApiAxisType::PERCENT:
+ case cssc2::AxisType::REALNUMBER:
+ case cssc2::AxisType::PERCENT:
{
// scaling algorithm
- bool bLogScale = mrModel.mofLogBase.has() && (2.0 <= mrModel.mofLogBase.get()) && (mrModel.mofLogBase.get() <= 1000.0);
+ bool bLogScale = lclIsLogarithmicScale( mrModel );
OUString aScalingService = bLogScale ?
CREATE_OUSTRING( "com.sun.star.chart2.LogarithmicScaling" ) :
CREATE_OUSTRING( "com.sun.star.chart2.LinearScaling" );
- Reference< XScaling > xScaling( createInstance( aScalingService ), UNO_QUERY );
- Reference< XScaling > xLogScaling;
- if( xScaling.is() )
- {
- aScaleData.Scaling = xScaling;
- if( bLogScale )
- xLogScaling = xScaling->getInverseScaling();
- }
+ aScaleData.Scaling.set( createInstance( aScalingService ), UNO_QUERY );
// min/max
- lclSetScaledValueOrClearAny( aScaleData.Minimum, mrModel.mofMin, xLogScaling );
- lclSetScaledValueOrClearAny( aScaleData.Maximum, mrModel.mofMax, xLogScaling );
- // origin (min-cross or max-cross not supported, fall back to auto-cross)
- if( pCrossingAxis && (mrModel.mnCrossAxisId == pCrossingAxis->mnAxisId) )
- lclSetScaledValueOrClearAny( aScaleData.Origin, pCrossingAxis->mofCrossesAt, xLogScaling );
+ lclSetValueOrClearAny( aScaleData.Minimum, mrModel.mofMin );
+ lclSetValueOrClearAny( aScaleData.Maximum, mrModel.mofMax );
// major increment
IncrementData& rIncrementData = aScaleData.IncrementData;
- lclSetValueOrClearAny( rIncrementData.Distance, mrModel.mofMajorUnit );
+ lclSetScaledValueOrClearAny( rIncrementData.Distance, mrModel.mofMajorUnit, aScaleData.Scaling );
// minor increment
Sequence< SubIncrement >& rSubIncrementSeq = rIncrementData.SubIncrements;
rSubIncrementSeq.realloc( 1 );
- OptValue< sal_Int32 > onCount;
- if( mrModel.mofMajorUnit.has() && mrModel.mofMinorUnit.has() && (0.0 < mrModel.mofMinorUnit.get()) && (mrModel.mofMinorUnit.get() <= mrModel.mofMajorUnit.get()) )
+ Any& rIntervalCount = rSubIncrementSeq[ 0 ].IntervalCount;
+ if( bLogScale )
+ {
+ rIntervalCount <<= sal_Int32( 10 );
+ }
+ else
{
- double fCount = mrModel.mofMajorUnit.get() / mrModel.mofMinorUnit.get() + 0.5;
- if( (1.0 <= fCount) && (fCount < 1001.0) )
- onCount = static_cast< sal_Int32 >( fCount );
+ OptValue< sal_Int32 > onCount;
+ if( mrModel.mofMajorUnit.has() && mrModel.mofMinorUnit.has() && (0.0 < mrModel.mofMinorUnit.get()) && (mrModel.mofMinorUnit.get() <= mrModel.mofMajorUnit.get()) )
+ {
+ double fCount = mrModel.mofMajorUnit.get() / mrModel.mofMinorUnit.get() + 0.5;
+ if( (1.0 <= fCount) && (fCount < 1001.0) )
+ onCount = static_cast< sal_Int32 >( fCount );
+ }
+ lclSetValueOrClearAny( rIntervalCount, onCount );
}
- lclSetValueOrClearAny( rSubIncrementSeq[ 0 ].IntervalCount, onCount );
}
break;
default:
OSL_ENSURE( false, "AxisConverter::convertFromModel - unknown axis type" );
}
+ /* Do not set a value to the Origin member anymore (already done via
+ new axis properties 'CrossoverPosition' and 'CrossoverValue'). */
+ aScaleData.Origin.clear();
+
// axis orientation ---------------------------------------------------
// #i85167# pie/donut charts need opposite direction at Y axis
@@ -261,13 +283,25 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo
// number format ------------------------------------------------------
- if( (aScaleData.AxisType == ApiAxisType::REALNUMBER) || (aScaleData.AxisType == ApiAxisType::PERCENT) )
+ if( (aScaleData.AxisType == cssc2::AxisType::REALNUMBER) || (aScaleData.AxisType == cssc2::AxisType::PERCENT) )
getFormatter().convertNumberFormat( aAxisProp, mrModel.maNumberFormat );
- // axis position ------------------------------------------------------
+ // position of crossing axis ------------------------------------------
+
+ bool bManualCrossing = mrModel.mofCrossesAt.has();
+ cssc::ChartAxisPosition eAxisPos = cssc::ChartAxisPosition_VALUE;
+ if( !bManualCrossing ) switch( mrModel.mnCrossMode )
+ {
+ case XML_min: eAxisPos = cssc::ChartAxisPosition_START; break;
+ case XML_max: eAxisPos = cssc::ChartAxisPosition_END; break;
+ case XML_autoZero: eAxisPos = cssc::ChartAxisPosition_VALUE; break;
+ }
+ aAxisProp.setProperty( PROP_CrossoverPosition, eAxisPos );
- cssc::ChartAxisPosition ePosition = (nAxesSetIdx == API_PRIM_AXESSET) ? cssc::ChartAxisPosition_START : cssc::ChartAxisPosition_END;
- aAxisProp.setProperty( PROP_CrossoverPosition, ePosition );
+ // calculate automatic origin depending on scaling mode of crossing axis
+ bool bCrossingLogScale = pCrossingAxis && lclIsLogarithmicScale( *pCrossingAxis );
+ double fCrossingPos = bManualCrossing ? mrModel.mofCrossesAt.get() : (bCrossingLogScale ? 1.0 : 0.0);
+ aAxisProp.setProperty( PROP_CrossoverValue, fCrossingPos );
// axis title ---------------------------------------------------------
diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx
index e758ebc..36e245d 100644
--- a/oox/source/drawingml/chart/objectformatter.cxx
+++ b/oox/source/drawingml/chart/objectformatter.cxx
@@ -1126,18 +1126,22 @@ void ObjectFormatter::convertTextFormatting( PropertySet& rPropSet, const TextCh
pFormat->convertTextFormatting( rPropSet, rTextProps );
}
-void ObjectFormatter::convertTextRotation( PropertySet& rPropSet, const ModelRef< TextBody >& rxTextProp )
+void ObjectFormatter::convertTextRotation( PropertySet& rPropSet, const ModelRef< TextBody >& rxTextProp, bool bSupportsStacked )
{
if( rxTextProp.is() )
{
- // Chart2 expects rotation angle as double value in range of [0,360)
- double fAngle = static_cast< double >( rxTextProp->getTextProperties().moRotation.get( 0 ) ) / 60000.0;
- while( fAngle < 0.0 ) fAngle += 360.0;
+ /* Chart2 expects rotation angle as double value in range of [0,360).
+ OOXML counts clockwise, Chart2 counts counterclockwise. */
+ double fAngle = rxTextProp->getTextProperties().moRotation.get( 0 );
+ fAngle = getDoubleIntervalValue< double >( -fAngle / 60000.0, 0.0, 360.0 );
rPropSet.setProperty( PROP_TextRotation, fAngle );
- sal_Int32 nVert = rxTextProp->getTextProperties().moVert.get( XML_horz );
- bool bStacked = (nVert == XML_wordArtVert) || (nVert == XML_wordArtVertRtl);
- rPropSet.setProperty( PROP_StackCharacters, bStacked );
+ if( bSupportsStacked )
+ {
+ sal_Int32 nVert = rxTextProp->getTextProperties().moVert.get( XML_horz );
+ bool bStacked = (nVert == XML_wordArtVert) || (nVert == XML_wordArtVertRtl);
+ rPropSet.setProperty( PROP_StackCharacters, bStacked );
+ }
}
}
diff --git a/oox/source/drawingml/chart/plotareaconverter.cxx b/oox/source/drawingml/chart/plotareaconverter.cxx
index 1790ff5..3b29490 100644
--- a/oox/source/drawingml/chart/plotareaconverter.cxx
+++ b/oox/source/drawingml/chart/plotareaconverter.cxx
@@ -172,15 +172,15 @@ void AxesSetConverter::convertFromModel( const Reference< XDiagram >& rxDiagram,
to the data provider attached to the chart document. */
if( xCoordSystem.is() )
{
- // create missing axis models
+ // convert all axes (create missing axis models)
ModelRef< AxisModel > xXAxis = lclGetOrCreateAxis( mrModel.maAxes, API_X_AXIS, rFirstTypeGroup.getTypeInfo().mbCategoryAxis ? C_TOKEN( catAx ) : C_TOKEN( valAx ) );
ModelRef< AxisModel > xYAxis = lclGetOrCreateAxis( mrModel.maAxes, API_Y_AXIS, C_TOKEN( valAx ) );
- // convert all axes
AxisConverter aXAxisConv( *this, *xXAxis );
aXAxisConv.convertFromModel( xCoordSystem, rFirstTypeGroup, xYAxis.get(), nAxesSetIdx, API_X_AXIS );
AxisConverter aYAxisConv( *this, *xYAxis );
aYAxisConv.convertFromModel( xCoordSystem, rFirstTypeGroup, xXAxis.get(), nAxesSetIdx, API_Y_AXIS );
+
if( rFirstTypeGroup.isDeep3dChart() )
{
ModelRef< AxisModel > xZAxis = lclGetOrCreateAxis( mrModel.maAxes, API_Z_AXIS, C_TOKEN( serAx ) );
diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx
index c58cba9..9806dde 100644
--- a/oox/source/drawingml/chart/seriesconverter.cxx
+++ b/oox/source/drawingml/chart/seriesconverter.cxx
@@ -136,8 +136,9 @@ void lclConvertLabelFormatting( PropertySet& rPropSet, ObjectFormatter& rFormatt
// data label number format (percentage format wins over value format)
rFormatter.convertNumberFormat( rPropSet, rDataLabel.maNumberFormat, bShowPercent );
- // data label text formatting (frame formatting and text rotation not supported by Chart2)
+ // data label text formatting (frame formatting not supported by Chart2)
rFormatter.convertTextFormatting( rPropSet, rDataLabel.mxTextProp, OBJECTTYPE_DATALABEL );
+ rFormatter.convertTextRotation( rPropSet, rDataLabel.mxTextProp, false );
// data label separator (do not overwrite series separator, if no explicit point separator is present)
if( bDataSeriesLabel || rDataLabel.moaSeparator.has() )
diff --git a/oox/source/drawingml/chart/titleconverter.cxx b/oox/source/drawingml/chart/titleconverter.cxx
index c31bb9e..7c86666 100644
--- a/oox/source/drawingml/chart/titleconverter.cxx
+++ b/oox/source/drawingml/chart/titleconverter.cxx
@@ -175,7 +175,7 @@ void TitleConverter::convertFromModel( const Reference< XTitled >& rxTitled, con
// frame rotation
OSL_ENSURE( !mrModel.mxTextProp || !rText.mxTextBody, "TitleConverter::convertFromModel - multiple text properties" );
ModelRef< TextBody > xTextProp = mrModel.mxTextProp.is() ? mrModel.mxTextProp : rText.mxTextBody;
- getFormatter().convertTextRotation( aPropSet, xTextProp );
+ getFormatter().convertTextRotation( aPropSet, xTextProp, true );
}
catch( Exception& )
{
diff --git a/oox/source/dump/biffdumper.cxx b/oox/source/dump/biffdumper.cxx
index 3cf420d..110f0f5 100644
--- a/oox/source/dump/biffdumper.cxx
+++ b/oox/source/dump/biffdumper.cxx
@@ -676,6 +676,19 @@ sal_uInt16 BiffObjectBase::dumpRepeatedRecId()
return dumpHex< sal_uInt16 >( "repeated-rec-id", getRecNames() );
}
+void BiffObjectBase::dumpFrHeader( bool bWithFlags, bool bWithRange )
+{
+ dumpHex< sal_uInt16 >( "rec-id", getRecNames() );
+ sal_Int16 nFlags = bWithFlags ? dumpHex< sal_uInt16 >( "flags", "FR-FLAGS" ) : 0x0001;
+ if( bWithRange )
+ {
+ if( getFlag< sal_uInt16 >( nFlags, 0x0001 ) )
+ dumpRange( "range" );
+ else
+ dumpUnused( 8 );
+ }
+}
+
void BiffObjectBase::dumpDffClientRect()
{
lclDumpDffClientRect( out(), in() );
@@ -1736,6 +1749,50 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpRect< sal_Int32 >( "position", (eBiff <= BIFF4) ? "CONV-TWIP-TO-CM" : "" );
break;
+ case BIFF_ID_CHFRBLOCKBEGIN:
+ dumpFrHeader( true, false );
+ dumpDec< sal_uInt16 >( "type", "CHFRBLOCK-TYPE" );
+ dumpDec< sal_uInt16 >( "context" );
+ dumpDec< sal_uInt16 >( "value-1" );
+ dumpDec< sal_uInt16 >( "value-2" );
+ break;
+
+ case BIFF_ID_CHFRBLOCKEND:
+ dumpFrHeader( true, false );
+ dumpDec< sal_uInt16 >( "type", "CHFRBLOCK-TYPE" );
+ if( rStrm.getRemaining() >= 6 )
+ dumpUnused( 6 );
+ break;
+
+ case BIFF_ID_CHFRINFO:
+ {
+ dumpFrHeader( true, false );
+ dumpDec< sal_uInt8 >( "creator", "CHFRINFO-APPVERSION" );
+ dumpDec< sal_uInt8 >( "writer", "CHFRINFO-APPVERSION" );
+ sal_uInt16 nCount = dumpDec< sal_uInt16 >( "rec-range-count" );
+ out().resetItemIndex();
+ for( sal_uInt16 nIndex = 0; !rStrm.isEof() && (nIndex < nCount); ++nIndex )
+ dumpHexPair< sal_uInt16 >( "#rec-range", '-' );
+ }
+ break;
+
+ case BIFF_ID_CHFRLABELPROPS:
+ dumpFrHeader( true, true );
+ dumpHex< sal_uInt16 >( "flags", "CHFRLABELPROPS-FLAGS" );
+ dumpUniString( "separator", BIFF_STR_SMARTFLAGS );
+ break;
+
+ case BIFF_ID_CHFRUNITPROPS:
+ dumpFrHeader( true, false );
+ dumpDec< sal_Int16 >( "preset", "CHFRUNITPROPS-PRESET" );
+ dumpDec< double >( "unit" );
+ dumpHex< sal_uInt16 >( "flags", "CHFRUNITPROPS-FLAGS" );
+ break;
+
+ case BIFF_ID_CHFRWRAPPER:
+ dumpFrHeader( true, false );
+ break;
+
case BIFF_ID_CHLABELRANGE:
dumpDec< sal_uInt16 >( "axis-crossing" );
dumpDec< sal_uInt16 >( "label-frequency" );
@@ -1884,14 +1941,6 @@ void WorkbookStreamObject::implDumpRecordBody()
if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "label-rotation", "TEXTROTATION" );
break;
- case BIFF_ID_CHUNITPROPERTIES:
- dumpRepeatedRecId();
- dumpUnused( 2 );
- dumpDec< sal_Int16 >( "preset", "CHUNITPROPERTIES-PRESET" );
- dumpDec< double >( "unit" );
- dumpHex< sal_uInt16 >( "flags", "CHUNITPROPERTIES-FLAGS" );
- break;
-
case BIFF_ID_CHVALUERANGE:
dumpDec< double >( "minimum" );
dumpDec< double >( "maximum" );
@@ -1901,11 +1950,6 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpHex< sal_uInt16 >( "flags", "CHVALUERANGE-FLAGS" );
break;
- case BIFF_ID_CHWRAPPEDRECORD:
- dumpRepeatedRecId();
- dumpUnused( 2 );
- break;
-
case BIFF_ID_CODENAME:
dumpUniString( "codename" );
break;
@@ -2511,8 +2555,7 @@ void WorkbookStreamObject::implDumpRecordBody()
break;
case BIFF_ID_SCREENTIP:
- dumpRepeatedRecId();
- dumpRange();
+ dumpFrHeader( false, true );
dumpNullUnicodeArray( "tooltip" );
break;
@@ -2543,8 +2586,8 @@ void WorkbookStreamObject::implDumpRecordBody()
break;
case BIFF_ID_SHEETPROTECTION:
- dumpRepeatedRecId();
- dumpUnused( 17 );
+ dumpFrHeader( true, true );
+ dumpUnused( 7 );
dumpHex< sal_uInt16 >( "allowed-flags", "SHEETPROTECTION-FLAGS" );
dumpUnused( 2 );
break;
diff --git a/oox/source/dump/biffdumper.ini b/oox/source/dump/biffdumper.ini
index 3a3abfb..6c5bbb0 100644
--- a/oox/source/dump/biffdumper.ini
+++ b/oox/source/dump/biffdumper.ini
@@ -125,6 +125,11 @@ constlist=PIVOT-NAMELEN
0xFFFF=name-in-cache
end
+flagslist=FR-FLAGS
+ 0x0001=has-ref
+ 0x0002=alert-unsupported
+end
+
# DFF ------------------------------------------------------------------------
flagslist=DFF-CLIENTANCHOR-FLAGS
@@ -337,9 +342,10 @@ multilist=RECORD-NAMES-BIFF8
0x01B0=CFHEADER,CFRULE,DATAVALIDATIONS,,,DCONBINAME,TXO,REFRESHALL
0x01B8=HYPERLINK,NLRDELNAME,CODENAME,PCDFSQLTYPE,PROT4REVPASS,,DATAVALIDATION,
0x0800=SCREENTIP,,,WEBQRYSETTINGS,WEBQRYTABLES,,,
- 0x0850=,CHWRAPPEDRECORD,,,,,,CHUNITPROPERTIES
+ 0x0850=CHFRINFO,CHFRWRAPPER,CHFRBLOCKBEGIN,CHFRBLOCKEND,,,,CHFRUNITPROPS
0x0858=CHPIVOTREF,,,,,,,
0x0860=,,SHEETLAYOUT,,,,,SHEETPROTECTION
+ 0x0868=,,,CHFRLABELPROPS,,,,
# chart records
0x1058=,,,,,,,CH3DDATAFORMAT
0x1060=CHFONTBASE,CHPIEEXT,CHLABELRANGE2,CHDATATABLE,CHPLOTGROWTH,CHSERINDEX,CHESCHERFORMAT,CHPIEEXTSETT
@@ -683,6 +689,32 @@ end
shortlist=CHFRAMEPOS-OBJTYPE,2,any,,,legend
shortlist=CHFRAMEPOS-SIZEMODE,1,manual,auto
+# CHFRBLOCKBEGIN, CHFRBLOCKEND -----------------------------------------------
+
+shortlist=CHFRBLOCK-TYPE,0,axes-set,,text,,axis,type-group,data-table,frame,,legend,legend-exception,,series,chart,data-format,drop-bar
+
+# CHFRINFO -------------------------------------------------------------------
+
+shortlist=CHFRINFO-APPVERSION,9,excel-2000,excel-xp-2003,excel-2007
+
+# CHFRLABELPROPS -------------------------------------------------------------
+
+flagslist=CHFRLABELPROPS-FLAGS
+ 0x0001=show-series
+ 0x0002=show-categ
+ 0x0004=show-value
+ 0x0008=show-percent
+ 0x0010=show-bubble
+end
+
+# CHFRUNITPROPS --------------------------------------------------------------
+
+shortlist=CHFRUNITPROPS-PRESET,-1,manual,none,hundred,thousand,10000,100000,million,10-million,100-million,billion,trillion
+
+flagslist=CHFRUNITPROPS-FLAGS
+ 0x0002=show-unit
+end
+
# CHLABELRANGE ---------------------------------------------------------------
flagslist=CHLABELRANGE-FLAGS
@@ -909,14 +941,6 @@ combilist=CHTICK-FLAGS-BIFF3
0x0020=auto-rotation
end
-# CHUNITPROPERTIES -----------------------------------------------------------
-
-shortlist=CHUNITPROPERTIES-PRESET,-1,manual,none,hundred,thousand,(10000),(100000),million,(10million),(100million),billion,trillion
-
-flagslist=CHUNITPROPERTIES-FLAGS
- 0x0002=show-unit
-end
-
# CHVALUERANGE ---------------------------------------------------------------
flagslist=CHVALUERANGE-FLAGS
More information about the ooo-build-commit
mailing list