User: ihi     
Date: 2007-11-20 19:10:02+0000
Modified:
   dba/reportdesign/source/ui/inc/GeometryHandler.hxx

Log:
 INTEGRATION: CWS reportdesign01 (1.3.20); FILE MERGED
 2007/10/11 10:00:25 oj 1.3.20.5: #i77604# handle empty scope
 2007/10/11 07:45:17 oj 1.3.20.4: #i77604# handle scope
 2007/10/09 12:53:59 oj 1.3.20.3: #i77604# impl add function
 2007/10/09 08:27:18 oj 1.3.20.2: #i77604# impl add function
 2007/10/05 11:51:07 oj 1.3.20.1: #i77604# impl method to add functions more 
simpler

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&r2=1.4
Delta lines:  +157 -9
---------------------
--- GeometryHandler.hxx 2007-08-03 10:01:09+0000        1.3
+++ GeometryHandler.hxx 2007-11-20 19:10:00+0000        1.4
@@ -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"
@@ -61,10 +61,14 @@
 #include "com/sun/star/lang/XServiceInfo.hpp"
 #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
 #include <memory>
+#include <comphelper/stl_types.hxx>
+#include <comphelper/listenernotification.hxx>
 #ifndef RPTUI_METADATA_HXX_
 #include "metadata.hxx"
 #endif
@@ -74,14 +78,37 @@
 {
 //........................................................................
 
+    struct DefaultFunction
+    {
+        com::sun::star::beans::Optional< ::rtl::OUString>   m_sInitialFormula;
+        ::rtl::OUString                                     m_sName;
+        ::rtl::OUString                                     m_sSearchString;
+        ::rtl::OUString                                     m_sFormula;
+        ::sal_Bool                                          m_bPreEvaluated;
+        ::sal_Bool                                          m_bDeepTraversing;
+
+        inline ::rtl::OUString getName() const { return m_sName; }
+    } ;
+
     class OPropertyInfoService;
-    typedef ::cppu::WeakComponentImplHelper2<   
::com::sun::star::inspection::XPropertyHandler
+    typedef ::std::pair< ::com::sun::star::uno::Reference< 
::com::sun::star::report::XFunction>, ::com::sun::star::uno::Reference< 
::com::sun::star::report::XFunctionsSupplier> > TFunctionPair;
+    typedef ::std::multimap< ::rtl::OUString,TFunctionPair, 
::comphelper::UStringMixLess > TFunctions;
+    typedef ::comphelper::OSimpleListenerContainer  <   
::com::sun::star::beans::XPropertyChangeListener
+                                                    ,   
::com::sun::star::beans::PropertyChangeEvent
+                                                    >   
PropertyChangeListeners;
+    typedef ::cppu::WeakComponentImplHelper3<   
::com::sun::star::inspection::XPropertyHandler
+                                            ,   
::com::sun::star::beans::XPropertyChangeListener
                                             ,   
::com::sun::star::lang::XServiceInfo> GeometryHandler_Base;
 
     class GeometryHandler:
         private ::cppu::BaseMutex,
         public GeometryHandler_Base
     {
+        /** sets the counter function at the data field.
+        *   If the counter function doesn't exist it will be created.
+        */
+        void impl_setCounterFunction_throw();
+
         /** executes a dialog for chosing a filter criterion for a database 
report
             @param _out_rSelectedClause
                 the filter or order clause as chosen by the user
@@ -92,6 +119,13 @@
         */
         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
+        *
+        * \param _sDataField if the data field is not empty it will be used as 
data field, otherwise the data field will be used.
+        * \return the data field type
+        */
+        sal_uInt32 impl_getDataFieldType_throw(const ::rtl::OUString& 
_sDataField = ::rtl::OUString()) 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(
@@ -104,15 +138,122 @@
         void implCreateListLikeControl(
                 const ::com::sun::star::uno::Reference< 
::com::sun::star::inspection::XPropertyControlFactory >& _rxControlFactory
                 ,::com::sun::star::inspection::LineDescriptor & out_Descriptor
-                ,const ::rtl::OUString& _sEntries
+                ,const ::std::vector< ::rtl::OUString>& _aEntries
                 ,sal_Bool _bReadOnlyControl
                 ,sal_Bool _bTrueIfListBoxFalseIfComboBox
             );
         void checkPosAndSize(   const ::com::sun::star::awt::Point& _aNewPos,
                                 const ::com::sun::star::awt::Size& _aSize);
 
-        ::rtl::OUString
-                impl_convertToFormula( const ::com::sun::star::uno::Any& 
_rControlValue );
+        ::rtl::OUString impl_convertToFormula( const 
::com::sun::star::uno::Any& _rControlValue );
+
+        void impl_initFieldList_nothrow( ::com::sun::star::uno::Sequence< 
::rtl::OUString >& _rFieldNames ) const;
+
+        /** Creates the function defined by the function template
+        *
+        * \param _sFunctionName the function name
+        * \param _sDataField the data field
+        * \param _aFunction the function template
+        */
+        void impl_createFunction(const ::rtl::OUString& _sFunctionName,const 
::rtl::OUString& _sDataField,const DefaultFunction& _aFunction);
+
+        /** check whether the given function name is a countr function.
+        *
+        * \param _sQuotedFunctionName the quoted function name to check
+        * \param _Out_sScope the scope of the function
+        * \return When true it is a counter functions otherwise false.
+        */
+        bool impl_isCounterFunction_throw(const ::rtl::OUString& 
_sQuotedFunctionName,::rtl::OUString& _Out_sScope) const;
+
+        /** clear the own properties like function and scope and send a 
notification
+        *
+        * \param _aGuard 
+        * \param _sOldFunctionName 
+        * \param _sOldScope 
+        * \param _nOldDataFieldType
+        */
+       void resetOwnProperties(::osl::ResettableMutexGuard& _aGuard,const 
::rtl::OUString& _sOldFunctionName,const ::rtl::OUString& _sOldScope,const 
sal_uInt32 _nOldDataFieldType);
+
+        /** checks whether the name is a field or a parameter
+        *
+        * \param _sName the name to check
+        * \return true when it is a field or parameter otherwise false
+        */
+        bool impl_isDataField(const ::rtl::OUString& _sName) const;
+
+        /**return all formula in a semicolon seperated list
+        *
+        * \param _rList the localized function names
+        */
+        void impl_fillFormulaList_nothrow(::std::vector< ::rtl::OUString >& 
_out_rList) const;
+
+        /**return all group names in a semicolon seperated list starting with 
the group where this control is contained in.
+        *
+        * \param _rList fills the list with all scope names.
+        */
+        void impl_fillScopeList_nothrow(::std::vector< ::rtl::OUString >& 
_out_rList) const;
+
+        /** get the functions supplier for the set scope, default is the 
surrounding group.
+        *
+        * \param _rsNamePostFix the name post fix which canbe used when the 
scope as name part is needed
+        * \return the function supplier
+        */
+        ::com::sun::star::uno::Reference< 
::com::sun::star::report::XFunctionsSupplier> fillScope_throw(::rtl::OUString& 
_rsNamePostFix);
+        ::rtl::OUString getFormula() const;
+
+        /** checks if the given function is a default function we know.
+        *
+        * \param _sQuotedFunction the quoted function name
+        * \param _Out_rDataField the data field which is used in the function
+        * \param _xFunctionsSupplier teh function supplier to search or empty 
if not used
+        * \param _bSet If set to TRUE than the m_sDefaultFunction and m_sScope 
vars will be set if successful.
+        * \return sal_True with known otherwise sal_False
+        */
+        sal_Bool isDefaultFunction(const ::rtl::OUString& _sQuotedFunction
+                                    ,::rtl::OUString& _Out_rDataField
+                                    ,const ::com::sun::star::uno::Reference< 
::com::sun::star::report::XFunctionsSupplier>& _xFunctionsSupplier = 
::com::sun::star::uno::Reference< 
::com::sun::star::report::XFunctionsSupplier>()
+                                    ,bool _bSet = false) const;
+
+        /** checks if the given function is a default function we know.
+        *
+        * \param _xFunction 
+        * \param _rDataField 
+        * \param _rsDefaultFunctionName 
+        * \return 
+        */
+        sal_Bool impl_isDefaultFunction_nothrow( const 
::com::sun::star::uno::Reference< ::com::sun::star::report::XFunction>& 
_xFunction
+                                            ,::rtl::OUString& _rDataField
+                                            ,::rtl::OUString& 
_rsDefaultFunctionName) const;
+
+        /** fills the memeber m_aDefaultFunctions
+        *
+        */
+        void loadDefaultFunctions();
+
+        /** creates a default functionof the _sFunction for the data field 
_sDataField
+        *   The new function will only be created if it didn't exist.
+        *   
+        * \param _aGuard        Will be cleared, when a new function was 
created.
+        * \param _sFunction     The name of the function.
+        * \param _sDataField    The name of the data field.
+        */
+        void createDefaultFunction(::osl::ResettableMutexGuard& _aGuard ,const 
::rtl::OUString& _sFunction,const ::rtl::OUString& _sDataField);
+
+        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
@@ -157,18 +298,20 @@
         GeometryHandler(GeometryHandler &); // not defined
         void operator =(GeometryHandler &); // not defined
 
-        
-
         // overload WeakComponentImplHelperBase::disposing()
         // This function is called upon disposing the component,
         // if your component needs special work when it becomes
         // disposed, do it here.
         virtual void SAL_CALL disposing();
 
+        PropertyChangeListeners                                                
             m_aPropertyListeners;
         ::com::sun::star::uno::Sequence< ::rtl::OUString >                     
             m_aFieldNames;
         ::com::sun::star::uno::Sequence< ::rtl::OUString >                     
             m_aParamNames;
-        ::std::vector< ::rtl::OUString >                                       
             m_aFunctionNames;
+        TFunctions                                                             
             m_aFunctionNames;
+        ::std::vector< DefaultFunction >                                       
             m_aDefaultFunctions;
+        DefaultFunction                                                        
             m_aCounterFunction;
         ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XComponentContext >        m_xContext;
+        mutable ::com::sun::star::uno::Reference< 
::com::sun::star::report::XFunction>      m_xFunction;
         ::com::sun::star::uno::Reference< 
::com::sun::star::inspection::XPropertyHandler >  m_xFormComponentHandler; /// 
delegatee
         ::com::sun::star::uno::Reference< 
::com::sun::star::beans::XPropertySet >           m_xReportComponent; /// 
inspectee
         mutable ::com::sun::star::uno::Reference< 
::com::sun::star::sdbc::XRowSet >         m_xRowSet;
@@ -176,6 +319,11 @@
         ::com::sun::star::uno::Reference< 
::com::sun::star::script::XTypeConverter >        m_xTypeConverter;
         /// access to property meta data
         ::std::auto_ptr< OPropertyInfoService >                                
             m_pInfoService;
+        mutable ::rtl::OUString                                                
             m_sDefaultFunction;
+        mutable ::rtl::OUString                                                
             m_sScope;
+        sal_uInt32                                                             
             m_nDataFieldType;
+        mutable bool                                                           
             m_bNewFunction;
+        bool                                                                   
             m_bIn;
     };
 //........................................................................
 } // namespace rptui




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

Reply via email to