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_CONVUNO_HXX
25 #define SC_CONVUNO_HXX
26
27 #include <algorithm>
28 #include <i18npool/lang.h>
29 #include <com/sun/star/table/CellAddress.hpp>
30 #include <com/sun/star/table/CellRangeAddress.hpp>
31 #include <com/sun/star/lang/Locale.hpp>
32 #include "global.hxx"
33 #include "address.hxx"
34
35
36 class ScUnoConversion
37 {
38 public:
39 static LanguageType GetLanguage( const com::sun::star::lang::Locale& rLocale );
40 static void FillLocale( com::sun::star::lang::Locale& rLocale, LanguageType eLang );
41
42 // CellAddress -> ScAddress
43 static inline void FillScAddress(
44 ScAddress& rScAddress,
45 const ::com::sun::star::table::CellAddress& rApiAddress );
46 // ScAddress -> CellAddress
47 static inline void FillApiAddress(
48 ::com::sun::star::table::CellAddress& rApiAddress,
49 const ScAddress& rScAddress );
50 // CellRangeAddress -> ScRange
51 static inline void FillScRange(
52 ScRange& rScRange,
53 const ::com::sun::star::table::CellRangeAddress& rApiRange );
54 // ScRange -> CellRangeAddress
55 static inline void FillApiRange(
56 ::com::sun::star::table::CellRangeAddress& rApiRange,
57 const ScRange& rScRange );
58 // CellAddress -> CellRangeAddress
59 static inline void FillApiRange(
60 ::com::sun::star::table::CellRangeAddress& rApiRange,
61 const ::com::sun::star::table::CellAddress& rApiAddress );
62 // CellRangeAddress-Start -> CellAddress
63 static inline void FillApiStartAddress(
64 ::com::sun::star::table::CellAddress& rApiAddress,
65 const ::com::sun::star::table::CellRangeAddress& rApiRange );
66 // CellRangeAddress-End -> CellAddress
67 static inline void FillApiEndAddress(
68 ::com::sun::star::table::CellAddress& rApiAddress,
69 const ::com::sun::star::table::CellRangeAddress& rApiRange );
70
71 /** Returns true, if the passed ranges have at least one common cell. */
72 static inline bool Intersects(
73 const ::com::sun::star::table::CellRangeAddress& rApiARange1,
74 const ::com::sun::star::table::CellRangeAddress& rApiARange2 );
75 /** Returns true, if the passed address rApiInner is inside the passed range rApiOuter. */
76 static inline bool Contains(
77 const ::com::sun::star::table::CellRangeAddress& rApiOuter,
78 const ::com::sun::star::table::CellAddress& rApiInner );
79 /** Returns true, if the passed range rApiInner is completely inside the passed range rApiOuter. */
80 static inline bool Contains(
81 const ::com::sun::star::table::CellRangeAddress& rApiOuter,
82 const ::com::sun::star::table::CellRangeAddress& rApiInner );
83 };
84
85
FillScAddress(ScAddress & rScAddress,const::com::sun::star::table::CellAddress & rApiAddress)86 inline void ScUnoConversion::FillScAddress(
87 ScAddress& rScAddress,
88 const ::com::sun::star::table::CellAddress& rApiAddress )
89 {
90 rScAddress.Set( (SCCOL)rApiAddress.Column, (SCROW)rApiAddress.Row, (SCTAB)rApiAddress.Sheet );
91 }
92
FillApiAddress(::com::sun::star::table::CellAddress & rApiAddress,const ScAddress & rScAddress)93 inline void ScUnoConversion::FillApiAddress(
94 ::com::sun::star::table::CellAddress& rApiAddress,
95 const ScAddress& rScAddress )
96 {
97 rApiAddress.Column = rScAddress.Col();
98 rApiAddress.Row = rScAddress.Row();
99 rApiAddress.Sheet = rScAddress.Tab();
100 }
101
FillScRange(ScRange & rScRange,const::com::sun::star::table::CellRangeAddress & rApiRange)102 inline void ScUnoConversion::FillScRange(
103 ScRange& rScRange,
104 const ::com::sun::star::table::CellRangeAddress& rApiRange )
105 {
106 rScRange.aStart.Set( (SCCOL)rApiRange.StartColumn, (SCROW)rApiRange.StartRow, (SCTAB)rApiRange.Sheet );
107 rScRange.aEnd.Set( (SCCOL)rApiRange.EndColumn, (SCROW)rApiRange.EndRow, (SCTAB)rApiRange.Sheet );
108 }
109
FillApiRange(::com::sun::star::table::CellRangeAddress & rApiRange,const ScRange & rScRange)110 inline void ScUnoConversion::FillApiRange(
111 ::com::sun::star::table::CellRangeAddress& rApiRange,
112 const ScRange& rScRange )
113 {
114 rApiRange.StartColumn = rScRange.aStart.Col();
115 rApiRange.StartRow = rScRange.aStart.Row();
116 rApiRange.Sheet = rScRange.aStart.Tab();
117 rApiRange.EndColumn = rScRange.aEnd.Col();
118 rApiRange.EndRow = rScRange.aEnd.Row();
119 }
120
FillApiRange(::com::sun::star::table::CellRangeAddress & rApiRange,const::com::sun::star::table::CellAddress & rApiAddress)121 inline void ScUnoConversion::FillApiRange(
122 ::com::sun::star::table::CellRangeAddress& rApiRange,
123 const ::com::sun::star::table::CellAddress& rApiAddress )
124 {
125 rApiRange.StartColumn = rApiRange.EndColumn = rApiAddress.Column;
126 rApiRange.StartRow = rApiRange.EndRow = rApiAddress.Row;
127 rApiRange.Sheet = rApiAddress.Sheet;
128 }
129
FillApiStartAddress(::com::sun::star::table::CellAddress & rApiAddress,const::com::sun::star::table::CellRangeAddress & rApiRange)130 inline void ScUnoConversion::FillApiStartAddress(
131 ::com::sun::star::table::CellAddress& rApiAddress,
132 const ::com::sun::star::table::CellRangeAddress& rApiRange )
133 {
134 rApiAddress.Column = rApiRange.StartColumn;
135 rApiAddress.Row = rApiRange.StartRow;
136 rApiAddress.Sheet = rApiRange.Sheet;
137 }
138
FillApiEndAddress(::com::sun::star::table::CellAddress & rApiAddress,const::com::sun::star::table::CellRangeAddress & rApiRange)139 inline void ScUnoConversion::FillApiEndAddress(
140 ::com::sun::star::table::CellAddress& rApiAddress,
141 const ::com::sun::star::table::CellRangeAddress& rApiRange )
142 {
143 rApiAddress.Column = rApiRange.EndColumn;
144 rApiAddress.Row = rApiRange.EndRow;
145 rApiAddress.Sheet = rApiRange.Sheet;
146 }
147
Intersects(const::com::sun::star::table::CellRangeAddress & rApiRange1,const::com::sun::star::table::CellRangeAddress & rApiRange2)148 inline bool ScUnoConversion::Intersects(
149 const ::com::sun::star::table::CellRangeAddress& rApiRange1,
150 const ::com::sun::star::table::CellRangeAddress& rApiRange2 )
151 {
152 return (rApiRange1.Sheet == rApiRange2.Sheet) &&
153 (::std::max( rApiRange1.StartColumn, rApiRange2.StartColumn ) <= ::std::min( rApiRange1.EndColumn, rApiRange2.EndColumn )) &&
154 (::std::max( rApiRange1.StartRow, rApiRange2.StartRow ) <= ::std::min( rApiRange1.EndRow, rApiRange2.EndRow ));
155 }
156
Contains(const::com::sun::star::table::CellRangeAddress & rApiOuter,const::com::sun::star::table::CellAddress & rApiInner)157 inline bool ScUnoConversion::Contains(
158 const ::com::sun::star::table::CellRangeAddress& rApiOuter,
159 const ::com::sun::star::table::CellAddress& rApiInner )
160 {
161 return (rApiOuter.Sheet == rApiInner.Sheet) &&
162 (rApiOuter.StartColumn <= rApiInner.Column) && (rApiInner.Column <= rApiOuter.EndColumn) &&
163 (rApiOuter.StartRow <= rApiInner.Row) && (rApiInner.Row <= rApiOuter.EndRow);
164 }
165
Contains(const::com::sun::star::table::CellRangeAddress & rApiOuter,const::com::sun::star::table::CellRangeAddress & rApiInner)166 inline bool ScUnoConversion::Contains(
167 const ::com::sun::star::table::CellRangeAddress& rApiOuter,
168 const ::com::sun::star::table::CellRangeAddress& rApiInner )
169 {
170 return (rApiOuter.Sheet == rApiInner.Sheet) &&
171 (rApiOuter.StartColumn <= rApiInner.StartColumn) && (rApiInner.EndColumn <= rApiOuter.EndColumn) &&
172 (rApiOuter.StartRow <= rApiInner.StartRow) && (rApiInner.EndRow <= rApiOuter.EndRow);
173 }
174
175 //___________________________________________________________________
176
operator ==(const::com::sun::star::table::CellAddress & rApiAddress1,const::com::sun::star::table::CellAddress & rApiAddress2)177 inline sal_Bool operator==(
178 const ::com::sun::star::table::CellAddress& rApiAddress1,
179 const ::com::sun::star::table::CellAddress& rApiAddress2 )
180 {
181 return
182 (rApiAddress1.Column == rApiAddress2.Column) &&
183 (rApiAddress1.Row == rApiAddress2.Row) &&
184 (rApiAddress1.Sheet == rApiAddress2.Sheet);
185 }
186
operator !=(const::com::sun::star::table::CellAddress & rApiAddress1,const::com::sun::star::table::CellAddress & rApiAddress2)187 inline sal_Bool operator!=(
188 const ::com::sun::star::table::CellAddress& rApiAddress1,
189 const ::com::sun::star::table::CellAddress& rApiAddress2 )
190 {
191 return !(rApiAddress1 == rApiAddress2);
192 }
193
operator ==(const::com::sun::star::table::CellRangeAddress & rApiRange1,const::com::sun::star::table::CellRangeAddress & rApiRange2)194 inline sal_Bool operator==(
195 const ::com::sun::star::table::CellRangeAddress& rApiRange1,
196 const ::com::sun::star::table::CellRangeAddress& rApiRange2 )
197 {
198 return
199 (rApiRange1.StartColumn == rApiRange2.StartColumn) &&
200 (rApiRange1.StartRow == rApiRange2.StartRow) &&
201 (rApiRange1.EndColumn == rApiRange2.EndColumn) &&
202 (rApiRange1.EndRow == rApiRange2.EndRow) &&
203 (rApiRange1.Sheet == rApiRange2.Sheet);
204 }
205
operator !=(const::com::sun::star::table::CellRangeAddress & rApiRange1,const::com::sun::star::table::CellRangeAddress & rApiRange2)206 inline sal_Bool operator!=(
207 const ::com::sun::star::table::CellRangeAddress& rApiRange1,
208 const ::com::sun::star::table::CellRangeAddress& rApiRange2 )
209 {
210 return !(rApiRange1 == rApiRange2);
211 }
212
213 #endif
214
215