summaryrefslogtreecommitdiff
path: root/chart2/source/tools/ChartDebugTrace.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/tools/ChartDebugTrace.cxx')
-rw-r--r--chart2/source/tools/ChartDebugTrace.cxx420
1 files changed, 420 insertions, 0 deletions
diff --git a/chart2/source/tools/ChartDebugTrace.cxx b/chart2/source/tools/ChartDebugTrace.cxx
new file mode 100644
index 000000000000..9486180ececd
--- /dev/null
+++ b/chart2/source/tools/ChartDebugTrace.cxx
@@ -0,0 +1,420 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: ChartDebugTrace.cxx,v $
+ * $Revision: 1.4.44.1 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_chart2.hxx"
+
+#include "ChartDebugTrace.hxx"
+#include "macros.hxx"
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/chart2/AxisType.hpp>
+#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
+#include <com/sun/star/chart2/XChartTypeContainer.hpp>
+#include <com/sun/star/chart2/XDataSeriesContainer.hpp>
+#include <com/sun/star/chart2/StackingDirection.hpp>
+#include <rtl/math.hxx>
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::chart2;
+
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::Sequence;
+using ::rtl::OUString;
+
+#if OSL_DEBUG_LEVEL >= CHART_TRACE_OSL_DEBUG_LEVEL
+
+namespace
+{
+/*
+const char lcl_aSpace=' ';
+
+void lcl_IndentedTrace( int nIndent, char* pStr )
+{
+ if( nIndent > 0 )
+ {
+ OSL_TRACE( "%*c%s", nIndent, lcl_aSpace, pStr );
+ }
+ else
+ {
+ OSL_TRACE( pStr );
+ }
+}
+
+void lcl_TraceException( const uno::Exception & aEx )
+{
+ OSL_TRACE(
+ U2C( C2U( "*** Exception caught during trace. Type: " ) +
+ OUString::createFromAscii( typeid( aEx ).name()) +
+ C2U( ", Message: " ) +
+ aEx.Message ));
+}
+
+void lcl_TraceCategories( const Reference< data::XLabeledDataSequence > & xCat, int nIndent )
+{
+ if( ! xCat.is())
+ return;
+ try
+ {
+ Reference< data::XDataSequence > xValues( xCat->getValues());
+ if( xValues.is())
+ {
+ OSL_TRACE( "%*ccategories: source: %s", nIndent, lcl_aSpace,
+ U2C( xValues->getSourceRangeRepresentation()));
+ }
+ Reference< data::XDataSequence > xLabel( xCat->getLabel());
+ if( xLabel.is())
+ {
+ OSL_TRACE( "%*ccategories' label: source: %s", nIndent, lcl_aSpace,
+ U2C( xLabel->getSourceRangeRepresentation()));
+ }
+ }
+ catch( uno::Exception & ex )
+ {
+ lcl_TraceException( ex );
+ }
+}
+
+void lcl_TraceDataSeriesSeq( const Sequence< Reference< XDataSeries > > & aSeries, int nIndent )
+{
+ for( sal_Int32 j = 0; j < aSeries.getLength(); ++j )
+ {
+ Reference< beans::XPropertySet > xProp( aSeries[j], uno::UNO_QUERY );
+ OUString aId;
+
+ OSL_TRACE( "%*cindex %ld", nIndent, lcl_aSpace, j );
+
+ StackingDirection aStDir;
+ if( xProp.is() &&
+ ( xProp->getPropertyValue( C2U( "StackingDirection" )) >>= aStDir ) &&
+ aStDir != StackingDirection_NO_STACKING )
+ {
+ OSL_TRACE( "%*cstacking in %s", nIndent + 2, lcl_aSpace,
+ (aStDir == StackingDirection_Y_STACKING)
+ ? "y-direction" : "z-direction" );
+ }
+
+ Reference< data::XDataSource > xSource( aSeries[j], uno::UNO_QUERY );
+ if( xSource.is())
+ {
+ Sequence< Reference< data::XLabeledDataSequence > > aSequences( xSource->getDataSequences());
+ const sal_Int32 nMax = aSequences.getLength();
+ for( sal_Int32 k = 0; k < nMax; ++k )
+ {
+ if( aSequences[k].is())
+ {
+ OUString aSourceId(C2U("<none>"));
+ if( aSequences[k]->getValues().is())
+ aSourceId = aSequences[k]->getValues()->getSourceRangeRepresentation();
+ xProp.set( aSequences[k]->getValues(), uno::UNO_QUERY );
+ if( xProp.is() &&
+ ( xProp->getPropertyValue( C2U( "Role" )) >>= aId ))
+ {
+ OSL_TRACE( "%*cdata sequence %d: role: %s, source: %s",
+ nIndent + 2, lcl_aSpace, k, U2C( aId ), U2C( aSourceId ));
+ }
+ else
+ {
+ OSL_TRACE( "%*cdata sequence %d, unknown role, source: %s",
+ nIndent + 2, lcl_aSpace, k, U2C( aSourceId ) );
+ }
+
+ aSourceId = C2U("<none>");
+ if( aSequences[k]->getLabel().is())
+ aSourceId = OUString( aSequences[k]->getLabel()->getSourceRangeRepresentation());
+ xProp.set( aSequences[k]->getLabel(), uno::UNO_QUERY );
+ if( xProp.is() &&
+ ( xProp->getPropertyValue( C2U( "Role" )) >>= aId ))
+ {
+ OSL_TRACE( "%*cdata sequence label %d: role: %s, source: %s",
+ nIndent + 2, lcl_aSpace, k, U2C( aId ), U2C( aSourceId ));
+ }
+ else
+ {
+ OSL_TRACE( "%*cdata sequence label %d: unknown role, source: %s",
+ nIndent + 2, lcl_aSpace, k, U2C( aSourceId ) );
+ }
+ }
+ }
+ }
+ }
+}
+
+void lcl_TraceChartType( const Reference< XChartType > & xChartType, int nIndent )
+{
+ if( xChartType.is())
+ {
+ OSL_TRACE( "%*c* type: %s", nIndent, lcl_aSpace, U2C( xChartType->getChartType()) );
+
+ lcl_IndentedTrace( nIndent + 2, "Supported Roles" );
+ sal_Int32 i=0;
+ Sequence< OUString > aMandRoles( xChartType->getSupportedMandatoryRoles());
+ if( aMandRoles.getLength() > 0 )
+ {
+ lcl_IndentedTrace( nIndent + 4, "mandatory" );
+ for( i=0; i<aMandRoles.getLength(); ++i )
+ {
+ OSL_TRACE( "%*c%s", nIndent + 6, lcl_aSpace, U2C( aMandRoles[i] ));
+ }
+ }
+ Sequence< OUString > aOptRoles( xChartType->getSupportedOptionalRoles());
+ if( aOptRoles.getLength() > 0 )
+ {
+ lcl_IndentedTrace( nIndent + 4, "optional" );
+ for( i=0; i<aOptRoles.getLength(); ++i )
+ {
+ OSL_TRACE( "%*c%s", nIndent + 6, lcl_aSpace, U2C( aOptRoles[i] ));
+ }
+ }
+ OSL_TRACE( "%*crole of sequence for label: %s", nIndent + 2, lcl_aSpace,
+ U2C( xChartType->getRoleOfSequenceForSeriesLabel()));
+
+ Reference< XDataSeriesContainer > xDSCnt( xChartType, uno::UNO_QUERY );
+ if( xDSCnt.is())
+ {
+ lcl_IndentedTrace( nIndent + 2, "Data Series" );
+ lcl_TraceDataSeriesSeq( xDSCnt->getDataSeries(), nIndent + 4 );
+ }
+ }
+}
+
+void lcl_TraceCoordinateSystem( const Reference< XCoordinateSystem > & xCooSys, int nIndent )
+{
+ if( xCooSys.is()) try
+ {
+ sal_Int32 nDim = xCooSys->getDimension();
+ OSL_TRACE( "%*c* dim: %ld, type: %s", nIndent, lcl_aSpace,
+ nDim, U2C( xCooSys->getCoordinateSystemType() ));
+ nIndent += 2;
+ OSL_TRACE( "%*cview service-name: %s", nIndent, lcl_aSpace,
+ U2C( xCooSys->getViewServiceName() ));
+
+ Reference< beans::XPropertySet > xProp( xCooSys, uno::UNO_QUERY );
+ if( xProp.is())
+ {
+ Reference< beans::XPropertySetInfo > xInfo( xProp->getPropertySetInfo(), uno::UNO_QUERY );
+ sal_Bool bSwap;
+ if( xInfo.is() &&
+ xInfo->hasPropertyByName( C2U("SwapXAndYAxis")) &&
+ (xProp->getPropertyValue( C2U("SwapXAndYAxis")) >>= bSwap) &&
+ bSwap )
+ {
+ lcl_IndentedTrace( nIndent, "swap x-axis and y-axis" );
+ }
+ }
+
+ if( nDim >= 2 )
+ {
+ const sal_Int32 nMaxIndex = xCooSys->getMaximumAxisIndexByDimension(1);
+ for(sal_Int32 nI=0; nI<=nMaxIndex; ++nI)
+ {
+ Reference< XScale > xScale( xCooSys->getAxisByDimension( 1, nI ));
+ if( xScale.is())
+ {
+ ScaleData aData( xScale->getScaleData());
+ if( aData.AxisType==AxisType::PERCENT )
+ lcl_IndentedTrace( nIndent, "percent stacking at y-scale" );
+ }
+ }
+ }
+
+ Sequence< uno::Any > aOrigin( xCooSys->getOrigin());
+ double x, y, z;
+ ::rtl::math::setNan( &x ), ::rtl::math::setNan( &y ), ::rtl::math::setNan( &z );
+ if( aOrigin.getLength() > 0 &&
+ aOrigin[0].hasValue() )
+ aOrigin[0] >>= x;
+ if( aOrigin.getLength() > 1 &&
+ aOrigin[1].hasValue() )
+ aOrigin[1] >>= y;
+ if( aOrigin.getLength() > 2 &&
+ aOrigin[2].hasValue() )
+ aOrigin[2] >>= z;
+ OSL_TRACE( "%*corigin: (%f, %f, %f)", nIndent, lcl_aSpace, x, y, z );
+
+ Reference< XChartTypeContainer > xCTCnt( xCooSys, uno::UNO_QUERY );
+ if( xCTCnt.is())
+ {
+ Sequence< Reference< XChartType > > aChartTypes( xCTCnt->getChartTypes());
+ if( aChartTypes.getLength() > 0 )
+ {
+ lcl_IndentedTrace( nIndent, "Chart Types" );
+ for( sal_Int32 i=0; i<aChartTypes.getLength(); ++i )
+ {
+ lcl_TraceChartType( aChartTypes[i], nIndent + 2 );
+ }
+ }
+ }
+ }
+ catch( uno::Exception & ex )
+ {
+ lcl_TraceException( ex );
+ }
+}
+
+void lcl_TraceMeter(
+ const Reference< XMeter > & xMeter,
+ const Sequence< Reference< XCoordinateSystem > > & aCooSys,
+ bool bWithCategories,
+ int nIndent )
+{
+ try
+ {
+ Reference< XCoordinateSystem > xCooSys( xMeter->getCoordinateSystem());
+ for( sal_Int32 i=0; i<aCooSys.getLength(); ++i )
+ if( aCooSys[i] == xCooSys )
+ {
+ OSL_TRACE( "%*cbelongs to Coordinate System %ld.", nIndent + 2, lcl_aSpace, i );
+ }
+ OSL_TRACE( "%*crepresents Dimension %ld.", nIndent + 2, lcl_aSpace, xMeter->getRepresentedDimension());
+ if( bWithCategories )
+ {
+ Reference< XScale > xScale( xCooSys->getAxisByDimension( xMeter->getRepresentedDimension(), xMeter->getIndex() ));
+ if( xScale.is())
+ {
+ ScaleData aData = xScale->getScaleData();
+ if( aData.Categories.is())
+ {
+ lcl_TraceCategories( aData.Categories, nIndent + 2 );
+ }
+ }
+ }
+ }
+ catch( uno::Exception & ex )
+ {
+ lcl_TraceException( ex );
+ }
+}
+*/
+} // anonymous namespace
+#endif
+
+
+namespace chart
+{
+namespace debug
+{
+
+#if OSL_DEBUG_LEVEL >= CHART_TRACE_OSL_DEBUG_LEVEL
+
+void ChartDebugTraceDocument(
+ const Reference< XChartDocument > & /*xDoc*/,
+ int /*nIndent*/ )
+{
+ /*
+#if OSL_DEBUG_LEVEL >= CHART_TRACE_OSL_DEBUG_LEVEL
+ try
+ {
+ OSL_TRACE( "%*cas %sternal data", nIndent, 'h',
+ xDoc->hasInternalDataProvider() ? "in": "ex" );
+
+ Reference< lang::XMultiServiceFactory > xCTManager( xDoc->getChartTypeManager(), uno::UNO_QUERY );
+ if( xCTManager.is())
+ {
+ Sequence< OUString > aServiceNames( xCTManager->getAvailableServiceNames());
+ OSL_TRACE( "%*c ChartTypeManager has %ld entries", nIndent, '*', aServiceNames.getLength());
+# if OSL_DEBUG_LEVEL >= (CHART_TRACE_OSL_DEBUG_LEVEL + 1)
+ for( sal_Int32 i=0; i<aServiceNames.getLength(); ++i )
+ {
+ OSL_TRACE( "%*c%s", nIndent + 2, lcl_aSpace, U2C( aServiceNames[i] ));
+ }
+# endif
+ }
+ Reference< XDiagram > xDiagram( xDoc->getFirstDiagram());
+ lcl_IndentedTrace( nIndent, "* Diagram" );
+ ChartDebugTraceDiagram( xDiagram, nIndent + 2 );
+ }
+ catch( uno::Exception & ex )
+ {
+ lcl_TraceException( ex );
+ }
+#endif
+ */
+}
+
+void ChartDebugTraceDiagram(
+ const Reference< XDiagram > & /*xDiagram*/,
+ int /*nIndent*/ )
+{
+ /*
+#if OSL_DEBUG_LEVEL >= CHART_TRACE_OSL_DEBUG_LEVEL
+ try
+ {
+ Reference< XCoordinateSystemContainer > xCooSysCnt( xDiagram, uno::UNO_QUERY_THROW );
+ Sequence< Reference< XCoordinateSystem > > aCooSys( xCooSysCnt->getCoordinateSystems() );
+ if( aCooSys.getLength() > 0 )
+ {
+ lcl_IndentedTrace( nIndent, "CoordinateSystems" );
+ for( sal_Int32 i=0; i<aCooSys.getLength(); ++i )
+ lcl_TraceCoordinateSystem( aCooSys[i], nIndent + 2 );
+ }
+ else
+ {
+ lcl_IndentedTrace( nIndent, "<No Coordinate Systems>" );
+ }
+
+ Reference< XAxisContainer > xAxisCnt( xDiagram, uno::UNO_QUERY_THROW );
+ Sequence< Reference< XAxis > > aAxes( xAxisCnt->getAxes() );
+ if( aAxes.getLength() > 0 )
+ {
+ lcl_IndentedTrace( nIndent, "Axes" );
+ for( sal_Int32 i=0; i<aAxes.getLength(); ++i )
+ lcl_TraceMeter( Reference< XMeter >( aAxes[i], uno::UNO_QUERY ), aCooSys, true, nIndent + 2 );
+ }
+ else
+ {
+ lcl_IndentedTrace( nIndent, "<No Axes>" );
+ }
+
+ Reference< XGridContainer > xGridCnt( xDiagram, uno::UNO_QUERY_THROW );
+ Sequence< Reference< XGrid > > aGrids( xGridCnt->getGrids() );
+ if( aGrids.getLength() > 0 )
+ {
+ lcl_IndentedTrace( nIndent, "Grids" );
+ for( sal_Int32 i=0; i<aGrids.getLength(); ++i )
+ lcl_TraceMeter( Reference< XMeter >( aGrids[i], uno::UNO_QUERY ), aCooSys, false, nIndent + 2 );
+ }
+ else
+ {
+ lcl_IndentedTrace( nIndent, "<No Grids>" );
+ }
+ }
+ catch( uno::Exception & ex )
+ {
+ lcl_TraceException( ex );
+ }
+
+#endif
+
+*/
+}
+#endif
+
+} // namespace debug
+} // namespace chart