1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef RPT_FORMATTEDFIELD_HXX
24 #define RPT_FORMATTEDFIELD_HXX
25 
26 #include <cppuhelper/propertysetmixin.hxx>
27 #include <com/sun/star/report/XFormattedField.hpp>
28 #include <com/sun/star/report/Function.hpp>
29 #include "ReportControlModel.hxx"
30 #include <cppuhelper/compbase2.hxx>
31 #include <comphelper/broadcasthelper.hxx>
32 #include <com/sun/star/lang/XServiceInfo.hpp>
33 #include "ReportHelperDefines.hxx"
34 namespace reportdesign
35 {
36 	typedef ::cppu::PropertySetMixin<		 com::sun::star::report::XFormattedField	> FormattedFieldPropertySet;
37 	typedef ::cppu::WeakComponentImplHelper2<    com::sun::star::report::XFormattedField
38 												,com::sun::star::lang::XServiceInfo	> FormattedFieldBase;
39 
40     /** \class OFormattedField Defines the implementation of a \interface com:::sun::star::report::XFormattedField
41 	 * \ingroup reportdesign_api
42 	 *
43 	 */
44 	class OFormattedField :	public comphelper::OBaseMutex,
45 							public FormattedFieldBase,
46 							public FormattedFieldPropertySet
47 	{
48         friend class OShapeHelper;
49 
50 		OReportControlModel								m_aProps;
51 		::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >
52 														m_xFormatsSupplier;
53         ::com::sun::star::uno::Reference< ::com::sun::star::report::XFunction> m_xFunction;
54         ::sal_Int32                                     m_nFormatKey;
55 
56 	private:
57 		OFormattedField(const OFormattedField&);
58 		OFormattedField& operator=(const OFormattedField&);
59 
set(const::rtl::OUString & _sProperty,const T & _Value,T & _member)60 		template <typename T> void set(	 const ::rtl::OUString& _sProperty
61 										,const T& _Value
62 										,T& _member)
63 		{
64 			BoundListeners l;
65 			{
66 				::osl::MutexGuard aGuard(m_aMutex);
67                 if ( _member != _Value )
68                 {
69 				    prepareSet(_sProperty, ::com::sun::star::uno::makeAny(_member), ::com::sun::star::uno::makeAny(_Value), &l);
70 				    _member = _Value;
71                 }
72 			}
73 			l.notify();
74 		}
75 		void checkIndex(sal_Int32 _nIndex);
76 	protected:
77 		virtual ~OFormattedField();
78 	public:
79 		explicit OFormattedField(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & _xContext);
80         explicit OFormattedField(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & _xContext
81                                  ,const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & _xFactory
82                                  ,::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& _xShape);
83 
84 		DECLARE_XINTERFACE( )
85 		// ::com::sun::star::lang::XServiceInfo
86 		virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
87 		virtual ::rtl::OUString SAL_CALL getImplementationName(  ) throw(::com::sun::star::uno::RuntimeException);
88 		virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException);
89 
90 		static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void) throw( ::com::sun::star::uno::RuntimeException );
91 		static ::rtl::OUString getImplementationName_Static(void) throw( ::com::sun::star::uno::RuntimeException );
92 		static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
93 			create(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & xContext);
94 		// com::sun::star::beans::XPropertySet
95 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
96 		virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
97 		virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
98 		virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
99 		virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
100 		virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
101 		virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
102 
103 		// XContainer
104 		virtual void SAL_CALL addContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
105 		virtual void SAL_CALL removeContainerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
106 
107 		// XElementAccess
108 		virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw (::com::sun::star::uno::RuntimeException);
109 		virtual ::sal_Bool SAL_CALL hasElements(  ) throw (::com::sun::star::uno::RuntimeException);
110 
111 		// XIndexReplace
112 		virtual void SAL_CALL replaceByIndex( ::sal_Int32 Index, const ::com::sun::star::uno::Any& Element ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
113 
114 		// XIndexContainer
115 		virtual void SAL_CALL insertByIndex( ::sal_Int32 Index, const ::com::sun::star::uno::Any& Element ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
116 		virtual void SAL_CALL removeByIndex( ::sal_Int32 Index ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
117 
118 		// XIndexAccess
119 		virtual ::sal_Int32 SAL_CALL getCount(  ) throw (::com::sun::star::uno::RuntimeException);
120 		virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( ::sal_Int32 Index ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
121 
122 		// XReportComponent
123 		REPORTCOMPONENT_HEADER()
124 
125         // XShape
126         SHAPE_HEADER()
127 
128         // XShapeDescriptor
129         virtual ::rtl::OUString SAL_CALL getShapeType(  ) throw (::com::sun::star::uno::RuntimeException);
130 
131 		// XReportControlModel
132 		REPORTCONTROLMODEL_HEADER()
133 
134 		// XReportControlFormat
135         REPORTCONTROLFORMAT_HEADER()
136 
137 		// XCloneable
138 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone(  ) throw (::com::sun::star::uno::RuntimeException);
139 
140 		// XFormattedField
141 		virtual ::sal_Int32 SAL_CALL getFormatKey() throw (::com::sun::star::uno::RuntimeException);
142         virtual void SAL_CALL setFormatKey(::sal_Int32 the_value) throw (::com::sun::star::uno::RuntimeException);
143 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > SAL_CALL getFormatsSupplier() throw (::com::sun::star::uno::RuntimeException);
144 	    virtual void SAL_CALL setFormatsSupplier( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& _formatssupplier ) throw (::com::sun::star::uno::RuntimeException);
145 
146 		// XComponent
147 		virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
addEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & aListener)148 		virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw(::com::sun::star::uno::RuntimeException)
149 		{
150 			cppu::WeakComponentImplHelperBase::addEventListener(aListener);
151 		}
removeEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & aListener)152 		virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw(::com::sun::star::uno::RuntimeException)
153 		{
154 			cppu::WeakComponentImplHelperBase::removeEventListener(aListener);
155 		}
156 
157 		// XChild
158 		virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent(  ) throw (::com::sun::star::uno::RuntimeException);
159 		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);
160 	};
161 }
162 #endif //RPT_FORMATTEDFIELD_HXX
163 
164