1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _CHART2_OBJECTIDENTIFIER_HXX 28 #define _CHART2_OBJECTIDENTIFIER_HXX 29 30 #include <com/sun/star/chart2/XChartType.hpp> 31 #include <com/sun/star/chart2/XDiagram.hpp> 32 #include <com/sun/star/chart2/XCoordinateSystem.hpp> 33 #include <com/sun/star/chart2/XDataSeries.hpp> 34 #include <com/sun/star/chart2/XChartDocument.hpp> 35 #include "TitleHelper.hxx" 36 #include "charttoolsdllapi.hxx" 37 38 // header for class OUString 39 #include <rtl/ustring.hxx> 40 #include <com/sun/star/frame/XModel.hpp> 41 #include <com/sun/star/beans/XPropertySet.hpp> 42 #include <com/sun/star/awt/Point.hpp> 43 #include <com/sun/star/drawing/XShape.hpp> 44 45 //............................................................................. 46 namespace chart 47 { 48 //............................................................................. 49 50 //----------------------------------------------------------------------------- 51 /** 52 */ 53 enum ObjectType 54 { 55 OBJECTTYPE_PAGE, 56 OBJECTTYPE_TITLE, 57 OBJECTTYPE_LEGEND, 58 OBJECTTYPE_LEGEND_ENTRY, 59 OBJECTTYPE_DIAGRAM, 60 OBJECTTYPE_DIAGRAM_WALL, 61 OBJECTTYPE_DIAGRAM_FLOOR, 62 OBJECTTYPE_AXIS, 63 OBJECTTYPE_AXIS_UNITLABEL, 64 OBJECTTYPE_GRID, 65 OBJECTTYPE_SUBGRID, 66 OBJECTTYPE_DATA_SERIES, 67 OBJECTTYPE_DATA_POINT, 68 OBJECTTYPE_DATA_LABELS, 69 OBJECTTYPE_DATA_LABEL, 70 OBJECTTYPE_DATA_ERRORS, 71 OBJECTTYPE_DATA_ERRORS_X, 72 OBJECTTYPE_DATA_ERRORS_Y, 73 OBJECTTYPE_DATA_ERRORS_Z, 74 OBJECTTYPE_DATA_CURVE,//e.g. a statistical method printed as line 75 OBJECTTYPE_DATA_AVERAGE_LINE, 76 OBJECTTYPE_DATA_CURVE_EQUATION, 77 OBJECTTYPE_DATA_STOCK_RANGE, 78 OBJECTTYPE_DATA_STOCK_LOSS, 79 OBJECTTYPE_DATA_STOCK_GAIN, 80 OBJECTTYPE_SHAPE, 81 OBJECTTYPE_UNKNOWN 82 }; 83 84 class OOO_DLLPUBLIC_CHARTTOOLS ObjectIdentifier 85 { 86 //CID == ClassifiedIdentifier <--> name of shape 87 //semicolon, colon, equal sign and slash have special meanings in a CID 88 //and are therefore not allowed in its components 89 90 //syntax of a CID: CID:/classification/ObjectID 91 92 //where classification: nothing or "MultiClick" or "DragMethod=DragMethodServiceName" and "DragParameter=DragParameterString" 93 // or a combination of these seperated with a colon 94 //where DragMethodServiceName can be a selfdefined servicename for special actions //todo define standard service for this purpose 95 //where DragParameterString is any string you like to transport information to your special drag service 96 // only semicolon, colon, equal sign and slash are not allowed characters 97 // also the keywors used in the ObjectIdentifiers are not allowed 98 99 //where ObjectID: Parent-Particle:Particle //e.g. Series=2:Point=22 100 //where Particle: Type=ParticleID //e.g. Point=22 101 //where Type: getStringForType( ObjectType eType ) or other string 102 103 public: 104 ObjectIdentifier(); 105 ObjectIdentifier( const ::rtl::OUString& rObjectCID ); 106 ObjectIdentifier( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rxShape ); 107 ObjectIdentifier( const ::com::sun::star::uno::Any& rAny ); 108 virtual ~ObjectIdentifier(); 109 110 ObjectIdentifier( const ObjectIdentifier& rOID ); 111 ObjectIdentifier& operator=( const ObjectIdentifier& rOID ); 112 bool operator==( const ObjectIdentifier& rOID ) const; 113 bool operator!=( const ObjectIdentifier& rOID ) const; 114 bool operator<( const ObjectIdentifier& rOID ) const; 115 116 static rtl::OUString createClassifiedIdentifierForObject( 117 const ::com::sun::star::uno::Reference< 118 ::com::sun::star::uno::XInterface >& xObject 119 , const ::com::sun::star::uno::Reference< 120 ::com::sun::star::frame::XModel >& xChartModel ); 121 122 static rtl::OUString createClassifiedIdentifierForParticle( 123 const rtl::OUString& rParticle ); 124 125 static rtl::OUString createClassifiedIdentifierForParticles( 126 const rtl::OUString& rParentParticle 127 , const rtl::OUString& rChildParticle 128 , const rtl::OUString& rDragMethodServiceName = rtl::OUString() 129 , const rtl::OUString& rDragParameterString = rtl::OUString() ); 130 131 static rtl::OUString createClassifiedIdentifierForGrid( 132 const ::com::sun::star::uno::Reference< 133 ::com::sun::star::chart2::XAxis >& xAxis 134 , const ::com::sun::star::uno::Reference< 135 ::com::sun::star::frame::XModel >& xChartModel 136 , sal_Int32 nSubIndex = -1 );//-1: main grid, 0: first subgrid etc 137 138 SAL_DLLPRIVATE static rtl::OUString createParticleForDiagram( 139 const ::com::sun::star::uno::Reference< 140 ::com::sun::star::chart2::XDiagram >& xDiagram 141 , const ::com::sun::star::uno::Reference< 142 ::com::sun::star::frame::XModel >& xChartModel ); 143 144 145 static rtl::OUString createParticleForCoordinateSystem( 146 const ::com::sun::star::uno::Reference< 147 ::com::sun::star::chart2::XCoordinateSystem >& xCooSys 148 , const ::com::sun::star::uno::Reference< 149 ::com::sun::star::frame::XModel >& xChartModel ); 150 151 static rtl::OUString createParticleForAxis( 152 sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex ); 153 154 static rtl::OUString createParticleForGrid( 155 sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex ); 156 157 static rtl::OUString createParticleForSeries( sal_Int32 nDiagramIndex, sal_Int32 nCooSysIndex 158 , sal_Int32 nChartTypeIndex, sal_Int32 nSeriesIndex ); 159 160 static rtl::OUString createParticleForLegend( 161 const ::com::sun::star::uno::Reference< 162 ::com::sun::star::chart2::XLegend >& xLegend 163 , const ::com::sun::star::uno::Reference< 164 ::com::sun::star::frame::XModel >& xChartModel ); 165 166 static rtl::OUString addChildParticle( const rtl::OUString& rParticle, const rtl::OUString& rChildParticle ); 167 static rtl::OUString createChildParticleWithIndex( ObjectType eObjectType, sal_Int32 nIndex ); 168 static sal_Int32 getIndexFromParticleOrCID( const rtl::OUString& rParticleOrCID ); 169 170 static rtl::OUString createClassifiedIdentifier( 171 enum ObjectType eObjectType //e.g. OBJECTTYPE_DATA_SERIES 172 , const rtl::OUString& rParticleID );//e.g. SeriesID 173 174 static rtl::OUString createClassifiedIdentifierWithParent( 175 enum ObjectType //e.g. OBJECTTYPE_DATA_POINT or OBJECTTYPE_GRID 176 , const rtl::OUString& rParticleID //for points or subgrids this is an Index or otherwise an identifier from the model object 177 , const rtl::OUString& rParentPartical //e.g. "Series=SeriesID" or "Grid=GridId" 178 , const rtl::OUString& rDragMethodServiceName = rtl::OUString() 179 , const rtl::OUString& rDragParameterString = rtl::OUString() 180 ); 181 182 static bool isCID( const rtl::OUString& rName ); 183 static rtl::OUString getDragMethodServiceName( const rtl::OUString& rClassifiedIdentifier ); 184 static rtl::OUString getDragParameterString( const rtl::OUString& rCID ); 185 static bool isDragableObject( const rtl::OUString& rClassifiedIdentifier ); 186 bool isDragableObject(); 187 static bool isRotateableObject( const rtl::OUString& rClassifiedIdentifier ); 188 static bool isMultiClickObject( const rtl::OUString& rClassifiedIdentifier ); 189 static bool areSiblings( const rtl::OUString& rCID1, const rtl::OUString& rCID2 );//identical object is no sibling 190 static bool areIdenticalObjects( const ::rtl::OUString& rCID1, const ::rtl::OUString& rCID2 ); 191 192 static rtl::OUString getStringForType( ObjectType eObjectType ); 193 static ObjectType getObjectType( const rtl::OUString& rCID ); 194 ObjectType getObjectType(); 195 196 static rtl::OUString createSeriesSubObjectStub( ObjectType eSubObjectType 197 , const rtl::OUString& rSeriesParticle 198 , const rtl::OUString& rDragMethodServiceName = rtl::OUString() 199 , const rtl::OUString& rDragParameterString = rtl::OUString() ); 200 static rtl::OUString createPointCID( const rtl::OUString& rPointCID_Stub, sal_Int32 nIndex ); 201 202 static rtl::OUString createDataCurveCID( const rtl::OUString& rSeriesParticle, sal_Int32 nCurveIndex, bool bAverageLine ); 203 static rtl::OUString createDataCurveEquationCID( const rtl::OUString& rSeriesParticle, sal_Int32 nCurveIndex ); 204 205 SAL_DLLPRIVATE static rtl::OUString getObjectID( const rtl::OUString& rCID ); 206 static rtl::OUString getParticleID( const rtl::OUString& rCID ); 207 static rtl::OUString getFullParentParticle( const rtl::OUString& rCID ); 208 209 //returns the series particle of a CID when the CID is a child of the series 210 static rtl::OUString getSeriesParticleFromCID( const rtl::OUString& rCID ); 211 212 //return the model object that is indicated by rObjectCID 213 static ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 214 getObjectPropertySet( 215 const rtl::OUString& rObjectCID 216 , const ::com::sun::star::uno::Reference< 217 ::com::sun::star::frame::XModel >& xChartModel ); 218 static ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > 219 getObjectPropertySet( 220 const rtl::OUString& rObjectCID 221 , const ::com::sun::star::uno::Reference< 222 ::com::sun::star::chart2::XChartDocument >& xChartDocument ); 223 224 //return the axis object that belongs to rObjectCID if any 225 static ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XAxis > 226 getAxisForCID( 227 const rtl::OUString& rObjectCID 228 , const ::com::sun::star::uno::Reference< 229 ::com::sun::star::frame::XModel >& xChartModel ); 230 231 //return the series object that belongs to rObjectCID if any 232 static ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries > 233 getDataSeriesForCID( 234 const rtl::OUString& rObjectCID 235 , const ::com::sun::star::uno::Reference< 236 ::com::sun::star::frame::XModel >& xChartModel ); 237 238 static ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram > 239 getDiagramForCID( 240 const rtl::OUString& rObjectCID 241 , const ::com::sun::star::uno::Reference< 242 ::com::sun::star::frame::XModel >& xChartModel ); 243 244 static const ::rtl::OUString& getPieSegmentDragMethodServiceName(); 245 static ::rtl::OUString createPieSegmentDragParameterString( 246 sal_Int32 nOffsetPercent 247 , const ::com::sun::star::awt::Point& rMinimumPosition 248 , const ::com::sun::star::awt::Point& rMaximumPosition ); 249 static bool parsePieSegmentDragParameterString( const rtl::OUString& rDragParameterString 250 , sal_Int32& rOffsetPercent 251 , ::com::sun::star::awt::Point& rMinimumPosition 252 , ::com::sun::star::awt::Point& rMaximumPosition ); 253 254 static TitleHelper::eTitleType getTitleTypeForCID( const ::rtl::OUString& rCID ); 255 256 static ::rtl::OUString getMovedSeriesCID( const ::rtl::OUString& rObjectCID, sal_Bool bForward ); 257 258 bool isValid() const; 259 bool isAutoGeneratedObject() const; 260 bool isAdditionalShape() const; 261 ::rtl::OUString getObjectCID() const; 262 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > getAdditionalShape() const; 263 ::com::sun::star::uno::Any getAny() const; 264 265 private: 266 // #i12587# support for shapes in chart 267 // For autogenerated chart objects a CID is specified in m_aObjectCID, 268 // for all other objects m_xAdditionalShape is set. 269 // Note, that if m_aObjectCID is set, m_xAdditionalShape must be empty 270 // and vice versa. 271 ::rtl::OUString m_aObjectCID; 272 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > m_xAdditionalShape; 273 }; 274 275 //............................................................................. 276 } //namespace chart 277 //............................................................................. 278 #endif 279