xref: /trunk/main/sw/inc/unofield.hxx (revision dec99bbd)
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 _UNOFIELD_HXX
24 #define _UNOFIELD_HXX
25 
26 #include <com/sun/star/lang/XUnoTunnel.hpp>
27 #include <com/sun/star/util/XRefreshable.hpp>
28 #include <com/sun/star/util/XUpdatable.hpp>
29 #include <com/sun/star/text/XDependentTextField.hpp>
30 
31 #include <cppuhelper/implbase5.hxx>
32 
33 #include <calbck.hxx>
34 #include <unocoll.hxx>
35 #include <RefreshListenerContainer.hxx>
36 
37 
38 class SwFieldType;
39 class SwDoc;
40 class SwFmtFld;
41 class SwField;
42 class SwSetExpField;
43 class SwTextAPIObject;
44 
45 /* -----------------04.12.98 12:49-------------------
46  *
47  * --------------------------------------------------*/
48 class SwXFieldMaster : public cppu::WeakImplHelper4
49 <
50 	::com::sun::star::beans::XPropertySet,
51 	::com::sun::star::lang::XServiceInfo,
52 	::com::sun::star::lang::XUnoTunnel,
53 	::com::sun::star::lang::XComponent
54 >,
55 	public SwClient
56 {
57 	SwEventListenerContainer	aLstnrCntnr;
58     sal_uInt16                  nResTypeId;
59 	SwDoc* 						m_pDoc;
60 
61     sal_Bool                    m_bIsDescriptor;
62 
63 	String 						sParam1;	//Content / Database / NumberingSeparator
64 	String 						sParam2;    // -	/DataTablename
65 	String 						sParam3;    // -	/DataFieldName
66     String                      sParam4;
67     String                      sParam5;    // -    /DataBaseURL
68     String                      sParam6;    // -    /DataBaseResource
69 	double						fParam1;	// Value / -
70 	sal_Int8					nParam1;	// ChapterNumberingLevel
71 	sal_Bool					bParam1;    // IsExpression
72     sal_Int32                   nParam2;
73 
74 protected:
75 	virtual ~SwXFieldMaster();
76 	//SwClient
77 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
78 
79 public:
80 
81 	SwXFieldMaster(SwDoc* pDoc, sal_uInt16 nResId);
82 	SwXFieldMaster(SwFieldType& rType, SwDoc* pDoc);
83 
84 
85 	TYPEINFO();
86 
87 	static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId();
88 
89 	//XUnoTunnel
90 	virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
91 
92 	//XPropertySet
93     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
94     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);
95     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);
96     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);
97     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);
98     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);
99     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);
100 
101 	//XComponent
102 	virtual void SAL_CALL dispose(void) throw( ::com::sun::star::uno::RuntimeException );
103 	virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
104 	virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
105 
106 	//XServiceInfo
107 	virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
108 	virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
109 	virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
110 
111 	static rtl::OUString GetProgrammaticName(const SwFieldType& rType, SwDoc& rDoc);
112 	static rtl::OUString LocalizeFormula(const SwSetExpField& rFld, const rtl::OUString& rFormula, sal_Bool bQuery);
113 
114     SwFieldType* GetFldType(sal_Bool bDontCreate = sal_False) const;
GetDoc()115 	SwDoc*		GetDoc() {return m_pDoc;}
116 
IsDescriptor() const117 	sal_Bool		IsDescriptor()const  {return m_bIsDescriptor;}
GetResId() const118 	sal_uInt16 		GetResId() const {return nResTypeId;}
119 };
120 
121 struct SwFieldProperties_Impl;
122 class SwXTextField : public cppu::WeakImplHelper5
123 <
124 	::com::sun::star::text::XDependentTextField,
125 	::com::sun::star::lang::XServiceInfo,
126 	::com::sun::star::beans::XPropertySet,
127     ::com::sun::star::lang::XUnoTunnel,
128     ::com::sun::star::util::XUpdatable
129 >,
130 			public SwClient
131 {
132 	SwEventListenerContainer	m_aLstnrCntnr;
133 	const SwFmtFld* 			m_pFmtFld;
134 	SwDoc* 						m_pDoc;
135 	SwTextAPIObject*			m_pTextObject;
136 
137 	sal_Bool 						m_bIsDescriptor;
138     SwClient                        m_aFieldTypeClient; // required to access field master of not yet inserted fields
139     sal_Bool                        m_bCallUpdate;
140     sal_uInt16                      m_nServiceId;
141 	SwFieldProperties_Impl* 	m_pProps;
142 	String 						m_sTypeName;
143 
144 
145 	//SwFieldType* GetFldType() const { return (SwFieldType*)GetRegisteredIn(); }
GetDoc()146 	SwDoc* 		 GetDoc() {return m_pDoc;}
147 protected:
148 	virtual ~SwXTextField();
149     //SwClient
150    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
151 
152 public:
153 	SwXTextField(sal_uInt16 nServiceId, SwDoc* pDoc=0);
154 	SwXTextField(const SwFmtFld& rFmt, SwDoc* pDoc);
155 
156 
157 	TYPEINFO();
158 
159 	static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId();
160 
161 	//XUnoTunnel
162 	virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
163 
164 	//XDependentTextField
165 	virtual void SAL_CALL attachTextFieldMaster(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & xFieldMaster) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
166 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >  SAL_CALL getTextFieldMaster(void) throw( ::com::sun::star::uno::RuntimeException );
167 
168 	//XTextField
169 	virtual rtl::OUString SAL_CALL getPresentation(sal_Bool bShowCommand) throw( ::com::sun::star::uno::RuntimeException );
170 
171 	//XTextContent
172 	virtual void SAL_CALL attach(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
173 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >  SAL_CALL getAnchor(void) throw( ::com::sun::star::uno::RuntimeException );
174 
175 	//XComponent
176 	virtual void SAL_CALL dispose(void) throw( ::com::sun::star::uno::RuntimeException );
177 	virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
178 	virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
179 
180 	//XPropertySet
181     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
182     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);
183     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);
184     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);
185     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);
186     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);
187     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);
188 
189 	//XServiceInfo
190 	virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
191 	virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
192 	virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
193 
194     //XUpdatable
195     virtual void SAL_CALL update(  ) throw (::com::sun::star::uno::RuntimeException);
196 
197 	void attachToRange(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange)throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
198 
199 	const SwField*  	GetField() const;
GetFldFmt()200 	const SwFmtFld* 	GetFldFmt(){return GetField() ? m_pFmtFld : 0; };
201 
202 	void Invalidate();
203 
204     /// @return an SwXTextField, either an already existing one or a new one
205     static SwXTextField* CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFmt);
206     sal_uInt16 GetServiceId();
207 };
208 
209 
210 typedef
211 cppu::WeakImplHelper2
212 <
213 	::com::sun::star::container::XNameAccess,
214 	::com::sun::star::lang::XServiceInfo
215 >
216 SwXTextFieldMastersBaseClass;
217 class SwXTextFieldMasters : public SwXTextFieldMastersBaseClass,
218 	public SwUnoCollection
219 {
220 protected:
221 	virtual ~SwXTextFieldMasters();
222 public:
223 	SwXTextFieldMasters(SwDoc* pDoc);
224 
225 
226 	//XNameAccess
227 	virtual ::com::sun::star::uno::Any SAL_CALL getByName(const rtl::OUString& Name) throw( ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException );
228 	virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getElementNames(void) throw( ::com::sun::star::uno::RuntimeException );
229 	virtual sal_Bool SAL_CALL hasByName(const rtl::OUString& Name) throw( ::com::sun::star::uno::RuntimeException );
230 
231 	//XElementAccess
232     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
233     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
234 
235 	//XServiceInfo
236 	virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
237 	virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
238 	virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
239 
240 
241 	static sal_Bool getInstanceName(const SwFieldType& rFldType, String& rName);
242 };
243 
244 /* -----------------21.12.98 10:26-------------------
245  *
246  * --------------------------------------------------*/
247 typedef
248 cppu::WeakImplHelper3
249 <
250 	::com::sun::star::container::XEnumerationAccess,
251 	::com::sun::star::lang::XServiceInfo,
252 	::com::sun::star::util::XRefreshable
253 >
254 SwXTextFieldTypesBaseClass;
255 class SwXTextFieldTypes : public SwXTextFieldTypesBaseClass,
256 		public SwUnoCollection
257 {
258     SwRefreshListenerContainer      aRefreshCont;
259 protected:
260 	virtual ~SwXTextFieldTypes();
261 public:
262 	SwXTextFieldTypes(SwDoc* pDoc);
263 
264 
265 	//XEnumerationAccess
266 	virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >  SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException );
267 
268 	//XElementAccess
269     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
270     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
271 
272 	// ::com::sun::star::util::XRefreshable
273     virtual void SAL_CALL refresh(  ) throw(::com::sun::star::uno::RuntimeException);
274     virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException);
275     virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException);
276 
277 	//XServiceInfo
278 	virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
279 	virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
280 	virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
281 
282     // SwUnoCollection
283     virtual void    Invalidate();
284 };
285 
286 class SwXFieldEnumeration : public cppu::WeakImplHelper2
287 <
288 	::com::sun::star::container::XEnumeration,
289 	::com::sun::star::lang::XServiceInfo
290 >,
291 	public SwClient
292 {
293     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > > aItems;
294     sal_Int32       nNextIndex;     // index of next element to be returned
295 
296 	SwDoc* pDoc;
297 
298 protected:
299 	virtual ~SwXFieldEnumeration();
300 	//SwClient
301    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
302 public:
303 	SwXFieldEnumeration(SwDoc* pDoc);
304 
305 	//XEnumeration
306 	virtual sal_Bool SAL_CALL hasMoreElements(void) throw( ::com::sun::star::uno::RuntimeException );
307 	virtual ::com::sun::star::uno::Any SAL_CALL nextElement(void) throw( ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException );
308 
309 	//XServiceInfo
310 	virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
311 	virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
312 	virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
313 
314 };
315 #endif
316 
317 
318 
319