Tag: cws_src680_reportdesign01
User: oj      
Date: 2007-10-09 12:54:02+0000
Modified:
   dba/reportdesign/source/ui/inc/GeometryHandler.hxx
   dba/reportdesign/source/ui/inspection/GeometryHandler.cxx

Log:
 #i77604# impl add function

File Changes:

Directory: /dba/reportdesign/source/ui/inc/
===========================================

File [changed]: GeometryHandler.hxx
Url: 
http://dba.openoffice.org/source/browse/dba/reportdesign/source/ui/inc/GeometryHandler.hxx?r1=1.3.20.2&r2=1.3.20.3
Delta lines:  +27 -5
--------------------
--- GeometryHandler.hxx 2007-10-09 08:27:18+0000        1.3.20.2
+++ GeometryHandler.hxx 2007-10-09 12:53:59+0000        1.3.20.3
@@ -4,9 +4,9 @@
  *
  *  $RCSfile: GeometryHandler.hxx,v $
  *
- *  $Revision: 1.3.20.2 $
+ *  $Revision: 1.3.20.3 $
  *
- *  last change: $Author: oj $ $Date: 2007/10/09 08:27:18 $
+ *  last change: $Author: oj $ $Date: 2007/10/09 12:53:59 $
  *
  *  The Contents of this file are made available subject to
  *  the terms of GNU Lesser General Public License Version 2.1.
@@ -42,8 +42,8 @@
 #ifndef _COM_SUN_STAR_UNO_XCOMPONENTCONTEXT_HPP_
 #include "com/sun/star/uno/XComponentContext.hpp"
 #endif
-#ifndef _CPPUHELPER_COMPBASE2_HXX_
-#include "cppuhelper/compbase2.hxx"
+#ifndef _CPPUHELPER_COMPBASE3_HXX_
+#include "cppuhelper/compbase3.hxx"
 #endif
 #ifndef _CPPUHELPER_BASEMUTEX_HXX_
 #include "cppuhelper/basemutex.hxx"
@@ -62,6 +62,7 @@
 #endif
 #include "com/sun/star/report/XReportComponent.hpp"
 #include "com/sun/star/report/XFunction.hpp"
+#include <com/sun/star/beans/XPropertyChangeListener.hpp>
 #ifndef _COM_SUN_STAR_SDBC_XROWSET_HPP_
 #include <com/sun/star/sdbc/XRowSet.hpp>
 #endif
@@ -93,7 +94,8 @@
     typedef ::comphelper::OSimpleListenerContainer  <   
::com::sun::star::beans::XPropertyChangeListener
                                                     ,   
::com::sun::star::beans::PropertyChangeEvent
                                                     >   
PropertyChangeListeners;
-    typedef ::cppu::WeakComponentImplHelper2<   
::com::sun::star::inspection::XPropertyHandler
+    typedef ::cppu::WeakComponentImplHelper3<   
::com::sun::star::inspection::XPropertyHandler
+                                            ,   
::com::sun::star::beans::XPropertyChangeListener
                                             ,   
::com::sun::star::lang::XServiceInfo> GeometryHandler_Base;
 
     class GeometryHandler:
@@ -110,6 +112,12 @@
         */
         bool impl_dialogFilter_nothrow( ::rtl::OUString& _out_rSelectedClause, 
::osl::ClearableMutexGuard& _rClearBeforeDialog ) const;
 
+        /** returns the data field type depending on the data field of the 
report control
+        *
+        * \return the data field type
+        */
+        sal_uInt32 impl_getDataFieldType_throw() const;
+
         ::com::sun::star::uno::Any getConstantValue(sal_Bool 
bToControlValue,sal_uInt16 nResId,const ::com::sun::star::uno::Any& 
_aValue,const ::rtl::OUString& _sConstantName,const ::rtl::OUString & 
PropertyName );
         ::com::sun::star::beans::Property getProperty(const ::rtl::OUString & 
PropertyName);
         void implCreateListLikeControl(
@@ -209,6 +217,19 @@
 
         void removeFunction();
 
+        class OBlocker
+        {
+            bool& m_bIn;
+        public:
+            OBlocker(bool& _bIn) : m_bIn(_bIn){ m_bIn = true; }
+            ~OBlocker() { m_bIn = false; }
+        };
+
+
+        // XEventListener
+               virtual void SAL_CALL disposing(const 
::com::sun::star::lang::EventObject& Source) throw( 
::com::sun::star::uno::RuntimeException );
+        // XPropertyChangeListener
+               virtual void SAL_CALL propertyChange(const 
::com::sun::star::beans::PropertyChangeEvent& evt) 
throw(::com::sun::star::uno::RuntimeException);
     public:
         // XServiceInfo - static versions
                static ::rtl::OUString getImplementationName_Static(  ) 
throw(::com::sun::star::uno::RuntimeException);
@@ -277,6 +298,7 @@
         mutable ::rtl::OUString                                                
             m_sScope;
         sal_uInt32                                                             
             m_nDataFieldType;
         mutable bool                                                           
             m_bNewFunction;
+        bool                                                                   
             m_bIn;
     };
 //........................................................................
 } // namespace rptui

Directory: /dba/reportdesign/source/ui/inspection/
==================================================

File [changed]: GeometryHandler.cxx
Url: 
http://dba.openoffice.org/source/browse/dba/reportdesign/source/ui/inspection/GeometryHandler.cxx?r1=1.4.20.4&r2=1.4.20.5
Delta lines:  +89 -23
---------------------
--- GeometryHandler.cxx 2007-10-09 09:19:29+0000        1.4.20.4
+++ GeometryHandler.cxx 2007-10-09 12:53:59+0000        1.4.20.5
@@ -4,9 +4,9 @@
  *
  *  $RCSfile: GeometryHandler.cxx,v $
  *
- *  $Revision: 1.4.20.4 $
+ *  $Revision: 1.4.20.5 $
  *
- *  last change: $Author: lla $ $Date: 2007/10/09 09:19:29 $
+ *  last change: $Author: oj $ $Date: 2007/10/09 12:53:59 $
  *
  *  The Contents of this file are made available subject to
  *  the terms of GNU Lesser General Public License Version 2.1.
@@ -218,6 +218,7 @@
 #define FUNCTION            1
 #define COUNTER             2
 #define USER_DEF_FUNCTION   3
+#define UNDEF_DATA          4
 
 //........................................................................
 namespace rptui
@@ -333,6 +334,7 @@
     ,m_aPropertyListeners( m_aMutex )
     ,m_pInfoService(new OPropertyInfoService())
     ,m_nDataFieldType(0)
+    ,m_bIn(false)
 {
     DBG_CTOR(rpt_GeometryHandler,NULL);
     try
@@ -398,6 +400,8 @@
     {
         ::comphelper::disposeComponent(m_xFormComponentHandler);
         ::comphelper::disposeComponent(m_xTypeConverter);
+        if ( m_xReportComponent.is() && 
m_xReportComponent->getPropertySetInfo()->hasPropertyByName(PROPERTY_DATAFIELD) 
)
+            
m_xReportComponent->removePropertyChangeListener(PROPERTY_DATAFIELD,static_cast<
 beans::XPropertyChangeListener* >( this ));
         m_xReportComponent.clear();
         m_xRowSet.clear();
         m_aPropertyListeners.clear();
@@ -428,6 +432,8 @@
     m_aFunctionNames.clear();
     try
     {
+        if ( m_xReportComponent.is() && 
m_xReportComponent->getPropertySetInfo()->hasPropertyByName(PROPERTY_DATAFIELD) 
)
+            
m_xReportComponent->removePropertyChangeListener(PROPERTY_DATAFIELD,static_cast<
 beans::XPropertyChangeListener* >( this ));
         uno::Reference< container::XNameContainer > xObjectAsContainer( 
_rxInspectee, uno::UNO_QUERY );
         m_xReportComponent.set( xObjectAsContainer->getByName( 
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ReportComponent" ) ) ), 
uno::UNO_QUERY );
 
@@ -442,6 +448,8 @@
 
             m_aParamNames = getParameterNames( m_xRowSet );
             impl_initFieldList_nothrow(m_aFieldNames);
+            if ( 
m_xReportComponent->getPropertySetInfo()->hasPropertyByName(PROPERTY_DATAFIELD) 
)
+                
m_xReportComponent->addPropertyChangeListener(PROPERTY_DATAFIELD,static_cast< 
beans::XPropertyChangeListener* >( this ));
         }
         uno::Reference< report::XReportComponent> xReportComponent( 
m_xReportComponent, uno::UNO_QUERY );
         uno::Reference< report::XSection> xSection( m_xReportComponent, 
uno::UNO_QUERY );
@@ -492,26 +500,10 @@
             break;
         case PROPERTY_ID_TYPE:
             {
-                uno::Any aDataField = m_xReportComponent->getPropertyValue( 
PROPERTY_DATAFIELD );
-                lcl_convertFormulaTo(aDataField,aDataField);
-                ::rtl::OUString sDataField;
-                aDataField >>= sDataField;
-                if ( sDataField.getLength() )
-                {
-                    if ( impl_isDataField(sDataField) )
-                        m_nDataFieldType = DATA_OR_FORMULA;
-                    else if ( isDefaultFunction(sDataField,sDataField) )
-                        m_nDataFieldType = FUNCTION;
-                    else if ( m_aFunctionNames.find(sDataField) != 
m_aFunctionNames.end() )
-                    {
-                        m_nDataFieldType = USER_DEF_FUNCTION;
-                        ::rtl::OUString sScope;
-                        if ( impl_isCounterFunction_throw(sDataField,sScope) )
-                            m_nDataFieldType = COUNTER;
-                    }
-                    else
-                        m_nDataFieldType = DATA_OR_FORMULA;
-                }
+                sal_uInt32 nOldDataFieldType = m_nDataFieldType;
+                m_nDataFieldType = impl_getDataFieldType_throw();
+                if ( UNDEF_DATA == m_nDataFieldType )
+                    m_nDataFieldType = nOldDataFieldType;
                 aPropertyValue <<= m_nDataFieldType;
             }
             break;
@@ -570,6 +562,7 @@
             break;
         case PROPERTY_ID_DATAFIELD:
             {
+                OBlocker aBlocker(m_bIn);
                 m_xReportComponent->setPropertyValue(PropertyName, aNewValue);
                 bHandled = true;
                 const ::rtl::OUString sOldFunctionName = m_sDefaultFunction;
@@ -601,7 +594,7 @@
 
                 const ::rtl::OUString sOldFunctionName = m_sDefaultFunction;
                 const ::rtl::OUString sOldScope = m_sScope;
-                m_sDefaultFunction = m_sScope = m_sDefaultFunction = 
::rtl::OUString();
+                m_sDefaultFunction = m_sScope = ::rtl::OUString();
 
                 if ( m_nDataFieldType == COUNTER )
                 {
@@ -619,6 +612,7 @@
                         
impl_createFunction(sDataField,::rtl::OUString(),m_aCounterFunction);
                         sDataField = lcl_getQuotedFunctionName(sDataField);
                     }
+                    OBlocker aBlocker(m_bIn);
                     
m_xReportComponent->setPropertyValue(PROPERTY_DATAFIELD,uno::makeAny(impl_convertToFormula(
 uno::makeAny(sDataField))));
                 }
                 else
@@ -626,6 +620,7 @@
                     if ( m_bNewFunction )
                         removeFunction();
                     m_xFunction.clear();
+                    OBlocker aBlocker(m_bIn);
                     
m_xReportComponent->setPropertyValue(PROPERTY_DATAFIELD,uno::makeAny(::rtl::OUString()));
                 }
                 
resetOwnProperties(aGuard,sOldFunctionName,sOldScope,m_nDataFieldType);
@@ -654,12 +649,14 @@
                     }
                     else if ( m_nDataFieldType == USER_DEF_FUNCTION )
                     {
+                        OBlocker aBlocker(m_bIn);
                         
m_xReportComponent->setPropertyValue(PROPERTY_DATAFIELD,uno::makeAny(::rtl::OUString()));
                     }
                 }
                 else if ( m_nDataFieldType == USER_DEF_FUNCTION )
                 {
                     ::rtl::OUString sDataField;
+                    OBlocker aBlocker(m_bIn);
                     if ( isDefaultFunction(sFunction,sDataField) )
                     {
                         const ::rtl::OUString sOldFunctionName = 
m_sDefaultFunction;
@@ -1892,6 +1889,7 @@
                 else
                     impl_createFunction(sFunctionName,_sDataField,*aIter);
 
+                OBlocker aBlocker(m_bIn);
                 
m_xReportComponent->setPropertyValue(PROPERTY_DATAFIELD,uno::makeAny( 
impl_convertToFormula( uno::makeAny(sQuotedFunctionName) )));
                 aEvent.NewValue <<= m_sScope;
                 _aGuard.clear();
@@ -2064,6 +2062,74 @@
     
m_aFunctionNames.insert(TFunctions::value_type(sQuotedFunctionName,TFunctionPair(m_xFunction,xFunctionsSupplier)));
     m_bNewFunction = true;
 }
+// 
-----------------------------------------------------------------------------
+sal_uInt32 GeometryHandler::impl_getDataFieldType_throw() const
+{
+    sal_uInt32 nDataFieldType = UNDEF_DATA;
+    uno::Any aDataField = m_xReportComponent->getPropertyValue( 
PROPERTY_DATAFIELD );
+    lcl_convertFormulaTo(aDataField,aDataField);
+    ::rtl::OUString sDataField;
+    aDataField >>= sDataField;
+    if ( sDataField.getLength() )
+    {
+        if ( impl_isDataField(sDataField) )
+            nDataFieldType = DATA_OR_FORMULA;
+        else if ( isDefaultFunction(sDataField,sDataField) )
+            nDataFieldType = FUNCTION;
+        else if ( m_aFunctionNames.find(sDataField) != m_aFunctionNames.end() )
+        {
+            nDataFieldType = USER_DEF_FUNCTION;
+            ::rtl::OUString sScope;
+            if ( impl_isCounterFunction_throw(sDataField,sScope) )
+                nDataFieldType = COUNTER;
+        }
+        else
+            nDataFieldType = DATA_OR_FORMULA;
+    }
+    return nDataFieldType;
+}
+// 
-----------------------------------------------------------------------------
+// XEventListener
+void SAL_CALL GeometryHandler::disposing(const lang::EventObject& ) throw( 
uno::RuntimeException )
+{
+}
+// XPropertyChangeListener
+void SAL_CALL GeometryHandler::propertyChange(const 
beans::PropertyChangeEvent& /*evt*/) throw(uno::RuntimeException)
+{
+    ::osl::ResettableMutexGuard aGuard( m_aMutex );
+    if ( !m_bIn )
+    {
+        const sal_uInt32 nOldDataFieldType = m_nDataFieldType;
+        const ::rtl::OUString sOldFunctionName = m_sDefaultFunction;
+        const ::rtl::OUString sOldScope = m_sScope;
+        m_sDefaultFunction = m_sScope = ::rtl::OUString();
+        m_nDataFieldType = impl_getDataFieldType_throw();
+        if ( UNDEF_DATA == m_nDataFieldType )
+            m_nDataFieldType = nOldDataFieldType;
+        //else
+        {
+            uno::Any aDataField = m_xReportComponent->getPropertyValue( 
PROPERTY_DATAFIELD );
+            lcl_convertFormulaTo(aDataField,aDataField);
+            ::rtl::OUString sDataField;
+            aDataField >>= sDataField;
+            switch(m_nDataFieldType)
+            {
+                case DATA_OR_FORMULA:
+                    break;
+                case FUNCTION:
+                    isDefaultFunction(sDataField,sDataField,true);
+                    break;
+                case USER_DEF_FUNCTION:
+                    break;
+                case COUNTER:
+                    impl_isCounterFunction_throw(sDataField,m_sScope);
+                    break;
+            }
+        }
+        
resetOwnProperties(aGuard,sOldFunctionName,sOldScope,nOldDataFieldType);
+    }
+}
+
 //........................................................................
 } // namespace rptui
 //........................................................................




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to