1*b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*b3f79822SAndrew Rist * distributed with this work for additional information
6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance
9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*b3f79822SAndrew Rist * software distributed under the License is distributed on an
15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the
17*b3f79822SAndrew Rist * specific language governing permissions and limitations
18*b3f79822SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*b3f79822SAndrew Rist *************************************************************/
21*b3f79822SAndrew Rist
22*b3f79822SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir
29cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <sfx2/docfile.hxx>
32cdf0e10cSrcweir #include <sfx2/objsh.hxx>
33cdf0e10cSrcweir #include <unotools/textsearch.hxx>
34cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
35cdf0e10cSrcweir #include <unotools/useroptions.hxx>
36cdf0e10cSrcweir #include <tools/urlobj.hxx>
37cdf0e10cSrcweir #include <unotools/charclass.hxx>
38cdf0e10cSrcweir #include <stdlib.h>
39cdf0e10cSrcweir #include <ctype.h>
40cdf0e10cSrcweir #include <unotools/syslocale.hxx>
41cdf0e10cSrcweir
42cdf0e10cSrcweir #include "global.hxx"
43cdf0e10cSrcweir #include "rangeutl.hxx"
44cdf0e10cSrcweir #include "rechead.hxx"
45cdf0e10cSrcweir #include "compiler.hxx"
46cdf0e10cSrcweir #include "paramisc.hxx"
47cdf0e10cSrcweir
48cdf0e10cSrcweir #include "sc.hrc"
49cdf0e10cSrcweir #include "globstr.hrc"
50cdf0e10cSrcweir
51cdf0e10cSrcweir using ::std::vector;
52cdf0e10cSrcweir
53cdf0e10cSrcweir // -----------------------------------------------------------------------
54cdf0e10cSrcweir
55cdf0e10cSrcweir
56cdf0e10cSrcweir
57cdf0e10cSrcweir
58cdf0e10cSrcweir //------------------------------------------------------------------------
59cdf0e10cSrcweir // struct ScImportParam:
60cdf0e10cSrcweir
ScImportParam()61cdf0e10cSrcweir ScImportParam::ScImportParam() :
62cdf0e10cSrcweir nCol1(0),
63cdf0e10cSrcweir nRow1(0),
64cdf0e10cSrcweir nCol2(0),
65cdf0e10cSrcweir nRow2(0),
66cdf0e10cSrcweir bImport(sal_False),
67cdf0e10cSrcweir bNative(sal_False),
68cdf0e10cSrcweir bSql(sal_True),
69cdf0e10cSrcweir nType(ScDbTable)
70cdf0e10cSrcweir {
71cdf0e10cSrcweir }
72cdf0e10cSrcweir
ScImportParam(const ScImportParam & r)73cdf0e10cSrcweir ScImportParam::ScImportParam( const ScImportParam& r ) :
74cdf0e10cSrcweir nCol1 (r.nCol1),
75cdf0e10cSrcweir nRow1 (r.nRow1),
76cdf0e10cSrcweir nCol2 (r.nCol2),
77cdf0e10cSrcweir nRow2 (r.nRow2),
78cdf0e10cSrcweir bImport (r.bImport),
79cdf0e10cSrcweir aDBName (r.aDBName),
80cdf0e10cSrcweir aStatement (r.aStatement),
81cdf0e10cSrcweir bNative (r.bNative),
82cdf0e10cSrcweir bSql (r.bSql),
83cdf0e10cSrcweir nType (r.nType)
84cdf0e10cSrcweir {
85cdf0e10cSrcweir }
86cdf0e10cSrcweir
~ScImportParam()87cdf0e10cSrcweir ScImportParam::~ScImportParam()
88cdf0e10cSrcweir {
89cdf0e10cSrcweir }
90cdf0e10cSrcweir
91cdf0e10cSrcweir //UNUSED2009-05 void ScImportParam::Clear()
92cdf0e10cSrcweir //UNUSED2009-05 {
93cdf0e10cSrcweir //UNUSED2009-05 nCol1 = nCol2 = 0;
94cdf0e10cSrcweir //UNUSED2009-05 nRow1 = nRow2 = 0;
95cdf0e10cSrcweir //UNUSED2009-05 bImport = sal_False;
96cdf0e10cSrcweir //UNUSED2009-05 bNative = sal_False;
97cdf0e10cSrcweir //UNUSED2009-05 bSql = sal_True;
98cdf0e10cSrcweir //UNUSED2009-05 nType = ScDbTable;
99cdf0e10cSrcweir //UNUSED2009-05 aDBName.Erase();
100cdf0e10cSrcweir //UNUSED2009-05 aStatement.Erase();
101cdf0e10cSrcweir //UNUSED2009-05 }
102cdf0e10cSrcweir
operator =(const ScImportParam & r)103cdf0e10cSrcweir ScImportParam& ScImportParam::operator=( const ScImportParam& r )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir nCol1 = r.nCol1;
106cdf0e10cSrcweir nRow1 = r.nRow1;
107cdf0e10cSrcweir nCol2 = r.nCol2;
108cdf0e10cSrcweir nRow2 = r.nRow2;
109cdf0e10cSrcweir bImport = r.bImport;
110cdf0e10cSrcweir aDBName = r.aDBName;
111cdf0e10cSrcweir aStatement = r.aStatement;
112cdf0e10cSrcweir bNative = r.bNative;
113cdf0e10cSrcweir bSql = r.bSql;
114cdf0e10cSrcweir nType = r.nType;
115cdf0e10cSrcweir
116cdf0e10cSrcweir return *this;
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
operator ==(const ScImportParam & rOther) const119cdf0e10cSrcweir sal_Bool ScImportParam::operator==( const ScImportParam& rOther ) const
120cdf0e10cSrcweir {
121cdf0e10cSrcweir return( nCol1 == rOther.nCol1 &&
122cdf0e10cSrcweir nRow1 == rOther.nRow1 &&
123cdf0e10cSrcweir nCol2 == rOther.nCol2 &&
124cdf0e10cSrcweir nRow2 == rOther.nRow2 &&
125cdf0e10cSrcweir bImport == rOther.bImport &&
126cdf0e10cSrcweir aDBName == rOther.aDBName &&
127cdf0e10cSrcweir aStatement == rOther.aStatement &&
128cdf0e10cSrcweir bNative == rOther.bNative &&
129cdf0e10cSrcweir bSql == rOther.bSql &&
130cdf0e10cSrcweir nType == rOther.nType );
131cdf0e10cSrcweir
132cdf0e10cSrcweir //! nQuerySh und pConnection sind gleich ?
133cdf0e10cSrcweir }
134cdf0e10cSrcweir
135cdf0e10cSrcweir
136cdf0e10cSrcweir //------------------------------------------------------------------------
137cdf0e10cSrcweir // struct ScQueryParam:
138cdf0e10cSrcweir
ScQueryEntry()139cdf0e10cSrcweir ScQueryEntry::ScQueryEntry() :
140cdf0e10cSrcweir bDoQuery(sal_False),
141cdf0e10cSrcweir bQueryByString(sal_False),
142cdf0e10cSrcweir bQueryByDate(false),
143cdf0e10cSrcweir nField(0),
144cdf0e10cSrcweir eOp(SC_EQUAL),
145cdf0e10cSrcweir eConnect(SC_AND),
146cdf0e10cSrcweir pStr(new String),
147cdf0e10cSrcweir nVal(0.0),
148cdf0e10cSrcweir pSearchParam(NULL),
149cdf0e10cSrcweir pSearchText(NULL)
150cdf0e10cSrcweir {
151cdf0e10cSrcweir }
152cdf0e10cSrcweir
ScQueryEntry(const ScQueryEntry & r)153cdf0e10cSrcweir ScQueryEntry::ScQueryEntry(const ScQueryEntry& r) :
154cdf0e10cSrcweir bDoQuery(r.bDoQuery),
155cdf0e10cSrcweir bQueryByString(r.bQueryByString),
156cdf0e10cSrcweir bQueryByDate(r.bQueryByDate),
157cdf0e10cSrcweir nField(r.nField),
158cdf0e10cSrcweir eOp(r.eOp),
159cdf0e10cSrcweir eConnect(r.eConnect),
160cdf0e10cSrcweir pStr(new String(*r.pStr)),
161cdf0e10cSrcweir nVal(r.nVal),
162cdf0e10cSrcweir pSearchParam(NULL),
163cdf0e10cSrcweir pSearchText(NULL)
164cdf0e10cSrcweir {
165cdf0e10cSrcweir }
166cdf0e10cSrcweir
~ScQueryEntry()167cdf0e10cSrcweir ScQueryEntry::~ScQueryEntry()
168cdf0e10cSrcweir {
169cdf0e10cSrcweir delete pStr;
170cdf0e10cSrcweir if ( pSearchParam )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir delete pSearchParam;
173cdf0e10cSrcweir delete pSearchText;
174cdf0e10cSrcweir }
175cdf0e10cSrcweir }
176cdf0e10cSrcweir
operator =(const ScQueryEntry & r)177cdf0e10cSrcweir ScQueryEntry& ScQueryEntry::operator=( const ScQueryEntry& r )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir bDoQuery = r.bDoQuery;
180cdf0e10cSrcweir bQueryByString = r.bQueryByString;
181cdf0e10cSrcweir bQueryByDate = r.bQueryByDate;
182cdf0e10cSrcweir eOp = r.eOp;
183cdf0e10cSrcweir eConnect = r.eConnect;
184cdf0e10cSrcweir nField = r.nField;
185cdf0e10cSrcweir nVal = r.nVal;
186cdf0e10cSrcweir *pStr = *r.pStr;
187cdf0e10cSrcweir if ( pSearchParam )
188cdf0e10cSrcweir {
189cdf0e10cSrcweir delete pSearchParam;
190cdf0e10cSrcweir delete pSearchText;
191cdf0e10cSrcweir }
192cdf0e10cSrcweir pSearchParam = NULL;
193cdf0e10cSrcweir pSearchText = NULL;
194cdf0e10cSrcweir
195cdf0e10cSrcweir return *this;
196cdf0e10cSrcweir }
197cdf0e10cSrcweir
Clear()198cdf0e10cSrcweir void ScQueryEntry::Clear()
199cdf0e10cSrcweir {
200cdf0e10cSrcweir bDoQuery = sal_False;
201cdf0e10cSrcweir bQueryByString = sal_False;
202cdf0e10cSrcweir bQueryByDate = false;
203cdf0e10cSrcweir eOp = SC_EQUAL;
204cdf0e10cSrcweir eConnect = SC_AND;
205cdf0e10cSrcweir nField = 0;
206cdf0e10cSrcweir nVal = 0.0;
207cdf0e10cSrcweir pStr->Erase();
208cdf0e10cSrcweir if ( pSearchParam )
209cdf0e10cSrcweir {
210cdf0e10cSrcweir delete pSearchParam;
211cdf0e10cSrcweir delete pSearchText;
212cdf0e10cSrcweir }
213cdf0e10cSrcweir pSearchParam = NULL;
214cdf0e10cSrcweir pSearchText = NULL;
215cdf0e10cSrcweir }
216cdf0e10cSrcweir
operator ==(const ScQueryEntry & r) const217cdf0e10cSrcweir sal_Bool ScQueryEntry::operator==( const ScQueryEntry& r ) const
218cdf0e10cSrcweir {
219cdf0e10cSrcweir return bDoQuery == r.bDoQuery
220cdf0e10cSrcweir && bQueryByString == r.bQueryByString
221cdf0e10cSrcweir && bQueryByDate == r.bQueryByDate
222cdf0e10cSrcweir && eOp == r.eOp
223cdf0e10cSrcweir && eConnect == r.eConnect
224cdf0e10cSrcweir && nField == r.nField
225cdf0e10cSrcweir && nVal == r.nVal
226cdf0e10cSrcweir && *pStr == *r.pStr;
227cdf0e10cSrcweir //! pSearchParam und pSearchText nicht vergleichen
228cdf0e10cSrcweir }
229cdf0e10cSrcweir
GetSearchTextPtr(sal_Bool bCaseSens)230cdf0e10cSrcweir utl::TextSearch* ScQueryEntry::GetSearchTextPtr( sal_Bool bCaseSens )
231cdf0e10cSrcweir {
232cdf0e10cSrcweir if ( !pSearchParam )
233cdf0e10cSrcweir {
234cdf0e10cSrcweir pSearchParam = new utl::SearchParam( *pStr, utl::SearchParam::SRCH_REGEXP,
235cdf0e10cSrcweir bCaseSens, sal_False, sal_False );
236cdf0e10cSrcweir pSearchText = new utl::TextSearch( *pSearchParam, *ScGlobal::pCharClass );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir return pSearchText;
239cdf0e10cSrcweir }
240cdf0e10cSrcweir
241cdf0e10cSrcweir //------------------------------------------------------------------------
242cdf0e10cSrcweir // struct ScSubTotalParam:
243cdf0e10cSrcweir
ScSubTotalParam()244cdf0e10cSrcweir ScSubTotalParam::ScSubTotalParam()
245cdf0e10cSrcweir {
246cdf0e10cSrcweir for ( sal_uInt16 i=0; i<MAXSUBTOTAL; i++ )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir nSubTotals[i] = 0;
249cdf0e10cSrcweir pSubTotals[i] = NULL;
250cdf0e10cSrcweir pFunctions[i] = NULL;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir
253cdf0e10cSrcweir Clear();
254cdf0e10cSrcweir }
255cdf0e10cSrcweir
256cdf0e10cSrcweir //------------------------------------------------------------------------
257cdf0e10cSrcweir
ScSubTotalParam(const ScSubTotalParam & r)258cdf0e10cSrcweir ScSubTotalParam::ScSubTotalParam( const ScSubTotalParam& r ) :
259cdf0e10cSrcweir nCol1(r.nCol1),nRow1(r.nRow1),nCol2(r.nCol2),nRow2(r.nRow2),
260cdf0e10cSrcweir bRemoveOnly(r.bRemoveOnly),bReplace(r.bReplace),bPagebreak(r.bPagebreak),bCaseSens(r.bCaseSens),
261cdf0e10cSrcweir bDoSort(r.bDoSort),bAscending(r.bAscending),bUserDef(r.bUserDef),nUserIndex(r.nUserIndex),
262cdf0e10cSrcweir bIncludePattern(r.bIncludePattern)
263cdf0e10cSrcweir {
264cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
265cdf0e10cSrcweir {
266cdf0e10cSrcweir bGroupActive[i] = r.bGroupActive[i];
267cdf0e10cSrcweir nField[i] = r.nField[i];
268cdf0e10cSrcweir
269cdf0e10cSrcweir if ( (r.nSubTotals[i] > 0) && r.pSubTotals[i] && r.pFunctions[i] )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir nSubTotals[i] = r.nSubTotals[i];
272cdf0e10cSrcweir pSubTotals[i] = new SCCOL [r.nSubTotals[i]];
273cdf0e10cSrcweir pFunctions[i] = new ScSubTotalFunc [r.nSubTotals[i]];
274cdf0e10cSrcweir
275cdf0e10cSrcweir for (SCCOL j=0; j<r.nSubTotals[i]; j++)
276cdf0e10cSrcweir {
277cdf0e10cSrcweir pSubTotals[i][j] = r.pSubTotals[i][j];
278cdf0e10cSrcweir pFunctions[i][j] = r.pFunctions[i][j];
279cdf0e10cSrcweir }
280cdf0e10cSrcweir }
281cdf0e10cSrcweir else
282cdf0e10cSrcweir {
283cdf0e10cSrcweir nSubTotals[i] = 0;
284cdf0e10cSrcweir pSubTotals[i] = NULL;
285cdf0e10cSrcweir pFunctions[i] = NULL;
286cdf0e10cSrcweir }
287cdf0e10cSrcweir }
288cdf0e10cSrcweir }
289cdf0e10cSrcweir
290cdf0e10cSrcweir //------------------------------------------------------------------------
291cdf0e10cSrcweir
Clear()292cdf0e10cSrcweir void ScSubTotalParam::Clear()
293cdf0e10cSrcweir {
294cdf0e10cSrcweir nCol1=nCol2= 0;
295cdf0e10cSrcweir nRow1=nRow2 = 0;
296cdf0e10cSrcweir nUserIndex = 0;
297cdf0e10cSrcweir bPagebreak=bCaseSens=bUserDef=bIncludePattern=bRemoveOnly = sal_False;
298cdf0e10cSrcweir bAscending=bReplace=bDoSort = sal_True;
299cdf0e10cSrcweir
300cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
301cdf0e10cSrcweir {
302cdf0e10cSrcweir bGroupActive[i] = sal_False;
303cdf0e10cSrcweir nField[i] = 0;
304cdf0e10cSrcweir
305cdf0e10cSrcweir if ( (nSubTotals[i] > 0) && pSubTotals[i] && pFunctions[i] )
306cdf0e10cSrcweir {
307cdf0e10cSrcweir for ( SCCOL j=0; j<nSubTotals[i]; j++ ) {
308cdf0e10cSrcweir pSubTotals[i][j] = 0;
309cdf0e10cSrcweir pFunctions[i][j] = SUBTOTAL_FUNC_NONE;
310cdf0e10cSrcweir }
311cdf0e10cSrcweir }
312cdf0e10cSrcweir }
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
315cdf0e10cSrcweir //------------------------------------------------------------------------
316cdf0e10cSrcweir
operator =(const ScSubTotalParam & r)317cdf0e10cSrcweir ScSubTotalParam& ScSubTotalParam::operator=( const ScSubTotalParam& r )
318cdf0e10cSrcweir {
319cdf0e10cSrcweir nCol1 = r.nCol1;
320cdf0e10cSrcweir nRow1 = r.nRow1;
321cdf0e10cSrcweir nCol2 = r.nCol2;
322cdf0e10cSrcweir nRow2 = r.nRow2;
323cdf0e10cSrcweir bRemoveOnly = r.bRemoveOnly;
324cdf0e10cSrcweir bReplace = r.bReplace;
325cdf0e10cSrcweir bPagebreak = r.bPagebreak;
326cdf0e10cSrcweir bCaseSens = r.bCaseSens;
327cdf0e10cSrcweir bDoSort = r.bDoSort;
328cdf0e10cSrcweir bAscending = r.bAscending;
329cdf0e10cSrcweir bUserDef = r.bUserDef;
330cdf0e10cSrcweir nUserIndex = r.nUserIndex;
331cdf0e10cSrcweir bIncludePattern = r.bIncludePattern;
332cdf0e10cSrcweir
333cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
334cdf0e10cSrcweir {
335cdf0e10cSrcweir bGroupActive[i] = r.bGroupActive[i];
336cdf0e10cSrcweir nField[i] = r.nField[i];
337cdf0e10cSrcweir nSubTotals[i] = r.nSubTotals[i];
338cdf0e10cSrcweir
339cdf0e10cSrcweir if ( pSubTotals[i] ) delete [] pSubTotals[i];
340cdf0e10cSrcweir if ( pFunctions[i] ) delete [] pFunctions[i];
341cdf0e10cSrcweir
342cdf0e10cSrcweir if ( r.nSubTotals[i] > 0 )
343cdf0e10cSrcweir {
344cdf0e10cSrcweir pSubTotals[i] = new SCCOL [r.nSubTotals[i]];
345cdf0e10cSrcweir pFunctions[i] = new ScSubTotalFunc [r.nSubTotals[i]];
346cdf0e10cSrcweir
347cdf0e10cSrcweir for (SCCOL j=0; j<r.nSubTotals[i]; j++)
348cdf0e10cSrcweir {
349cdf0e10cSrcweir pSubTotals[i][j] = r.pSubTotals[i][j];
350cdf0e10cSrcweir pFunctions[i][j] = r.pFunctions[i][j];
351cdf0e10cSrcweir }
352cdf0e10cSrcweir }
353cdf0e10cSrcweir else
354cdf0e10cSrcweir {
355cdf0e10cSrcweir nSubTotals[i] = 0;
356cdf0e10cSrcweir pSubTotals[i] = NULL;
357cdf0e10cSrcweir pFunctions[i] = NULL;
358cdf0e10cSrcweir }
359cdf0e10cSrcweir }
360cdf0e10cSrcweir
361cdf0e10cSrcweir return *this;
362cdf0e10cSrcweir }
363cdf0e10cSrcweir
364cdf0e10cSrcweir //------------------------------------------------------------------------
365cdf0e10cSrcweir
operator ==(const ScSubTotalParam & rOther) const366cdf0e10cSrcweir sal_Bool ScSubTotalParam::operator==( const ScSubTotalParam& rOther ) const
367cdf0e10cSrcweir {
368cdf0e10cSrcweir sal_Bool bEqual = (nCol1 == rOther.nCol1)
369cdf0e10cSrcweir && (nRow1 == rOther.nRow1)
370cdf0e10cSrcweir && (nCol2 == rOther.nCol2)
371cdf0e10cSrcweir && (nRow2 == rOther.nRow2)
372cdf0e10cSrcweir && (bRemoveOnly == rOther.bRemoveOnly)
373cdf0e10cSrcweir && (bReplace == rOther.bReplace)
374cdf0e10cSrcweir && (bPagebreak == rOther.bPagebreak)
375cdf0e10cSrcweir && (bDoSort == rOther.bDoSort)
376cdf0e10cSrcweir && (bCaseSens == rOther.bCaseSens)
377cdf0e10cSrcweir && (bAscending == rOther.bAscending)
378cdf0e10cSrcweir && (bUserDef == rOther.bUserDef)
379cdf0e10cSrcweir && (nUserIndex == rOther.nUserIndex)
380cdf0e10cSrcweir && (bIncludePattern== rOther.bIncludePattern);
381cdf0e10cSrcweir
382cdf0e10cSrcweir if ( bEqual )
383cdf0e10cSrcweir {
384cdf0e10cSrcweir bEqual = sal_True;
385cdf0e10cSrcweir for ( sal_uInt16 i=0; i<MAXSUBTOTAL && bEqual; i++ )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir bEqual = (bGroupActive[i] == rOther.bGroupActive[i])
388cdf0e10cSrcweir && (nField[i] == rOther.nField[i])
389cdf0e10cSrcweir && (nSubTotals[i] == rOther.nSubTotals[i]);
390cdf0e10cSrcweir
391cdf0e10cSrcweir if ( bEqual && (nSubTotals[i] > 0) )
392cdf0e10cSrcweir {
393cdf0e10cSrcweir bEqual = (pSubTotals != NULL) && (pFunctions != NULL);
394cdf0e10cSrcweir
395cdf0e10cSrcweir for (SCCOL j=0; (j<nSubTotals[i]) && bEqual; j++)
396cdf0e10cSrcweir {
397cdf0e10cSrcweir bEqual = bEqual
398cdf0e10cSrcweir && (pSubTotals[i][j] == rOther.pSubTotals[i][j])
399cdf0e10cSrcweir && (pFunctions[i][j] == rOther.pFunctions[i][j]);
400cdf0e10cSrcweir }
401cdf0e10cSrcweir }
402cdf0e10cSrcweir }
403cdf0e10cSrcweir }
404cdf0e10cSrcweir
405cdf0e10cSrcweir return bEqual;
406cdf0e10cSrcweir }
407cdf0e10cSrcweir
408cdf0e10cSrcweir //------------------------------------------------------------------------
409cdf0e10cSrcweir
SetSubTotals(sal_uInt16 nGroup,const SCCOL * ptrSubTotals,const ScSubTotalFunc * ptrFunctions,sal_uInt16 nCount)410cdf0e10cSrcweir void ScSubTotalParam::SetSubTotals( sal_uInt16 nGroup,
411cdf0e10cSrcweir const SCCOL* ptrSubTotals,
412cdf0e10cSrcweir const ScSubTotalFunc* ptrFunctions,
413cdf0e10cSrcweir sal_uInt16 nCount )
414cdf0e10cSrcweir {
415cdf0e10cSrcweir DBG_ASSERT( (nGroup <= MAXSUBTOTAL),
416cdf0e10cSrcweir "ScSubTotalParam::SetSubTotals(): nGroup > MAXSUBTOTAL!" );
417cdf0e10cSrcweir DBG_ASSERT( ptrSubTotals,
418cdf0e10cSrcweir "ScSubTotalParam::SetSubTotals(): ptrSubTotals == NULL!" );
419cdf0e10cSrcweir DBG_ASSERT( ptrFunctions,
420cdf0e10cSrcweir "ScSubTotalParam::SetSubTotals(): ptrFunctions == NULL!" );
421cdf0e10cSrcweir DBG_ASSERT( (nCount > 0),
422cdf0e10cSrcweir "ScSubTotalParam::SetSubTotals(): nCount <= 0!" );
423cdf0e10cSrcweir
424cdf0e10cSrcweir if ( ptrSubTotals && ptrFunctions && (nCount > 0) && (nGroup <= MAXSUBTOTAL) )
425cdf0e10cSrcweir {
426cdf0e10cSrcweir // 0 wird als 1 aufgefasst, sonst zum Array-Index dekrementieren
427cdf0e10cSrcweir if (nGroup != 0)
428cdf0e10cSrcweir nGroup--;
429cdf0e10cSrcweir
430cdf0e10cSrcweir delete [] pSubTotals[nGroup];
431cdf0e10cSrcweir delete [] pFunctions[nGroup];
432cdf0e10cSrcweir
433cdf0e10cSrcweir pSubTotals[nGroup] = new SCCOL [nCount];
434cdf0e10cSrcweir pFunctions[nGroup] = new ScSubTotalFunc [nCount];
435cdf0e10cSrcweir nSubTotals[nGroup] = static_cast<SCCOL>(nCount);
436cdf0e10cSrcweir
437cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nCount; i++ )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir pSubTotals[nGroup][i] = ptrSubTotals[i];
440cdf0e10cSrcweir pFunctions[nGroup][i] = ptrFunctions[i];
441cdf0e10cSrcweir }
442cdf0e10cSrcweir }
443cdf0e10cSrcweir }
444cdf0e10cSrcweir
445cdf0e10cSrcweir //------------------------------------------------------------------------
446cdf0e10cSrcweir // struct ScConsolidateParam:
447cdf0e10cSrcweir
ScConsolidateParam()448cdf0e10cSrcweir ScConsolidateParam::ScConsolidateParam() :
449cdf0e10cSrcweir ppDataAreas( NULL )
450cdf0e10cSrcweir {
451cdf0e10cSrcweir Clear();
452cdf0e10cSrcweir }
453cdf0e10cSrcweir
454cdf0e10cSrcweir //------------------------------------------------------------------------
455cdf0e10cSrcweir
ScConsolidateParam(const ScConsolidateParam & r)456cdf0e10cSrcweir ScConsolidateParam::ScConsolidateParam( const ScConsolidateParam& r ) :
457cdf0e10cSrcweir nCol(r.nCol),nRow(r.nRow),nTab(r.nTab),
458cdf0e10cSrcweir eFunction(r.eFunction),nDataAreaCount(0),
459cdf0e10cSrcweir ppDataAreas( NULL ),
460cdf0e10cSrcweir bByCol(r.bByCol),bByRow(r.bByRow),bReferenceData(r.bReferenceData)
461cdf0e10cSrcweir {
462cdf0e10cSrcweir if ( r.nDataAreaCount > 0 )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir nDataAreaCount = r.nDataAreaCount;
465cdf0e10cSrcweir ppDataAreas = new ScArea*[nDataAreaCount];
466cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nDataAreaCount; i++ )
467cdf0e10cSrcweir ppDataAreas[i] = new ScArea( *(r.ppDataAreas[i]) );
468cdf0e10cSrcweir }
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
471cdf0e10cSrcweir //------------------------------------------------------------------------
472cdf0e10cSrcweir
~ScConsolidateParam()473cdf0e10cSrcweir __EXPORT ScConsolidateParam::~ScConsolidateParam()
474cdf0e10cSrcweir {
475cdf0e10cSrcweir ClearDataAreas();
476cdf0e10cSrcweir }
477cdf0e10cSrcweir
478cdf0e10cSrcweir //------------------------------------------------------------------------
479cdf0e10cSrcweir
ClearDataAreas()480cdf0e10cSrcweir void __EXPORT ScConsolidateParam::ClearDataAreas()
481cdf0e10cSrcweir {
482cdf0e10cSrcweir if ( ppDataAreas )
483cdf0e10cSrcweir {
484cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nDataAreaCount; i++ )
485cdf0e10cSrcweir delete ppDataAreas[i];
486cdf0e10cSrcweir delete [] ppDataAreas;
487cdf0e10cSrcweir ppDataAreas = NULL;
488cdf0e10cSrcweir }
489cdf0e10cSrcweir nDataAreaCount = 0;
490cdf0e10cSrcweir }
491cdf0e10cSrcweir
492cdf0e10cSrcweir //------------------------------------------------------------------------
493cdf0e10cSrcweir
Clear()494cdf0e10cSrcweir void __EXPORT ScConsolidateParam::Clear()
495cdf0e10cSrcweir {
496cdf0e10cSrcweir ClearDataAreas();
497cdf0e10cSrcweir
498cdf0e10cSrcweir nCol = 0;
499cdf0e10cSrcweir nRow = 0;
500cdf0e10cSrcweir nTab = 0;
501cdf0e10cSrcweir bByCol = bByRow = bReferenceData = sal_False;
502cdf0e10cSrcweir eFunction = SUBTOTAL_FUNC_SUM;
503cdf0e10cSrcweir }
504cdf0e10cSrcweir
505cdf0e10cSrcweir //------------------------------------------------------------------------
506cdf0e10cSrcweir
operator =(const ScConsolidateParam & r)507cdf0e10cSrcweir ScConsolidateParam& __EXPORT ScConsolidateParam::operator=( const ScConsolidateParam& r )
508cdf0e10cSrcweir {
509cdf0e10cSrcweir nCol = r.nCol;
510cdf0e10cSrcweir nRow = r.nRow;
511cdf0e10cSrcweir nTab = r.nTab;
512cdf0e10cSrcweir bByCol = r.bByCol;
513cdf0e10cSrcweir bByRow = r.bByRow;
514cdf0e10cSrcweir bReferenceData = r.bReferenceData;
515cdf0e10cSrcweir eFunction = r.eFunction;
516cdf0e10cSrcweir SetAreas( r.ppDataAreas, r.nDataAreaCount );
517cdf0e10cSrcweir
518cdf0e10cSrcweir return *this;
519cdf0e10cSrcweir }
520cdf0e10cSrcweir
521cdf0e10cSrcweir //------------------------------------------------------------------------
522cdf0e10cSrcweir
operator ==(const ScConsolidateParam & r) const523cdf0e10cSrcweir sal_Bool __EXPORT ScConsolidateParam::operator==( const ScConsolidateParam& r ) const
524cdf0e10cSrcweir {
525cdf0e10cSrcweir sal_Bool bEqual = (nCol == r.nCol)
526cdf0e10cSrcweir && (nRow == r.nRow)
527cdf0e10cSrcweir && (nTab == r.nTab)
528cdf0e10cSrcweir && (bByCol == r.bByCol)
529cdf0e10cSrcweir && (bByRow == r.bByRow)
530cdf0e10cSrcweir && (bReferenceData == r.bReferenceData)
531cdf0e10cSrcweir && (nDataAreaCount == r.nDataAreaCount)
532cdf0e10cSrcweir && (eFunction == r.eFunction);
533cdf0e10cSrcweir
534cdf0e10cSrcweir if ( nDataAreaCount == 0 )
535cdf0e10cSrcweir bEqual = bEqual && (ppDataAreas == NULL) && (r.ppDataAreas == NULL);
536cdf0e10cSrcweir else
537cdf0e10cSrcweir bEqual = bEqual && (ppDataAreas != NULL) && (r.ppDataAreas != NULL);
538cdf0e10cSrcweir
539cdf0e10cSrcweir if ( bEqual && (nDataAreaCount > 0) )
540cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nDataAreaCount && bEqual; i++ )
541cdf0e10cSrcweir bEqual = *(ppDataAreas[i]) == *(r.ppDataAreas[i]);
542cdf0e10cSrcweir
543cdf0e10cSrcweir return bEqual;
544cdf0e10cSrcweir }
545cdf0e10cSrcweir
546cdf0e10cSrcweir //------------------------------------------------------------------------
547cdf0e10cSrcweir
SetAreas(ScArea * const * ppAreas,sal_uInt16 nCount)548cdf0e10cSrcweir void __EXPORT ScConsolidateParam::SetAreas( ScArea* const* ppAreas, sal_uInt16 nCount )
549cdf0e10cSrcweir {
550cdf0e10cSrcweir ClearDataAreas();
551cdf0e10cSrcweir if ( ppAreas && nCount > 0 )
552cdf0e10cSrcweir {
553cdf0e10cSrcweir ppDataAreas = new ScArea*[nCount];
554cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nCount; i++ )
555cdf0e10cSrcweir ppDataAreas[i] = new ScArea( *(ppAreas[i]) );
556cdf0e10cSrcweir nDataAreaCount = nCount;
557cdf0e10cSrcweir }
558cdf0e10cSrcweir }
559cdf0e10cSrcweir
560cdf0e10cSrcweir //------------------------------------------------------------------------
561cdf0e10cSrcweir // struct ScSolveParam
562cdf0e10cSrcweir
ScSolveParam()563cdf0e10cSrcweir ScSolveParam::ScSolveParam()
564cdf0e10cSrcweir : pStrTargetVal( NULL )
565cdf0e10cSrcweir {
566cdf0e10cSrcweir }
567cdf0e10cSrcweir
568cdf0e10cSrcweir //------------------------------------------------------------------------
569cdf0e10cSrcweir
ScSolveParam(const ScSolveParam & r)570cdf0e10cSrcweir ScSolveParam::ScSolveParam( const ScSolveParam& r )
571cdf0e10cSrcweir : aRefFormulaCell ( r.aRefFormulaCell ),
572cdf0e10cSrcweir aRefVariableCell( r.aRefVariableCell ),
573cdf0e10cSrcweir pStrTargetVal ( r.pStrTargetVal
574cdf0e10cSrcweir ? new String(*r.pStrTargetVal)
575cdf0e10cSrcweir : NULL )
576cdf0e10cSrcweir {
577cdf0e10cSrcweir }
578cdf0e10cSrcweir
579cdf0e10cSrcweir //------------------------------------------------------------------------
580cdf0e10cSrcweir
ScSolveParam(const ScAddress & rFormulaCell,const ScAddress & rVariableCell,const String & rTargetValStr)581cdf0e10cSrcweir ScSolveParam::ScSolveParam( const ScAddress& rFormulaCell,
582cdf0e10cSrcweir const ScAddress& rVariableCell,
583cdf0e10cSrcweir const String& rTargetValStr )
584cdf0e10cSrcweir : aRefFormulaCell ( rFormulaCell ),
585cdf0e10cSrcweir aRefVariableCell( rVariableCell ),
586cdf0e10cSrcweir pStrTargetVal ( new String(rTargetValStr) )
587cdf0e10cSrcweir {
588cdf0e10cSrcweir }
589cdf0e10cSrcweir
590cdf0e10cSrcweir //------------------------------------------------------------------------
591cdf0e10cSrcweir
~ScSolveParam()592cdf0e10cSrcweir ScSolveParam::~ScSolveParam()
593cdf0e10cSrcweir {
594cdf0e10cSrcweir delete pStrTargetVal;
595cdf0e10cSrcweir }
596cdf0e10cSrcweir
597cdf0e10cSrcweir //------------------------------------------------------------------------
598cdf0e10cSrcweir
operator =(const ScSolveParam & r)599cdf0e10cSrcweir ScSolveParam& __EXPORT ScSolveParam::operator=( const ScSolveParam& r )
600cdf0e10cSrcweir {
601cdf0e10cSrcweir delete pStrTargetVal;
602cdf0e10cSrcweir
603cdf0e10cSrcweir aRefFormulaCell = r.aRefFormulaCell;
604cdf0e10cSrcweir aRefVariableCell = r.aRefVariableCell;
605cdf0e10cSrcweir pStrTargetVal = r.pStrTargetVal
606cdf0e10cSrcweir ? new String(*r.pStrTargetVal)
607cdf0e10cSrcweir : NULL;
608cdf0e10cSrcweir return *this;
609cdf0e10cSrcweir }
610cdf0e10cSrcweir
611cdf0e10cSrcweir //------------------------------------------------------------------------
612cdf0e10cSrcweir
operator ==(const ScSolveParam & r) const613cdf0e10cSrcweir sal_Bool ScSolveParam::operator==( const ScSolveParam& r ) const
614cdf0e10cSrcweir {
615cdf0e10cSrcweir sal_Bool bEqual = (aRefFormulaCell == r.aRefFormulaCell)
616cdf0e10cSrcweir && (aRefVariableCell == r.aRefVariableCell);
617cdf0e10cSrcweir
618cdf0e10cSrcweir if ( bEqual )
619cdf0e10cSrcweir {
620cdf0e10cSrcweir if ( !pStrTargetVal && !r.pStrTargetVal )
621cdf0e10cSrcweir bEqual = sal_True;
622cdf0e10cSrcweir else if ( !pStrTargetVal || !r.pStrTargetVal )
623cdf0e10cSrcweir bEqual = sal_False;
624cdf0e10cSrcweir else if ( pStrTargetVal && r.pStrTargetVal )
625cdf0e10cSrcweir bEqual = ( *pStrTargetVal == *(r.pStrTargetVal) );
626cdf0e10cSrcweir }
627cdf0e10cSrcweir
628cdf0e10cSrcweir return bEqual;
629cdf0e10cSrcweir }
630cdf0e10cSrcweir
631cdf0e10cSrcweir
632cdf0e10cSrcweir //------------------------------------------------------------------------
633cdf0e10cSrcweir // struct ScTabOpParam
634cdf0e10cSrcweir
ScTabOpParam(const ScTabOpParam & r)635cdf0e10cSrcweir ScTabOpParam::ScTabOpParam( const ScTabOpParam& r )
636cdf0e10cSrcweir : aRefFormulaCell ( r.aRefFormulaCell ),
637cdf0e10cSrcweir aRefFormulaEnd ( r.aRefFormulaEnd ),
638cdf0e10cSrcweir aRefRowCell ( r.aRefRowCell ),
639cdf0e10cSrcweir aRefColCell ( r.aRefColCell ),
640cdf0e10cSrcweir nMode ( r.nMode )
641cdf0e10cSrcweir {
642cdf0e10cSrcweir }
643cdf0e10cSrcweir
644cdf0e10cSrcweir //------------------------------------------------------------------------
645cdf0e10cSrcweir
ScTabOpParam(const ScRefAddress & rFormulaCell,const ScRefAddress & rFormulaEnd,const ScRefAddress & rRowCell,const ScRefAddress & rColCell,sal_uInt8 nMd)646cdf0e10cSrcweir ScTabOpParam::ScTabOpParam( const ScRefAddress& rFormulaCell,
647cdf0e10cSrcweir const ScRefAddress& rFormulaEnd,
648cdf0e10cSrcweir const ScRefAddress& rRowCell,
649cdf0e10cSrcweir const ScRefAddress& rColCell,
650cdf0e10cSrcweir sal_uInt8 nMd)
651cdf0e10cSrcweir : aRefFormulaCell ( rFormulaCell ),
652cdf0e10cSrcweir aRefFormulaEnd ( rFormulaEnd ),
653cdf0e10cSrcweir aRefRowCell ( rRowCell ),
654cdf0e10cSrcweir aRefColCell ( rColCell ),
655cdf0e10cSrcweir nMode ( nMd )
656cdf0e10cSrcweir {
657cdf0e10cSrcweir }
658cdf0e10cSrcweir
659cdf0e10cSrcweir //------------------------------------------------------------------------
660cdf0e10cSrcweir
operator =(const ScTabOpParam & r)661cdf0e10cSrcweir ScTabOpParam& ScTabOpParam::operator=( const ScTabOpParam& r )
662cdf0e10cSrcweir {
663cdf0e10cSrcweir aRefFormulaCell = r.aRefFormulaCell;
664cdf0e10cSrcweir aRefFormulaEnd = r.aRefFormulaEnd;
665cdf0e10cSrcweir aRefRowCell = r.aRefRowCell;
666cdf0e10cSrcweir aRefColCell = r.aRefColCell;
667cdf0e10cSrcweir nMode = r.nMode;
668cdf0e10cSrcweir return *this;
669cdf0e10cSrcweir }
670cdf0e10cSrcweir
671cdf0e10cSrcweir //------------------------------------------------------------------------
672cdf0e10cSrcweir
operator ==(const ScTabOpParam & r) const673cdf0e10cSrcweir sal_Bool __EXPORT ScTabOpParam::operator==( const ScTabOpParam& r ) const
674cdf0e10cSrcweir {
675cdf0e10cSrcweir return ( (aRefFormulaCell == r.aRefFormulaCell)
676cdf0e10cSrcweir && (aRefFormulaEnd == r.aRefFormulaEnd)
677cdf0e10cSrcweir && (aRefRowCell == r.aRefRowCell)
678cdf0e10cSrcweir && (aRefColCell == r.aRefColCell)
679cdf0e10cSrcweir && (nMode == r.nMode) );
680cdf0e10cSrcweir }
681cdf0e10cSrcweir
GetAbsDocName(const String & rFileName,SfxObjectShell * pShell)682cdf0e10cSrcweir String ScGlobal::GetAbsDocName( const String& rFileName,
683cdf0e10cSrcweir SfxObjectShell* pShell )
684cdf0e10cSrcweir {
685cdf0e10cSrcweir String aAbsName;
686cdf0e10cSrcweir if ( !pShell->HasName() )
687cdf0e10cSrcweir { // maybe relative to document path working directory
688cdf0e10cSrcweir INetURLObject aObj;
689cdf0e10cSrcweir SvtPathOptions aPathOpt;
690cdf0e10cSrcweir aObj.SetSmartURL( aPathOpt.GetWorkPath() );
691cdf0e10cSrcweir aObj.setFinalSlash(); // it IS a path
692cdf0e10cSrcweir bool bWasAbs = true;
693cdf0e10cSrcweir aAbsName = aObj.smartRel2Abs( rFileName, bWasAbs ).GetMainURL(INetURLObject::NO_DECODE);
694cdf0e10cSrcweir // returned string must be encoded because it's used directly to create SfxMedium
695cdf0e10cSrcweir }
696cdf0e10cSrcweir else
697cdf0e10cSrcweir {
698cdf0e10cSrcweir const SfxMedium* pMedium = pShell->GetMedium();
699cdf0e10cSrcweir if ( pMedium )
700cdf0e10cSrcweir {
701cdf0e10cSrcweir bool bWasAbs = true;
702cdf0e10cSrcweir aAbsName = pMedium->GetURLObject().smartRel2Abs( rFileName, bWasAbs ).GetMainURL(INetURLObject::NO_DECODE);
703cdf0e10cSrcweir }
704cdf0e10cSrcweir else
705cdf0e10cSrcweir { // This can't happen, but ...
706cdf0e10cSrcweir // just to be sure to have the same encoding
707cdf0e10cSrcweir INetURLObject aObj;
708cdf0e10cSrcweir aObj.SetSmartURL( aAbsName );
709cdf0e10cSrcweir aAbsName = aObj.GetMainURL(INetURLObject::NO_DECODE);
710cdf0e10cSrcweir }
711cdf0e10cSrcweir }
712cdf0e10cSrcweir return aAbsName;
713cdf0e10cSrcweir }
714cdf0e10cSrcweir
715cdf0e10cSrcweir
GetDocTabName(const String & rFileName,const String & rTabName)716cdf0e10cSrcweir String ScGlobal::GetDocTabName( const String& rFileName,
717cdf0e10cSrcweir const String& rTabName )
718cdf0e10cSrcweir {
719cdf0e10cSrcweir String aDocTab( '\'' );
720cdf0e10cSrcweir aDocTab += rFileName;
721cdf0e10cSrcweir xub_StrLen nPos = 1;
722cdf0e10cSrcweir while( (nPos = aDocTab.Search( '\'', nPos ))
723cdf0e10cSrcweir != STRING_NOTFOUND )
724cdf0e10cSrcweir { // escape Quotes
725cdf0e10cSrcweir aDocTab.Insert( '\\', nPos );
726cdf0e10cSrcweir nPos += 2;
727cdf0e10cSrcweir }
728cdf0e10cSrcweir aDocTab += '\'';
729cdf0e10cSrcweir aDocTab += SC_COMPILER_FILE_TAB_SEP;
730cdf0e10cSrcweir aDocTab += rTabName; // "'Doc'#Tab"
731cdf0e10cSrcweir return aDocTab;
732cdf0e10cSrcweir }
733cdf0e10cSrcweir
734