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]
