text: /**************************************************************
   * 
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied.  See the License for the
   * specific language governing permissions and limitations
   * under the License.
   * 
   *************************************************************/
  
  
  #ifndef CHART_DATAPOINT_HXX
  #define CHART_DATAPOINT_HXX
  
  #include <osl/mutex.hxx>
  #include <cppuhelper/implbase5.hxx>
  #include <cppuhelper/weakref.hxx>
  #include <comphelper/uno3.hxx>
  #include <com/sun/star/container/XChild.hpp>
  #include <com/sun/star/util/XCloneable.hpp>
  #include <com/sun/star/lang/XServiceInfo.hpp>
  
  #include "OPropertySet.hxx"
  #include "MutexContainer.hxx"
  #include "ModifyListenerHelper.hxx"
  #include "ServiceMacros.hxx"
  
  //for auto_ptr
  #include <memory>
  
  namespace chart
  {
  
  namespace impl
  {
  typedef ::cppu::WeakImplHelper5<
          ::com::sun::star::container::XChild,
          ::com::sun::star::util::XCloneable,
          ::com::sun::star::util::XModifyBroadcaster,
          ::com::sun::star::util::XModifyListener,
          ::com::sun::star::lang::XServiceInfo >
      DataPoint_Base;
  }
  
  class DataPoint :
          public MutexContainer,
          public impl::DataPoint_Base,
          public ::property::OPropertySet
  {
  public:
  	DataPoint( const ::com::sun::star::uno::Reference<
                     ::com::sun::star::beans::XPropertySet > & rParentProperties );
  	virtual ~DataPoint();
  
      /// merge XInterface implementations
   	DECLARE_XINTERFACE()
      /// XServiceInfo declarations
      APPHELPER_XSERVICEINFO_DECL()
  
  protected:
      explicit DataPoint( const DataPoint & rOther );
  
      // ____ OPropertySet ____
      virtual ::com::sun::star::uno::Any GetDefaultValue( sal_Int32 nHandle ) const
          throw(::com::sun::star::beans::UnknownPropertyException);
  	virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
  	virtual void SAL_CALL setFastPropertyValue_NoBroadcast
          ( sal_Int32 nHandle,
            const ::com::sun::star::uno::Any& rValue )
  		throw (::com::sun::star::uno::Exception);
  
      // ____ XPropertySet ____
      virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL
          getPropertySetInfo()
          throw (::com::sun::star::uno::RuntimeException);
  
      // ____ XCloneable ____
      // Note: m_xParentProperties are not cloned!
      virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone()
          throw (::com::sun::star::uno::RuntimeException);
  
      // ____ XChild ____
      virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent()
          throw (::com::sun::star::uno::RuntimeException);
      virtual void SAL_CALL setParent(
          const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent )
          throw (::com::sun::star::lang::NoSupportException,
                 ::com::sun::star::uno::RuntimeException);
  
      // ____ XModifyBroadcaster ____
      virtual void SAL_CALL addModifyListener(
          const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
          throw (::com::sun::star::uno::RuntimeException);
      virtual void SAL_CALL removeModifyListener(
          const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
          throw (::com::sun::star::uno::RuntimeException);
  
      // ____ XModifyListener ____
      virtual void SAL_CALL modified(
          const ::com::sun::star::lang::EventObject& aEvent )
          throw (::com::sun::star::uno::RuntimeException);
  
      // ____ XEventListener (base of XModifyListener) ____
      virtual void SAL_CALL disposing(
          const ::com::sun::star::lang::EventObject& Source )
          throw (::com::sun::star::uno::RuntimeException);
  
      // ____ OPropertySet ____
      virtual void firePropertyChangeEvent();
  	using OPropertySet::disposing;
  
      void fireModifyEvent();
  
  private:
      ::com::sun::star::uno::WeakReference<
          ::com::sun::star::beans::XPropertySet >   m_xParentProperties;
  
      ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener > m_xModifyEventForwarder;
      bool m_bNoParentPropAllowed;
  };
  
  } //  namespace chart
  
  // CHART_DATAPOINT_HXX
  #endif
  