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