1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_chart2.hxx" 26 27 #include "GridWrapper.hxx" 28 #include "macros.hxx" 29 #include "AxisHelper.hxx" 30 #include "Chart2ModelContact.hxx" 31 #include "ContainerHelper.hxx" 32 #include "AxisIndexDefines.hxx" 33 #include <comphelper/InlineContainer.hxx> 34 #include <com/sun/star/beans/PropertyAttribute.hpp> 35 36 #include "LineProperties.hxx" 37 #include "UserDefinedProperties.hxx" 38 #include "WrappedDefaultProperty.hxx" 39 40 #include <algorithm> 41 #include <rtl/ustrbuf.hxx> 42 #include <rtl/math.hxx> 43 44 using namespace ::com::sun::star; 45 using namespace ::com::sun::star::chart2; 46 47 using ::com::sun::star::beans::Property; 48 using ::osl::MutexGuard; 49 using ::com::sun::star::uno::Reference; 50 using ::com::sun::star::uno::Sequence; 51 using ::rtl::OUString; 52 53 namespace 54 { 55 static const OUString lcl_aServiceName( 56 RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart.Grid" )); 57 58 struct StaticGridWrapperPropertyArray_Initializer 59 { 60 Sequence< Property >* operator()() 61 { 62 static Sequence< Property > aPropSeq( lcl_GetPropertySequence() ); 63 return &aPropSeq; 64 } 65 private: 66 Sequence< Property > lcl_GetPropertySequence() 67 { 68 ::std::vector< ::com::sun::star::beans::Property > aProperties; 69 ::chart::LineProperties::AddPropertiesToVector( aProperties ); 70 //::chart::NamedLineProperties::AddPropertiesToVector( aProperties ); 71 ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); 72 73 ::std::sort( aProperties.begin(), aProperties.end(), 74 ::chart::PropertyNameLess() ); 75 76 return ::chart::ContainerHelper::ContainerToSequence( aProperties ); 77 } 78 }; 79 80 struct StaticGridWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticGridWrapperPropertyArray_Initializer > 81 { 82 }; 83 84 } // anonymous namespace 85 86 // -------------------------------------------------------------------------------- 87 88 namespace chart 89 { 90 namespace wrapper 91 { 92 93 GridWrapper::GridWrapper( 94 tGridType eType, ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) : 95 m_spChart2ModelContact( spChart2ModelContact ), 96 m_aEventListenerContainer( m_aMutex ), 97 m_eType( eType ) 98 { 99 } 100 101 GridWrapper::~GridWrapper() 102 {} 103 104 void GridWrapper::getDimensionAndSubGridBool( tGridType eType, sal_Int32& rnDimensionIndex, bool& rbSubGrid ) 105 { 106 rnDimensionIndex = 1; 107 rbSubGrid = false; 108 109 switch( eType ) 110 { 111 case X_MAJOR_GRID: 112 rnDimensionIndex = 0; rbSubGrid = false; break; 113 case Y_MAJOR_GRID: 114 rnDimensionIndex = 1; rbSubGrid = false; break; 115 case Z_MAJOR_GRID: 116 rnDimensionIndex = 2; rbSubGrid = false; break; 117 case X_MINOR_GRID: 118 rnDimensionIndex = 0; rbSubGrid = true; break; 119 case Y_MINOR_GRID: 120 rnDimensionIndex = 1; rbSubGrid = true; break; 121 case Z_MINOR_GRID: 122 rnDimensionIndex = 2; rbSubGrid = true; break; 123 } 124 } 125 126 // ____ XComponent ____ 127 void SAL_CALL GridWrapper::dispose() 128 throw (uno::RuntimeException) 129 { 130 Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) ); 131 m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) ); 132 133 clearWrappedPropertySet(); 134 } 135 136 void SAL_CALL GridWrapper::addEventListener( 137 const Reference< lang::XEventListener >& xListener ) 138 throw (uno::RuntimeException) 139 { 140 m_aEventListenerContainer.addInterface( xListener ); 141 } 142 143 void SAL_CALL GridWrapper::removeEventListener( 144 const Reference< lang::XEventListener >& aListener ) 145 throw (uno::RuntimeException) 146 { 147 m_aEventListenerContainer.removeInterface( aListener ); 148 } 149 150 // ================================================================================ 151 152 // WrappedPropertySet 153 154 Reference< beans::XPropertySet > GridWrapper::getInnerPropertySet() 155 { 156 Reference< beans::XPropertySet > xRet; 157 try 158 { 159 Reference< chart2::XDiagram > xDiagram( m_spChart2ModelContact->getChart2Diagram() ); 160 uno::Reference< XCoordinateSystem > xCooSys( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 /*nCooSysIndex*/ ) ); 161 162 sal_Int32 nDimensionIndex = 1; 163 bool bSubGrid = false; 164 getDimensionAndSubGridBool( m_eType, nDimensionIndex, bSubGrid ); 165 166 sal_Int32 nSubGridIndex = bSubGrid ? 0 : -1; 167 xRet.set( AxisHelper::getGridProperties( xCooSys , nDimensionIndex, MAIN_AXIS_INDEX, nSubGridIndex ) ); 168 } 169 catch( uno::Exception & ex ) 170 { 171 ASSERT_EXCEPTION( ex ); 172 } 173 return xRet; 174 } 175 176 const Sequence< beans::Property >& GridWrapper::getPropertySequence() 177 { 178 return *StaticGridWrapperPropertyArray::get(); 179 } 180 181 const std::vector< WrappedProperty* > GridWrapper::createWrappedProperties() 182 { 183 ::std::vector< ::chart::WrappedProperty* > aWrappedProperties; 184 185 aWrappedProperties.push_back( new WrappedDefaultProperty( C2U("LineColor"), C2U("LineColor"), uno::makeAny( sal_Int32( 0x000000) ) ) ); // black 186 187 return aWrappedProperties; 188 } 189 190 // ================================================================================ 191 192 Sequence< OUString > GridWrapper::getSupportedServiceNames_Static() 193 { 194 Sequence< OUString > aServices( 4 ); 195 aServices[ 0 ] = C2U( "com.sun.star.chart.ChartGrid" ); 196 aServices[ 1 ] = C2U( "com.sun.star.xml.UserDefinedAttributeSupplier" ); 197 aServices[ 2 ] = C2U( "com.sun.star.drawing.LineProperties" ); 198 aServices[ 3 ] = C2U( "com.sun.star.beans.PropertySet" ); 199 200 return aServices; 201 } 202 203 // implement XServiceInfo methods basing upon getSupportedServiceNames_Static 204 APPHELPER_XSERVICEINFO_IMPL( GridWrapper, lcl_aServiceName ); 205 206 } // namespace wrapper 207 } // namespace chart 208 209