xref: /AOO41X/main/sw/inc/unofield.hxx (revision 54628ca40d27d15cc98fe861da7fff7e60c2f7d6)
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;
115     SwDoc*      GetDoc() {return m_pDoc;}
116 
117     sal_Bool        IsDescriptor()const  {return m_bIsDescriptor;}
118     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    aLstnrCntnr;
133     const SwFmtFld*             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(); }
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;
200     const SwFmtFld*     GetFldFmt(){return GetField() ? 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 };
207 
208 
209 typedef
210 cppu::WeakImplHelper2
211 <
212     ::com::sun::star::container::XNameAccess,
213     ::com::sun::star::lang::XServiceInfo
214 >
215 SwXTextFieldMastersBaseClass;
216 class SwXTextFieldMasters : public SwXTextFieldMastersBaseClass,
217     public SwUnoCollection
218 {
219 protected:
220     virtual ~SwXTextFieldMasters();
221 public:
222     SwXTextFieldMasters(SwDoc* pDoc);
223 
224 
225     //XNameAccess
226     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 );
227     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getElementNames(void) throw( ::com::sun::star::uno::RuntimeException );
228     virtual sal_Bool SAL_CALL hasByName(const rtl::OUString& Name) throw( ::com::sun::star::uno::RuntimeException );
229 
230     //XElementAccess
231     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
232     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
233 
234     //XServiceInfo
235     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
236     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
237     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
238 
239 
240     static sal_Bool getInstanceName(const SwFieldType& rFldType, String& rName);
241 };
242 
243 /* -----------------21.12.98 10:26-------------------
244  *
245  * --------------------------------------------------*/
246 typedef
247 cppu::WeakImplHelper3
248 <
249     ::com::sun::star::container::XEnumerationAccess,
250     ::com::sun::star::lang::XServiceInfo,
251     ::com::sun::star::util::XRefreshable
252 >
253 SwXTextFieldTypesBaseClass;
254 class SwXTextFieldTypes : public SwXTextFieldTypesBaseClass,
255         public SwUnoCollection
256 {
257     SwRefreshListenerContainer      aRefreshCont;
258 protected:
259     virtual ~SwXTextFieldTypes();
260 public:
261     SwXTextFieldTypes(SwDoc* pDoc);
262 
263 
264     //XEnumerationAccess
265     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration >  SAL_CALL createEnumeration(void) throw( ::com::sun::star::uno::RuntimeException );
266 
267     //XElementAccess
268     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw(::com::sun::star::uno::RuntimeException);
269     virtual sal_Bool SAL_CALL hasElements(  ) throw(::com::sun::star::uno::RuntimeException);
270 
271     // ::com::sun::star::util::XRefreshable
272     virtual void SAL_CALL refresh(  ) throw(::com::sun::star::uno::RuntimeException);
273     virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException);
274     virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw(::com::sun::star::uno::RuntimeException);
275 
276     //XServiceInfo
277     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
278     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
279     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
280 
281     // SwUnoCollection
282     virtual void    Invalidate();
283 };
284 
285 class SwXFieldEnumeration : public cppu::WeakImplHelper2
286 <
287     ::com::sun::star::container::XEnumeration,
288     ::com::sun::star::lang::XServiceInfo
289 >,
290     public SwClient
291 {
292     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > > aItems;
293     sal_Int32       nNextIndex;     // index of next element to be returned
294 
295     SwDoc* pDoc;
296 
297 protected:
298     virtual ~SwXFieldEnumeration();
299     //SwClient
300    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
301 public:
302     SwXFieldEnumeration(SwDoc* pDoc);
303 
304     //XEnumeration
305     virtual sal_Bool SAL_CALL hasMoreElements(void) throw( ::com::sun::star::uno::RuntimeException );
306     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 );
307 
308     //XServiceInfo
309     virtual rtl::OUString SAL_CALL getImplementationName(void) throw( ::com::sun::star::uno::RuntimeException );
310     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ::com::sun::star::uno::RuntimeException );
311     virtual ::com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException );
312 
313 };
314 #endif
315 
316 
317 
318