Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "clipparam.hxx"
30 : :
31 : : using ::std::vector;
32 : :
33 : 21 : ScClipParam::ScClipParam() :
34 : : meDirection(Unspecified),
35 : : mbCutMode(false),
36 [ + - ]: 21 : mnSourceDocID(0)
37 : : {
38 : 21 : }
39 : :
40 : 13 : ScClipParam::ScClipParam(const ScRange& rRange, bool bCutMode) :
41 : : meDirection(Unspecified),
42 : : mbCutMode(bCutMode),
43 [ + - ]: 13 : mnSourceDocID(0)
44 : : {
45 [ + - ]: 13 : maRanges.Append(rRange);
46 : 13 : }
47 : :
48 : 15 : ScClipParam::ScClipParam(const ScClipParam& r) :
49 : : maRanges(r.maRanges),
50 : : meDirection(r.meDirection),
51 : : mbCutMode(r.mbCutMode),
52 : : mnSourceDocID(r.mnSourceDocID),
53 [ + - ]: 15 : maProtectedChartRangesVector(r.maProtectedChartRangesVector)
54 : : {
55 : 15 : }
56 : :
57 : 21 : bool ScClipParam::isMultiRange() const
58 : : {
59 : 21 : return maRanges.size() > 1;
60 : : }
61 : :
62 : 0 : SCCOL ScClipParam::getPasteColSize()
63 : : {
64 [ # # ]: 0 : if (maRanges.empty())
65 : 0 : return 0;
66 : :
67 [ # # # ]: 0 : switch (meDirection)
68 : : {
69 : : case ScClipParam::Column:
70 : : {
71 : 0 : SCCOL nColSize = 0;
72 [ # # ]: 0 : for ( size_t i = 0, nListSize = maRanges.size(); i < nListSize; ++i )
73 : : {
74 : 0 : ScRange* p = maRanges[ i ];
75 : 0 : nColSize += p->aEnd.Col() - p->aStart.Col() + 1;
76 : : }
77 : 0 : return nColSize;
78 : : }
79 : : case ScClipParam::Row:
80 : : {
81 : : // We assume that all ranges have identical column size.
82 : 0 : const ScRange& rRange = *maRanges.front();
83 : 0 : return rRange.aEnd.Col() - rRange.aStart.Col() + 1;
84 : : }
85 : : case ScClipParam::Unspecified:
86 : : default:
87 : : ;
88 : : }
89 : 0 : return 0;
90 : : }
91 : :
92 : 0 : SCROW ScClipParam::getPasteRowSize()
93 : : {
94 [ # # ]: 0 : if (maRanges.empty())
95 : 0 : return 0;
96 : :
97 [ # # # ]: 0 : switch (meDirection)
98 : : {
99 : : case ScClipParam::Column:
100 : : {
101 : : // We assume that all ranges have identical row size.
102 : 0 : const ScRange& rRange = *maRanges.front();
103 : 0 : return rRange.aEnd.Row() - rRange.aStart.Row() + 1;
104 : : }
105 : : case ScClipParam::Row:
106 : : {
107 : 0 : SCROW nRowSize = 0;
108 [ # # ]: 0 : for ( size_t i = 0, nListSize = maRanges.size(); i < nListSize; ++i )
109 : : {
110 : 0 : ScRange* p = maRanges[ i ];
111 : 0 : nRowSize += p->aEnd.Row() - p->aStart.Row() + 1;
112 : : }
113 : 0 : return nRowSize;
114 : : }
115 : : case ScClipParam::Unspecified:
116 : : default:
117 : : ;
118 : : }
119 : 0 : return 0;
120 : : }
121 : :
122 : 57 : ScRange ScClipParam::getWholeRange() const
123 : : {
124 : 57 : ScRange aWhole;
125 : 57 : bool bFirst = true;
126 [ + + ]: 114 : for ( size_t i = 0, n = maRanges.size(); i < n; ++i )
127 : : {
128 : 57 : const ScRange* p = maRanges[i];
129 [ + - ]: 57 : if (bFirst)
130 : : {
131 : 57 : aWhole = *p;
132 : 57 : bFirst = false;
133 : 57 : continue;
134 : : }
135 : :
136 [ # # ]: 0 : if (aWhole.aStart.Col() > p->aStart.Col())
137 : 0 : aWhole.aStart.SetCol(p->aStart.Col());
138 : :
139 [ # # ]: 0 : if (aWhole.aStart.Row() > p->aStart.Row())
140 : 0 : aWhole.aStart.SetRow(p->aStart.Row());
141 : :
142 [ # # ]: 0 : if (aWhole.aEnd.Col() < p->aEnd.Col())
143 : 0 : aWhole.aEnd.SetCol(p->aEnd.Col());
144 : :
145 [ # # ]: 0 : if (aWhole.aEnd.Row() < p->aEnd.Row())
146 : 0 : aWhole.aEnd.SetRow(p->aEnd.Row());
147 : : }
148 : 57 : return aWhole;
149 : : }
150 : :
151 : 0 : void ScClipParam::transpose()
152 : : {
153 [ # # # ]: 0 : switch (meDirection)
154 : : {
155 : : case Column:
156 : 0 : meDirection = ScClipParam::Row;
157 : 0 : break;
158 : : case Row:
159 : 0 : meDirection = ScClipParam::Column;
160 : 0 : break;
161 : : case Unspecified:
162 : : default:
163 : : ;
164 : : }
165 : :
166 [ # # ]: 0 : ScRangeList aNewRanges;
167 [ # # ][ # # ]: 0 : if (!maRanges.empty())
168 : : {
169 [ # # ]: 0 : ScRange* p = maRanges.front();
170 : 0 : SCCOL nColOrigin = p->aStart.Col();
171 : 0 : SCROW nRowOrigin = p->aStart.Row();
172 : :
173 [ # # ][ # # ]: 0 : for ( size_t i = 0, n = maRanges.size(); i < n; ++i )
174 : : {
175 [ # # ]: 0 : p = maRanges[ i ];
176 : 0 : SCCOL nColDelta = p->aStart.Col() - nColOrigin;
177 : 0 : SCROW nRowDelta = p->aStart.Row() - nRowOrigin;
178 : 0 : SCCOL nCol1 = 0;
179 : 0 : SCCOL nCol2 = static_cast<SCCOL>(p->aEnd.Row() - p->aStart.Row());
180 : 0 : SCROW nRow1 = 0;
181 : 0 : SCROW nRow2 = static_cast<SCROW>(p->aEnd.Col() - p->aStart.Col());
182 : 0 : nCol1 += static_cast<SCCOL>(nRowDelta);
183 : 0 : nCol2 += static_cast<SCCOL>(nRowDelta);
184 : 0 : nRow1 += static_cast<SCROW>(nColDelta);
185 : 0 : nRow2 += static_cast<SCROW>(nColDelta);
186 [ # # ][ # # ]: 0 : aNewRanges.push_back( new ScRange(nCol1, nRow1, p->aStart.Tab(), nCol2, nRow2, p->aStart.Tab() ) );
187 : : }
188 : : }
189 [ # # ][ # # ]: 0 : maRanges = aNewRanges;
190 : 0 : }
191 : :
192 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|