diff options
author | Björn Milcke <bm@openoffice.org> | 2003-10-06 08:58:36 +0000 |
---|---|---|
committer | Björn Milcke <bm@openoffice.org> | 2003-10-06 08:58:36 +0000 |
commit | c7623b4823e31f0eff82a64c7a43d8f50c3a5dd4 (patch) | |
tree | e2cd53d29a8bcf5120975dcedd170e622f9200d3 /chart2/source/tools | |
parent | 039524721a56387ce25a6738acabdea4b6c40c2f (diff) |
initial import
Diffstat (limited to 'chart2/source/tools')
-rw-r--r-- | chart2/source/tools/ChartModelHelper.cxx | 213 | ||||
-rw-r--r-- | chart2/source/tools/CommonConverters.cxx | 640 | ||||
-rw-r--r-- | chart2/source/tools/ContextHelper.cxx | 92 | ||||
-rw-r--r-- | chart2/source/tools/ImplOPropertySet.cxx | 206 | ||||
-rw-r--r-- | chart2/source/tools/ImplOPropertySet.hxx | 133 | ||||
-rw-r--r-- | chart2/source/tools/LegendHelper.cxx | 78 | ||||
-rw-r--r-- | chart2/source/tools/LifeTime.cxx | 572 | ||||
-rw-r--r-- | chart2/source/tools/MediaDescriptorHelper.cxx | 260 | ||||
-rw-r--r-- | chart2/source/tools/MutexContainer.cxx | 77 | ||||
-rw-r--r-- | chart2/source/tools/OEnumeration.cxx | 95 | ||||
-rw-r--r-- | chart2/source/tools/OIndexContainer.cxx | 214 | ||||
-rw-r--r-- | chart2/source/tools/OPropertySet.cxx | 463 | ||||
-rw-r--r-- | chart2/source/tools/OStyle.cxx | 265 | ||||
-rw-r--r-- | chart2/source/tools/Scaling.cxx | 232 | ||||
-rw-r--r-- | chart2/source/tools/TitleHelper.cxx | 241 | ||||
-rw-r--r-- | chart2/source/tools/exports.flt | 0 | ||||
-rw-r--r-- | chart2/source/tools/makefile.mk | 166 | ||||
-rw-r--r-- | chart2/source/tools/tools.map | 9 |
18 files changed, 3956 insertions, 0 deletions
diff --git a/chart2/source/tools/ChartModelHelper.cxx b/chart2/source/tools/ChartModelHelper.cxx new file mode 100644 index 000000000..50e560395 --- /dev/null +++ b/chart2/source/tools/ChartModelHelper.cxx @@ -0,0 +1,213 @@ +/************************************************************************* + * + * $RCSfile: ChartModelHelper.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "ChartModelHelper.hxx" +#include "macros.hxx" + +#ifndef _DRAFTS_COM_SUN_STAR_CHART2_XCHARTDOCUMENT_HPP_ +#include <drafts/com/sun/star/chart2/XChartDocument.hpp> +#endif +#ifndef _DRAFTS_COM_SUN_STAR_CHART2_XCHARTTYPEGROUP_HPP_ +#include <drafts/com/sun/star/chart2/XChartTypeGroup.hpp> +#endif + +// header for define DBG_ASSERT +#ifndef _TOOLS_DEBUG_HXX +#include <tools/debug.hxx> +#endif + +//............................................................................. +namespace chart +{ +//............................................................................. +using namespace ::com::sun::star; +using namespace ::drafts::com::sun::star::chart2; + +//static +uno::Reference< XDiagram > ChartModelHelper::findDiagram( const uno::Reference< frame::XModel >& xModel ) +{ + uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); + if( xChartDoc.is()) + return xChartDoc->getDiagram(); + return NULL; +} + +//static +sal_Int32 ChartModelHelper::getDimensionAndFirstChartType( const uno::Reference< XDiagram >& xDiagram, rtl::OUString& rChartType ) +{ + sal_Int32 nDimension = 2; + + //@todo maybe get the dimension better from diagram properties ... -> need model change + if(!xDiagram.is()) + return nDimension; + uno::Reference< XDataSeriesTreeParent > xTree = xDiagram->getTree(); + if(!xTree.is()) + return nDimension; + uno::Sequence< uno::Reference< XDataSeriesTreeNode > > aChartTypes( xTree->getChildren() ); + for( sal_Int32 i = 0; i < aChartTypes.getLength(); ++i ) + { + uno::Reference< XChartTypeGroup > xChartTypeGroup( aChartTypes[i], uno::UNO_QUERY ); + DBG_ASSERT(xChartTypeGroup.is(),"First node at the diagram tree needs to be a ChartTypeGroup"); + if( !xChartTypeGroup.is() ) + continue; + uno::Reference< XChartType > xChartType = xChartTypeGroup->getChartType(); + if( !xChartType.is() ) + continue; + uno::Reference< beans::XPropertySet > xChartTypeProp( xChartType, uno::UNO_QUERY ); + if( xChartTypeProp.is()) + { + try + { + if( (xChartTypeProp->getPropertyValue( C2U( "Dimension" )) >>= nDimension) ) + { + rChartType = xChartType->getChartType(); + return nDimension; + } + else + { + DBG_ERROR( "Couldn't get Dimension from ChartTypeGroup" ); + } + } + catch( beans::UnknownPropertyException ex ) + { + ASSERT_EXCEPTION( ex ); + } + break; + } + } + return nDimension; +} + +namespace +{ +void lcl_addSeries( uno::Reference< XDataSeriesTreeParent > xParent, + ::std::vector< uno::Reference< XDataSeries > > & rOutSeriesVec ) +{ + if( xParent.is()) + { + uno::Sequence< uno::Reference< XDataSeriesTreeNode > > aChildren( xParent->getChildren()); + for( sal_Int32 i = 0; i < aChildren.getLength(); ++i ) + { + uno::Reference< XDataSeries > aDataSeries( aChildren[ i ], uno::UNO_QUERY ); + if( aDataSeries.is()) + { + rOutSeriesVec.push_back( aDataSeries ); + } + else + { + uno::Reference< XDataSeriesTreeParent > xNewParent( aChildren[ i ], uno::UNO_QUERY ); + if( xNewParent.is()) + lcl_addSeries( xNewParent, rOutSeriesVec ); + } + } + } +} +} // anonymous namespace + +// static +::std::vector< uno::Reference< XDataSeries > > ChartModelHelper::getDataSeries( + const uno::Reference< frame::XModel > & xModel ) +{ + ::std::vector< uno::Reference< XDataSeries > > aResult; + uno::Reference< XChartDocument > xDocument( xModel, uno::UNO_QUERY ); + if( xDocument.is()) + { + uno::Reference< XDiagram > xDia( xDocument->getDiagram()); + if( xDia.is()) + lcl_addSeries( xDia->getTree(), aResult ); + } + + return aResult; +} + +//static +uno::Reference< XDataSeries > ChartModelHelper::getSeriesByIdentifier( + const rtl::OUString& rIdentifier + , const uno::Reference< frame::XModel > xModel ) +{ + if(!rIdentifier.getLength()) + return NULL; + + ::std::vector< uno::Reference< XDataSeries > > aSeriesList( + getDataSeries( xModel )); + uno::Reference< XDataSeries > xRet; + uno::Reference< beans::XPropertySet > xProp; + rtl::OUString aIdentifier; + + ::std::vector< uno::Reference< XDataSeries > >::const_iterator aIt; + for( aIt = aSeriesList.begin(); aIt != aSeriesList.end(); ++aIt ) + { + xProp = uno::Reference< beans::XPropertySet >( *aIt, uno::UNO_QUERY ); + if(!xProp.is()) + continue; + uno::Any aAIdentifier = xProp->getPropertyValue( C2U( "Identifier" ) ); + aAIdentifier >>= aIdentifier; + if(aIdentifier.getLength() && rIdentifier.match(aIdentifier)) + { + xRet = *aIt; + break; + } + } + return xRet; +} + +//............................................................................. +} //namespace chart +//............................................................................. diff --git a/chart2/source/tools/CommonConverters.cxx b/chart2/source/tools/CommonConverters.cxx new file mode 100644 index 000000000..53df5d1f1 --- /dev/null +++ b/chart2/source/tools/CommonConverters.cxx @@ -0,0 +1,640 @@ +/************************************************************************* + * + * $RCSfile: CommonConverters.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef __CHART_COMMON_CONVERTERS_HXX +#include "CommonConverters.hxx" +#endif + +#ifndef _COM_SUN_STAR_DRAWING_DOUBLESEQUENCE_HPP_ +#include <com/sun/star/drawing/DoubleSequence.hpp> +#endif +#ifndef _COM_SUN_STAR_TEXT_WRITINGMODE2_HPP_ +#include <com/sun/star/text/WritingMode2.hpp> +#endif + +#include <cstdarg> + + +//............................................................................. +namespace chart +{ +//............................................................................. + +using namespace ::com::sun::star; + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// diverse methods for class conversions; e.g. Matrix4D to HomogenMatrix +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- + +drawing::HomogenMatrix Matrix4DToHomogenMatrix( const Matrix4D& rM4 ) +{ + drawing::HomogenMatrix aHM; + aHM.Line1.Column1 = rM4[0][0]; + aHM.Line1.Column2 = rM4[0][1]; + aHM.Line1.Column3 = rM4[0][2]; + aHM.Line1.Column4 = rM4[0][3]; + aHM.Line2.Column1 = rM4[1][0]; + aHM.Line2.Column2 = rM4[1][1]; + aHM.Line2.Column3 = rM4[1][2]; + aHM.Line2.Column4 = rM4[1][3]; + aHM.Line3.Column1 = rM4[2][0]; + aHM.Line3.Column2 = rM4[2][1]; + aHM.Line3.Column3 = rM4[2][2]; + aHM.Line3.Column4 = rM4[2][3]; + aHM.Line4.Column1 = rM4[3][0]; + aHM.Line4.Column2 = rM4[3][1]; + aHM.Line4.Column3 = rM4[3][2]; + aHM.Line4.Column4 = rM4[3][3]; + return aHM; +} + +Matrix4D HomogenMatrixToMatrix4D( + const drawing::HomogenMatrix& rHM ) +{ + Matrix4D aM4; + aM4[0][0] = rHM.Line1.Column1; + aM4[0][1] = rHM.Line1.Column2; + aM4[0][2] = rHM.Line1.Column3; + aM4[0][3] = rHM.Line1.Column4; + aM4[1][0] = rHM.Line2.Column1; + aM4[1][1] = rHM.Line2.Column2; + aM4[1][2] = rHM.Line2.Column3; + aM4[1][3] = rHM.Line2.Column4; + aM4[2][0] = rHM.Line3.Column1; + aM4[2][1] = rHM.Line3.Column2; + aM4[2][2] = rHM.Line3.Column3; + aM4[2][3] = rHM.Line3.Column4; + aM4[3][0] = rHM.Line4.Column1; + aM4[3][1] = rHM.Line4.Column2; + aM4[3][2] = rHM.Line4.Column3; + aM4[3][3] = rHM.Line4.Column4; + return aM4; +} + +Matrix3D IgnoreZ( const Matrix4D& rM4 ) +{ + Matrix3D aM3; + aM3[0][0] = rM4[0][0]; + aM3[0][1] = rM4[0][1]; + aM3[0][2] = rM4[0][3]; + aM3[1][0] = rM4[1][0]; + aM3[1][1] = rM4[1][1]; + aM3[1][2] = rM4[1][3]; + aM3[2][0] = rM4[3][0]; + aM3[2][1] = rM4[3][1]; + aM3[2][2] = rM4[3][3]; + return aM3; +} + + +drawing::HomogenMatrix3 Matrix3DToHomogenMatrix3( const Matrix3D& rM3 ) +{ + drawing::HomogenMatrix3 aHM; + aHM.Line1.Column1 = rM3[0][0]; + aHM.Line1.Column2 = rM3[0][1]; + aHM.Line1.Column3 = rM3[0][2]; + aHM.Line2.Column1 = rM3[1][0]; + aHM.Line2.Column2 = rM3[1][1]; + aHM.Line2.Column3 = rM3[1][2]; + aHM.Line3.Column1 = rM3[2][0]; + aHM.Line3.Column2 = rM3[2][1]; + aHM.Line3.Column3 = rM3[2][2]; + return aHM; +} + +Matrix3D HomogenMatrix3ToMatrix3D( const drawing::HomogenMatrix3& rHM ) +{ + Matrix3D aM3; + aM3[0][0] = rHM.Line1.Column1; + aM3[0][1] = rHM.Line1.Column2; + aM3[0][2] = rHM.Line1.Column3; + aM3[1][0] = rHM.Line2.Column1; + aM3[1][1] = rHM.Line2.Column2; + aM3[1][2] = rHM.Line2.Column3; + aM3[2][0] = rHM.Line3.Column1; + aM3[2][1] = rHM.Line3.Column2; + aM3[2][2] = rHM.Line3.Column3; + return aM3; +} + +Vector3D Position3DToVector3D( const drawing::Position3D& rPosition ) +{ + return Vector3D( + rPosition.PositionX + , rPosition.PositionY + , rPosition.PositionZ + ); +} + +drawing::Direction3D Vector3DToDirection3D( const Vector3D& rVector) +{ + return drawing::Direction3D( + rVector.X() + , rVector.Y() + , rVector.Z() + ); +} + +/* +drawing::PolyPolygonShape3D XPolygonToPolyPolygonShape3D( const XPolygon& rP ) +{ + USHORT nPointCount = rP.GetPointCount(); + + drawing::PolyPolygonShape3D aPP; + + aPP.SequenceX.realloc(1); + aPP.SequenceY.realloc(1); + aPP.SequenceZ.realloc(1); + + drawing::DoubleSequence* pOuterSequenceX = aPP.SequenceX.getArray(); + drawing::DoubleSequence* pOuterSequenceY = aPP.SequenceY.getArray(); + drawing::DoubleSequence* pOuterSequenceZ = aPP.SequenceZ.getArray(); + + pOuterSequenceX->realloc(nPointCount); + pOuterSequenceY->realloc(nPointCount); + pOuterSequenceZ->realloc(nPointCount); + + double* pInnerSequenceX = pOuterSequenceX->getArray(); + double* pInnerSequenceY = pOuterSequenceY->getArray(); + double* pInnerSequenceZ = pOuterSequenceZ->getArray(); + + for(sal_Int32 nN = 0; nN < nPointCount; nN++) + { + *pInnerSequenceX++ = (double)rP[nN].X(); + *pInnerSequenceY++ = (double)rP[nN].Y(); + *pInnerSequenceZ++ = 0.0; + } + return aPP; +} +*/ + +drawing::PolyPolygonShape3D MakeLine3D( + const drawing::Position3D & rStart, + const drawing::Position3D & rEnd ) +{ + drawing::PolyPolygonShape3D aPP; + + aPP.SequenceX.realloc(1); + aPP.SequenceY.realloc(1); + aPP.SequenceZ.realloc(1); + + drawing::DoubleSequence* pOuterSequenceX = aPP.SequenceX.getArray(); + drawing::DoubleSequence* pOuterSequenceY = aPP.SequenceY.getArray(); + drawing::DoubleSequence* pOuterSequenceZ = aPP.SequenceZ.getArray(); + + pOuterSequenceX->realloc(2); + pOuterSequenceY->realloc(2); + pOuterSequenceZ->realloc(2); + + double* pInnerSequenceX = pOuterSequenceX->getArray(); + double* pInnerSequenceY = pOuterSequenceY->getArray(); + double* pInnerSequenceZ = pOuterSequenceZ->getArray(); + + *pInnerSequenceX++ = rStart.PositionX; + *pInnerSequenceY++ = rStart.PositionY; + *pInnerSequenceZ++ = rStart.PositionZ; + + *pInnerSequenceX++ = rEnd.PositionX; + *pInnerSequenceY++ = rEnd.PositionY; + *pInnerSequenceZ++ = rEnd.PositionZ; + + return aPP; +} + +void AddPointToPoly( drawing::PolyPolygonShape3D& rPoly, const drawing::Position3D& rPos, sal_Int32 nPolygonIndex ) +{ + if(nPolygonIndex<0) + { + OSL_ENSURE( false, "The polygon index needs to be > 0"); + nPolygonIndex=0; + } + + //make sure that we have enough polygons + if(nPolygonIndex >= rPoly.SequenceX.getLength() ) + { + rPoly.SequenceX.realloc(nPolygonIndex+1); + rPoly.SequenceY.realloc(nPolygonIndex+1); + rPoly.SequenceZ.realloc(nPolygonIndex+1); + } + + drawing::DoubleSequence* pOuterSequenceX = &rPoly.SequenceX.getArray()[nPolygonIndex]; + drawing::DoubleSequence* pOuterSequenceY = &rPoly.SequenceY.getArray()[nPolygonIndex]; + drawing::DoubleSequence* pOuterSequenceZ = &rPoly.SequenceZ.getArray()[nPolygonIndex]; + + sal_Int32 nOldPointCount = pOuterSequenceX->getLength(); + + pOuterSequenceX->realloc(nOldPointCount+1); + pOuterSequenceY->realloc(nOldPointCount+1); + pOuterSequenceZ->realloc(nOldPointCount+1); + + double* pInnerSequenceX = pOuterSequenceX->getArray(); + double* pInnerSequenceY = pOuterSequenceY->getArray(); + double* pInnerSequenceZ = pOuterSequenceZ->getArray(); + + pInnerSequenceX[nOldPointCount] = rPos.PositionX; + pInnerSequenceY[nOldPointCount] = rPos.PositionY; + pInnerSequenceZ[nOldPointCount] = rPos.PositionZ; +} + +void appendPoly( drawing::PolyPolygonShape3D& rRet, const drawing::PolyPolygonShape3D& rAdd ) +{ + sal_Int32 nOuterCount = Max( rRet.SequenceX.getLength(), rAdd.SequenceX.getLength() ); + rRet.SequenceX.realloc(nOuterCount); + rRet.SequenceY.realloc(nOuterCount); + rRet.SequenceZ.realloc(nOuterCount); + + for( sal_Int32 nOuter=0;nOuter<nOuterCount;nOuter++ ) + { + sal_Int32 nOldPointCount = rRet.SequenceX[nOuter].getLength(); + sal_Int32 nAddPointCount = 0; + if(nOuter<rAdd.SequenceX.getLength()) + nAddPointCount = rAdd.SequenceX[nOuter].getLength(); + if(!nAddPointCount) + continue; + + sal_Int32 nNewPointCount = nOldPointCount + nAddPointCount; + + rRet.SequenceX[nOuter].realloc(nNewPointCount); + rRet.SequenceY[nOuter].realloc(nNewPointCount); + rRet.SequenceZ[nOuter].realloc(nNewPointCount); + + sal_Int32 nPointTarget=nOldPointCount; + sal_Int32 nPointSource=nAddPointCount; + for( ; nPointSource-- ; nPointTarget++ ) + { + rRet.SequenceX[nOuter][nPointTarget] = rAdd.SequenceX[nOuter][nPointSource]; + rRet.SequenceY[nOuter][nPointTarget] = rAdd.SequenceY[nOuter][nPointSource]; + rRet.SequenceZ[nOuter][nPointTarget] = rAdd.SequenceZ[nOuter][nPointSource]; + } + } +} + +/* +drawing::PolyPolygonShape3D operator+( + const drawing::PolyPolygonShape3D& rPoly1 + , const drawing::PolyPolygonShape3D& rPoly2 ) +{ + drawing::PolyPolygonShape3D aRet; + + sal_Int32 nOuterCount = Max( rPoly1.SequenceX.getLength(), rPoly2.SequenceX.getLength() ); + aRet.SequenceX.realloc(nOuterCount); + aRet.SequenceY.realloc(nOuterCount); + aRet.SequenceZ.realloc(nOuterCount); + + for( sal_Int32 nOuter=0;nOuter<nOuterCount;nOuter++ ) + { + sal_Int32 nPointCount_1 = 0; + sal_Int32 nPointCount_2 = 0; + if(nOuter<rPoly1.SequenceX.getLength()) + nPointCount_1 = rPoly1.SequenceX[nOuter].getLength(); + if(nOuter<rPoly2.SequenceX.getLength()) + nPointCount_2 = rPoly2.SequenceX[nOuter].getLength(); + + sal_Int32 nPointCount = nPointCount_1 + nPointCount_2; + + aRet.SequenceX[nOuter].realloc(nPointCount); + aRet.SequenceY[nOuter].realloc(nPointCount); + aRet.SequenceZ[nOuter].realloc(nPointCount); + + sal_Int32 nPointTarget=0; + + { + sal_Int32 nPointSourceCount = nPointCount_1; + const drawing::PolyPolygonShape3D* pPoly = &rPoly1; + for( sal_Int32 nPointSource=0; nPointSource<nPointSourceCount ; nPointSource++,nPointTarget++ ) + { + aRet.SequenceX[nOuter][nPointTarget] = pPoly->SequenceX[nOuter][nPointSource]; + aRet.SequenceY[nOuter][nPointTarget] = pPoly->SequenceY[nOuter][nPointSource]; + aRet.SequenceZ[nOuter][nPointTarget] = pPoly->SequenceZ[nOuter][nPointSource]; + } + } + { + sal_Int32 nPointSourceCount = nPointCount_2; + const drawing::PolyPolygonShape3D* pPoly = &rPoly2; + for( sal_Int32 nPointSource=nPointSourceCount; nPointSource-- ; nPointTarget++ ) + { + aRet.SequenceX[nOuter][nPointTarget] = pPoly->SequenceX[nOuter][nPointSource]; + aRet.SequenceY[nOuter][nPointTarget] = pPoly->SequenceY[nOuter][nPointSource]; + aRet.SequenceZ[nOuter][nPointTarget] = pPoly->SequenceZ[nOuter][nPointSource]; + } + } + } + return aRet; +} +*/ +/* +drawing::PolyPolygonShape3D operator+( + const drawing::PolyPolygonShape3D& rPoly1 + , const drawing::PolyPolygonShape3D& rPoly2 ) +{ + drawing::PolyPolygonShape3D aRet; + + sal_Int32 nOuterCount = rPoly1.SequenceX.getLength()+rPoly2.SequenceX.getLength(); + aRet.SequenceX.realloc(nOuterCount); + aRet.SequenceY.realloc(nOuterCount); + aRet.SequenceZ.realloc(nOuterCount); + + drawing::DoubleSequence* pOuterSequenceX = aRet.SequenceX.getArray(); + drawing::DoubleSequence* pOuterSequenceY = aRet.SequenceY.getArray(); + drawing::DoubleSequence* pOuterSequenceZ = aRet.SequenceZ.getArray(); + + for( sal_Int32 nOuterTarget=0;nOuterTarget<nOuterCount;nOuterTarget++ ) + { + const drawing::PolyPolygonShape3D* pPoly = &rPoly1; + sal_Int32 nOuterSource = nOuterTarget; + if(nOuterTarget>=rPoly1.SequenceX.getLength()) + { + pPoly = &rPoly2; + nOuterSource -= rPoly1.SequenceX.getLength(); + } + + sal_Int32 nPointCount = pPoly->SequenceX[nOuterSource].getLength(); + + pOuterSequenceX->realloc(nPointCount); + pOuterSequenceY->realloc(nPointCount); + pOuterSequenceZ->realloc(nPointCount); + + double* pInnerSequenceX = pOuterSequenceX->getArray(); + double* pInnerSequenceY = pOuterSequenceY->getArray(); + double* pInnerSequenceZ = pOuterSequenceZ->getArray(); + + for( sal_Int32 nPoint=0;nPoint<nPointCount;nPoint++ ) + { + *pInnerSequenceX = pPoly->SequenceX[nOuterSource][nPoint]; + *pInnerSequenceY = pPoly->SequenceY[nOuterSource][nPoint]; + *pInnerSequenceZ = pPoly->SequenceZ[nOuterSource][nPoint]; + + pInnerSequenceX++; pInnerSequenceY++; pInnerSequenceZ++; + } + + pOuterSequenceX++; pOuterSequenceY++; pOuterSequenceZ++; + } + return aRet; +} +*/ + +drawing::PointSequenceSequence PolyToPointSequence( + const drawing::PolyPolygonShape3D& rPolyPolygon ) +{ + drawing::PointSequenceSequence aRet; + aRet.realloc( rPolyPolygon.SequenceX.getLength() ); + + for(sal_Int32 nN = 0; nN < rPolyPolygon.SequenceX.getLength(); nN++) + { + sal_Int32 nInnerLength = rPolyPolygon.SequenceX[nN].getLength(); + aRet[nN].realloc( nInnerLength ); + for( sal_Int32 nM = 0; nM < nInnerLength; nM++) + { + aRet[nN][nM].X = static_cast<sal_Int32>(rPolyPolygon.SequenceX[nN][nM]); + aRet[nN][nM].Y = static_cast<sal_Int32>(rPolyPolygon.SequenceY[nN][nM]); + } + } + return aRet; +} + +Polygon PolyToToolsPoly( const drawing::PolyPolygonShape3D& rPolyPolygon ) +{ + sal_Int32 nOuterLength = rPolyPolygon.SequenceX.getLength(); + if(!nOuterLength) + return Polygon(); + + sal_Int32 nNewSize = nOuterLength; + sal_Int32 nNewIndex = 0; + Polygon aRet(static_cast<USHORT>(nNewSize)); + + for(sal_Int32 nN = 0; nN < nOuterLength; nN++) + { + sal_Int32 nInnerLength = rPolyPolygon.SequenceX[nN].getLength(); + nNewSize += nInnerLength-1, + aRet.SetSize(static_cast<USHORT>(nNewSize)); + for( sal_Int32 nM = 0; nM < nInnerLength; nM++) + { + aRet.SetPoint( Point( static_cast<long>(rPolyPolygon.SequenceX[nN][nM]) + , static_cast<long>(rPolyPolygon.SequenceY[nN][nM]) + ) + , static_cast<USHORT>(nNewIndex) ); + nNewIndex++; + } + } + return aRet; +} + +drawing::PolyPolygonShape3D ToolsPolyToPoly( const Polygon& rToolsPoly, double zValue ) +{ + sal_Int32 nPointCount = rToolsPoly.GetSize(); + + drawing::PolyPolygonShape3D aPP; + + aPP.SequenceX.realloc(1); + aPP.SequenceY.realloc(1); + aPP.SequenceZ.realloc(1); + + drawing::DoubleSequence* pOuterSequenceX = aPP.SequenceX.getArray(); + drawing::DoubleSequence* pOuterSequenceY = aPP.SequenceY.getArray(); + drawing::DoubleSequence* pOuterSequenceZ = aPP.SequenceZ.getArray(); + + pOuterSequenceX->realloc(nPointCount); + pOuterSequenceY->realloc(nPointCount); + pOuterSequenceZ->realloc(nPointCount); + + double* pInnerSequenceX = pOuterSequenceX->getArray(); + double* pInnerSequenceY = pOuterSequenceY->getArray(); + double* pInnerSequenceZ = pOuterSequenceZ->getArray(); + + for( sal_Int32 nN = 0; nN<nPointCount; nN++ ) + { + const Point& rPos = rToolsPoly.GetPoint( static_cast<USHORT>(nN) ); + *pInnerSequenceX++ = rPos.X(); + *pInnerSequenceY++ = rPos.Y(); + *pInnerSequenceZ++ = zValue; + } + + return aPP; +} + +drawing::Position3D operator+( const drawing::Position3D& rPos + , const drawing::Direction3D& rDirection) +{ + return drawing::Position3D( + rPos.PositionX + rDirection.DirectionX + , rPos.PositionY + rDirection.DirectionY + , rPos.PositionZ + rDirection.DirectionZ + ); +} + +drawing::Position3D operator-( const drawing::Position3D& rPos + , const drawing::Direction3D& rDirection) +{ + return drawing::Position3D( + rPos.PositionX - rDirection.DirectionX + , rPos.PositionY - rDirection.DirectionY + , rPos.PositionZ - rDirection.DirectionZ + ); +} + +drawing::Direction3D operator-( const drawing::Position3D& rPos1 + , const drawing::Position3D& rPos2) +{ + return drawing::Direction3D( + rPos1.PositionX - rPos2.PositionX + , rPos1.PositionY - rPos2.PositionY + , rPos1.PositionZ - rPos2.PositionZ + ); +} + +drawing::Direction3D operator*( const drawing::Direction3D& rDirection + , double fFraction) +{ + return drawing::Direction3D( + fFraction*rDirection.DirectionX + , fFraction*rDirection.DirectionY + , fFraction*rDirection.DirectionZ + ); +} + +Vector3D SequenceToVector3D( const uno::Sequence< double >& rSeq ) +{ + OSL_ENSURE(rSeq.getLength()==3,"The sequence needs to have length 3 for conversion into vector"); + + double x=rSeq.getLength()>0?rSeq[0]:0.0; + double y=rSeq.getLength()>1?rSeq[1]:0.0; + double z=rSeq.getLength()>2?rSeq[2]:0.0; + + Vector3D aRet(x,y,z); + return aRet; +} + +uno::Sequence< double > Vector3DToSequence( const Vector3D& rVector ) +{ + uno::Sequence< double > aRet(3); + aRet[0] = rVector.X(); + aRet[1] = rVector.Y(); + aRet[2] = rVector.Z(); + return aRet; +} + +drawing::Position3D SequenceToPosition3D( const uno::Sequence< double >& rSeq ) +{ + OSL_ENSURE(rSeq.getLength()==3,"The sequence needs to have length 3 for conversion into vector"); + + drawing::Position3D aRet; + aRet.PositionX = rSeq.getLength()>0?rSeq[0]:0.0; + aRet.PositionY = rSeq.getLength()>1?rSeq[1]:0.0; + aRet.PositionZ = rSeq.getLength()>2?rSeq[2]:0.0; + return aRet; +} + +uno::Sequence< double > Position3DToSequence( const drawing::Position3D& rPosition ) +{ + uno::Sequence< double > aRet(3); + aRet[0] = rPosition.PositionX; + aRet[1] = rPosition.PositionY; + aRet[2] = rPosition.PositionZ; + return aRet; +} + +drawing::Direction3D SequenceToDirection3D( const uno::Sequence< double >& rSeq ) +{ + drawing::Direction3D aRet; + aRet.DirectionX = rSeq.getLength()>0?rSeq[0]:0.0; + aRet.DirectionY = rSeq.getLength()>1?rSeq[1]:0.0; + aRet.DirectionZ = rSeq.getLength()>2?rSeq[2]:0.0; + return aRet; +} + +uno::Sequence< double > Direction3DToSequence( const drawing::Direction3D& rDirection ) +{ + uno::Sequence< double > aRet(3); + aRet[0] = rDirection.DirectionX; + aRet[1] = rDirection.DirectionY; + aRet[2] = rDirection.DirectionZ; + return aRet; +} + +drawing::Direction3D operator/( const drawing::Direction3D& rDirection, double f ) +{ + OSL_ENSURE(f,"a Direction3D is divided by NULL"); + return drawing::Direction3D( + rDirection.DirectionX/f + , rDirection.DirectionY/f + , rDirection.DirectionZ/f + ); +} + +text::WritingMode WritingMode2ToWritingMode1( sal_Int16 nWritingMode2 ) +{ + switch(nWritingMode2) + { + case text::WritingMode2::RL_TB: + return text::WritingMode_RL_TB; + case text::WritingMode2::TB_RL: + return text::WritingMode_TB_RL; + case text::WritingMode2::LR_TB: + return text::WritingMode_LR_TB; + default: // TL + return text::WritingMode_TB_RL;//there can no correct conversion be done here + } +} + +//............................................................................. +} //namespace chart +//............................................................................. diff --git a/chart2/source/tools/ContextHelper.cxx b/chart2/source/tools/ContextHelper.cxx new file mode 100644 index 000000000..abe516566 --- /dev/null +++ b/chart2/source/tools/ContextHelper.cxx @@ -0,0 +1,92 @@ +/************************************************************************* + * + * $RCSfile: ContextHelper.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "ContextHelper.hxx" +#include <cppuhelper/component_context.hxx> + +#include <vector> + +using namespace ::com::sun::star; + +namespace chart +{ + +namespace ContextHelper +{ + +uno::Reference< uno::XComponentContext > + createContext( + const tContextEntryMapType & rMap, + const uno::Reference< uno::XComponentContext > & rDelegateContext ) +{ + ::std::vector< ::cppu::ContextEntry_Init > aVec( rMap.size()); + for( tContextEntryMapType::const_iterator aIt = rMap.begin(); + aIt != rMap.end(); + ++aIt ) + { + aVec.push_back( ::cppu::ContextEntry_Init( (*aIt).first, (*aIt).second) ); + } + + return ::cppu::createComponentContext( & aVec[0], aVec.size(), rDelegateContext ); +} + +} // namespace ContextHelper + +} // namespace chart diff --git a/chart2/source/tools/ImplOPropertySet.cxx b/chart2/source/tools/ImplOPropertySet.cxx new file mode 100644 index 000000000..517d11504 --- /dev/null +++ b/chart2/source/tools/ImplOPropertySet.cxx @@ -0,0 +1,206 @@ +/************************************************************************* + * + * $RCSfile: ImplOPropertySet.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "ImplOPropertySet.hxx" + +#include <algorithm> +#include <functional> + +#ifndef _COM_SUN_STAR_BEANS_XFASTPROPERTYSET_HPP_ +#include <com/sun/star/beans/XFastPropertySet.hpp> +#endif + +using namespace ::com::sun::star; + +namespace +{ + +struct lcl_getPropertyStateByHandle : + public ::std::unary_function< beans::PropertyState, sal_Int32 > +{ + lcl_getPropertyStateByHandle( + const ::property::impl::ImplOPropertySet::tPropertyMap & rMap ) + : m_rMap( rMap ) + {} + + inline beans::PropertyState operator() ( sal_Int32 nHandle ) + { + if( m_rMap.end() == m_rMap.find( nHandle )) + return beans::PropertyState_DEFAULT_VALUE; + return beans::PropertyState_DIRECT_VALUE; + } + +private: + const ::property::impl::ImplOPropertySet::tPropertyMap & m_rMap; +}; + +template< typename K, typename V > +struct lcl_eraseMapEntry : + public ::std::unary_function< void, K > +{ + lcl_eraseMapEntry( ::std::map< K, V > & rMap ) + : m_rMap( rMap ) + {} + + inline void operator() ( const K & aKey ) + { + m_rMap.erase( aKey ); + } + +private: + ::std::map< K, V > m_rMap; +}; + +} // anonymous namespace + +namespace property +{ +namespace impl +{ + +ImplOPropertySet::ImplOPropertySet() +{} + +beans::PropertyState ImplOPropertySet::GetPropertyStateByHandle( sal_Int32 nHandle ) const +{ + return lcl_getPropertyStateByHandle( m_aProperties ) ( nHandle ); +} + +uno::Sequence< beans::PropertyState > ImplOPropertySet::GetPropertyStatesByHandle( + const ::std::vector< sal_Int32 > & aHandles ) const +{ + uno::Sequence< beans::PropertyState > aResult( aHandles.size()); + + ::std::transform( aHandles.begin(), aHandles.end(), + aResult.getArray(), + lcl_getPropertyStateByHandle( m_aProperties )); + + return aResult; +} + +void ImplOPropertySet::SetPropertyToDefault( sal_Int32 nHandle ) +{ + tPropertyMap::iterator aFoundIter( m_aProperties.find( nHandle ) ); + + if( m_aProperties.end() != aFoundIter ) + { + m_aProperties.erase( aFoundIter ); + } +} + +void ImplOPropertySet::SetPropertiesToDefault( + const ::std::vector< sal_Int32 > & aHandles ) +{ + ::std::for_each( aHandles.begin(), aHandles.end(), + lcl_eraseMapEntry< sal_Int32, uno::Any >( m_aProperties ) ); +} + +void ImplOPropertySet::SetAllPropertiesToDefault() +{ + m_aProperties.clear(); +} + +bool ImplOPropertySet::GetPropertyValueByHandle( + uno::Any & rValue, + sal_Int32 nHandle ) const +{ + bool bResult = false; + + tPropertyMap::const_iterator aFoundIter( m_aProperties.find( nHandle ) ); + + if( m_aProperties.end() != aFoundIter ) + { + rValue = (*aFoundIter).second; + bResult = true; + } + + return bResult; +} + +void ImplOPropertySet::SetPropertyValueByHandle( + sal_Int32 nHandle, const uno::Any & rValue, uno::Any * pOldValue ) +{ + if( pOldValue != NULL ) + { + tPropertyMap::const_iterator aFoundIter( m_aProperties.find( nHandle ) ); + if( m_aProperties.end() != aFoundIter ) + (*pOldValue) = (*aFoundIter).second; + } + + m_aProperties[ nHandle ] = rValue; +} + +bool ImplOPropertySet::SetStyle( const uno::Reference< style::XStyle > & xStyle ) +{ + if( ! xStyle.is()) + return false; + + m_xStyle = xStyle; + return true; +} + +uno::Reference< style::XStyle > ImplOPropertySet::GetStyle() const +{ + return m_xStyle; +} + + +} // namespace impl +} // namespace chart diff --git a/chart2/source/tools/ImplOPropertySet.hxx b/chart2/source/tools/ImplOPropertySet.hxx new file mode 100644 index 000000000..e598b4686 --- /dev/null +++ b/chart2/source/tools/ImplOPropertySet.hxx @@ -0,0 +1,133 @@ +/************************************************************************* + * + * $RCSfile: ImplOPropertySet.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef CHART_IMPLOPROPERTYSET_HXX +#define CHART_IMPLOPROPERTYSET_HXX + +#ifndef _COM_SUN_STAR_BEANS_PROPERTYSTATE_HPP_ +#include <com/sun/star/beans/PropertyState.hpp> +#endif +#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_ +#include <com/sun/star/uno/Sequence.hxx> +#endif +#ifndef _COM_SUN_STAR_STYLE_XSTYLE_HPP_ +#include <com/sun/star/style/XStyle.hpp> +#endif + +#include <map> +#include <vector> + +namespace property +{ +namespace impl +{ + +class ImplOPropertySet +{ +public: + ImplOPropertySet(); + + /** supports states DIRECT_VALUE and DEFAULT_VALUE + */ + ::com::sun::star::beans::PropertyState + GetPropertyStateByHandle( sal_Int32 nHandle ) const; + + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > + GetPropertyStatesByHandle( const ::std::vector< sal_Int32 > & aHandles ) const; + + void SetPropertyToDefault( sal_Int32 nHandle ); + void SetPropertiesToDefault( const ::std::vector< sal_Int32 > & aHandles ); + void SetAllPropertiesToDefault(); + + /** @param rValue is set to the value for the property given in nHandle. If + the property is not set, the style chain is searched for any + instance set there. If there was no value found either in the + property set itself or any of its styles, rValue remains + unchanged and false is returned. + + @return false if the property is default, true otherwise. + */ + bool GetPropertyValueByHandle( + ::com::sun::star::uno::Any & rValue, + sal_Int32 nHandle ) const; + + void SetPropertyValueByHandle( sal_Int32 nHandle, + const ::com::sun::star::uno::Any & rValue, + ::com::sun::star::uno::Any * pOldValue = NULL ); + + bool SetStyle( const ::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle > & xStyle ); + ::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle > + GetStyle() const; + + typedef + ::std::map< sal_Int32, ::com::sun::star::uno::Any > + tPropertyMap; + +private: + tPropertyMap m_aProperties; + ::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle > + m_xStyle; +}; + +} // namespace impl +} // namespace chart + +// CHART_IMPLOPROPERTYSET_HXX +#endif diff --git a/chart2/source/tools/LegendHelper.cxx b/chart2/source/tools/LegendHelper.cxx new file mode 100644 index 000000000..b3027f3d5 --- /dev/null +++ b/chart2/source/tools/LegendHelper.cxx @@ -0,0 +1,78 @@ +/************************************************************************* + * + * $RCSfile: LegendHelper.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "LegendHelper.hxx" +#include "macros.hxx" + +//............................................................................. +namespace chart +{ +//............................................................................. + +rtl::OUString LegendHelper::getIdentifierForLegend() +{ + static rtl::OUString m_aIdentifier( C2U( "@legend" ) ); + return m_aIdentifier; +} + +//............................................................................. +} //namespace chart +//............................................................................. + diff --git a/chart2/source/tools/LifeTime.cxx b/chart2/source/tools/LifeTime.cxx new file mode 100644 index 000000000..1a45acc66 --- /dev/null +++ b/chart2/source/tools/LifeTime.cxx @@ -0,0 +1,572 @@ +/************************************************************************* + * + * $RCSfile: LifeTime.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "LifeTime.hxx" + +#ifndef _OSL_DIAGNOSE_H_ +#include <osl/diagnose.h> +#endif +/* +#ifndef _COM_SUN_STAR_LANG_XEVENTLISTENER_HPP_ +#include <com/sun/star/lang/XEventListener.hpp> +#endif +*/ + +using namespace ::com::sun::star; + +namespace apphelper +{ +//-------------------------- + +LifeTimeManager::LifeTimeManager( lang::XComponent* pComponent, sal_Bool bLongLastingCallsCancelable ) + : m_aListenerContainer( m_aAccessMutex ) + , m_pComponent(pComponent) + , m_bLongLastingCallsCancelable(bLongLastingCallsCancelable) +{ + impl_init(); +} + +void LifeTimeManager::impl_init() +{ + m_bDisposed = sal_False; + m_bInDispose = sal_False; + m_nAccessCount = 0; + m_nLongLastingCallCount = 0; + m_aNoAccessCountCondition.set(); + m_aNoLongLastingCallCountCondition.set(); +} + +LifeTimeManager::~LifeTimeManager() +{ +} + + sal_Bool LifeTimeManager +::impl_isDisposed() +{ + if( m_bDisposed || m_bInDispose ) + { + OSL_ENSURE( sal_False, "This component is already disposed " ); + return sal_True; + } + return sal_False; +} + sal_Bool LifeTimeManager +::impl_canStartApiCall() +{ + if( impl_isDisposed() ) + return sal_False; //behave passive if already disposed + + //mutex is acquired + return sal_True; +} + + void LifeTimeManager +::impl_registerApiCall(sal_Bool bLongLastingCall) +{ + //only allowed if not disposed + //do not acquire the mutex here because it will be acquired already + m_nAccessCount++; + if(m_nAccessCount==1) + //@todo? is it ok to wake some threads here while we have acquired the mutex? + m_aNoAccessCountCondition.reset(); + + if(bLongLastingCall) + m_nLongLastingCallCount++; + if(m_nLongLastingCallCount==1) + m_aNoLongLastingCallCountCondition.reset(); +} + void LifeTimeManager +::impl_unregisterApiCall(sal_Bool bLongLastingCall) +{ + //Mutex needs to be acquired exactly ones + //mutex may be released inbetween in special case of impl_apiCallCountReachedNull() + + OSL_ENSURE( m_nAccessCount>0, "access count mismatch" ); + m_nAccessCount--; + if(bLongLastingCall) + m_nLongLastingCallCount--; + if( m_nLongLastingCallCount==0 ) + { + m_aNoLongLastingCallCountCondition.set(); + } + if( m_nAccessCount== 0) + { + m_aNoAccessCountCondition.set(); + impl_apiCallCountReachedNull(); + + } +} + + sal_Bool LifeTimeManager +::dispose() throw(uno::RuntimeException) +{ + //hold no mutex + { + osl::Guard< osl::Mutex > aGuard( m_aAccessMutex ); + + if( m_bDisposed || m_bInDispose ) + { + OSL_ENSURE( sal_False, "This component is already disposed " ); + return sal_False; //behave passive if already disposed + } + + m_bInDispose = true; + //adding any listener is not allowed anymore + //new calls will not be accepted + //still running calls have the freedom to finish their work without crash + } + //no mutex is acquired + + //--do the disposing of listeners after calling this method + { + uno::Reference< lang::XComponent > xComponent = + uno::Reference< lang::XComponent >(m_pComponent);; + if(xComponent.is()) + { + ::cppu::OInterfaceContainerHelper* pIC = m_aListenerContainer.getContainer( + ::getCppuType((const uno::Reference< lang::XEventListener >*)0) ); + if( pIC ) + { + lang::EventObject aEvent( xComponent ); + pIC->disposeAndClear( aEvent ); + } + } + } + + //no mutex is acquired + { + osl::ClearableGuard< osl::Mutex > aGuard( m_aAccessMutex ); + OSL_ENSURE( !m_bDisposed, "dispose was called already" ); + m_bDisposed = sal_True; + aGuard.clear(); + } + //no mutex is acquired + + //wait until all still running calls have finished + //the accessCount cannot grow anymore, because all calls will return after checking m_bDisposed + m_aNoAccessCountCondition.wait(); + + //we are the only ones working on our data now + + return sal_True; + //--release all resources and references after calling this method successful +} + +//----------------------------------------------------------------- + +CloseableLifeTimeManager::CloseableLifeTimeManager( ::com::sun::star::util::XCloseable* pCloseable + , ::com::sun::star::lang::XComponent* pComponent + , sal_Bool bLongLastingCallsCancelable ) + : LifeTimeManager( pComponent, bLongLastingCallsCancelable ) + , m_pCloseable(pCloseable) +{ + impl_init(); +} + +CloseableLifeTimeManager::~CloseableLifeTimeManager() +{ +} + + sal_Bool CloseableLifeTimeManager +::impl_isDisposedOrClosed() +{ + if( impl_isDisposed() ) + return sal_True; + + if( m_bClosed ) + { + OSL_ENSURE( sal_False, "This object is already closed" ); + return sal_True; + } + return sal_False; +} + + sal_Bool CloseableLifeTimeManager +::g_close_startTryClose(sal_Bool bDeliverOwnership) + throw ( uno::Exception ) +{ + //no mutex is allowed to be acquired + { + osl::ResettableGuard< osl::Mutex > aGuard( m_aAccessMutex ); + + //Mutex needs to be acquired exactly ones; will be released inbetween + if( !impl_canStartApiCall() ) + return sal_False; + //mutex is acquired + + //not closed already -> we try to close again + m_bInTryClose = sal_True; + m_aEndTryClosingCondition.reset(); + + impl_registerApiCall(sal_False); + } + + //------------------------------------------------ + //no mutex is acquired + + //only remove listener calls will be worked on until end of tryclose + //all other new calls will wait till end of try close // @todo? is that really ok + + //?? still running calls have the freedom to finish their work without crash + + try + { + uno::Reference< util::XCloseable > xCloseable = + uno::Reference< util::XCloseable >(m_pCloseable);; + if(xCloseable.is()) + { + //--call queryClosing on all registered close listeners + ::cppu::OInterfaceContainerHelper* pIC = m_aListenerContainer.getContainer( + ::getCppuType((const uno::Reference< util::XCloseListener >*)0) );; + if( pIC ) + { + //lang::EventObject aEvent( static_cast< util::XCloseable*>(xCloseable) ); + lang::EventObject aEvent( xCloseable ); + ::cppu::OInterfaceIteratorHelper aIt( *pIC ); + while( aIt.hasMoreElements() ) + (static_cast< util::XCloseListener*>(aIt.next()))->queryClosing( aEvent, bDeliverOwnership ); + } + } + } + catch( uno::Exception& ex ) + { + //no mutex is acquired + g_close_endTryClose(bDeliverOwnership, sal_False, ex); + //the exception is thrown in the above method + } + return sal_True; +} + + void CloseableLifeTimeManager +::g_close_endTryClose(sal_Bool bDeliverOwnership, sal_Bool bMyVeto, uno::Exception& ex) + throw ( uno::Exception ) +{ + //this method is called, if the try to close was not successfull + osl::Guard< osl::Mutex > aGuard( m_aAccessMutex ); + impl_setOwnership( bDeliverOwnership, sal_False ); + + m_bInTryClose = sal_False; + m_aEndTryClosingCondition.set(); + + //Mutex needs to be acquired exactly ones + //mutex may be released inbetween in special case of impl_apiCallCountReachedNull() + impl_unregisterApiCall(sal_False); + + //this exception must be thrown to the caller + throw ex; +} + + sal_Bool CloseableLifeTimeManager +::g_close_isNeedToCancelLongLastingCalls( sal_Bool bDeliverOwnership, uno::Exception& ex ) + throw ( uno::Exception ) +{ + //this method is called when no closelistener has had a veto during queryclosing + //the method returns false, if nothing stands against closing anymore + //it returns true, if some longlasting calls are running, which might be cancelled + //it throws the given exception, if long calls are running but not cancelable + + osl::Guard< osl::Mutex > aGuard( m_aAccessMutex ); + //this count cannot grow after try of close has started, because we wait in all those methods for end of try closing + if( !m_nLongLastingCallCount ) + return sal_False; + + if(m_bLongLastingCallsCancelable) + return sal_True; + + impl_setOwnership( bDeliverOwnership, sal_True ); + + m_bInTryClose = sal_False; + m_aEndTryClosingCondition.set(); + + //Mutex needs to be acquired exactly ones + //mutex may be released inbetween in special case of impl_apiCallCountReachedNull() + impl_unregisterApiCall(sal_False); + + throw ex; +} + + void CloseableLifeTimeManager +::g_close_endTryClose_doClose() +{ + //this method is called, if the try to close was successfull + osl::ResettableGuard< osl::Mutex > aGuard( m_aAccessMutex ); + + m_bInTryClose = sal_False; + m_aEndTryClosingCondition.set(); + + //Mutex needs to be acquired exactly ones + //mutex may be released inbetween in special case of impl_apiCallCountReachedNull() + impl_unregisterApiCall(sal_False); + impl_doClose(); +} + + void CloseableLifeTimeManager +::impl_setOwnership( sal_Bool bDeliverOwnership, sal_Bool bMyVeto ) +{ + m_bOwnership = bDeliverOwnership && bMyVeto; + m_bOwnershipIsWellKnown = sal_True; +} + sal_Bool CloseableLifeTimeManager +::impl_shouldCloseAtNextChance() +{ + return m_bOwnership; +} + + void CloseableLifeTimeManager +::impl_apiCallCountReachedNull() +{ + //Mutex needs to be acquired exactly ones + //mutex will be released inbetween in impl_doClose() + if( m_pCloseable && impl_shouldCloseAtNextChance() ) + impl_doClose(); +} + + void CloseableLifeTimeManager +::impl_doClose() +{ + //Mutex needs to be acquired exactly ones before calling impl_doClose() + + if(m_bClosed) + return; //behave as passive as possible, if disposed or closed already + if( m_bDisposed || m_bInDispose ) + return; //behave as passive as possible, if disposed or closed already + + //-------- + m_bClosed = sal_True; + + NegativeGuard< osl::Mutex > aNegativeGuard( m_aAccessMutex ); + //mutex is not acquired, mutex will be reacquired at the end of this method automatically + + uno::Reference< util::XCloseable > xCloseable=NULL; + try + { + xCloseable = uno::Reference< util::XCloseable >(m_pCloseable);; + if(xCloseable.is()) + { + //--call notifyClosing on all registered close listeners + ::cppu::OInterfaceContainerHelper* pIC = m_aListenerContainer.getContainer( + ::getCppuType((const uno::Reference< util::XCloseListener >*)0) );; + if( pIC ) + { + //lang::EventObject aEvent( static_cast< util::XCloseable*>(xCloseable) ); + lang::EventObject aEvent( xCloseable ); + ::cppu::OInterfaceIteratorHelper aIt( *pIC ); + while( aIt.hasMoreElements() ) + (static_cast< util::XCloseListener*>(aIt.next()))->notifyClosing( aEvent ); + } + } + } + catch( uno::Exception& ex ) + { + OSL_ENSURE( sal_False, "Exception during notifyClosing of XCloseListener" ); + } + + if(xCloseable.is()) + { + uno::Reference< lang::XComponent > xComponent = + uno::Reference< lang::XComponent >( xCloseable, uno::UNO_QUERY ); + if(xComponent.is()) + { + OSL_ENSURE( m_bClosed, "a not closed component will be disposed " ); + xComponent->dispose(); + } + } + //mutex will be reacquired in destructor of aNegativeGuard +} + + sal_Bool CloseableLifeTimeManager +::g_addCloseListener( const uno::Reference< util::XCloseListener > & xListener ) + throw(uno::RuntimeException) +{ + osl::Guard< osl::Mutex > aGuard( m_aAccessMutex ); + //Mutex needs to be acquired exactly ones; will be released inbetween + if( !impl_canStartApiCall() ) + return sal_False; + //mutex is acquired + + m_aListenerContainer.addInterface( ::getCppuType((const uno::Reference< util::XCloseListener >*)0),xListener ); + m_bOwnership = sal_False; + return sal_True; +} + + sal_Bool CloseableLifeTimeManager +::impl_canStartApiCall() +{ + //Mutex needs to be acquired exactly ones before calling this method + //the mutex will be released inbetween and reacquired + + if( impl_isDisposed() ) + return sal_False; //behave passive if already disposed + if( m_bClosed ) + return sal_False; //behave passive if closing is already done + + //during try-close most calls need to wait for the decision + while( m_bInTryClose ) + { + //if someone tries to close this object at the moment + //we need to wait for his end because the result of the preceding call + //is relevant for our behaviour here + + m_aAccessMutex.release(); + m_aEndTryClosingCondition.wait(); //@todo??? this may block??? try closing + m_aAccessMutex.acquire(); + if( m_bDisposed || m_bInDispose || m_bClosed ) + return sal_False; //return if closed already + } + //mutex is acquired + return sal_True; +} + +//-------------------------- + + sal_Bool LifeTimeGuard +::startApiCall(sal_Bool bLongLastingCall) +{ + //Mutex needs to be acquired exactly ones; will be released inbetween + //mutex is requiered due to constructor of LifeTimeGuard + + OSL_ENSURE( !m_bCallRegistered, "this method is only allowed ones" ); + if(m_bCallRegistered) + return sal_False; + + //Mutex needs to be acquired exactly ones; will be released inbetween + if( !m_rManager.impl_canStartApiCall() ) + return sal_False; + //mutex is acquired + + m_bCallRegistered = sal_True; + m_bLongLastingCallRegistered = bLongLastingCall; + m_rManager.impl_registerApiCall(bLongLastingCall); + return sal_True; +} + +LifeTimeGuard::~LifeTimeGuard() +{ + try + { + //do acquire the mutex if it was cleared before + if(!pT) + reset(); + if(m_bCallRegistered) + { + //Mutex needs to be acquired exactly ones + //mutex may be released inbetween in special case of impl_apiCallCountReachedNull() + m_rManager.impl_unregisterApiCall(m_bLongLastingCallRegistered); + } + } + catch( uno::Exception& ex ) + { + //@todo ? allow a uno::RuntimeException from dispose to travel through?? + } +} + +/* +the XCloseable::close method has to be implemented in the following way: +::close +{ + //hold no mutex + + if( !m_aLifeTimeManager.g_close_startTryClose( bDeliverOwnership ) ) + return; + //no mutex is acquired + + // At the end of this method may we must dispose ourself ... + // and may nobody from outside hold a reference to us ... + // then it's a good idea to do that by ourself. + uno::Reference< uno::XInterface > xSelfHold( static_cast< ::cppu::OWeakObject* >(this) ); + + //the listeners have had no veto + //check wether we self can close + { + util::CloseVetoException aVetoException = util::CloseVetoException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "the model itself could not be closed" ) ) + , static_cast< ::cppu::OWeakObject* >(this)); + + if( m_aLifeTimeManager.g_close_isNeedToCancelLongLastingCalls( bDeliverOwnership, aVetoException) ) + { + ////you can empty this block, if you never start longlasting calls or + ////if your longlasting calls are per default not cancelable (check how you have constructed your LifeTimeManager) + + sal_Bool bLongLastingCallsAreCanceled = sal_False; + try + { + //try to cancel running longlasting calls + //// @todo + } + catch( uno::Exception& ex ) + { + //// @todo + //do not throw anything here!! (without endTryClose) + } + //if not successful canceled + if(!bLongLastingCallsAreCanceled) + { + m_aLifeTimeManager.g_close_endTryClose(bDeliverOwnership, sal_True, aVetoException); + //the exception is thrown in the above method + } + } + + } + m_aLifeTimeManager.g_close_endTryClose_doClose(); +} +*/ + +}//end namespace apphelper diff --git a/chart2/source/tools/MediaDescriptorHelper.cxx b/chart2/source/tools/MediaDescriptorHelper.cxx new file mode 100644 index 000000000..251eaefef --- /dev/null +++ b/chart2/source/tools/MediaDescriptorHelper.cxx @@ -0,0 +1,260 @@ +/************************************************************************* + * + * $RCSfile: MediaDescriptorHelper.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "MediaDescriptorHelper.hxx" + +using namespace ::com::sun::star; + +namespace apphelper +{ + + +const short FLAG_DEPRECATED =1; +const short FLAG_MODEL =2; + +#define WRITE_PROPERTY( MediaName, nFlags ) \ +if(rProp.Name.equals(::rtl::OUString::createFromAscii(#MediaName))) \ +{ \ + if( rProp.Value >>= MediaName ) \ + ISSET_##MediaName = sal_True; \ + if(nFlags & FLAG_DEPRECATED) \ + { \ + m_aDeprecatedProperties[nDeprecatedCount]=rProp;\ + nDeprecatedCount++; \ + } \ + else \ + { \ + m_aRegularProperties[nRegularCount]=rProp; \ + nRegularCount++; \ + if( nFlags & FLAG_MODEL) \ + { \ + m_aModelProperties[nModelCount]=rProp; \ + nModelCount++; \ + } \ + } \ +} + +MediaDescriptorHelper::MediaDescriptorHelper( const uno::Sequence< + beans::PropertyValue > & rMediaDescriptor ) +{ + impl_init(); + + m_aRegularProperties.realloc(0); + m_aRegularProperties.realloc(rMediaDescriptor.getLength()); + sal_Int32 nRegularCount = 0; + + m_aDeprecatedProperties.realloc(0); + m_aDeprecatedProperties.realloc(rMediaDescriptor.getLength()); + sal_Int32 nDeprecatedCount = 0; + + m_aAdditionalProperties.realloc(0); + m_aAdditionalProperties.realloc(rMediaDescriptor.getLength()); + sal_Int32 nAdditionalCount = 0; + + m_aModelProperties.realloc(0); + m_aModelProperties.realloc(rMediaDescriptor.getLength()); + sal_Int32 nModelCount = 0; + + + //read given rMediaDescriptor and store in internal structures: + for( sal_Int32 i= rMediaDescriptor.getLength();i--;) + { + const beans::PropertyValue& rProp = rMediaDescriptor[i]; + WRITE_PROPERTY( AsTemplate, FLAG_MODEL ) + else WRITE_PROPERTY( Author, FLAG_MODEL ) + else WRITE_PROPERTY( CharacterSet, FLAG_MODEL ) + else WRITE_PROPERTY( Comment, FLAG_MODEL ) + else WRITE_PROPERTY( ComponentData, FLAG_MODEL ) + else WRITE_PROPERTY( FileName, FLAG_DEPRECATED ) + else WRITE_PROPERTY( FilterData, FLAG_MODEL ) + else WRITE_PROPERTY( FilterName, FLAG_MODEL ) + else WRITE_PROPERTY( FilterFlags, FLAG_DEPRECATED) + else WRITE_PROPERTY( FilterOptions, FLAG_MODEL ) + else WRITE_PROPERTY( FrameName, FLAG_MODEL ) + else WRITE_PROPERTY( Hidden, FLAG_MODEL ) + else WRITE_PROPERTY( InputStream, 0 ) + else WRITE_PROPERTY( InteractionHandler, 0 ) + else WRITE_PROPERTY( JumpMark, 0 ) + else WRITE_PROPERTY( MediaType, FLAG_MODEL ) + else WRITE_PROPERTY( OpenFlags, FLAG_DEPRECATED ) + else WRITE_PROPERTY( OpenNewView, 0 ) + else WRITE_PROPERTY( Overwrite, FLAG_MODEL ) + else WRITE_PROPERTY( Password, FLAG_MODEL ) + else WRITE_PROPERTY( PosSize, 0 ) + else WRITE_PROPERTY( PostData, 0 ) + else WRITE_PROPERTY( PostString, FLAG_DEPRECATED ) + else WRITE_PROPERTY( Preview, FLAG_MODEL ) + else WRITE_PROPERTY( ReadOnly, 0 ) + else WRITE_PROPERTY( Referer, FLAG_MODEL ) + else WRITE_PROPERTY( Silent, 0 ) + else WRITE_PROPERTY( StatusIndicator, 0 ) + else WRITE_PROPERTY( TemplateName, FLAG_DEPRECATED ) + else WRITE_PROPERTY( TemplateRegionName, FLAG_DEPRECATED ) + else WRITE_PROPERTY( Unpacked, FLAG_MODEL ) + else WRITE_PROPERTY( URL, FLAG_MODEL ) + else WRITE_PROPERTY( Version, FLAG_MODEL ) + else WRITE_PROPERTY( ViewData, FLAG_MODEL ) + else WRITE_PROPERTY( ViewId, FLAG_MODEL ) + else + { + m_aAdditionalProperties[nAdditionalCount]=rProp; + nAdditionalCount++; + } + } + + m_aRegularProperties.realloc(nRegularCount); + m_aDeprecatedProperties.realloc(nDeprecatedCount); + m_aAdditionalProperties.realloc(nAdditionalCount); + m_aModelProperties.realloc(nModelCount); +} + +void MediaDescriptorHelper::impl_init() +{ + AsTemplate = sal_False; + ISSET_AsTemplate = sal_False; + + ISSET_Author = sal_False; + ISSET_CharacterSet = sal_False; + ISSET_Comment = sal_False; + +// ::com::sun::star::uno::Any ComponentData; + ISSET_ComponentData = sal_False; + ISSET_FileName = sal_False; + +// ::com::sun::star::uno::Any FilterData; + ISSET_FilterData = sal_False; + ISSET_FilterName = sal_False; + ISSET_FilterFlags = sal_False; + ISSET_FilterOptions = sal_False; + ISSET_FrameName = sal_False; + + Hidden = sal_False; + ISSET_Hidden = sal_False; + ISSET_InputStream = sal_False; + ISSET_InteractionHandler = sal_False; + ISSET_JumpMark = sal_False; + ISSET_MediaType = sal_False; + ISSET_OpenFlags = sal_False; + OpenNewView = sal_False; + ISSET_OpenNewView = sal_False; + Overwrite = sal_False; + ISSET_Overwrite = sal_False; + ISSET_Password = sal_False; + +// ::com::sun::star::awt::Rectangle PosSize; + ISSET_PosSize = sal_False; + +// ::com::sun::star::uno::Sequence< sal_Int8 > PostData; + ISSET_PostData = sal_False; + ISSET_PostString = sal_False; + Preview = sal_False; + ISSET_Preview = sal_False; + ReadOnly = sal_False; + ISSET_ReadOnly = sal_False; + ISSET_Referer = sal_False; + ISSET_StatusIndicator = sal_False; + Silent = sal_False; + ISSET_Silent = sal_False; + ISSET_TemplateName = sal_False; + ISSET_TemplateRegionName = sal_False; + Unpacked = sal_False; + ISSET_Unpacked = sal_False; + ISSET_URL = sal_False; + Version = 0; + ISSET_Version = sal_False; + +// ::com::sun::star::uno::Any ViewData; + ISSET_ViewData = sal_False; + ViewId = 0; + ISSET_ViewId = sal_False; +} + +MediaDescriptorHelper::~MediaDescriptorHelper() +{ + +} + + uno::Sequence< beans::PropertyValue > MediaDescriptorHelper +::getAll() +{ + uno::Sequence< beans::PropertyValue > aAll( m_aRegularProperties ); + //write properties to aAll + if( m_aDeprecatedProperties.getLength() ) + { + sal_Int32 nCount = m_aRegularProperties.getLength(); + m_aRegularProperties.realloc( nCount + m_aDeprecatedProperties.getLength()); + for(sal_Int32 i=0;i<m_aDeprecatedProperties.getLength();i++) + aAll[nCount+i]=m_aDeprecatedProperties[i]; + } + if( m_aAdditionalProperties.getLength() ) + { + sal_Int32 nCount = m_aRegularProperties.getLength(); + m_aRegularProperties.realloc(nCount + m_aAdditionalProperties.getLength()); + for(sal_Int32 i=0;i<m_aAdditionalProperties.getLength();i++) + aAll[nCount+i]=m_aAdditionalProperties[i]; + } + return aAll; +} + uno::Sequence< beans::PropertyValue > MediaDescriptorHelper +::getReducedForModel() +{ + return m_aModelProperties; +} +} diff --git a/chart2/source/tools/MutexContainer.cxx b/chart2/source/tools/MutexContainer.cxx new file mode 100644 index 000000000..9a2f5c5fa --- /dev/null +++ b/chart2/source/tools/MutexContainer.cxx @@ -0,0 +1,77 @@ +/************************************************************************* + * + * $RCSfile: MutexContainer.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "MutexContainer.hxx" + +namespace chart +{ +namespace helper +{ + +MutexContainer::~MutexContainer() +{} + +::osl::Mutex & MutexContainer::GetMutex() const +{ + return m_aMutex; +} + +} // namespace helper +} // namespace chart diff --git a/chart2/source/tools/OEnumeration.cxx b/chart2/source/tools/OEnumeration.cxx new file mode 100644 index 000000000..918b6a03e --- /dev/null +++ b/chart2/source/tools/OEnumeration.cxx @@ -0,0 +1,95 @@ +/************************************************************************* + * + * $RCSfile: OEnumeration.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "OEnumeration.hxx" + +using namespace ::com::sun::star; + +namespace comphelper +{ + +OEnumeration::OEnumeration( + const ::std::vector< uno::Any > & rContainer ) : + m_aContainer( rContainer ), + m_aIter( m_aContainer.begin() ) +{} + +OEnumeration::~OEnumeration() +{} + +sal_Bool SAL_CALL OEnumeration::hasMoreElements() + throw (uno::RuntimeException) +{ + return ! m_aContainer.empty(); +} + +uno::Any SAL_CALL OEnumeration::nextElement() + throw (container::NoSuchElementException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + if( m_aIter == m_aContainer.end()) + throw container::NoSuchElementException(); + + return *m_aIter++; +} + + +} // namespace comphelper diff --git a/chart2/source/tools/OIndexContainer.cxx b/chart2/source/tools/OIndexContainer.cxx new file mode 100644 index 000000000..80973b537 --- /dev/null +++ b/chart2/source/tools/OIndexContainer.cxx @@ -0,0 +1,214 @@ +/************************************************************************* + * + * $RCSfile: OIndexContainer.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "OIndexContainer.hxx" + +#ifndef _CPPUHELPER_QUERYINTERFACE_HXX_ +#include <cppuhelper/queryinterface.hxx> +#endif + +using namespace ::com::sun::star; +using ::osl::MutexGuard; + +namespace comphelper +{ + +OIndexContainer::OIndexContainer( ::osl::Mutex & rMutex ) : + m_rMutex( rMutex ) +{ +} + +OIndexContainer::~OIndexContainer() +{ +} + +::osl::Mutex & OIndexContainer::GetMutex() +{ + return m_rMutex; +} + +// ____ XInterface ____ +uno::Any SAL_CALL OIndexContainer::queryInterface( const uno::Type& aType ) + throw (uno::RuntimeException) +{ + return ::cppu::queryInterface( + aType, + static_cast< container::XIndexContainer * >( this ), + static_cast< container::XIndexReplace * >( this ), + static_cast< container::XIndexAccess * >( this ), + static_cast< container::XElementAccess * >( this ) ); +} + +// ____ XIndexContainer ____ +void SAL_CALL OIndexContainer::insertByIndex( sal_Int32 Index, const uno::Any& Element ) + throw (lang::IllegalArgumentException, + lang::IndexOutOfBoundsException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + // valid range [0..size] + size_t nIndex( Index ); + + // /-- + MutexGuard aGuard( GetMutex()); + + if( nIndex < 0 || + nIndex > m_aContainer.size() ) + throw lang::IndexOutOfBoundsException(); + + if( getElementType().isAssignableFrom( Element.getValueType()) ) + throw lang::IllegalArgumentException(); + + if( nIndex == m_aContainer.size()) + m_aContainer.push_back( Element ); + else + { + m_aContainer.insert( m_aContainer.begin() + nIndex, Element ); + } + // \-- +} + +void SAL_CALL OIndexContainer::removeByIndex( sal_Int32 Index ) + throw (lang::IndexOutOfBoundsException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + // valid range [0..size-1] + size_t nIndex( Index ); + + // /-- + MutexGuard aGuard( GetMutex()); + + if( nIndex < 0 || + nIndex > m_aContainer.size() ) + throw lang::IndexOutOfBoundsException(); + + m_aContainer.erase( m_aContainer.begin() + nIndex ); + // \-- +} + + +// ____ XIndexReplace ____ +void SAL_CALL OIndexContainer::replaceByIndex( sal_Int32 Index, const uno::Any& Element ) + throw (lang::IllegalArgumentException, + lang::IndexOutOfBoundsException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + // valid range [0..size-1] + size_t nIndex( Index ); + + // /-- + MutexGuard aGuard( GetMutex()); + + if( nIndex < 0 || + nIndex > m_aContainer.size() ) + throw lang::IndexOutOfBoundsException(); + + if( getElementType().isAssignableFrom( Element.getValueType()) ) + throw lang::IllegalArgumentException(); + + m_aContainer[ nIndex ] = Element; + // \-- +} + + +// ____ XIndexAccess ____ +sal_Int32 SAL_CALL OIndexContainer::getCount() + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex()); + + return m_aContainer.size(); + // \-- +} + +uno::Any SAL_CALL OIndexContainer::getByIndex( sal_Int32 Index ) + throw (lang::IndexOutOfBoundsException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + // valid range [0..size-1] + size_t nIndex( Index ); + + // /-- + MutexGuard aGuard( GetMutex()); + + if( nIndex < 0 || + nIndex > m_aContainer.size() ) + throw lang::IndexOutOfBoundsException(); + + return m_aContainer.at( nIndex ); + // \-- +} + +sal_Bool SAL_CALL OIndexContainer::hasElements() + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex()); + + return ! m_aContainer.empty(); + // \-- +} + + +} // namespace comphelper diff --git a/chart2/source/tools/OPropertySet.cxx b/chart2/source/tools/OPropertySet.cxx new file mode 100644 index 000000000..6501d9637 --- /dev/null +++ b/chart2/source/tools/OPropertySet.cxx @@ -0,0 +1,463 @@ +/************************************************************************* + * + * $RCSfile: OPropertySet.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "OPropertySet.hxx" +#include "ImplOPropertySet.hxx" +#include "algohelper.hxx" + +#ifndef _RTL_UUID_H_ +#include <rtl/uuid.h> +#endif +#ifndef _CPPUHELPER_QUERYINTERFACE_HXX_ +#include <cppuhelper/queryinterface.hxx> +#endif + +#include <vector> +#include <algorithm> + +using namespace ::com::sun::star; + +using ::drafts::com::sun::star::style::XStyleSupplier; +// using ::drafts::com::sun::star::beans::XFastPropertyState; + +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::uno::Any; +using ::rtl::OUString; +using ::osl::MutexGuard; + +// needed for MS compiler +using ::cppu::OBroadcastHelper; +using ::cppu::OPropertySetHelper; +using ::cppu::OWeakObject; + +namespace property +{ + +OPropertySet::OPropertySet( ::osl::Mutex & _rMutex ) : + OBroadcastHelper( _rMutex ), + // the following causes a warning; there seems to be no way to avoid it + OPropertySetHelper( static_cast< OBroadcastHelper & >( *this )), + m_rMutex( _rMutex ), + m_pImplProperties( new impl::ImplOPropertySet() ) +{ +} + +OPropertySet::~OPropertySet() +{} + +Any SAL_CALL OPropertySet::queryInterface( const uno::Type& aType ) + throw (uno::RuntimeException) +{ + return ::cppu::queryInterface( + aType, +// static_cast< uno::XInterface * >( +// static_cast< uno::XWeak * >( this )), +// static_cast< uno::XWeak * >( this ), +// static_cast< lang::XServiceInfo * >( this ), + static_cast< lang::XTypeProvider * >( this ), + static_cast< beans::XPropertySet * >( this ), + static_cast< beans::XMultiPropertySet * >( this ), + static_cast< beans::XFastPropertySet * >( this ), + static_cast< beans::XPropertyState * >( this ), + static_cast< beans::XMultiPropertyStates * >( this ), + static_cast< XStyleSupplier * >( this ) ); +// static_cast< XFastPropertyState * >( this ) ); +} + +// void SAL_CALL OPropertySet::acquire() throw () +// { +// OWeakObject::acquire(); +// } + +// void SAL_CALL OPropertySet::release() throw () +// { +// OWeakObject::release(); +// } + + +// ____ XServiceInfo ____ +// OUString SAL_CALL +// OPropertySet::getImplementationName() +// throw (uno::RuntimeException) +// { +// return OUString( RTL_CONSTASCII_USTRINGPARAM( "property::OPropertySet" )); +// } + +// sal_Bool SAL_CALL +// OPropertySet::supportsService( const OUString& ServiceName ) +// throw (uno::RuntimeException) +// { +// return ( 0 == ServiceName.reverseCompareToAsciiL( +// RTL_CONSTASCII_STRINGPARAM( "com.sun.star.beans.PropertySet" ))); +// } + +// Sequence< OUString > SAL_CALL +// OPropertySet::getSupportedServiceNames() +// throw (uno::RuntimeException) +// { +// Sequence< OUString > aServiceNames( 1 ); +// aServiceNames[ 0 ] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.beans.PropertySet" )); +// return aServiceNames; +// } + +#define LCL_PROP_CPPUTYPE(t) (::getCppuType( reinterpret_cast< const Reference<t> *>(0))) + +// // ____ XTypeProvider ____ +Sequence< uno::Type > SAL_CALL + OPropertySet::getTypes() + throw (uno::RuntimeException) +{ + static Sequence< uno::Type > aTypeList; + + // /-- + MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); + + if( aTypeList.getLength() == 0 ) + { + ::std::vector< uno::Type > aTypes; + +// aTypes.push_back( LCL_PROP_CPPUTYPE( uno::XWeak )); +// aTypes.push_back( LCL_PROP_CPPUTYPE( lang::XServiceInfo )); + aTypes.push_back( LCL_PROP_CPPUTYPE( lang::XTypeProvider )); + aTypes.push_back( LCL_PROP_CPPUTYPE( beans::XPropertySet )); + aTypes.push_back( LCL_PROP_CPPUTYPE( beans::XMultiPropertySet )); + aTypes.push_back( LCL_PROP_CPPUTYPE( beans::XFastPropertySet )); + aTypes.push_back( LCL_PROP_CPPUTYPE( beans::XPropertyState )); + aTypes.push_back( LCL_PROP_CPPUTYPE( beans::XMultiPropertyStates )); + aTypes.push_back( LCL_PROP_CPPUTYPE( XStyleSupplier )); +// aTypes.push_back( LCL_PROP_CPPUTYPE( XFastPropertyState )); + + aTypeList = ::chart::helper::VectorToSequence( aTypes ); + } + + return aTypeList; + // \-- +} + +Sequence< sal_Int8 > SAL_CALL + OPropertySet::getImplementationId() + throw (uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + + +// ____ XPropertyState ____ +beans::PropertyState SAL_CALL + OPropertySet::getPropertyState( const OUString& PropertyName ) + throw (beans::UnknownPropertyException, + uno::RuntimeException) +{ + cppu::IPropertyArrayHelper & rPH = getInfoHelper(); + + return m_pImplProperties->GetPropertyStateByHandle( + rPH.getHandleByName( PropertyName )); +} + +Sequence< beans::PropertyState > SAL_CALL + OPropertySet::getPropertyStates( const Sequence< OUString >& aPropertyName ) + throw (beans::UnknownPropertyException, + uno::RuntimeException) +{ + cppu::IPropertyArrayHelper & rPH = getInfoHelper(); + + sal_Int32 * pHandles = new sal_Int32[ aPropertyName.getLength() ]; + rPH.fillHandles( pHandles, aPropertyName ); + + ::std::vector< sal_Int32 > aHandles( pHandles, pHandles + aPropertyName.getLength()); + delete[] pHandles; + + return m_pImplProperties->GetPropertyStatesByHandle( aHandles ); +} + +void SAL_CALL + OPropertySet::setPropertyToDefault( const OUString& PropertyName ) + throw (beans::UnknownPropertyException, + uno::RuntimeException) +{ + cppu::IPropertyArrayHelper & rPH = getInfoHelper(); + + m_pImplProperties->SetPropertyToDefault( rPH.getHandleByName( PropertyName )); +} + +Any SAL_CALL + OPropertySet::getPropertyDefault( const OUString& aPropertyName ) + throw (beans::UnknownPropertyException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + cppu::IPropertyArrayHelper & rPH = getInfoHelper(); + + return GetDefaultValue( rPH.getHandleByName( aPropertyName ) ); +} + + +// ____ XMultiPropertyStates ____ + +// Note: getPropertyStates() is already implemented in XPropertyState with the +// same signature + +void SAL_CALL + OPropertySet::setAllPropertiesToDefault() + throw (uno::RuntimeException) +{ + m_pImplProperties->SetAllPropertiesToDefault(); +} + +void SAL_CALL + OPropertySet::setPropertiesToDefault( const Sequence< OUString >& aPropertyNames ) + throw (beans::UnknownPropertyException, + uno::RuntimeException) +{ + cppu::IPropertyArrayHelper & rPH = getInfoHelper(); + + sal_Int32 * pHandles = new sal_Int32[ aPropertyNames.getLength() ]; + rPH.fillHandles( pHandles, aPropertyNames ); + + ::std::vector< sal_Int32 > aHandles( pHandles, pHandles + aPropertyNames.getLength()); + delete[] pHandles; + + m_pImplProperties->SetPropertiesToDefault( aHandles ); +} + +Sequence< Any > SAL_CALL + OPropertySet::getPropertyDefaults( const Sequence< OUString >& aPropertyNames ) + throw (beans::UnknownPropertyException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + ::cppu::IPropertyArrayHelper & rPH = getInfoHelper(); + const sal_Int32 nElements = aPropertyNames.getLength(); + + Sequence< Any > aResult( nElements ); + Any * pResultArray = aResult.getArray(); + sal_Int32 nI = 0; + + for( ; nI < nElements; ++nI ) + { + pResultArray[ nI ] = GetDefaultValue( + rPH.getHandleByName( aPropertyNames[ nI ] )); + } + + return aResult; +} + +sal_Bool SAL_CALL OPropertySet::convertFastPropertyValue + ( Any & rConvertedValue, + Any & rOldValue, + sal_Int32 nHandle, + const Any& rValue ) + throw (lang::IllegalArgumentException) +{ + getFastPropertyValue( rOldValue, nHandle ); + rConvertedValue = rValue; + return sal_True; +} + +void SAL_CALL OPropertySet::setFastPropertyValue_NoBroadcast + ( sal_Int32 nHandle, + const Any& rValue ) + throw (uno::Exception) +{ + m_pImplProperties->SetPropertyValueByHandle( nHandle, rValue ); +} + +void SAL_CALL OPropertySet::getFastPropertyValue + ( Any& rValue, + sal_Int32 nHandle ) const +{ + if( ! m_pImplProperties->GetPropertyValueByHandle( rValue, nHandle )) + { +// OSL_TRACE( "OPropertySet: asking style for property" ); + // property was not set -> try style + uno::Reference< beans::XFastPropertySet > xStylePropSet( m_pImplProperties->GetStyle(), uno::UNO_QUERY ); + if( xStylePropSet.is() ) + { +#ifndef NDEBUG + { + // check if the handle of the style points to the same property + // name as the handle in this property set + uno::Reference< beans::XPropertySet > xPropSet( xStylePropSet, uno::UNO_QUERY ); + if( xPropSet.is()) + { + uno::Reference< beans::XPropertySetInfo > xInfo( xPropSet->getPropertySetInfo(), + uno::UNO_QUERY ); + if( xInfo.is() ) + { + // for some reason the virtual method getInfoHelper() is + // not const + ::cppu::IPropertyArrayHelper & rPH = + const_cast< OPropertySet * >( this )->getInfoHelper(); + + // find the Property with Handle nHandle in Style + Sequence< beans::Property > aProps( xInfo->getProperties() ); + sal_Int32 nI = aProps.getLength() - 1; + while( ( nI >= 0 ) && nHandle != aProps[ nI ].Handle ) + --nI; + + if( nI >= 0 ) // => nHandle == aProps[nI].Handle + { + // check whether the handle in this property set is + // the same as the one in the style + beans::Property aProp( rPH.getPropertyByName( aProps[ nI ].Name ) ); + OSL_ENSURE( nHandle == aProp.Handle, + "HandleCheck: Handles for same property differ!" ); + + if( nHandle == aProp.Handle ) + { + OSL_ENSURE( aProp.Type == aProps[nI].Type, + "HandleCheck: Types differ!" ); + OSL_ENSURE( aProp.Attributes == aProps[nI].Attributes, + "HandleCheck: Attributes differ!" ); + } + } + else + { + OSL_ENSURE( false, "HandleCheck: Handle not found in Style" ); + } + } + else + OSL_ENSURE( false, "HandleCheck: Invalid XPropertySetInfo returned" ); + } + else + OSL_ENSURE( false, "HandleCheck: XPropertySet not supported" ); + } +#endif + rValue = xStylePropSet->getFastPropertyValue( nHandle ); + } + else + { +// OSL_TRACE( "OPropertySet: no style => getting default for property" ); + // there is no style (or the style does not support XFastPropertySet) + // => take the default value + try + { + rValue = GetDefaultValue( nHandle ); + } + catch( beans::UnknownPropertyException ex ) + { + rValue.clear(); + } + } + } +} + +// ____ XStyleSupplier ____ +Reference< style::XStyle > SAL_CALL OPropertySet::getStyle() + throw (uno::RuntimeException) +{ + return m_pImplProperties->GetStyle(); +} + +void SAL_CALL OPropertySet::setStyle( const Reference< style::XStyle >& xStyle ) + throw (lang::IllegalArgumentException, + uno::RuntimeException) +{ + if( ! m_pImplProperties->SetStyle( xStyle )) + throw lang::IllegalArgumentException( + OUString( RTL_CONSTASCII_USTRINGPARAM( "Empty Style" )), + static_cast< beans::XPropertySet * >( this ), + 0 ); +} + +// ____ XFastPropertyState ____ +// beans::PropertyState OPropertySet::SAL_CALL getFastPropertyState( sal_Int32 nHandle ) +// throw (beans::UnknownPropertyException, +// uno::RuntimeException) +// { +// return m_pImplProperties->GetPropertyStateByHandle( nHandle ); +// } + +// uno::Sequence< beans::PropertyState > OPropertySet::SAL_CALL getFastPropertyStates( +// const uno::Sequence< sal_Int32 >& aHandles ) +// throw (beans::UnknownPropertyException, +// uno::RuntimeException) +// { +// ::std::vector< sal_Int32 > aHandleVec( +// aHandles.getConstArray(), +// aHandles.getConstArray() + aHandles.getLength() ); + +// return m_pImplProperties->GetPropertyStatesByHandle( aHandleVec ); +// } + +// void OPropertySet::SAL_CALL setFastPropertyToDefault( sal_Int32 nHandle ) +// throw (beans::UnknownPropertyException, +// uno::RuntimeException) +// { +// m_pImplProperties->SetPropertyToDefault( nHandle ); +// } + +// uno::Any OPropertySet::SAL_CALL getFastPropertyDefault( sal_Int32 nHandle ) +// throw (beans::UnknownPropertyException, +// lang::WrappedTargetException, +// uno::RuntimeException) +// { +// return GetDefaultValue( nHandle ); +// } + + +} // namespace property diff --git a/chart2/source/tools/OStyle.cxx b/chart2/source/tools/OStyle.cxx new file mode 100644 index 000000000..e9c2813dd --- /dev/null +++ b/chart2/source/tools/OStyle.cxx @@ -0,0 +1,265 @@ +/************************************************************************* + * + * $RCSfile: OStyle.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "OStyle.hxx" +#include "macros.hxx" + +#ifndef _RTL_UUID_H_ +#include <rtl/uuid.h> +#endif +#ifndef _CPPUHELPER_QUERYINTERFACE_HXX_ +#include <cppuhelper/queryinterface.hxx> +#endif + +using namespace ::com::sun::star; + +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::uno::Reference; +using ::rtl::OUString; +using ::osl::MutexGuard; + +namespace property +{ + +OStyle::OStyle( const Reference< container::XNameAccess > & xStyleFamily, + ::osl::Mutex & _rMutex ) : + OPropertySet( _rMutex ), + m_xStyleFamily( xStyleFamily ), + m_bUserDefined( false ), + m_rMutex( _rMutex ) +{} + +OStyle::~OStyle() +{} + +::osl::Mutex & OStyle::GetMutex() +{ + return m_rMutex; +} + +// ____ XStyle ____ +sal_Bool SAL_CALL OStyle::isUserDefined() + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex() ); + return m_bUserDefined; + // \-- +} + +sal_Bool SAL_CALL OStyle::isInUse() + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex() ); + + // aBoundLC is a member of cppuhelper::OPropertySetHelper + // it is assumed that a style is in use whenever some component is + // registered here as listener + return ( aBoundLC.getContainedTypes().getLength() > 0 ); + // \-- +} + +OUString SAL_CALL OStyle::getParentStyle() + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex() ); + return m_aParentStyleName; + // \-- +} + +void SAL_CALL OStyle::setParentStyle( const OUString& aParentStyle ) + throw (container::NoSuchElementException, + uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex() ); + m_aParentStyleName = aParentStyle; + // \-- +} + +// ____ XNamed (base of XStyle) ____ + +OUString SAL_CALL OStyle::getName() + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex() ); + return m_aName; + // \-- +} + +void SAL_CALL OStyle::setName( const ::rtl::OUString& aName ) + throw (uno::RuntimeException) +{ + // /-- + MutexGuard aGuard( GetMutex() ); + OSL_ASSERT( m_xStyleFamily.is() ); + + // note: RuntimeException is not very apropriate for this, but I have no + // other choice + if( m_xStyleFamily->hasByName( aName )) + { + OSL_ENSURE( false, "Style name already exists!" ); + throw uno::RuntimeException( + C2U( "Style name already exists: " ) + aName, + static_cast< style::XStyle * >( this )); + } + else + { + // ToDo: Change the name in the container (XStyleFamiliy) + m_aName = aName; + } + // \-- +} + +// ____ XInterface ____ +uno::Any SAL_CALL OStyle::queryInterface( const uno::Type& aType ) + throw (uno::RuntimeException) +{ + uno::Any aResult = OPropertySet::queryInterface( aType ); + + if( ! aResult.hasValue()) + { + return ::cppu::queryInterface( + aType, + static_cast< style::XStyle * >( this )); + } + + return aResult; +} + +// void SAL_CALL OStyle::acquire() throw () +// { +// OPropertySet::acquire(); +// } + +// void SAL_CALL OStyle::release() throw () +// { +// OPropertySet::release(); +// } + + + +// ____ XServiceInfo ____ +// OUString SAL_CALL +// OStyle::getImplementationName() +// throw (uno::RuntimeException) +// { +// return OUString( RTL_CONSTASCII_USTRINGPARAM( "property::OStyle" )); +// } + +// sal_Bool SAL_CALL +// OStyle::supportsService( const OUString& ServiceName ) +// throw (uno::RuntimeException) +// { +// Sequence< OUString > aServices( getSupportedServiceNames() ); + +// sal_Int32 nI = aServices.getLength() - 1; +// for( ; nI >= 0; --nI ) +// { +// if( aServices[ nI ].equals( ServiceName )) +// return sal_True; +// } +// return sal_False; +// } + +// Sequence< OUString > SAL_CALL +// OStyle::getSupportedServiceNames() +// throw (uno::RuntimeException) +// { +// Sequence< OUString > aServiceNames( 2 ); +// // from base OPropertySet +// aServiceNames[ 0 ] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.beans.PropertySet" )); +// // new service +// aServiceNames[ 1 ] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.style.Style" )); +// return aServiceNames; +// } + + +// ____ XTypeProvider ____ +// Sequence< uno::Type > SAL_CALL +// OStyle::getTypes() +// throw (uno::RuntimeException) +// { +// Sequence< uno::Type > aResult( OPropertySet::getTypes() ); +// aResult.realloc( aResult.getLength() + 1 ); +// aResult[ aResult.getLength() - 1 ] = +// ::getCppuType( reinterpret_cast< const Reference< style::XStyle > *>(0)); + +// return aResult; +// } + +// Sequence< sal_Int8 > SAL_CALL +// OStyle::getImplementationId() +// throw (uno::RuntimeException) +// { +// static uno::Sequence< sal_Int8 > aId; +// if( aId.getLength() == 0 ) +// { +// aId.realloc( 16 ); +// rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); +// } +// return aId; +// } + + +} // namespace property diff --git a/chart2/source/tools/Scaling.cxx b/chart2/source/tools/Scaling.cxx new file mode 100644 index 000000000..13215b248 --- /dev/null +++ b/chart2/source/tools/Scaling.cxx @@ -0,0 +1,232 @@ +/************************************************************************* + * + * $RCSfile: Scaling.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef _CHART2_SCALING_HXX +#include "Scaling.hxx" +#endif + +#ifndef INCLUDED_RTL_MATH_HXX +#include <rtl/math.hxx> +#endif + +namespace +{ + +static const ::rtl::OUString lcl_aServiceName_Logarithmic( + RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.LogarithmicScaling" )); +static const ::rtl::OUString lcl_aServiceName_Exponential( + RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.ExponentialScaling" )); +static const ::rtl::OUString lcl_aServiceName_Linear( + RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.LinearScaling" )); +static const ::rtl::OUString lcl_aServiceName_Power( + RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.PowerScaling" )); +} + +//............................................................................. +namespace chart +{ +//............................................................................. +using namespace ::com::sun::star; +using namespace ::drafts::com::sun::star::chart2; + +LogarithmicScaling::LogarithmicScaling() : + m_fBase( 10.0 ), + m_fLogOfBase( log( 10.0 ) ) +{ +} + +LogarithmicScaling::LogarithmicScaling( double fBase ) : + m_fBase( fBase ), + m_fLogOfBase( log( fBase ) ) +{ +} + +LogarithmicScaling::~LogarithmicScaling() +{ +} + + double SAL_CALL +LogarithmicScaling::doScaling( double value ) + throw (uno::RuntimeException) +{ + return log( value ) / m_fLogOfBase; +} + + uno::Reference< XScaling > SAL_CALL +LogarithmicScaling::getInverseScaling() + throw (uno::RuntimeException) +{ + return new ExponentialScaling( m_fBase ); +} + + ::rtl::OUString SAL_CALL +LogarithmicScaling::getServiceName() + throw (uno::RuntimeException) +{ + return lcl_aServiceName_Logarithmic; +} + +// ---------------------------------------- + +ExponentialScaling::ExponentialScaling() : + m_fBase( 10.0 ) +{ +} + +ExponentialScaling::ExponentialScaling( double fBase ) : + m_fBase( fBase ) +{ +} + +ExponentialScaling::~ExponentialScaling() +{ +} + + double SAL_CALL +ExponentialScaling::doScaling( double value ) + throw (uno::RuntimeException) +{ + return pow( m_fBase, value ); +} + + uno::Reference< XScaling > SAL_CALL +ExponentialScaling::getInverseScaling() + throw (uno::RuntimeException) +{ + return new LogarithmicScaling( m_fBase ); +} + + ::rtl::OUString SAL_CALL +ExponentialScaling::getServiceName() + throw (uno::RuntimeException) +{ + return lcl_aServiceName_Exponential; +} + +// ---------------------------------------- + +LinearScaling::LinearScaling( double fSlope, double fOffset ) : + m_fSlope( fSlope ), + m_fOffset( fOffset ) +{} + +LinearScaling::~LinearScaling() +{} + +double SAL_CALL LinearScaling::doScaling( double value ) + throw (uno::RuntimeException) +{ + return m_fOffset + m_fSlope * value; +} + +uno::Reference< XScaling > SAL_CALL + LinearScaling::getInverseScaling() + throw (uno::RuntimeException) +{ + // ToDo: ApproxEqual ? + if( m_fSlope == 0 ) + throw uno::RuntimeException(); + + return new LinearScaling( 1.0 / m_fSlope, m_fOffset / m_fSlope ); +} + + ::rtl::OUString SAL_CALL +LinearScaling::getServiceName() + throw (uno::RuntimeException) +{ + return lcl_aServiceName_Linear; +} + +// ---------------------------------------- + +PowerScaling::PowerScaling( double fExponent ) : + m_fExponent( fExponent ) +{} + +PowerScaling::~PowerScaling() +{} + +double SAL_CALL PowerScaling::doScaling( double value ) + throw (uno::RuntimeException) +{ + return pow( value, m_fExponent ); +} + +uno::Reference< XScaling > SAL_CALL + PowerScaling::getInverseScaling() + throw (uno::RuntimeException) +{ + // ToDo: ApproxEqual ? + if( m_fExponent == 0 ) + throw uno::RuntimeException(); + + return new PowerScaling( 1.0 / m_fExponent ); +} + + ::rtl::OUString SAL_CALL +PowerScaling::getServiceName() + throw (uno::RuntimeException) +{ + return lcl_aServiceName_Power; +} + +//............................................................................. +} //namespace chart +//............................................................................. diff --git a/chart2/source/tools/TitleHelper.cxx b/chart2/source/tools/TitleHelper.cxx new file mode 100644 index 000000000..2cac24c67 --- /dev/null +++ b/chart2/source/tools/TitleHelper.cxx @@ -0,0 +1,241 @@ +/************************************************************************* + * + * $RCSfile: TitleHelper.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2003 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#include "TitleHelper.hxx" +#include "ChartModelHelper.hxx" +#include "macros.hxx" +#include "ContextHelper.hxx" + +#ifndef _DRAFTS_COM_SUN_STAR_CHART2_XCHARTDOCUMENT_HPP_ +#include <drafts/com/sun/star/chart2/XChartDocument.hpp> +#endif + +//............................................................................. +namespace chart +{ +//............................................................................. + +using namespace ::com::sun::star; +using namespace ::drafts::com::sun::star::chart2; + +rtl::OUString TitleHelper::getIdentifierForTitle( TitleHelper::eTitleType nTitleIndex ) +{ + switch( nTitleIndex ) + { + case MAIN_TITLE: + { + static rtl::OUString m_aIdentifier( C2U( "@main-title" ) ); + return m_aIdentifier; + } + case SUB_TITLE: + { + static rtl::OUString m_aIdentifier( C2U( "@sub-title" ) ); + return m_aIdentifier; + } + case X_AXIS_TITLE: + { + static rtl::OUString m_aIdentifier( C2U( "@xaxis-title" ) ); + return m_aIdentifier; + } + case Y_AXIS_TITLE: + { + static rtl::OUString m_aIdentifier( C2U( "@yaxis-title" ) ); + return m_aIdentifier; + } + case Z_AXIS_TITLE: + { + static rtl::OUString m_aIdentifier( C2U( "@zaxis-title" ) ); + return m_aIdentifier; + } + default: + OSL_ENSURE( false, "Unsupported Title-Type requested" ); + return ::rtl::OUString(); + } +} + +uno::Reference< XTitled > lcl_getTitleParent( TitleHelper::eTitleType nTitleIndex + , const uno::Reference< frame::XModel >& xModel ) +{ + switch( nTitleIndex ) + { + case TitleHelper::MAIN_TITLE: + return uno::Reference< XTitled >( xModel, uno::UNO_QUERY ); + case TitleHelper::SUB_TITLE: + { + uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); + if( !xChartDoc.is()) + return NULL; + return uno::Reference< XTitled >( xChartDoc->getDiagram(), uno::UNO_QUERY ); + } + case TitleHelper::X_AXIS_TITLE: + //@todo + break; + case TitleHelper::Y_AXIS_TITLE: + //@todo + break; + case TitleHelper::Z_AXIS_TITLE: + //@todo + break; + default: + OSL_ENSURE( false, "Unsupported Title-Type requested" ); + return NULL; + } +} + +uno::Reference< XTitle > TitleHelper::getTitle( TitleHelper::eTitleType nTitleIndex + , const uno::Reference< frame::XModel >& xModel ) +{ + uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xModel ) ); + if( xTitled.is()) + return xTitled->getTitle(); + return NULL; +} + +uno::Reference< XTitle > TitleHelper::createTitle( + TitleHelper::eTitleType nTitleIndex + , const rtl::OUString& rTitleText + , const uno::Reference< frame::XModel >& xModel + , const uno::Reference< uno::XComponentContext > & xContext ) +{ + if( !rTitleText.getLength() ) + return NULL; + + uno::Reference< XTitle > xTitle(NULL); + uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xModel ) ); + + ContextHelper::tContextEntryMapType aContextValues( + ContextHelper::MakeContextEntryMap( C2U( "Identifier" ) + , uno::makeAny( TitleHelper::getIdentifierForTitle(nTitleIndex) )) ); + uno::Reference< uno::XComponentContext > xNewContext( + ContextHelper::createContext( aContextValues, xContext ) ); + + if(xNewContext.is() && xTitled.is()) + { + xTitle.set( xContext->getServiceManager()->createInstanceWithContext( + C2U( "drafts.com.sun.star.chart2.Title" ), + xNewContext ), uno::UNO_QUERY ); + + if(xTitle.is()) + { + setCompleteString( rTitleText, xTitle, xNewContext ); + xTitled->setTitle( xTitle ); + } + } + return xTitle; +} + +rtl::OUString TitleHelper::getCompleteString( const uno::Reference< XTitle >& xTitle ) +{ + rtl::OUString aRet; + if(!xTitle.is()) + return aRet; + uno::Sequence< uno::Reference< XFormattedString > > aStringList = xTitle->getText(); + for( sal_Int32 nN=0; nN<aStringList.getLength();nN++ ) + aRet += aStringList[nN]->getString(); + return aRet; +} + +void TitleHelper::setCompleteString( const rtl::OUString& rNewText + , const uno::Reference< XTitle >& xTitle + , const uno::Reference< uno::XComponentContext > & xContext ) +{ + //the format of the first old text portion will be maintained if there is any + if(!xTitle.is()) + return; + + uno::Sequence< uno::Reference< XFormattedString > > aNewStringList(1); + + uno::Sequence< uno::Reference< XFormattedString > > aOldStringList = xTitle->getText(); + if( aOldStringList.getLength() ) + { + aNewStringList[0].set( aOldStringList[0] ); + aNewStringList[0]->setString( rNewText ); + } + else + { + uno::Reference< uno::XInterface > xI( + xContext->getServiceManager()->createInstanceWithContext( + C2U( "drafts.com.sun.star.chart2.FormattedString" ), xContext ) ); + uno::Reference< XFormattedString > xFormattedString( xI, uno::UNO_QUERY ); + + if(xFormattedString.is()) + { + xFormattedString->setString( rNewText ); + aNewStringList[0].set( xFormattedString ); + } + } + xTitle->setText( aNewStringList ); +} + +void TitleHelper::removeTitle( TitleHelper::eTitleType nTitleIndex + , const ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XModel >& xModel ) +{ + uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xModel ) ); + if( xTitled.is()) + { + xTitled->setTitle(NULL); + } +} + +//............................................................................. +} //namespace chart +//............................................................................. + diff --git a/chart2/source/tools/exports.flt b/chart2/source/tools/exports.flt new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/chart2/source/tools/exports.flt diff --git a/chart2/source/tools/makefile.mk b/chart2/source/tools/makefile.mk new file mode 100644 index 000000000..21392c341 --- /dev/null +++ b/chart2/source/tools/makefile.mk @@ -0,0 +1,166 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: bm $ $Date: 2003-10-06 09:58:32 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library 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 for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (the "License"); You may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at http://www.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +PRJ= ..$/.. +PRJNAME= chart2 +TARGET= charttools + +PRJINC= $(PRJ)$/source + +USE_DEFFILE= TRUE +ENABLE_EXCEPTIONS= TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE: $(PRJ)$/util$/makefile.pmk + +# --- export library ------------------------------------------------- + +#You can use several library macros of this form to build libraries that +#do not consist of all object files in a directory or to merge different libraries. +#LIB1TARGET= $(SLB)$/_$(TARGET).lib + +#Specifies object files to bind into linked libraries. +SLOFILES= \ + $(SLO)$/LifeTime.obj \ + $(SLO)$/MediaDescriptorHelper.obj \ + $(SLO)$/CommonConverters.obj \ + $(SLO)$/ContextHelper.obj \ + $(SLO)$/ImplOPropertySet.obj \ + $(SLO)$/OChartElementContainerHelper.obj \ + $(SLO)$/OEnumeration.obj \ + $(SLO)$/OIndexContainer.obj \ + $(SLO)$/OPropertySet.obj \ + $(SLO)$/OStyle.obj \ + $(SLO)$/Scaling.obj \ + $(SLO)$/ChartModelHelper.obj \ + $(SLO)$/MeterHelper.obj \ + $(SLO)$/MutexContainer.obj \ + $(SLO)$/TitleHelper.obj \ + $(SLO)$/LegendHelper.obj + +LIB1OBJFILES = $(SLOFILES) + +#-------- + +#Indicates the filename of the shared library. +SHL1TARGET= $(TARGET)$(UPD)$(DLLPOSTFIX) + +#indicates dependencies: +SHL1DEPN= +#Specifies an import library to create. For Win32 only. +SHL1IMPLIB= i$(TARGET) + +#Specifies libraries from the same module to put into the shared library. +#was created above +SHL1LIBS= $(SLB)$/$(TARGET).lib + +#Links import libraries. + +SHL1STDLIBS= \ + $(CPPULIB) \ + $(CPPUHELPERLIB) \ + $(SALLIB) \ + $(TOOLSLIB) + +# $(COMPHELPERLIB) \ +# $(GOODIESLIB) \ +# $(SVLIB) \ +# $(SVLLIB) \ +# $(SVTOOLLIB) \ +# $(SVXLIB) \ +# $(TKLIB) \ +# $(VCLLIB) \ +# $(SFXLIB) + +#--------exports + +#specifies the exported symbols for Windows only: +SHL1DEF= $(MISC)$/$(SHL1TARGET).def + +#Specifies the library name to parse for symbols. For Win32 only. +#DEFLIB1NAME= _$(TARGET) + +#A file of symbols to export. +#DEF1EXPORTFILE= $(PRJ)$/source$/inc$/exports.dxp + +#--------definition file + +#name of the definition file: +DEF1NAME= $(SHL1TARGET) + +# indicates definition file dependencies +DEF1DEPN= $(MISC)$/$(SHL1TARGET).flt + +#A comment on the definition file. +DEF1DES= Chart Tools + +# --- Targets ----------------------------------------------------------------- + +.INCLUDE: target.mk + +# --- Filter ----------------------------------------------------------- + +$(MISC)$/$(SHL1TARGET).flt: makefile.mk \ + exports.flt + +$(TYPE) exports.flt > $@ + diff --git a/chart2/source/tools/tools.map b/chart2/source/tools/tools.map new file mode 100644 index 000000000..7698cb349 --- /dev/null +++ b/chart2/source/tools/tools.map @@ -0,0 +1,9 @@ +CHART_1_0 { + global: + component_getImplementationEnvironment; + component_writeInfo; + component_getFactory; + component_getDescriptionFunc; + local: + *; +}; |