1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#pragma once
#include <ooo/vba/excel/XHyperlinks.hpp>
#include <rtl/ref.hxx>
#include <vbahelper/vbacollectionimpl.hxx>
class ScRangeList;
namespace detail {
class ScVbaHlinkContainer;
typedef ::rtl::Reference< ScVbaHlinkContainer > ScVbaHlinkContainerRef;
/** Base class for ScVbaHyperlinks to get an initialized ScVbaHlinkContainer
class member before the ScVbaHyperlinks_BASE base class will be constructed.
*/
struct ScVbaHlinkContainerMember
{
ScVbaHlinkContainerRef mxContainer;
explicit ScVbaHlinkContainerMember( ScVbaHlinkContainer* pContainer );
~ScVbaHlinkContainerMember();
};
} // namespace detail
class ScVbaHyperlinks;
typedef ::rtl::Reference< ScVbaHyperlinks > ScVbaHyperlinksRef;
typedef CollTestImplHelper< ov::excel::XHyperlinks > ScVbaHyperlinks_BASE;
/** Represents a collection of hyperlinks of a worksheet or of a range.
When a Hyperlinks collection object has been constructed from a VBA
Worksheet object, it will always represent the current set of all
hyperlinks existing in the sheet. Insertion and deletion of hyperlinks will
be reflected by the instance.
When a Hyperlinks collection object has been constructed from a VBA Range
object, it will represent the set of hyperlinks that have existed at its
construction time, and that are located completely inside the range(s)
represented by the Range object. Insertion and deletion of hyperlinks will
*not* be reflected by that instance. The instance will always offer all
hyperlinks it has been constructed with, even if they no longer exist.
Furthermore, the instance will not offer hyperlinks inserted later, even if
the instance itself has been used to insert the new hyperlinks.
VBA code example:
With ThisWorkbook.Worksheets(1)
Set hlinks = .Hyperlinks ' global Hyperlinks object
Set myrange = .Range("A1:C3")
Set rangelinks1 = myrange.Hyperlinks ' hyperlinks of range A1:C3
MsgBox hlinks.Count ' 0
MsgBox rangelinks1.Count ' 0
hlinks.Add .Range("A1"), "http://example.com"
' a new hyperlink has been added in cell A1
MsgBox hlinks.Count ' 1
MsgBox rangelinks1.Count ' still 0!
Set rangelinks2 = myrange.Hyperlinks ' hyperlinks of range A1:C3
MsgBox rangelinks2.Count ' 1 (constructed after Add)
rangelinks1.Add .Range("A2"), "http://example.com"
' a new hyperlink has been constructed via the rangelinks1 object
' but this addition has been done by the worksheet Hyperlinks object
MsgBox hlinks.Count ' 2
MsgBox rangelinks1.Count ' still 0!!!
MsgBox rangelinks2.Count ' still 1!!!
MsgBox myrange.Hyperlinks.Count ' 2 (constructed after Add)
End With
*/
class ScVbaHyperlinks : private detail::ScVbaHlinkContainerMember, public ScVbaHyperlinks_BASE
{
public:
/// @throws css::uno::RuntimeException
explicit ScVbaHyperlinks(
const css::uno::Reference< ov::XHelperInterface >& rxParent,
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
/// @throws css::uno::RuntimeException
explicit ScVbaHyperlinks(
const css::uno::Reference< ov::XHelperInterface >& rxParent,
const css::uno::Reference< css::uno::XComponentContext >& rxContext,
const ScVbaHyperlinksRef& rxSheetHlinks, const ScRangeList& rScRanges );
virtual ~ScVbaHyperlinks() override;
// XHyperlinks
virtual css::uno::Reference< ov::excel::XHyperlink > SAL_CALL Add(
const css::uno::Any& rAnchor, const css::uno::Any& rAddress, const css::uno::Any& rSubAddress,
const css::uno::Any& rScreenTip, const css::uno::Any& rTextToDisplay ) override;
virtual void SAL_CALL Delete() override;
// XEnumerationAccess
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override;
// XElementAccess
virtual css::uno::Type SAL_CALL getElementType() override;
// ScVbaCollectionBase
virtual css::uno::Any createCollectionObject( const css::uno::Any& rSource ) override;
// XHelperInterface
VBAHELPER_DECL_XHELPERINTERFACE
private:
ScVbaHyperlinksRef mxSheetHlinks;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|