xref: /aoo4110/main/sc/source/ui/vba/vbahyperlinks.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef SC_VBA_HYPERLINKS_HXX
25*b1cdbd2cSJim Jagielski #define SC_VBA_HYPERLINKS_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <ooo/vba/excel/XHyperlinks.hpp>
28*b1cdbd2cSJim Jagielski #include <rtl/ref.hxx>
29*b1cdbd2cSJim Jagielski #include <vbahelper/vbacollectionimpl.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski class ScRangeList;
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski // ============================================================================
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski namespace vba_detail {
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski class ScVbaHlinkContainer;
38*b1cdbd2cSJim Jagielski typedef ::rtl::Reference< ScVbaHlinkContainer > ScVbaHlinkContainerRef;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski /** Base class for ScVbaHyperlinks to get an initialized ScVbaHlinkContainer
41*b1cdbd2cSJim Jagielski     class member before the ScVbaHyperlinks_BASE base class will be constructed.
42*b1cdbd2cSJim Jagielski  */
43*b1cdbd2cSJim Jagielski struct ScVbaHlinkContainerMember
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski     ScVbaHlinkContainerRef mxContainer;
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski     explicit ScVbaHlinkContainerMember( ScVbaHlinkContainer* pContainer );
48*b1cdbd2cSJim Jagielski     ~ScVbaHlinkContainerMember();
49*b1cdbd2cSJim Jagielski };
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski } // namespace vba_detail
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski // ============================================================================
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski class ScVbaHyperlinks;
56*b1cdbd2cSJim Jagielski typedef ::rtl::Reference< ScVbaHyperlinks > ScVbaHyperlinksRef;
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski typedef CollTestImplHelper< ov::excel::XHyperlinks > ScVbaHyperlinks_BASE;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski /** Represents a collection of hyperlinks of a worksheet or of a range.
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski     When a Hyperlinks collection object has been constructed from a VBA
63*b1cdbd2cSJim Jagielski     Worksheet object, it will always represent the current set of all
64*b1cdbd2cSJim Jagielski     hyperlinks existing in the sheet. Insertion and deletion of hyperlinks will
65*b1cdbd2cSJim Jagielski     be reflected by the instance.
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski     When a Hyperlinks collection object has been constructed from a VBA Range
68*b1cdbd2cSJim Jagielski     object, it will represent the set of hyperlinks that have existed at its
69*b1cdbd2cSJim Jagielski     construction time, and that are located completely inside the range(s)
70*b1cdbd2cSJim Jagielski     represented by the Range object. Insertion and deletion of hyperlinks will
71*b1cdbd2cSJim Jagielski     *not* be reflected by that instance. The instance will always offer all
72*b1cdbd2cSJim Jagielski     hyperlinks it has been constructed with, even if they no longer exist.
73*b1cdbd2cSJim Jagielski     Furthermore, the instance will not offer hyperlinks inserted later, even if
74*b1cdbd2cSJim Jagielski     the instance itself has been used to insert the new hyperlinks.
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski     VBA code example:
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski     With ThisWorkbook.Worksheets(1)
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski         Set hlinks = .Hyperlinks                ' global Hyperlinks object
81*b1cdbd2cSJim Jagielski         Set myrange = .Range("A1:C3")
82*b1cdbd2cSJim Jagielski         Set rangelinks1 = myrange.Hyperlinks    ' hyperlinks of range A1:C3
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski         MsgBox hlinks.Count                     ' 0
85*b1cdbd2cSJim Jagielski         MsgBox rangelinks1.Count                ' 0
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski         hlinks.Add .Range("A1"), "http://example.com"
88*b1cdbd2cSJim Jagielski         ' a new hyperlink has been added in cell A1
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski         MsgBox hlinks.Count                     ' 1
91*b1cdbd2cSJim Jagielski         MsgBox rangelinks1.Count                ' still 0!
92*b1cdbd2cSJim Jagielski         Set rangelinks2 = myrange.Hyperlinks    ' hyperlinks of range A1:C3
93*b1cdbd2cSJim Jagielski         MsgBox rangelinks2.Count                ' 1 (constructed after Add)
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski         rangelinks1.Add .Range("A2"), "http://example.com"
96*b1cdbd2cSJim Jagielski         ' a new hyperlink has been constructed via the rangelinks1 object
97*b1cdbd2cSJim Jagielski         ' but this addition has been done by the worksheet Hyperlinks object
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski         MsgBox hlinks.Count                     ' 2
100*b1cdbd2cSJim Jagielski         MsgBox rangelinks1.Count                ' still 0!!!
101*b1cdbd2cSJim Jagielski         MsgBox rangelinks2.Count                ' still 1!!!
102*b1cdbd2cSJim Jagielski         MsgBox myrange.Hyperlinks.Count         ' 2 (constructed after Add)
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski     End With
105*b1cdbd2cSJim Jagielski  */
106*b1cdbd2cSJim Jagielski class ScVbaHyperlinks : private vba_detail::ScVbaHlinkContainerMember, public ScVbaHyperlinks_BASE
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski public:
109*b1cdbd2cSJim Jagielski     explicit ScVbaHyperlinks(
110*b1cdbd2cSJim Jagielski         const css::uno::Reference< ov::XHelperInterface >& rxParent,
111*b1cdbd2cSJim Jagielski         const css::uno::Reference< css::uno::XComponentContext >& rxContext ) throw (css::uno::RuntimeException);
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski     explicit ScVbaHyperlinks(
114*b1cdbd2cSJim Jagielski         const css::uno::Reference< ov::XHelperInterface >& rxParent,
115*b1cdbd2cSJim Jagielski         const css::uno::Reference< css::uno::XComponentContext >& rxContext,
116*b1cdbd2cSJim Jagielski         const ScVbaHyperlinksRef& rxSheetHlinks, const ScRangeList& rScRanges ) throw (css::uno::RuntimeException);
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski     virtual ~ScVbaHyperlinks();
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski     // XHyperlinks
121*b1cdbd2cSJim Jagielski     virtual css::uno::Reference< ov::excel::XHyperlink > SAL_CALL Add(
122*b1cdbd2cSJim Jagielski         const css::uno::Any& rAnchor, const css::uno::Any& rAddress, const css::uno::Any& rSubAddress,
123*b1cdbd2cSJim Jagielski         const css::uno::Any& rScreenTip, const css::uno::Any& rTextToDisplay )
124*b1cdbd2cSJim Jagielski             throw (css::uno::RuntimeException);
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski     virtual void SAL_CALL Delete() throw (css::uno::RuntimeException);
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     // XEnumerationAccess
129*b1cdbd2cSJim Jagielski     virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw (css::uno::RuntimeException);
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     // XElementAccess
132*b1cdbd2cSJim Jagielski     virtual css::uno::Type SAL_CALL getElementType() throw (css::uno::RuntimeException);
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski     // ScVbaCollectionBase
135*b1cdbd2cSJim Jagielski     virtual css::uno::Any createCollectionObject( const css::uno::Any& rSource );
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski     // XHelperInterface
138*b1cdbd2cSJim Jagielski     VBAHELPER_DECL_XHELPERINTERFACE
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski private:
141*b1cdbd2cSJim Jagielski     ScVbaHyperlinksRef mxSheetHlinks;
142*b1cdbd2cSJim Jagielski };
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski // ============================================================================
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski #endif
147