xref: /trunk/main/sw/inc/unofield.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _UNOFIELD_HXX
28 #define _UNOFIELD_HXX
29 
30 #include <com/sun/star/lang/XUnoTunnel.hpp>
31 #include <com/sun/star/util/XRefreshable.hpp>
32 #include <com/sun/star/util/XUpdatable.hpp>
33 #include <com/sun/star/text/XDependentTextField.hpp>
34 
35 #include <cppuhelper/implbase5.hxx>
36 
37 #include <calbck.hxx>
38 #include <unocoll.hxx>
39 #include <RefreshListenerContainer.hxx>
40 
41 
42 class SwFieldType;
43 class SwDoc;
44 class SwFmtFld;
45 class SwField;
46 class SwSetExpField;
47 class SwTextAPIObject;
48 
49 /* -----------------04.12.98 12:49-------------------
50  *
51  * --------------------------------------------------*/
52 class SwXFieldMaster : public cppu::WeakImplHelper4
53 <
54     ::com::sun::star::beans::XPropertySet,
55     ::com::sun::star::lang::XServiceInfo,
56     ::com::sun::star::lang::XUnoTunnel,
57     ::com::sun::star::lang::XComponent
58 >,
59     public SwClient
60 {
61     SwEventListenerContainer    aLstnrCntnr;
62     sal_uInt16                  nResTypeId;
63     SwDoc*                      m_pDoc;
64 
65     sal_Bool                    m_bIsDescriptor;
66 
67     String                      sParam1;    //Content / Database / NumberingSeparator
68     String                      sParam2;    // -    /DataTablename
69     String                      sParam3;    // -    /DataFieldName
70     String                      sParam4;
71     String                      sParam5;    // -    /DataBaseURL
72     String                      sParam6;    // -    /DataBaseResource
73     double                      fParam1;    // Value / -
74     sal_Int8                    nParam1;    // ChapterNumberingLevel
75     sal_Bool                    bParam1;    // IsExpression
76     sal_Int32                   nParam2;
77 
78 protected:
79     virtual ~SwXFieldMaster();
80     //SwClient
81 virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
82 
83 public:
84 
85     SwXFieldMaster(SwDoc* pDoc, sal_uInt16 nResId);
86     SwXFieldMaster(SwFieldType& rType, SwDoc* pDoc);
87 
88 
89     TYPEINFO();
90 
91     static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId();
92 
93     //XUnoTunnel
94     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
95 
96     //XPropertySet
97     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
98     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);
99     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);
100     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);
101     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);
102     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);
103     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);
104 
105     //XComponent
106     virtual void SAL_CALL dispose(void) throw( ::com::sun::star::uno::RuntimeException );
107     virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
108     virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
109 
110     //XServiceInfo
111     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
112     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
113     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
114 
115     static rtl::OUString GetProgrammaticName(const SwFieldType& rType, SwDoc& rDoc);
116     static rtl::OUString LocalizeFormula(const SwSetExpField& rFld, const rtl::OUString& rFormula, sal_Bool bQuery);
117 
118     SwFieldType* GetFldType(sal_Bool bDontCreate = sal_False) const;
119     SwDoc*      GetDoc() {return m_pDoc;}
120 
121     sal_Bool        IsDescriptor()const  {return m_bIsDescriptor;}
122     sal_uInt16      GetResId() const {return nResTypeId;}
123 };
124 
125 struct SwFieldProperties_Impl;
126 class SwXTextField : public cppu::WeakImplHelper5
127 <
128     ::com::sun::star::text::XDependentTextField,
129     ::com::sun::star::lang::XServiceInfo,
130     ::com::sun::star::beans::XPropertySet,
131     ::com::sun::star::lang::XUnoTunnel,
132     ::com::sun::star::util::XUpdatable
133 >,
134             public SwClient
135 {
136     SwEventListenerContainer    aLstnrCntnr;
137     const SwFmtFld*             pFmtFld;
138     SwDoc*                      m_pDoc;
139     SwTextAPIObject*            m_pTextObject;
140 
141     sal_Bool                        m_bIsDescriptor;
142     SwClient                        m_aFieldTypeClient; // required to access field master of not yet inserted fields
143     sal_Bool                        m_bCallUpdate;
144     sal_uInt16                      m_nServiceId;
145     SwFieldProperties_Impl*     m_pProps;
146     String                      m_sTypeName;
147 
148 
149     //SwFieldType* GetFldType() const { return (SwFieldType*)GetRegisteredIn(); }
150     SwDoc*       GetDoc() {return m_pDoc;}
151 protected:
152     virtual ~SwXTextField();
153     //SwClient
154    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
155 
156 public:
157     SwXTextField(sal_uInt16 nServiceId, SwDoc* pDoc=0);
158     SwXTextField(const SwFmtFld& rFmt, SwDoc* pDoc);
159 
160 
161     TYPEINFO();
162 
163     static const ::com::sun::star::uno::Sequence< sal_Int8 > & getUnoTunnelId();
164 
165     //XUnoTunnel
166     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException);
167 
168     //XDependentTextField
169     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 );
170     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >  SAL_CALL getTextFieldMaster(void) throw( ::com::sun::star::uno::RuntimeException );
171 
172     //XTextField
173     virtual rtl::OUString SAL_CALL getPresentation(sal_Bool bShowCommand) throw( ::com::sun::star::uno::RuntimeException );
174 
175     //XTextContent
176     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 );
177     virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >  SAL_CALL getAnchor(void) throw( ::com::sun::star::uno::RuntimeException );
178 
179     //XComponent
180     virtual void SAL_CALL dispose(void) throw( ::com::sun::star::uno::RuntimeException );
181     virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
182     virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException );
183 
184     //XPropertySet
185     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
186     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);
187     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);
188     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);
189     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);
190     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);
191     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);
192 
193     //XServiceInfo
194     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
195     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
196     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
197 
198     //XUpdatable
199     virtual void SAL_CALL update(  ) throw (::com::sun::star::uno::RuntimeException);
200 
201     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 );
202 
203     const SwField*      GetField() const;
204     const SwFmtFld*     GetFldFmt(){return GetField() ? pFmtFld : 0; };
205 
206     void Invalidate();
207 
208     /// @return an SwXTextField, either an already existing one or a new one
209     static SwXTextField* CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFmt);
210 };
211 
212 
213 typedef
214 cppu::WeakImplHelper2
215 <
216     ::com::sun::star::container::XNameAccess,
217     ::com::sun::star::lang::XServiceInfo
218 >
219 SwXTextFieldMastersBaseClass;
220 class SwXTextFieldMasters : public SwXTextFieldMastersBaseClass,
221     public SwUnoCollection
222 {
223 protected:
224     virtual ~SwXTextFieldMasters();
225 public:
226     SwXTextFieldMasters(SwDoc* pDoc);
227 
228 
229     //XNameAccess
230     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 );
231     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getElementNames(void) throw( ::com::sun::star::uno::RuntimeException );
232     virtual sal_Bool SAL_CALL hasByName(const rtl::OUString& Name) throw( ::com::sun::star::uno::RuntimeException );
233 
234     //XElementAccess
235     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
236     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
237 
238     //XServiceInfo
239     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
240     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
241     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
242 
243 
244     static sal_Bool getInstanceName(const SwFieldType& rFldType, String& rName);
245 };
246 
247 /* -----------------21.12.98 10:26-------------------
248  *
249  * --------------------------------------------------*/
250 typedef
251 cppu::WeakImplHelper3
252 <
253     ::com::sun::star::container::XEnumerationAccess,
254     ::com::sun::star::lang::XServiceInfo,
255     ::com::sun::star::util::XRefreshable
256 >
257 SwXTextFieldTypesBaseClass;
258 class SwXTextFieldTypes : public SwXTextFieldTypesBaseClass,
259         public SwUnoCollection
260 {
261     SwRefreshListenerContainer      aRefreshCont;
262 protected:
263     virtual ~SwXTextFieldTypes();
264 public:
265     SwXTextFieldTypes(SwDoc* pDoc);
266 
267 
268     //XEnumerationAccess
269     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >  SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException );
270 
271     //XElementAccess
272     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
273     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
274 
275     // ::com::sun::star::util::XRefreshable
276     virtual void SAL_CALL refresh(  ) throw(::com::sun::star::uno::RuntimeException);
277     virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException);
278     virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException);
279 
280     //XServiceInfo
281     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
282     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
283     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
284 
285     // SwUnoCollection
286     virtual void    Invalidate();
287 };
288 
289 class SwXFieldEnumeration : public cppu::WeakImplHelper2
290 <
291     ::com::sun::star::container::XEnumeration,
292     ::com::sun::star::lang::XServiceInfo
293 >,
294     public SwClient
295 {
296     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > > aItems;
297     sal_Int32       nNextIndex;     // index of next element to be returned
298 
299     SwDoc* pDoc;
300 
301 protected:
302     virtual ~SwXFieldEnumeration();
303     //SwClient
304    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
305 public:
306     SwXFieldEnumeration(SwDoc* pDoc);
307 
308     //XEnumeration
309     virtual sal_Bool SAL_CALL hasMoreElements(void) throw( ::com::sun::star::uno::RuntimeException );
310     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 );
311 
312     //XServiceInfo
313     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
314     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
315     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
316 
317 };
318 #endif
319 
320 
321 
322