xref: /trunk/main/sc/inc/fielduno.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 
28 #ifndef SC_FIELDUNO_HXX
29 #define SC_FIELDUNO_HXX
30 
31 #include "address.hxx"
32 #include "mutexhlp.hxx"
33 
34 #include <svl/lstner.hxx>
35 #include <svl/itemprop.hxx>
36 #include <editeng/editdata.hxx>
37 #include <com/sun/star/text/XTextField.hpp>
38 #include <com/sun/star/lang/XServiceInfo.hpp>
39 #include <com/sun/star/container/XContainer.hpp>
40 #include <com/sun/star/lang/XUnoTunnel.hpp>
41 #include <com/sun/star/container/XEnumerationAccess.hpp>
42 #include <com/sun/star/container/XIndexAccess.hpp>
43 #include <com/sun/star/beans/XPropertySet.hpp>
44 #include <com/sun/star/util/XRefreshable.hpp>
45 #include <cppuhelper/component.hxx>
46 #include <cppuhelper/implbase5.hxx>
47 #include <osl/mutex.hxx>
48 
49 class SvxEditSource;
50 class SvxFieldItem;
51 class ScCellFieldObj;
52 class ScHeaderFieldObj;
53 class ScHeaderFooterContentObj;
54 class ScDocShell;
55 
56 
57 //------------------------------------------------------------------
58 
59 
60 class ScCellFieldsObj : public cppu::WeakImplHelper5<
61                             com::sun::star::container::XEnumerationAccess,
62                             com::sun::star::container::XIndexAccess,
63                             com::sun::star::container::XContainer,
64                             com::sun::star::util::XRefreshable,
65                             com::sun::star::lang::XServiceInfo >,
66                         public SfxListener
67 {
68 private:
69     ScDocShell*             pDocShell;
70     ScAddress               aCellPos;
71     SvxEditSource*          pEditSource;
72     /// List of refresh listeners.
73     cppu::OInterfaceContainerHelper* mpRefreshListeners;
74     /// mutex to lock the InterfaceContainerHelper
75     osl::Mutex              aMutex;
76 
77     ScCellFieldObj*         GetObjectByIndex_Impl(sal_Int32 Index) const;
78 
79 public:
80                             ScCellFieldsObj(ScDocShell* pDocSh, const ScAddress& rPos);
81     virtual                 ~ScCellFieldsObj();
82 
83     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
84 
85                             // XIndexAccess
86     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
87     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
88                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
89                                     ::com::sun::star::lang::WrappedTargetException,
90                                     ::com::sun::star::uno::RuntimeException);
91 
92                             // XEnumerationAccess
93     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
94                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
95 
96                             // XElementAccess
97     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
98                                 throw(::com::sun::star::uno::RuntimeException);
99     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
100 
101                             // XContainer
102     virtual void SAL_CALL   addContainerListener( const ::com::sun::star::uno::Reference<
103                                 ::com::sun::star::container::XContainerListener >& xListener )
104                                     throw(::com::sun::star::uno::RuntimeException);
105     virtual void SAL_CALL   removeContainerListener( const ::com::sun::star::uno::Reference<
106                                 ::com::sun::star::container::XContainerListener >& xListener )
107                                     throw(::com::sun::star::uno::RuntimeException);
108 
109                             // XRefreshable
110     virtual void SAL_CALL refresh(  )
111                                     throw (::com::sun::star::uno::RuntimeException);
112     virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference<
113                                 ::com::sun::star::util::XRefreshListener >& l )
114                                     throw (::com::sun::star::uno::RuntimeException);
115     virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference<
116                                 ::com::sun::star::util::XRefreshListener >& l )
117                                     throw (::com::sun::star::uno::RuntimeException);
118 
119                             // XServiceInfo
120     virtual ::rtl::OUString SAL_CALL getImplementationName()
121                                 throw(::com::sun::star::uno::RuntimeException);
122     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
123                                 throw(::com::sun::star::uno::RuntimeException);
124     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
125                                 throw(::com::sun::star::uno::RuntimeException);
126 };
127 
128 
129 class ScCellFieldObj : public ScMutexHelper,
130                         public ::cppu::OComponentHelper,
131                         public ::com::sun::star::text::XTextField,
132                         public ::com::sun::star::beans::XPropertySet,
133                         public ::com::sun::star::lang::XUnoTunnel,
134                         public ::com::sun::star::lang::XServiceInfo,
135                         public SfxListener
136 {
137 private:
138     const SfxItemPropertySet*       pPropSet;
139     ScDocShell*             pDocShell;
140     ScAddress               aCellPos;
141     SvxEditSource*          pEditSource;
142     ESelection              aSelection;
143 
144     String                  aUrl;               // Inhalt, wenn noch nicht eingefuegt (nur dann!)
145     String                  aRepresentation;
146     String                  aTarget;
147 
148     ScCellFieldObj(); // disabled
149 public:
150                             ScCellFieldObj(ScDocShell* pDocSh, const ScAddress& rPos,
151                                             const ESelection& rSel);
152     virtual                 ~ScCellFieldObj();
153 
154     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
155 
156                             // per getImplementation gerufen:
157     void                    DeleteField();
158     sal_Bool                    IsInserted() const      { return pEditSource != NULL; }
159     SvxFieldItem            CreateFieldItem();
160     void                    InitDoc( ScDocShell* pDocSh, const ScAddress& rPos,
161                                         const ESelection& rSel );
162 
163     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(
164                                 const ::com::sun::star::uno::Type & rType )
165                                     throw(::com::sun::star::uno::RuntimeException);
166     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
167                                 const ::com::sun::star::uno::Type & rType )
168                                     throw(::com::sun::star::uno::RuntimeException);
169     virtual void SAL_CALL   acquire() throw();
170     virtual void SAL_CALL   release() throw();
171 
172                             // XTextField
173     virtual ::rtl::OUString SAL_CALL getPresentation( sal_Bool bShowCommand )
174                                 throw(::com::sun::star::uno::RuntimeException);
175 
176                             // XTextContent
177     virtual void SAL_CALL   attach( const ::com::sun::star::uno::Reference<
178                                 ::com::sun::star::text::XTextRange >& xTextRange )
179                                     throw(::com::sun::star::lang::IllegalArgumentException,
180                                             ::com::sun::star::uno::RuntimeException);
181     virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL
182                             getAnchor() throw(::com::sun::star::uno::RuntimeException);
183 
184                             // XComponent
185     virtual void SAL_CALL   dispose() throw(::com::sun::star::uno::RuntimeException);
186     virtual void SAL_CALL   addEventListener( const ::com::sun::star::uno::Reference<
187                                 ::com::sun::star::lang::XEventListener >& xListener )
188                                     throw(::com::sun::star::uno::RuntimeException);
189     virtual void SAL_CALL   removeEventListener( const ::com::sun::star::uno::Reference<
190                                 ::com::sun::star::lang::XEventListener >& aListener )
191                                     throw(::com::sun::star::uno::RuntimeException);
192 
193                             // XPropertySet
194     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
195                             SAL_CALL getPropertySetInfo()
196                                 throw(::com::sun::star::uno::RuntimeException);
197     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
198                                     const ::com::sun::star::uno::Any& aValue )
199                                 throw(::com::sun::star::beans::UnknownPropertyException,
200                                     ::com::sun::star::beans::PropertyVetoException,
201                                     ::com::sun::star::lang::IllegalArgumentException,
202                                     ::com::sun::star::lang::WrappedTargetException,
203                                     ::com::sun::star::uno::RuntimeException);
204     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
205                                     const ::rtl::OUString& PropertyName )
206                                 throw(::com::sun::star::beans::UnknownPropertyException,
207                                     ::com::sun::star::lang::WrappedTargetException,
208                                     ::com::sun::star::uno::RuntimeException);
209     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
210                                     const ::com::sun::star::uno::Reference<
211                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
212                                 throw(::com::sun::star::beans::UnknownPropertyException,
213                                     ::com::sun::star::lang::WrappedTargetException,
214                                     ::com::sun::star::uno::RuntimeException);
215     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
216                                     const ::com::sun::star::uno::Reference<
217                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
218                                 throw(::com::sun::star::beans::UnknownPropertyException,
219                                     ::com::sun::star::lang::WrappedTargetException,
220                                     ::com::sun::star::uno::RuntimeException);
221     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
222                                     const ::com::sun::star::uno::Reference<
223                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
224                                 throw(::com::sun::star::beans::UnknownPropertyException,
225                                     ::com::sun::star::lang::WrappedTargetException,
226                                     ::com::sun::star::uno::RuntimeException);
227     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
228                                     const ::com::sun::star::uno::Reference<
229                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
230                                 throw(::com::sun::star::beans::UnknownPropertyException,
231                                     ::com::sun::star::lang::WrappedTargetException,
232                                     ::com::sun::star::uno::RuntimeException);
233 
234                             // XUnoTunnel
235     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
236                                     sal_Int8 >& aIdentifier )
237                                 throw(::com::sun::star::uno::RuntimeException);
238 
239     static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
240     static ScCellFieldObj* getImplementation( const com::sun::star::uno::Reference<
241                                     com::sun::star::text::XTextContent> xObj );
242 
243                             // XServiceInfo
244     virtual ::rtl::OUString SAL_CALL getImplementationName()
245                                 throw(::com::sun::star::uno::RuntimeException);
246     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
247                                 throw(::com::sun::star::uno::RuntimeException);
248     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
249                                 throw(::com::sun::star::uno::RuntimeException);
250 
251                             // XTypeProvider
252     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
253                                 throw(::com::sun::star::uno::RuntimeException);
254     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
255                                 throw(::com::sun::star::uno::RuntimeException);
256 };
257 
258 //------------------------------------------------------------------
259 
260 class ScHeaderFieldsObj : public cppu::WeakImplHelper5<
261                             com::sun::star::container::XEnumerationAccess,
262                             com::sun::star::container::XIndexAccess,
263                             com::sun::star::container::XContainer,
264                             com::sun::star::util::XRefreshable,
265                             com::sun::star::lang::XServiceInfo >
266 {
267 private:
268     ScHeaderFooterContentObj*   pContentObj;
269     sal_uInt16                      nPart;
270     sal_uInt16                      nType;
271     SvxEditSource*              pEditSource;
272 
273     /// List of refresh listeners.
274     cppu::OInterfaceContainerHelper* mpRefreshListeners;
275     /// mutex to lock the InterfaceContainerHelper
276     osl::Mutex                  aMutex;
277 
278     ScHeaderFieldObj*       GetObjectByIndex_Impl(sal_Int32 Index) const;
279 
280 public:
281                             ScHeaderFieldsObj(ScHeaderFooterContentObj* pContent,
282                                                 sal_uInt16 nP, sal_uInt16 nT);
283     virtual                 ~ScHeaderFieldsObj();
284 
285                             // XIndexAccess
286     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
287     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
288                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
289                                     ::com::sun::star::lang::WrappedTargetException,
290                                     ::com::sun::star::uno::RuntimeException);
291 
292                             // XEnumerationAccess
293     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
294                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
295 
296                             // XElementAccess
297     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
298                                 throw(::com::sun::star::uno::RuntimeException);
299     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
300 
301                             // XContainer
302     virtual void SAL_CALL   addContainerListener( const ::com::sun::star::uno::Reference<
303                                 ::com::sun::star::container::XContainerListener >& xListener )
304                                     throw(::com::sun::star::uno::RuntimeException);
305     virtual void SAL_CALL   removeContainerListener( const ::com::sun::star::uno::Reference<
306                                 ::com::sun::star::container::XContainerListener >& xListener )
307                                     throw(::com::sun::star::uno::RuntimeException);
308 
309                             // XRefreshable
310     virtual void SAL_CALL refresh(  )
311                                     throw (::com::sun::star::uno::RuntimeException);
312     virtual void SAL_CALL addRefreshListener( const ::com::sun::star::uno::Reference<
313                                 ::com::sun::star::util::XRefreshListener >& l )
314                                     throw (::com::sun::star::uno::RuntimeException);
315     virtual void SAL_CALL removeRefreshListener( const ::com::sun::star::uno::Reference<
316                                 ::com::sun::star::util::XRefreshListener >& l )
317                                     throw (::com::sun::star::uno::RuntimeException);
318 
319                             // XServiceInfo
320     virtual ::rtl::OUString SAL_CALL getImplementationName()
321                                 throw(::com::sun::star::uno::RuntimeException);
322     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
323                                 throw(::com::sun::star::uno::RuntimeException);
324     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
325                                 throw(::com::sun::star::uno::RuntimeException);
326 };
327 
328 
329 class ScHeaderFieldObj : public ScMutexHelper,
330                             public ::cppu::OComponentHelper,
331                             public ::com::sun::star::text::XTextField,
332                             public ::com::sun::star::beans::XPropertySet,
333                             public ::com::sun::star::lang::XUnoTunnel,
334                             public ::com::sun::star::lang::XServiceInfo
335 {
336 private:
337     const SfxItemPropertySet*   pPropSet;
338     ScHeaderFooterContentObj*   pContentObj;
339     sal_uInt16                      nPart;
340     sal_uInt16                      nType;
341     SvxEditSource*              pEditSource;
342     ESelection                  aSelection;
343     sal_Int16                   nFileFormat;        // enum SvxFileFormat, valid if not inserted
344 
345     ScHeaderFieldObj(); // disabled
346 public:
347                             ScHeaderFieldObj(ScHeaderFooterContentObj* pContent, sal_uInt16 nP,
348                                             sal_uInt16 nT, const ESelection& rSel);
349     virtual                 ~ScHeaderFieldObj();
350 
351                             // per getImplementation gerufen:
352     void                    DeleteField();
353     sal_Bool                    IsInserted() const      { return pEditSource != NULL; }
354     SvxFieldItem            CreateFieldItem();
355     void                    InitDoc( ScHeaderFooterContentObj* pContent, sal_uInt16 nP,
356                                         const ESelection& rSel );
357 
358     virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(
359                                 const ::com::sun::star::uno::Type & rType )
360                                     throw(::com::sun::star::uno::RuntimeException);
361     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
362                                 const ::com::sun::star::uno::Type & rType )
363                                     throw(::com::sun::star::uno::RuntimeException);
364     virtual void SAL_CALL   acquire() throw();
365     virtual void SAL_CALL   release() throw();
366 
367                             // XTextField
368     virtual ::rtl::OUString SAL_CALL getPresentation( sal_Bool bShowCommand )
369                                 throw(::com::sun::star::uno::RuntimeException);
370 
371                             // XTextContent
372     virtual void SAL_CALL   attach( const ::com::sun::star::uno::Reference<
373                                 ::com::sun::star::text::XTextRange >& xTextRange )
374                                     throw(::com::sun::star::lang::IllegalArgumentException,
375                                             ::com::sun::star::uno::RuntimeException);
376     virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL
377                             getAnchor() throw(::com::sun::star::uno::RuntimeException);
378 
379                             // XComponent
380     virtual void SAL_CALL   dispose() throw(::com::sun::star::uno::RuntimeException);
381     virtual void SAL_CALL   addEventListener( const ::com::sun::star::uno::Reference<
382                                 ::com::sun::star::lang::XEventListener >& xListener )
383                                     throw(::com::sun::star::uno::RuntimeException);
384     virtual void SAL_CALL   removeEventListener( const ::com::sun::star::uno::Reference<
385                                 ::com::sun::star::lang::XEventListener >& aListener )
386                                     throw(::com::sun::star::uno::RuntimeException);
387 
388                             // XPropertySet
389     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
390                             SAL_CALL getPropertySetInfo()
391                                 throw(::com::sun::star::uno::RuntimeException);
392     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
393                                     const ::com::sun::star::uno::Any& aValue )
394                                 throw(::com::sun::star::beans::UnknownPropertyException,
395                                     ::com::sun::star::beans::PropertyVetoException,
396                                     ::com::sun::star::lang::IllegalArgumentException,
397                                     ::com::sun::star::lang::WrappedTargetException,
398                                     ::com::sun::star::uno::RuntimeException);
399     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
400                                     const ::rtl::OUString& PropertyName )
401                                 throw(::com::sun::star::beans::UnknownPropertyException,
402                                     ::com::sun::star::lang::WrappedTargetException,
403                                     ::com::sun::star::uno::RuntimeException);
404     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
405                                     const ::com::sun::star::uno::Reference<
406                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
407                                 throw(::com::sun::star::beans::UnknownPropertyException,
408                                     ::com::sun::star::lang::WrappedTargetException,
409                                     ::com::sun::star::uno::RuntimeException);
410     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
411                                     const ::com::sun::star::uno::Reference<
412                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
413                                 throw(::com::sun::star::beans::UnknownPropertyException,
414                                     ::com::sun::star::lang::WrappedTargetException,
415                                     ::com::sun::star::uno::RuntimeException);
416     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
417                                     const ::com::sun::star::uno::Reference<
418                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
419                                 throw(::com::sun::star::beans::UnknownPropertyException,
420                                     ::com::sun::star::lang::WrappedTargetException,
421                                     ::com::sun::star::uno::RuntimeException);
422     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
423                                     const ::com::sun::star::uno::Reference<
424                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
425                                 throw(::com::sun::star::beans::UnknownPropertyException,
426                                     ::com::sun::star::lang::WrappedTargetException,
427                                     ::com::sun::star::uno::RuntimeException);
428 
429                             // XUnoTunnel
430     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence<
431                                     sal_Int8 >& aIdentifier )
432                                 throw(::com::sun::star::uno::RuntimeException);
433 
434     static const com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId();
435     static ScHeaderFieldObj* getImplementation( const com::sun::star::uno::Reference<
436                                     com::sun::star::text::XTextContent> xObj );
437 
438                             // XServiceInfo
439     virtual ::rtl::OUString SAL_CALL getImplementationName()
440                                 throw(::com::sun::star::uno::RuntimeException);
441     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
442                                 throw(::com::sun::star::uno::RuntimeException);
443     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
444                                 throw(::com::sun::star::uno::RuntimeException);
445 
446                             // XTypeProvider
447     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
448                                 throw(::com::sun::star::uno::RuntimeException);
449     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
450                                 throw(::com::sun::star::uno::RuntimeException);
451 };
452 
453 #endif
454 
455