xref: /trunk/main/sc/inc/linkuno.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_LINKUNO_HXX
29 #define SC_LINKUNO_HXX
30 
31 #include <svl/lstner.hxx>
32 #include <svl/itemprop.hxx>
33 #include <com/sun/star/sheet/XDDELink.hpp>
34 #include <com/sun/star/sheet/XDDELinkResults.hpp>
35 #include <com/sun/star/sheet/XDDELinks.hpp>
36 #include <com/sun/star/sheet/XExternalDocLink.hpp>
37 #include <com/sun/star/sheet/XExternalDocLinks.hpp>
38 #include <com/sun/star/sheet/XExternalSheetCache.hpp>
39 #include <com/sun/star/sheet/XAreaLink.hpp>
40 #include <com/sun/star/sheet/XAreaLinks.hpp>
41 #include <com/sun/star/util/XRefreshable.hpp>
42 #include <com/sun/star/lang/XServiceInfo.hpp>
43 #include <com/sun/star/beans/XPropertySet.hpp>
44 #include <com/sun/star/container/XEnumerationAccess.hpp>
45 #include <com/sun/star/container/XNameAccess.hpp>
46 #include <com/sun/star/container/XIndexAccess.hpp>
47 #include <com/sun/star/container/XNamed.hpp>
48 #include <cppuhelper/implbase1.hxx>
49 #include <cppuhelper/implbase3.hxx>
50 #include <cppuhelper/implbase4.hxx>
51 #include <cppuhelper/implbase5.hxx>
52 
53 #include "externalrefmgr.hxx"
54 
55 #include <hash_map>
56 #include <vector>
57 
58 class ScAreaLink;
59 class ScDocShell;
60 class ScTableLink;
61 
62 typedef ::com::sun::star::uno::Reference<
63             ::com::sun::star::util::XRefreshListener >* XRefreshListenerPtr;
64 SV_DECL_PTRARR_DEL( XRefreshListenerArr_Impl, XRefreshListenerPtr, 4, 4 )
65 
66 
67 
68 class ScSheetLinkObj : public cppu::WeakImplHelper4<
69                             com::sun::star::container::XNamed,
70                             com::sun::star::util::XRefreshable,
71                             com::sun::star::beans::XPropertySet,
72                             com::sun::star::lang::XServiceInfo >,
73                         public SfxListener
74 {
75 private:
76     SfxItemPropertySet      aPropSet;
77     ScDocShell*             pDocShell;
78     String                  aFileName;
79     XRefreshListenerArr_Impl aRefreshListeners;
80 
81     ScTableLink*            GetLink_Impl() const;
82     void                    Refreshed_Impl();
83     void                    ModifyRefreshDelay_Impl( sal_Int32 nRefresh );
84 
85 public:
86                             ScSheetLinkObj(ScDocShell* pDocSh, const String& rName);
87     virtual                 ~ScSheetLinkObj();
88 
89     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
90 
91                             // XNamed
92     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
93     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
94                                 throw(::com::sun::star::uno::RuntimeException);
95 
96                             // XRefreshable
97     virtual void SAL_CALL   refresh() throw(::com::sun::star::uno::RuntimeException);
98     virtual void SAL_CALL   addRefreshListener( const ::com::sun::star::uno::Reference<
99                                     ::com::sun::star::util::XRefreshListener >& l )
100                                 throw(::com::sun::star::uno::RuntimeException);
101     virtual void SAL_CALL   removeRefreshListener( const ::com::sun::star::uno::Reference<
102                                     ::com::sun::star::util::XRefreshListener >& l )
103                                 throw(::com::sun::star::uno::RuntimeException);
104 
105                             // XPropertySet
106     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
107                             SAL_CALL getPropertySetInfo(  )
108                                 throw(::com::sun::star::uno::RuntimeException);
109     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
110                                     const ::com::sun::star::uno::Any& aValue )
111                                 throw(::com::sun::star::beans::UnknownPropertyException,
112                                     ::com::sun::star::beans::PropertyVetoException,
113                                     ::com::sun::star::lang::IllegalArgumentException,
114                                     ::com::sun::star::lang::WrappedTargetException,
115                                     ::com::sun::star::uno::RuntimeException);
116     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
117                                     const ::rtl::OUString& PropertyName )
118                                 throw(::com::sun::star::beans::UnknownPropertyException,
119                                     ::com::sun::star::lang::WrappedTargetException,
120                                     ::com::sun::star::uno::RuntimeException);
121     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
122                                     const ::com::sun::star::uno::Reference<
123                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
124                                 throw(::com::sun::star::beans::UnknownPropertyException,
125                                     ::com::sun::star::lang::WrappedTargetException,
126                                     ::com::sun::star::uno::RuntimeException);
127     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
128                                     const ::com::sun::star::uno::Reference<
129                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
130                                 throw(::com::sun::star::beans::UnknownPropertyException,
131                                     ::com::sun::star::lang::WrappedTargetException,
132                                     ::com::sun::star::uno::RuntimeException);
133     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
134                                     const ::com::sun::star::uno::Reference<
135                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
136                                 throw(::com::sun::star::beans::UnknownPropertyException,
137                                     ::com::sun::star::lang::WrappedTargetException,
138                                     ::com::sun::star::uno::RuntimeException);
139     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
140                                     const ::com::sun::star::uno::Reference<
141                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
142                                 throw(::com::sun::star::beans::UnknownPropertyException,
143                                     ::com::sun::star::lang::WrappedTargetException,
144                                     ::com::sun::star::uno::RuntimeException);
145 
146                             // aus get/setPropertyValue gerufen:
147     ::rtl::OUString         getFileName(void) const;
148     void                    setFileName(const ::rtl::OUString& FileName);
149     ::rtl::OUString         getFilter(void) const;
150     void                    setFilter(const ::rtl::OUString& Filter);
151     ::rtl::OUString         getFilterOptions(void) const;
152     void                    setFilterOptions(const ::rtl::OUString& FilterOptions);
153     sal_Int32               getRefreshDelay(void) const;
154     void                    setRefreshDelay(sal_Int32 nRefreshDelay);
155 
156                             // XServiceInfo
157     virtual ::rtl::OUString SAL_CALL getImplementationName()
158                                 throw(::com::sun::star::uno::RuntimeException);
159     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
160                                 throw(::com::sun::star::uno::RuntimeException);
161     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
162                                 throw(::com::sun::star::uno::RuntimeException);
163 };
164 
165 
166 class ScSheetLinksObj : public cppu::WeakImplHelper4<
167                             com::sun::star::container::XNameAccess,
168                             com::sun::star::container::XEnumerationAccess,
169                             com::sun::star::container::XIndexAccess,
170                             com::sun::star::lang::XServiceInfo >,
171                         public SfxListener
172 {
173 private:
174     ScDocShell*             pDocShell;
175 
176     ScSheetLinkObj*         GetObjectByIndex_Impl(sal_Int32 nIndex);
177     ScSheetLinkObj*         GetObjectByName_Impl(const ::rtl::OUString& aName);
178 
179 public:
180                             ScSheetLinksObj(ScDocShell* pDocSh);
181     virtual                 ~ScSheetLinksObj();
182 
183     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
184 
185                             // XNameAccess
186     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
187                                 throw(::com::sun::star::container::NoSuchElementException,
188                                     ::com::sun::star::lang::WrappedTargetException,
189                                     ::com::sun::star::uno::RuntimeException);
190     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
191                                 throw(::com::sun::star::uno::RuntimeException);
192     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
193                                 throw(::com::sun::star::uno::RuntimeException);
194 
195                             // XIndexAccess
196     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
197     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
198                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
199                                     ::com::sun::star::lang::WrappedTargetException,
200                                     ::com::sun::star::uno::RuntimeException);
201 
202                             // XEnumerationAccess
203     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
204                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
205 
206                             // XElementAccess
207     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
208                                 throw(::com::sun::star::uno::RuntimeException);
209     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
210 
211                             // XServiceInfo
212     virtual ::rtl::OUString SAL_CALL getImplementationName()
213                                 throw(::com::sun::star::uno::RuntimeException);
214     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
215                                 throw(::com::sun::star::uno::RuntimeException);
216     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
217                                 throw(::com::sun::star::uno::RuntimeException);
218 };
219 
220 
221 class ScAreaLinkObj : public cppu::WeakImplHelper4<
222                             com::sun::star::sheet::XAreaLink,
223                             com::sun::star::util::XRefreshable,
224                             com::sun::star::beans::XPropertySet,
225                             com::sun::star::lang::XServiceInfo >,
226                         public SfxListener
227 {
228 private:
229     SfxItemPropertySet      aPropSet;
230     ScDocShell*             pDocShell;
231     sal_uInt16                  nPos;
232     XRefreshListenerArr_Impl aRefreshListeners;
233 
234     void    Modify_Impl( const ::rtl::OUString* pNewFile, const ::rtl::OUString* pNewFilter,
235                          const ::rtl::OUString* pNewOptions, const ::rtl::OUString* pNewSource,
236                          const com::sun::star::table::CellRangeAddress* pNewDest );
237     void    ModifyRefreshDelay_Impl( sal_Int32 nRefresh );
238     void    Refreshed_Impl();
239 
240 public:
241                             ScAreaLinkObj(ScDocShell* pDocSh, sal_uInt16 nP);
242     virtual                 ~ScAreaLinkObj();
243 
244     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
245 
246                             // XRefreshable
247     virtual void SAL_CALL   refresh() throw(::com::sun::star::uno::RuntimeException);
248     virtual void SAL_CALL   addRefreshListener( const ::com::sun::star::uno::Reference<
249                                     ::com::sun::star::util::XRefreshListener >& l )
250                                 throw(::com::sun::star::uno::RuntimeException);
251     virtual void SAL_CALL   removeRefreshListener( const ::com::sun::star::uno::Reference<
252                                     ::com::sun::star::util::XRefreshListener >& l )
253                                 throw(::com::sun::star::uno::RuntimeException);
254 
255                             // XPropertySet
256     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
257                             SAL_CALL getPropertySetInfo(  )
258                                 throw(::com::sun::star::uno::RuntimeException);
259     virtual void SAL_CALL   setPropertyValue( const ::rtl::OUString& aPropertyName,
260                                     const ::com::sun::star::uno::Any& aValue )
261                                 throw(::com::sun::star::beans::UnknownPropertyException,
262                                     ::com::sun::star::beans::PropertyVetoException,
263                                     ::com::sun::star::lang::IllegalArgumentException,
264                                     ::com::sun::star::lang::WrappedTargetException,
265                                     ::com::sun::star::uno::RuntimeException);
266     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue(
267                                     const ::rtl::OUString& PropertyName )
268                                 throw(::com::sun::star::beans::UnknownPropertyException,
269                                     ::com::sun::star::lang::WrappedTargetException,
270                                     ::com::sun::star::uno::RuntimeException);
271     virtual void SAL_CALL   addPropertyChangeListener( const ::rtl::OUString& aPropertyName,
272                                     const ::com::sun::star::uno::Reference<
273                                         ::com::sun::star::beans::XPropertyChangeListener >& xListener )
274                                 throw(::com::sun::star::beans::UnknownPropertyException,
275                                     ::com::sun::star::lang::WrappedTargetException,
276                                     ::com::sun::star::uno::RuntimeException);
277     virtual void SAL_CALL   removePropertyChangeListener( const ::rtl::OUString& aPropertyName,
278                                     const ::com::sun::star::uno::Reference<
279                                         ::com::sun::star::beans::XPropertyChangeListener >& aListener )
280                                 throw(::com::sun::star::beans::UnknownPropertyException,
281                                     ::com::sun::star::lang::WrappedTargetException,
282                                     ::com::sun::star::uno::RuntimeException);
283     virtual void SAL_CALL   addVetoableChangeListener( const ::rtl::OUString& PropertyName,
284                                     const ::com::sun::star::uno::Reference<
285                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
286                                 throw(::com::sun::star::beans::UnknownPropertyException,
287                                     ::com::sun::star::lang::WrappedTargetException,
288                                     ::com::sun::star::uno::RuntimeException);
289     virtual void SAL_CALL   removeVetoableChangeListener( const ::rtl::OUString& PropertyName,
290                                     const ::com::sun::star::uno::Reference<
291                                         ::com::sun::star::beans::XVetoableChangeListener >& aListener )
292                                 throw(::com::sun::star::beans::UnknownPropertyException,
293                                     ::com::sun::star::lang::WrappedTargetException,
294                                     ::com::sun::star::uno::RuntimeException);
295 
296                             // aus get/setPropertyValue gerufen:
297     ::rtl::OUString         getFileName(void) const;
298     void                    setFileName(const ::rtl::OUString& FileName);
299     ::rtl::OUString         getFilter(void) const;
300     void                    setFilter(const ::rtl::OUString& Filter);
301     ::rtl::OUString         getFilterOptions(void) const;
302     void                    setFilterOptions(const ::rtl::OUString& FilterOptions);
303     sal_Int32               getRefreshDelay(void) const;
304     void                    setRefreshDelay(sal_Int32 nRefreshDelay);
305 
306                             // XAreaLink
307     virtual ::rtl::OUString SAL_CALL getSourceArea() throw(::com::sun::star::uno::RuntimeException);
308     virtual void SAL_CALL   setSourceArea( const ::rtl::OUString& aSourceArea )
309                                 throw(::com::sun::star::uno::RuntimeException);
310     virtual ::com::sun::star::table::CellRangeAddress SAL_CALL getDestArea()
311                                 throw(::com::sun::star::uno::RuntimeException);
312     virtual void SAL_CALL setDestArea( const ::com::sun::star::table::CellRangeAddress& aDestArea )
313                                 throw(::com::sun::star::uno::RuntimeException);
314 
315                             // XServiceInfo
316     virtual ::rtl::OUString SAL_CALL getImplementationName()
317                                 throw(::com::sun::star::uno::RuntimeException);
318     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
319                                 throw(::com::sun::star::uno::RuntimeException);
320     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
321                                 throw(::com::sun::star::uno::RuntimeException);
322 };
323 
324 
325 class ScAreaLinksObj : public cppu::WeakImplHelper3<
326                             com::sun::star::sheet::XAreaLinks,
327                             com::sun::star::container::XEnumerationAccess,
328                             com::sun::star::lang::XServiceInfo >,
329                         public SfxListener
330 {
331 private:
332     ScDocShell*             pDocShell;
333 
334     ScAreaLinkObj*          GetObjectByIndex_Impl(sal_Int32 nIndex);
335 
336 public:
337                             ScAreaLinksObj(ScDocShell* pDocSh);
338     virtual                 ~ScAreaLinksObj();
339 
340     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
341 
342                             // XAreaLinks
343     virtual void SAL_CALL   insertAtPosition( const ::com::sun::star::table::CellAddress& aDestPos,
344                                                 const ::rtl::OUString& aFileName,
345                                                 const ::rtl::OUString& aSourceArea,
346                                                 const ::rtl::OUString& aFilter,
347                                                 const ::rtl::OUString& aFilterOptions )
348                                             throw(::com::sun::star::uno::RuntimeException);
349     virtual void SAL_CALL   removeByIndex( sal_Int32 nIndex )
350                                             throw(::com::sun::star::uno::RuntimeException);
351 
352                             // XIndexAccess
353     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
354     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
355                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
356                                     ::com::sun::star::lang::WrappedTargetException,
357                                     ::com::sun::star::uno::RuntimeException);
358 
359                             // XEnumerationAccess
360     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
361                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
362 
363                             // XElementAccess
364     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
365                                 throw(::com::sun::star::uno::RuntimeException);
366     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
367 
368                             // XServiceInfo
369     virtual ::rtl::OUString SAL_CALL getImplementationName()
370                                 throw(::com::sun::star::uno::RuntimeException);
371     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
372                                 throw(::com::sun::star::uno::RuntimeException);
373     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
374                                 throw(::com::sun::star::uno::RuntimeException);
375 };
376 
377 
378 //! order of XNamed and DDELink changed to avoid "duplicate comdat" symbols
379 
380 class ScDDELinkObj : public cppu::WeakImplHelper5<
381                             com::sun::star::sheet::XDDELink,
382                             com::sun::star::container::XNamed,
383                             com::sun::star::util::XRefreshable,
384                             com::sun::star::sheet::XDDELinkResults,
385                             com::sun::star::lang::XServiceInfo >,
386                         public SfxListener
387 {
388 private:
389     ScDocShell*             pDocShell;
390     String                  aAppl;
391     String                  aTopic;
392     String                  aItem;
393     XRefreshListenerArr_Impl aRefreshListeners;
394 
395     void                    Refreshed_Impl();
396 
397 public:
398                             ScDDELinkObj(ScDocShell* pDocSh, const String& rA,
399                                             const String& rT, const String& rI);
400     virtual                 ~ScDDELinkObj();
401 
402     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
403 
404                             // XNamed
405     virtual ::rtl::OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
406     virtual void SAL_CALL   setName( const ::rtl::OUString& aName )
407                                 throw(::com::sun::star::uno::RuntimeException);
408 
409                             // XDDELink
410     virtual ::rtl::OUString SAL_CALL getApplication() throw(::com::sun::star::uno::RuntimeException);
411     virtual ::rtl::OUString SAL_CALL getTopic() throw(::com::sun::star::uno::RuntimeException);
412     virtual ::rtl::OUString SAL_CALL getItem() throw(::com::sun::star::uno::RuntimeException);
413 
414                             // XRefreshable
415     virtual void SAL_CALL   refresh() throw(::com::sun::star::uno::RuntimeException);
416     virtual void SAL_CALL   addRefreshListener( const ::com::sun::star::uno::Reference<
417                                     ::com::sun::star::util::XRefreshListener >& l )
418                                 throw(::com::sun::star::uno::RuntimeException);
419     virtual void SAL_CALL   removeRefreshListener( const ::com::sun::star::uno::Reference<
420                                     ::com::sun::star::util::XRefreshListener >& l )
421                                 throw(::com::sun::star::uno::RuntimeException);
422 
423                             // XDDELinkResults
424     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > >
425         SAL_CALL getResults(  )
426         throw (::com::sun::star::uno::RuntimeException);
427     virtual void SAL_CALL setResults(
428         const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > >& aResults )
429         throw (::com::sun::star::uno::RuntimeException);
430 
431                             // XServiceInfo
432     virtual ::rtl::OUString SAL_CALL getImplementationName()
433                                 throw(::com::sun::star::uno::RuntimeException);
434     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
435                                 throw(::com::sun::star::uno::RuntimeException);
436     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
437                                 throw(::com::sun::star::uno::RuntimeException);
438 };
439 
440 
441 class ScDDELinksObj : public cppu::WeakImplHelper4<
442                             com::sun::star::container::XEnumerationAccess,
443                             com::sun::star::container::XIndexAccess,
444                             com::sun::star::sheet::XDDELinks,
445                             com::sun::star::lang::XServiceInfo >,
446                         public SfxListener
447 {
448 private:
449     ScDocShell*             pDocShell;
450 
451     ScDDELinkObj*           GetObjectByIndex_Impl(sal_Int32 nIndex);
452     ScDDELinkObj*           GetObjectByName_Impl(const ::rtl::OUString& aName);
453 
454 public:
455                             ScDDELinksObj(ScDocShell* pDocSh);
456     virtual                 ~ScDDELinksObj();
457 
458     virtual void            Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
459 
460                             // XNameAccess
461     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
462                                 throw(::com::sun::star::container::NoSuchElementException,
463                                     ::com::sun::star::lang::WrappedTargetException,
464                                     ::com::sun::star::uno::RuntimeException);
465     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
466                                 throw(::com::sun::star::uno::RuntimeException);
467     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
468                                 throw(::com::sun::star::uno::RuntimeException);
469 
470                             // XIndexAccess
471     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
472     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
473                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
474                                     ::com::sun::star::lang::WrappedTargetException,
475                                     ::com::sun::star::uno::RuntimeException);
476 
477                             // XEnumerationAccess
478     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
479                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
480 
481                             // XElementAccess
482     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
483                                 throw(::com::sun::star::uno::RuntimeException);
484     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
485 
486                             // XDDELinks
487     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDDELink > SAL_CALL addDDELink(
488         const ::rtl::OUString& aApplication, const ::rtl::OUString& aTopic,
489         const ::rtl::OUString& aItem, ::com::sun::star::sheet::DDELinkMode nMode )
490         throw (::com::sun::star::uno::RuntimeException);
491 
492                             // XServiceInfo
493     virtual ::rtl::OUString SAL_CALL getImplementationName()
494                                 throw(::com::sun::star::uno::RuntimeException);
495     virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
496                                 throw(::com::sun::star::uno::RuntimeException);
497     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
498                                 throw(::com::sun::star::uno::RuntimeException);
499 };
500 
501 // ============================================================================
502 
503 class ScExternalSheetCacheObj : public cppu::WeakImplHelper1< ::com::sun::star::sheet::XExternalSheetCache >
504 {
505 public:
506     explicit ScExternalSheetCacheObj(ScExternalRefCache::TableTypeRef pTable, size_t nIndex);
507     ~ScExternalSheetCacheObj();
508 
509                             // XExternalSheetCache
510     virtual void SAL_CALL setCellValue(
511         sal_Int32 nCol, sal_Int32 nRow, const ::com::sun::star::uno::Any& rAny)
512         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
513 
514     virtual ::com::sun::star::uno::Any SAL_CALL getCellValue(sal_Int32 nCol, sal_Int32 nRow)
515         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
516 
517     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getAllRows()
518         throw (::com::sun::star::uno::RuntimeException);
519 
520     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getAllColumns(sal_Int32 nRow)
521         throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
522 
523     // Attributes
524     virtual sal_Int32 SAL_CALL getTokenIndex()
525             throw (::com::sun::star::uno::RuntimeException);
526 
527 private:
528     ScExternalSheetCacheObj();
529     ScExternalSheetCacheObj(const ScExternalSheetCacheObj&);
530 
531 private:
532     ScExternalRefCache::TableTypeRef mpTable;
533     size_t mnIndex;
534 };
535 
536 // ============================================================================
537 
538 class ScExternalDocLinkObj : public cppu::WeakImplHelper1< ::com::sun::star::sheet::XExternalDocLink >
539 {
540 public:
541     ScExternalDocLinkObj(ScExternalRefManager* pRefMgr, sal_uInt16 nFileId);
542     ~ScExternalDocLinkObj();
543 
544                             // XExternalDocLink
545     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XExternalSheetCache >
546         SAL_CALL addSheetCache( const ::rtl::OUString& aSheetName, sal_Bool bDynamicCache )
547             throw (::com::sun::star::uno::RuntimeException);
548 
549                             // XNameAccess
550     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
551                                 throw(::com::sun::star::container::NoSuchElementException,
552                                     ::com::sun::star::lang::WrappedTargetException,
553                                     ::com::sun::star::uno::RuntimeException);
554     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
555                                 throw(::com::sun::star::uno::RuntimeException);
556     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
557                                 throw(::com::sun::star::uno::RuntimeException);
558 
559                             // XIndexAccess
560     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
561     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 nIndex )
562                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
563                                     ::com::sun::star::lang::WrappedTargetException,
564                                     ::com::sun::star::uno::RuntimeException);
565 
566                             // XEnumerationAccess
567     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
568                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
569 
570                             // XElementAccess
571     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
572                                 throw(::com::sun::star::uno::RuntimeException);
573     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
574 
575     // Attributes
576     virtual sal_Int32 SAL_CALL getTokenIndex()
577             throw (::com::sun::star::uno::RuntimeException);
578 
579 private:
580     ScExternalRefManager*   mpRefMgr;
581     sal_uInt16              mnFileId;
582 };
583 
584 // ============================================================================
585 
586 /** This is the UNO API equivalent of ScExternalRefManager. */
587 class ScExternalDocLinksObj : public cppu::WeakImplHelper1< ::com::sun::star::sheet::XExternalDocLinks >
588 {
589 public:
590     ScExternalDocLinksObj(ScDocShell* pDocShell);
591     ~ScExternalDocLinksObj();
592 
593                             // XExternalDocLinks
594     virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XExternalDocLink >
595         SAL_CALL addDocLink( const ::rtl::OUString& aDocName )
596             throw (::com::sun::star::uno::RuntimeException);
597 
598                             // XNameAccess
599     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
600                                 throw(::com::sun::star::container::NoSuchElementException,
601                                     ::com::sun::star::lang::WrappedTargetException,
602                                     ::com::sun::star::uno::RuntimeException);
603     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
604                                 throw(::com::sun::star::uno::RuntimeException);
605     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
606                                 throw(::com::sun::star::uno::RuntimeException);
607 
608                             // XIndexAccess
609     virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException);
610     virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 nIndex )
611                                 throw(::com::sun::star::lang::IndexOutOfBoundsException,
612                                     ::com::sun::star::lang::WrappedTargetException,
613                                     ::com::sun::star::uno::RuntimeException);
614 
615                             // XEnumerationAccess
616     virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL
617                             createEnumeration() throw(::com::sun::star::uno::RuntimeException);
618 
619                             // XElementAccess
620     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
621                                 throw(::com::sun::star::uno::RuntimeException);
622     virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
623 
624 private:
625     ScExternalDocLinksObj();
626     ScExternalDocLinksObj(const ScExternalDocLinksObj&);
627 
628 private:
629     ScDocShell*                         mpDocShell;
630     ScExternalRefManager*               mpRefMgr;
631 };
632 
633 #endif
634 
635