1*cde9e8dcSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*cde9e8dcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*cde9e8dcSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*cde9e8dcSAndrew Rist * distributed with this work for additional information 6*cde9e8dcSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*cde9e8dcSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*cde9e8dcSAndrew Rist * "License"); you may not use this file except in compliance 9*cde9e8dcSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*cde9e8dcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*cde9e8dcSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*cde9e8dcSAndrew Rist * software distributed under the License is distributed on an 15*cde9e8dcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*cde9e8dcSAndrew Rist * KIND, either express or implied. See the License for the 17*cde9e8dcSAndrew Rist * specific language governing permissions and limitations 18*cde9e8dcSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*cde9e8dcSAndrew Rist *************************************************************/ 21*cde9e8dcSAndrew Rist 22*cde9e8dcSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_chart2.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "RegressionEquation.hxx" 28cdf0e10cSrcweir #include "LineProperties.hxx" 29cdf0e10cSrcweir #include "FillProperties.hxx" 30cdf0e10cSrcweir #include "UserDefinedProperties.hxx" 31cdf0e10cSrcweir #include "CharacterProperties.hxx" 32cdf0e10cSrcweir #include "PropertyHelper.hxx" 33cdf0e10cSrcweir #include "macros.hxx" 34cdf0e10cSrcweir #include "ContainerHelper.hxx" 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx> 37cdf0e10cSrcweir #include <com/sun/star/drawing/FillStyle.hpp> 38cdf0e10cSrcweir #include <com/sun/star/drawing/LineStyle.hpp> 39cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 40cdf0e10cSrcweir #include <com/sun/star/chart2/RelativePosition.hpp> 41cdf0e10cSrcweir #include <com/sun/star/awt/Size.hpp> 42cdf0e10cSrcweir 43cdf0e10cSrcweir #include <algorithm> 44cdf0e10cSrcweir 45cdf0e10cSrcweir using namespace ::com::sun::star; 46cdf0e10cSrcweir 47cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 48cdf0e10cSrcweir using ::com::sun::star::beans::Property; 49cdf0e10cSrcweir using ::osl::MutexGuard; 50cdf0e10cSrcweir 51cdf0e10cSrcweir // ____________________________________________________________ 52cdf0e10cSrcweir 53cdf0e10cSrcweir namespace 54cdf0e10cSrcweir { 55cdf0e10cSrcweir 56cdf0e10cSrcweir static const ::rtl::OUString lcl_aImplementationName( 57cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart2.RegressionEquation" )); 58cdf0e10cSrcweir static const ::rtl::OUString lcl_aServiceName( 59cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.RegressionEquation" )); 60cdf0e10cSrcweir 61cdf0e10cSrcweir enum 62cdf0e10cSrcweir { 63cdf0e10cSrcweir PROP_EQUATION_SHOW, 64cdf0e10cSrcweir PROP_EQUATION_SHOW_CORRELATION_COEFF, 65cdf0e10cSrcweir // PROP_EQUATION_SEPARATOR, 66cdf0e10cSrcweir PROP_EQUATION_REF_PAGE_SIZE, 67cdf0e10cSrcweir PROP_EQUATION_REL_POS, 68cdf0e10cSrcweir PROP_EQUATION_NUMBER_FORMAT 69cdf0e10cSrcweir }; 70cdf0e10cSrcweir 71cdf0e10cSrcweir void lcl_AddPropertiesToVector( 72cdf0e10cSrcweir ::std::vector< Property > & rOutProperties ) 73cdf0e10cSrcweir { 74cdf0e10cSrcweir rOutProperties.push_back( 75cdf0e10cSrcweir Property( C2U( "ShowEquation" ), 76cdf0e10cSrcweir PROP_EQUATION_SHOW, 77cdf0e10cSrcweir ::getBooleanCppuType(), 78cdf0e10cSrcweir beans::PropertyAttribute::BOUND 79cdf0e10cSrcweir | beans::PropertyAttribute::MAYBEDEFAULT )); 80cdf0e10cSrcweir 81cdf0e10cSrcweir rOutProperties.push_back( 82cdf0e10cSrcweir Property( C2U( "ShowCorrelationCoefficient" ), 83cdf0e10cSrcweir PROP_EQUATION_SHOW_CORRELATION_COEFF, 84cdf0e10cSrcweir ::getBooleanCppuType(), 85cdf0e10cSrcweir beans::PropertyAttribute::BOUND 86cdf0e10cSrcweir | beans::PropertyAttribute::MAYBEDEFAULT )); 87cdf0e10cSrcweir 88cdf0e10cSrcweir // rOutProperties.push_back( 89cdf0e10cSrcweir // Property( C2U( "Separator" ), 90cdf0e10cSrcweir // PROP_EQUATION_SEPARATOR, 91cdf0e10cSrcweir // ::getCppuType( reinterpret_cast< ::rtl::OUString * >(0)), 92cdf0e10cSrcweir // beans::PropertyAttribute::BOUND 93cdf0e10cSrcweir // | beans::PropertyAttribute::MAYBEDEFAULT )); 94cdf0e10cSrcweir 95cdf0e10cSrcweir rOutProperties.push_back( 96cdf0e10cSrcweir Property( C2U( "ReferencePageSize" ), 97cdf0e10cSrcweir PROP_EQUATION_REF_PAGE_SIZE, 98cdf0e10cSrcweir ::getCppuType( reinterpret_cast< const awt::Size * >(0)), 99cdf0e10cSrcweir beans::PropertyAttribute::BOUND 100cdf0e10cSrcweir | beans::PropertyAttribute::MAYBEVOID )); 101cdf0e10cSrcweir 102cdf0e10cSrcweir rOutProperties.push_back( 103cdf0e10cSrcweir Property( C2U( "RelativePosition" ), 104cdf0e10cSrcweir PROP_EQUATION_REL_POS, 105cdf0e10cSrcweir ::getCppuType( reinterpret_cast< const chart2::RelativePosition * >(0)), 106cdf0e10cSrcweir beans::PropertyAttribute::BOUND 107cdf0e10cSrcweir | beans::PropertyAttribute::MAYBEVOID )); 108cdf0e10cSrcweir 109cdf0e10cSrcweir rOutProperties.push_back( 110cdf0e10cSrcweir Property( C2U( "NumberFormat" ), 111cdf0e10cSrcweir PROP_EQUATION_NUMBER_FORMAT, 112cdf0e10cSrcweir ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), 113cdf0e10cSrcweir beans::PropertyAttribute::BOUND 114cdf0e10cSrcweir | beans::PropertyAttribute::MAYBEVOID )); 115cdf0e10cSrcweir } 116cdf0e10cSrcweir 117cdf0e10cSrcweir struct StaticRegressionEquationDefaults_Initializer 118cdf0e10cSrcweir { 119cdf0e10cSrcweir ::chart::tPropertyValueMap* operator()() 120cdf0e10cSrcweir { 121cdf0e10cSrcweir static ::chart::tPropertyValueMap aStaticDefaults; 122cdf0e10cSrcweir lcl_AddDefaultsToMap( aStaticDefaults ); 123cdf0e10cSrcweir return &aStaticDefaults; 124cdf0e10cSrcweir } 125cdf0e10cSrcweir private: 126cdf0e10cSrcweir void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) 127cdf0e10cSrcweir { 128cdf0e10cSrcweir ::chart::LineProperties::AddDefaultsToMap( rOutMap ); 129cdf0e10cSrcweir ::chart::FillProperties::AddDefaultsToMap( rOutMap ); 130cdf0e10cSrcweir ::chart::CharacterProperties::AddDefaultsToMap( rOutMap ); 131cdf0e10cSrcweir 132cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_SHOW, false ); 133cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_SHOW_CORRELATION_COEFF, false ); 134cdf0e10cSrcweir //::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_SEPARATOR, ::rtl::OUString( sal_Unicode( '\n' ))); 135cdf0e10cSrcweir 136cdf0e10cSrcweir // override other defaults 137cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::FillProperties::PROP_FILL_STYLE, drawing::FillStyle_NONE ); 138cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::LineProperties::PROP_LINE_STYLE, drawing::LineStyle_NONE ); 139cdf0e10cSrcweir 140cdf0e10cSrcweir float fDefaultCharHeight = 10.0; 141cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::CharacterProperties::PROP_CHAR_CHAR_HEIGHT, fDefaultCharHeight ); 142cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::CharacterProperties::PROP_CHAR_ASIAN_CHAR_HEIGHT, fDefaultCharHeight ); 143cdf0e10cSrcweir ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::CharacterProperties::PROP_CHAR_COMPLEX_CHAR_HEIGHT, fDefaultCharHeight ); 144cdf0e10cSrcweir } 145cdf0e10cSrcweir }; 146cdf0e10cSrcweir 147cdf0e10cSrcweir struct StaticRegressionEquationDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticRegressionEquationDefaults_Initializer > 148cdf0e10cSrcweir { 149cdf0e10cSrcweir }; 150cdf0e10cSrcweir 151cdf0e10cSrcweir struct StaticRegressionEquationInfoHelper_Initializer 152cdf0e10cSrcweir { 153cdf0e10cSrcweir ::cppu::OPropertyArrayHelper* operator()() 154cdf0e10cSrcweir { 155cdf0e10cSrcweir static ::cppu::OPropertyArrayHelper aPropHelper( lcl_GetPropertySequence() ); 156cdf0e10cSrcweir return &aPropHelper; 157cdf0e10cSrcweir } 158cdf0e10cSrcweir 159cdf0e10cSrcweir private: 160cdf0e10cSrcweir uno::Sequence< Property > lcl_GetPropertySequence() 161cdf0e10cSrcweir { 162cdf0e10cSrcweir ::std::vector< ::com::sun::star::beans::Property > aProperties; 163cdf0e10cSrcweir lcl_AddPropertiesToVector( aProperties ); 164cdf0e10cSrcweir ::chart::LineProperties::AddPropertiesToVector( aProperties ); 165cdf0e10cSrcweir ::chart::FillProperties::AddPropertiesToVector( aProperties ); 166cdf0e10cSrcweir ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); 167cdf0e10cSrcweir ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); 168cdf0e10cSrcweir 169cdf0e10cSrcweir ::std::sort( aProperties.begin(), aProperties.end(), 170cdf0e10cSrcweir ::chart::PropertyNameLess() ); 171cdf0e10cSrcweir 172cdf0e10cSrcweir return ::chart::ContainerHelper::ContainerToSequence( aProperties ); 173cdf0e10cSrcweir } 174cdf0e10cSrcweir 175cdf0e10cSrcweir }; 176cdf0e10cSrcweir 177cdf0e10cSrcweir struct StaticRegressionEquationInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticRegressionEquationInfoHelper_Initializer > 178cdf0e10cSrcweir { 179cdf0e10cSrcweir }; 180cdf0e10cSrcweir 181cdf0e10cSrcweir struct StaticRegressionEquationInfo_Initializer 182cdf0e10cSrcweir { 183cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo >* operator()() 184cdf0e10cSrcweir { 185cdf0e10cSrcweir static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( 186cdf0e10cSrcweir ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticRegressionEquationInfoHelper::get() ) ); 187cdf0e10cSrcweir return &xPropertySetInfo; 188cdf0e10cSrcweir } 189cdf0e10cSrcweir }; 190cdf0e10cSrcweir 191cdf0e10cSrcweir struct StaticRegressionEquationInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticRegressionEquationInfo_Initializer > 192cdf0e10cSrcweir { 193cdf0e10cSrcweir }; 194cdf0e10cSrcweir 195cdf0e10cSrcweir } // anonymous namespace 196cdf0e10cSrcweir 197cdf0e10cSrcweir // ____________________________________________________________ 198cdf0e10cSrcweir 199cdf0e10cSrcweir namespace chart 200cdf0e10cSrcweir { 201cdf0e10cSrcweir 202cdf0e10cSrcweir RegressionEquation::RegressionEquation( const Reference< uno::XComponentContext > & xContext ) : 203cdf0e10cSrcweir ::property::OPropertySet( m_aMutex ), 204cdf0e10cSrcweir m_xModifyEventForwarder( new ModifyListenerHelper::ModifyEventForwarder()), 205cdf0e10cSrcweir m_xContext( xContext ) 206cdf0e10cSrcweir {} 207cdf0e10cSrcweir 208cdf0e10cSrcweir RegressionEquation::RegressionEquation( const RegressionEquation & rOther ) : 209cdf0e10cSrcweir MutexContainer(), 210cdf0e10cSrcweir impl::RegressionEquation_Base(), 211cdf0e10cSrcweir ::property::OPropertySet( rOther, m_aMutex ), 212cdf0e10cSrcweir m_xModifyEventForwarder( new ModifyListenerHelper::ModifyEventForwarder()) 213cdf0e10cSrcweir {} 214cdf0e10cSrcweir 215cdf0e10cSrcweir RegressionEquation::~RegressionEquation() 216cdf0e10cSrcweir {} 217cdf0e10cSrcweir 218cdf0e10cSrcweir 219cdf0e10cSrcweir // ____ XCloneable ____ 220cdf0e10cSrcweir uno::Reference< util::XCloneable > SAL_CALL RegressionEquation::createClone() 221cdf0e10cSrcweir throw (uno::RuntimeException) 222cdf0e10cSrcweir { 223cdf0e10cSrcweir return uno::Reference< util::XCloneable >( new RegressionEquation( *this )); 224cdf0e10cSrcweir } 225cdf0e10cSrcweir 226cdf0e10cSrcweir // ____ OPropertySet ____ 227cdf0e10cSrcweir uno::Any RegressionEquation::GetDefaultValue( sal_Int32 nHandle ) const 228cdf0e10cSrcweir throw(beans::UnknownPropertyException) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir const tPropertyValueMap& rStaticDefaults = *StaticRegressionEquationDefaults::get(); 231cdf0e10cSrcweir tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( nHandle ) ); 232cdf0e10cSrcweir if( aFound == rStaticDefaults.end() ) 233cdf0e10cSrcweir return uno::Any(); 234cdf0e10cSrcweir return (*aFound).second; 235cdf0e10cSrcweir } 236cdf0e10cSrcweir 237cdf0e10cSrcweir ::cppu::IPropertyArrayHelper & SAL_CALL RegressionEquation::getInfoHelper() 238cdf0e10cSrcweir { 239cdf0e10cSrcweir return *StaticRegressionEquationInfoHelper::get(); 240cdf0e10cSrcweir } 241cdf0e10cSrcweir 242cdf0e10cSrcweir // ____ XPropertySet ____ 243cdf0e10cSrcweir Reference< beans::XPropertySetInfo > SAL_CALL RegressionEquation::getPropertySetInfo() 244cdf0e10cSrcweir throw (uno::RuntimeException) 245cdf0e10cSrcweir { 246cdf0e10cSrcweir return *StaticRegressionEquationInfo::get(); 247cdf0e10cSrcweir } 248cdf0e10cSrcweir 249cdf0e10cSrcweir // ____ XModifyBroadcaster ____ 250cdf0e10cSrcweir void SAL_CALL RegressionEquation::addModifyListener( const uno::Reference< util::XModifyListener >& aListener ) 251cdf0e10cSrcweir throw (uno::RuntimeException) 252cdf0e10cSrcweir { 253cdf0e10cSrcweir try 254cdf0e10cSrcweir { 255cdf0e10cSrcweir uno::Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW ); 256cdf0e10cSrcweir xBroadcaster->addModifyListener( aListener ); 257cdf0e10cSrcweir } 258cdf0e10cSrcweir catch( const uno::Exception & ex ) 259cdf0e10cSrcweir { 260cdf0e10cSrcweir ASSERT_EXCEPTION( ex ); 261cdf0e10cSrcweir } 262cdf0e10cSrcweir } 263cdf0e10cSrcweir 264cdf0e10cSrcweir void SAL_CALL RegressionEquation::removeModifyListener( const uno::Reference< util::XModifyListener >& aListener ) 265cdf0e10cSrcweir throw (uno::RuntimeException) 266cdf0e10cSrcweir { 267cdf0e10cSrcweir try 268cdf0e10cSrcweir { 269cdf0e10cSrcweir uno::Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW ); 270cdf0e10cSrcweir xBroadcaster->removeModifyListener( aListener ); 271cdf0e10cSrcweir } 272cdf0e10cSrcweir catch( const uno::Exception & ex ) 273cdf0e10cSrcweir { 274cdf0e10cSrcweir ASSERT_EXCEPTION( ex ); 275cdf0e10cSrcweir } 276cdf0e10cSrcweir } 277cdf0e10cSrcweir 278cdf0e10cSrcweir // ____ XModifyListener ____ 279cdf0e10cSrcweir void SAL_CALL RegressionEquation::modified( const lang::EventObject& aEvent ) 280cdf0e10cSrcweir throw (uno::RuntimeException) 281cdf0e10cSrcweir { 282cdf0e10cSrcweir m_xModifyEventForwarder->modified( aEvent ); 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir // ____ XEventListener (base of XModifyListener) ____ 286cdf0e10cSrcweir void SAL_CALL RegressionEquation::disposing( const lang::EventObject& /* Source */ ) 287cdf0e10cSrcweir throw (uno::RuntimeException) 288cdf0e10cSrcweir { 289cdf0e10cSrcweir // nothing 290cdf0e10cSrcweir } 291cdf0e10cSrcweir 292cdf0e10cSrcweir // ____ OPropertySet ____ 293cdf0e10cSrcweir void RegressionEquation::firePropertyChangeEvent() 294cdf0e10cSrcweir { 295cdf0e10cSrcweir fireModifyEvent(); 296cdf0e10cSrcweir } 297cdf0e10cSrcweir 298cdf0e10cSrcweir void RegressionEquation::fireModifyEvent() 299cdf0e10cSrcweir { 300cdf0e10cSrcweir m_xModifyEventForwarder->modified( lang::EventObject( static_cast< uno::XWeak* >( this ))); 301cdf0e10cSrcweir } 302cdf0e10cSrcweir 303cdf0e10cSrcweir // -------------------------------------------------------------------------------- 304cdf0e10cSrcweir 305cdf0e10cSrcweir // ____ XTitle ____ 306cdf0e10cSrcweir uno::Sequence< uno::Reference< chart2::XFormattedString > > SAL_CALL RegressionEquation::getText() 307cdf0e10cSrcweir throw (uno::RuntimeException) 308cdf0e10cSrcweir { 309cdf0e10cSrcweir // /-- 310cdf0e10cSrcweir MutexGuard aGuard( GetMutex() ); 311cdf0e10cSrcweir return m_aStrings; 312cdf0e10cSrcweir // \-- 313cdf0e10cSrcweir } 314cdf0e10cSrcweir 315cdf0e10cSrcweir void SAL_CALL RegressionEquation::setText( const uno::Sequence< uno::Reference< chart2::XFormattedString > >& Strings ) 316cdf0e10cSrcweir throw (uno::RuntimeException) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir // /-- 319cdf0e10cSrcweir MutexGuard aGuard( GetMutex() ); 320cdf0e10cSrcweir ModifyListenerHelper::removeListenerFromAllElements( 321cdf0e10cSrcweir ContainerHelper::SequenceToVector( m_aStrings ), m_xModifyEventForwarder ); 322cdf0e10cSrcweir m_aStrings = Strings; 323cdf0e10cSrcweir ModifyListenerHelper::addListenerToAllElements( 324cdf0e10cSrcweir ContainerHelper::SequenceToVector( m_aStrings ), m_xModifyEventForwarder ); 325cdf0e10cSrcweir fireModifyEvent(); 326cdf0e10cSrcweir // \-- 327cdf0e10cSrcweir } 328cdf0e10cSrcweir 329cdf0e10cSrcweir // ================================================================================ 330cdf0e10cSrcweir 331cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > RegressionEquation::getSupportedServiceNames_Static() 332cdf0e10cSrcweir { 333cdf0e10cSrcweir const sal_Int32 nNumServices( 5 ); 334cdf0e10cSrcweir sal_Int32 nI = 0; 335cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > aServices( nNumServices ); 336cdf0e10cSrcweir aServices[ nI++ ] = lcl_aServiceName; 337cdf0e10cSrcweir aServices[ nI++ ] = C2U( "com.sun.star.beans.PropertySet" ); 338cdf0e10cSrcweir aServices[ nI++ ] = C2U( "com.sun.star.drawing.FillProperties" ); 339cdf0e10cSrcweir aServices[ nI++ ] = C2U( "com.sun.star.drawing.LineProperties" ); 340cdf0e10cSrcweir aServices[ nI++ ] = C2U( "com.sun.star.style.CharacterProperties" ); 341cdf0e10cSrcweir OSL_ASSERT( nNumServices == nI ); 342cdf0e10cSrcweir return aServices; 343cdf0e10cSrcweir } 344cdf0e10cSrcweir 345cdf0e10cSrcweir // implement XServiceInfo methods basing upon getSupportedServiceNames_Static 346cdf0e10cSrcweir APPHELPER_XSERVICEINFO_IMPL( RegressionEquation, lcl_aImplementationName ); 347cdf0e10cSrcweir 348cdf0e10cSrcweir using impl::RegressionEquation_Base; 349cdf0e10cSrcweir 350cdf0e10cSrcweir IMPLEMENT_FORWARD_XINTERFACE2( RegressionEquation, RegressionEquation_Base, ::property::OPropertySet ) 351cdf0e10cSrcweir 352cdf0e10cSrcweir } // namespace chart 353