1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
22 #include <svl/lstner.hxx>
23 #include <svl/itemprop.hxx>
24 #include <com/sun/star/sheet/XDDELink.hpp>
25 #include <com/sun/star/sheet/XDDELinkResults.hpp>
26 #include <com/sun/star/sheet/XDDELinks.hpp>
27 #include <com/sun/star/sheet/XExternalDocLink.hpp>
28 #include <com/sun/star/sheet/XExternalDocLinks.hpp>
29 #include <com/sun/star/sheet/XExternalSheetCache.hpp>
30 #include <com/sun/star/sheet/XAreaLink.hpp>
31 #include <com/sun/star/sheet/XAreaLinks.hpp>
32 #include <com/sun/star/util/XRefreshable.hpp>
33 #include <com/sun/star/lang/XServiceInfo.hpp>
34 #include <com/sun/star/beans/XPropertySet.hpp>
35 #include <com/sun/star/container/XEnumerationAccess.hpp>
36 #include <com/sun/star/container/XNameAccess.hpp>
37 #include <com/sun/star/container/XIndexAccess.hpp>
38 #include <com/sun/star/container/XNamed.hpp>
39 #include <cppuhelper/implbase.hxx>
41 #include "externalrefmgr.hxx"
48 typedef std::vector
< css::uno::Reference
< css::util::XRefreshListener
> > XRefreshListenerArr_Impl
;
50 class ScSheetLinkObj final
: public cppu::WeakImplHelper
<
51 css::container::XNamed
,
52 css::util::XRefreshable
,
53 css::beans::XPropertySet
,
54 css::lang::XServiceInfo
>,
58 SfxItemPropertySet aPropSet
;
59 ScDocShell
* pDocShell
;
61 XRefreshListenerArr_Impl aRefreshListeners
;
63 ScTableLink
* GetLink_Impl() const;
64 void Refreshed_Impl();
65 void ModifyRefreshDelay_Impl( sal_Int32 nRefresh
);
68 ScSheetLinkObj(ScDocShell
* pDocSh
, const OUString
& rName
);
69 virtual ~ScSheetLinkObj() override
;
71 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) override
;
74 virtual OUString SAL_CALL
getName() override
;
75 virtual void SAL_CALL
setName( const OUString
& aName
) override
;
78 virtual void SAL_CALL
refresh() override
;
79 virtual void SAL_CALL
addRefreshListener( const css::uno::Reference
< css::util::XRefreshListener
>& l
) override
;
80 virtual void SAL_CALL
removeRefreshListener( const css::uno::Reference
< css::util::XRefreshListener
>& l
) override
;
83 virtual css::uno::Reference
< css::beans::XPropertySetInfo
>
84 SAL_CALL
getPropertySetInfo( ) override
;
85 virtual void SAL_CALL
setPropertyValue( const OUString
& aPropertyName
,
86 const css::uno::Any
& aValue
) override
;
87 virtual css::uno::Any SAL_CALL
getPropertyValue(
88 const OUString
& PropertyName
) override
;
89 virtual void SAL_CALL
addPropertyChangeListener( const OUString
& aPropertyName
,
90 const css::uno::Reference
< css::beans::XPropertyChangeListener
>& xListener
) override
;
91 virtual void SAL_CALL
removePropertyChangeListener( const OUString
& aPropertyName
,
92 const css::uno::Reference
< css::beans::XPropertyChangeListener
>& aListener
) override
;
93 virtual void SAL_CALL
addVetoableChangeListener( const OUString
& PropertyName
,
94 const css::uno::Reference
< css::beans::XVetoableChangeListener
>& aListener
) override
;
95 virtual void SAL_CALL
removeVetoableChangeListener( const OUString
& PropertyName
,
96 const css::uno::Reference
< css::beans::XVetoableChangeListener
>& aListener
) override
;
98 // called from get/setPropertyValue:
99 OUString
getFileName() const;
100 void setFileName(const OUString
& FileName
);
101 OUString
getFilter() const;
102 void setFilter(const OUString
& Filter
);
103 OUString
getFilterOptions() const;
104 void setFilterOptions(const OUString
& FilterOptions
);
105 sal_Int32
getRefreshDelay() const;
106 void setRefreshDelay(sal_Int32 nRefreshDelay
);
109 virtual OUString SAL_CALL
getImplementationName() override
;
110 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
111 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
114 class ScSheetLinksObj final
: public cppu::WeakImplHelper
<
115 css::container::XNameAccess
,
116 css::container::XEnumerationAccess
,
117 css::container::XIndexAccess
,
118 css::lang::XServiceInfo
>,
122 ScDocShell
* pDocShell
;
124 rtl::Reference
<ScSheetLinkObj
> GetObjectByIndex_Impl(sal_Int32 nIndex
);
125 rtl::Reference
<ScSheetLinkObj
> GetObjectByName_Impl(const OUString
& aName
);
128 ScSheetLinksObj(ScDocShell
* pDocSh
);
129 virtual ~ScSheetLinksObj() override
;
131 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) override
;
134 virtual css::uno::Any SAL_CALL
getByName( const OUString
& aName
) override
;
135 virtual css::uno::Sequence
< OUString
> SAL_CALL
getElementNames() override
;
136 virtual sal_Bool SAL_CALL
hasByName( const OUString
& aName
) override
;
139 virtual sal_Int32 SAL_CALL
getCount() override
;
140 virtual css::uno::Any SAL_CALL
getByIndex( sal_Int32 Index
) override
;
142 // XEnumerationAccess
143 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
144 createEnumeration() override
;
147 virtual css::uno::Type SAL_CALL
getElementType() override
;
148 virtual sal_Bool SAL_CALL
hasElements() override
;
151 virtual OUString SAL_CALL
getImplementationName() override
;
152 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
153 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
156 class ScAreaLinkObj final
: public cppu::WeakImplHelper
<
157 css::sheet::XAreaLink
,
158 css::util::XRefreshable
,
159 css::beans::XPropertySet
,
160 css::lang::XServiceInfo
>,
164 SfxItemPropertySet aPropSet
;
165 ScDocShell
* pDocShell
;
167 XRefreshListenerArr_Impl aRefreshListeners
;
169 void Modify_Impl( const OUString
* pNewFile
, const OUString
* pNewFilter
,
170 const OUString
* pNewOptions
, const OUString
* pNewSource
,
171 const css::table::CellRangeAddress
* pNewDest
);
172 void ModifyRefreshDelay_Impl( sal_Int32 nRefresh
);
173 void Refreshed_Impl();
176 ScAreaLinkObj(ScDocShell
* pDocSh
, size_t nP
);
177 virtual ~ScAreaLinkObj() override
;
179 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) override
;
182 virtual void SAL_CALL
refresh() override
;
183 virtual void SAL_CALL
addRefreshListener( const css::uno::Reference
< css::util::XRefreshListener
>& l
) override
;
184 virtual void SAL_CALL
removeRefreshListener( const css::uno::Reference
< css::util::XRefreshListener
>& l
) override
;
187 virtual css::uno::Reference
< css::beans::XPropertySetInfo
>
188 SAL_CALL
getPropertySetInfo( ) override
;
189 virtual void SAL_CALL
setPropertyValue( const OUString
& aPropertyName
,
190 const css::uno::Any
& aValue
) override
;
191 virtual css::uno::Any SAL_CALL
getPropertyValue( const OUString
& PropertyName
) override
;
192 virtual void SAL_CALL
addPropertyChangeListener( const OUString
& aPropertyName
,
193 const css::uno::Reference
< css::beans::XPropertyChangeListener
>& xListener
) override
;
194 virtual void SAL_CALL
removePropertyChangeListener( const OUString
& aPropertyName
,
195 const css::uno::Reference
< css::beans::XPropertyChangeListener
>& aListener
) override
;
196 virtual void SAL_CALL
addVetoableChangeListener( const OUString
& PropertyName
,
197 const css::uno::Reference
< css::beans::XVetoableChangeListener
>& aListener
) override
;
198 virtual void SAL_CALL
removeVetoableChangeListener( const OUString
& PropertyName
,
199 const css::uno::Reference
< css::beans::XVetoableChangeListener
>& aListener
) override
;
201 // called from get/setPropertyValue:
202 OUString
getFileName() const;
203 void setFileName(const OUString
& FileName
);
204 OUString
getFilter() const;
205 void setFilter(const OUString
& Filter
);
206 OUString
getFilterOptions() const;
207 void setFilterOptions(const OUString
& FilterOptions
);
208 sal_Int32
getRefreshDelay() const;
209 void setRefreshDelay(sal_Int32 nRefreshDelay
);
212 virtual OUString SAL_CALL
getSourceArea() override
;
213 virtual void SAL_CALL
setSourceArea( const OUString
& aSourceArea
) override
;
214 virtual css::table::CellRangeAddress SAL_CALL
getDestArea() override
;
215 virtual void SAL_CALL
setDestArea( const css::table::CellRangeAddress
& aDestArea
) override
;
218 virtual OUString SAL_CALL
getImplementationName() override
;
219 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
220 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
223 class ScAreaLinksObj final
: public cppu::WeakImplHelper
<
224 css::sheet::XAreaLinks
,
225 css::container::XEnumerationAccess
,
226 css::lang::XServiceInfo
>,
230 ScDocShell
* pDocShell
;
232 rtl::Reference
<ScAreaLinkObj
> GetObjectByIndex_Impl(sal_Int32 nIndex
);
235 ScAreaLinksObj(ScDocShell
* pDocSh
);
236 virtual ~ScAreaLinksObj() override
;
238 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) override
;
241 virtual void SAL_CALL
insertAtPosition( const css::table::CellAddress
& aDestPos
,
242 const OUString
& aFileName
,
243 const OUString
& aSourceArea
,
244 const OUString
& aFilter
,
245 const OUString
& aFilterOptions
) override
;
246 virtual void SAL_CALL
removeByIndex( sal_Int32 nIndex
) override
;
249 virtual sal_Int32 SAL_CALL
getCount() override
;
250 virtual css::uno::Any SAL_CALL
getByIndex( sal_Int32 Index
) override
;
252 // XEnumerationAccess
253 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
254 createEnumeration() override
;
257 virtual css::uno::Type SAL_CALL
getElementType() override
;
258 virtual sal_Bool SAL_CALL
hasElements() override
;
261 virtual OUString SAL_CALL
getImplementationName() override
;
262 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
263 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
266 //! order of XNamed and DDELink changed to avoid "duplicate comdat" symbols
268 class ScDDELinkObj final
: public cppu::WeakImplHelper
<
269 css::sheet::XDDELink
,
270 css::container::XNamed
,
271 css::util::XRefreshable
,
272 css::sheet::XDDELinkResults
,
273 css::lang::XServiceInfo
>,
277 ScDocShell
* pDocShell
;
281 XRefreshListenerArr_Impl aRefreshListeners
;
283 void Refreshed_Impl();
286 ScDDELinkObj(ScDocShell
* pDocSh
, const OUString
& rA
,
287 const OUString
& rT
, const OUString
& rI
);
288 virtual ~ScDDELinkObj() override
;
290 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) override
;
293 virtual OUString SAL_CALL
getName() override
;
294 virtual void SAL_CALL
setName( const OUString
& aName
) override
;
297 virtual OUString SAL_CALL
getApplication() override
;
298 virtual OUString SAL_CALL
getTopic() override
;
299 virtual OUString SAL_CALL
getItem() override
;
302 virtual void SAL_CALL
refresh() override
;
303 virtual void SAL_CALL
addRefreshListener( const css::uno::Reference
< css::util::XRefreshListener
>& l
) override
;
304 virtual void SAL_CALL
removeRefreshListener( const css::uno::Reference
< css::util::XRefreshListener
>& l
) override
;
307 virtual css::uno::Sequence
< css::uno::Sequence
< css::uno::Any
> >
308 SAL_CALL
getResults( ) override
;
309 virtual void SAL_CALL
setResults(
310 const css::uno::Sequence
< css::uno::Sequence
< css::uno::Any
> >& aResults
) override
;
313 virtual OUString SAL_CALL
getImplementationName() override
;
314 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
315 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
318 class ScDDELinksObj final
: public cppu::WeakImplHelper
<
319 css::container::XEnumerationAccess
,
320 css::container::XIndexAccess
,
321 css::sheet::XDDELinks
,
322 css::lang::XServiceInfo
>,
326 ScDocShell
* pDocShell
;
328 rtl::Reference
<ScDDELinkObj
> GetObjectByIndex_Impl(sal_Int32 nIndex
);
329 rtl::Reference
<ScDDELinkObj
> GetObjectByName_Impl(std::u16string_view aName
);
332 ScDDELinksObj(ScDocShell
* pDocSh
);
333 virtual ~ScDDELinksObj() override
;
335 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
) override
;
338 virtual css::uno::Any SAL_CALL
getByName( const OUString
& aName
) override
;
339 virtual css::uno::Sequence
< OUString
> SAL_CALL
getElementNames() override
;
340 virtual sal_Bool SAL_CALL
hasByName( const OUString
& aName
) override
;
343 virtual sal_Int32 SAL_CALL
getCount() override
;
344 virtual css::uno::Any SAL_CALL
getByIndex( sal_Int32 Index
) override
;
346 // XEnumerationAccess
347 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
348 createEnumeration() override
;
351 virtual css::uno::Type SAL_CALL
getElementType() override
;
352 virtual sal_Bool SAL_CALL
hasElements() override
;
355 virtual css::uno::Reference
< css::sheet::XDDELink
> SAL_CALL
addDDELink(
356 const OUString
& aApplication
, const OUString
& aTopic
,
357 const OUString
& aItem
, css::sheet::DDELinkMode nMode
) override
;
360 virtual OUString SAL_CALL
getImplementationName() override
;
361 virtual sal_Bool SAL_CALL
supportsService( const OUString
& ServiceName
) override
;
362 virtual css::uno::Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
365 class ScExternalSheetCacheObj final
: public cppu::WeakImplHelper
< css::sheet::XExternalSheetCache
>
368 explicit ScExternalSheetCacheObj(ScDocShell
* pDocShell
, ScExternalRefCache::TableTypeRef
const & pTable
, size_t nIndex
);
369 virtual ~ScExternalSheetCacheObj() override
;
371 // XExternalSheetCache
372 virtual void SAL_CALL
setCellValue(
373 sal_Int32 nCol
, sal_Int32 nRow
, const css::uno::Any
& rAny
) override
;
375 virtual css::uno::Any SAL_CALL
getCellValue(sal_Int32 nCol
, sal_Int32 nRow
) override
;
377 virtual css::uno::Sequence
< sal_Int32
> SAL_CALL
getAllRows() override
;
379 virtual css::uno::Sequence
< sal_Int32
> SAL_CALL
getAllColumns(sal_Int32 nRow
) override
;
382 virtual sal_Int32 SAL_CALL
getTokenIndex() override
;
385 ScExternalSheetCacheObj(const ScExternalSheetCacheObj
&) = delete;
388 ScDocShell
* mpDocShell
;
389 ScExternalRefCache::TableTypeRef mpTable
;
393 class ScExternalDocLinkObj final
: public cppu::WeakImplHelper
< css::sheet::XExternalDocLink
>
396 ScExternalDocLinkObj(ScDocShell
* pDocShell
, ScExternalRefManager
* pRefMgr
, sal_uInt16 nFileId
);
397 virtual ~ScExternalDocLinkObj() override
;
400 virtual css::uno::Reference
< css::sheet::XExternalSheetCache
>
401 SAL_CALL
addSheetCache( const OUString
& aSheetName
, sal_Bool bDynamicCache
) override
;
404 virtual css::uno::Any SAL_CALL
getByName( const OUString
& aName
) override
;
405 virtual css::uno::Sequence
< OUString
> SAL_CALL
getElementNames() override
;
406 virtual sal_Bool SAL_CALL
hasByName( const OUString
& aName
) override
;
409 virtual sal_Int32 SAL_CALL
getCount() override
;
410 virtual css::uno::Any SAL_CALL
getByIndex( sal_Int32 nIndex
) override
;
412 // XEnumerationAccess
413 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
414 createEnumeration() override
;
417 virtual css::uno::Type SAL_CALL
getElementType() override
;
418 virtual sal_Bool SAL_CALL
hasElements() override
;
421 virtual sal_Int32 SAL_CALL
getTokenIndex() override
;
424 ScDocShell
* mpDocShell
;
425 ScExternalRefManager
* mpRefMgr
;
429 /** This is the UNO API equivalent of ScExternalRefManager. */
430 class ScExternalDocLinksObj final
: public cppu::WeakImplHelper
< css::sheet::XExternalDocLinks
>
433 ScExternalDocLinksObj(ScDocShell
* pDocShell
);
434 virtual ~ScExternalDocLinksObj() override
;
437 virtual css::uno::Reference
< css::sheet::XExternalDocLink
>
438 SAL_CALL
addDocLink( const OUString
& aDocName
) override
;
441 virtual css::uno::Any SAL_CALL
getByName( const OUString
& aName
) override
;
442 virtual css::uno::Sequence
< OUString
> SAL_CALL
getElementNames() override
;
443 virtual sal_Bool SAL_CALL
hasByName( const OUString
& aName
) override
;
446 virtual sal_Int32 SAL_CALL
getCount() override
;
447 virtual css::uno::Any SAL_CALL
getByIndex( sal_Int32 nIndex
) override
;
449 // XEnumerationAccess
450 virtual css::uno::Reference
< css::container::XEnumeration
> SAL_CALL
451 createEnumeration() override
;
454 virtual css::uno::Type SAL_CALL
getElementType() override
;
455 virtual sal_Bool SAL_CALL
hasElements() override
;
458 ScExternalDocLinksObj(const ScExternalDocLinksObj
&) = delete;
461 ScDocShell
* mpDocShell
;
462 ScExternalRefManager
* mpRefMgr
;
465 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */