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 // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
30*b1cdbd2cSJim Jagielski #include <svl/smplhint.hxx>
31*b1cdbd2cSJim Jagielski #include <svl/zforlist.hxx>
32*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XBitmap.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/util/SortField.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/table/TableSortField.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/table/TableOrientation.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellRangeAddress.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/DataImportMode.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/FilterOperator2.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/TableFilterField2.hpp>
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski #include "datauno.hxx"
45*b1cdbd2cSJim Jagielski #include "dapiuno.hxx"
46*b1cdbd2cSJim Jagielski #include "cellsuno.hxx"
47*b1cdbd2cSJim Jagielski #include "miscuno.hxx"
48*b1cdbd2cSJim Jagielski #include "targuno.hxx"
49*b1cdbd2cSJim Jagielski #include "rangeutl.hxx"
50*b1cdbd2cSJim Jagielski #include "dbcolect.hxx"
51*b1cdbd2cSJim Jagielski #include "docsh.hxx"
52*b1cdbd2cSJim Jagielski #include "dbdocfun.hxx"
53*b1cdbd2cSJim Jagielski #include "unoguard.hxx"
54*b1cdbd2cSJim Jagielski #include "unonames.hxx"
55*b1cdbd2cSJim Jagielski #include "globstr.hrc"
56*b1cdbd2cSJim Jagielski #ifndef SC_CONVUNO_HXX
57*b1cdbd2cSJim Jagielski #include "convuno.hxx"
58*b1cdbd2cSJim Jagielski #include "hints.hxx"
59*b1cdbd2cSJim Jagielski #endif
60*b1cdbd2cSJim Jagielski #include "attrib.hxx"
61*b1cdbd2cSJim Jagielski #include "dpshttab.hxx"
62*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
63*b1cdbd2cSJim Jagielski #include <svx/dataaccessdescriptor.hxx>
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski using namespace com::sun::star;
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski SV_IMPL_PTRARR( XDBRefreshListenerArr_Impl, XDBRefreshListenerPtr );
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski // alles ohne Which-ID, Map nur fuer PropertySetInfo
72*b1cdbd2cSJim Jagielski
lcl_GetSubTotalPropertyMap()73*b1cdbd2cSJim Jagielski const SfxItemPropertyMapEntry* lcl_GetSubTotalPropertyMap()
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski // some old property names are for 5.2 compatibility
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski static SfxItemPropertyMapEntry aSubTotalPropertyMap_Impl[] =
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_BINDFMT), 0, &getBooleanCppuType(), 0, 0},
80*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_CASE), 0, &getBooleanCppuType(), 0, 0},
81*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ENABSORT), 0, &getBooleanCppuType(), 0, 0},
82*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ENUSLIST), 0, &getBooleanCppuType(), 0, 0},
83*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_FORMATS), 0, &getBooleanCppuType(), 0, 0},
84*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_INSBRK), 0, &getBooleanCppuType(), 0, 0},
85*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ISCASE), 0, &getBooleanCppuType(), 0, 0},
86*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_MAXFLD), 0, &getCppuType((sal_Int32*)0), beans::PropertyAttribute::READONLY, 0},
87*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_SORTASC), 0, &getBooleanCppuType(), 0, 0},
88*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ULIST), 0, &getBooleanCppuType(), 0, 0},
89*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_UINDEX), 0, &getCppuType((sal_Int32*)0), 0, 0},
90*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_USINDEX), 0, &getCppuType((sal_Int32*)0), 0, 0},
91*b1cdbd2cSJim Jagielski {0,0,0,0,0,0}
92*b1cdbd2cSJim Jagielski };
93*b1cdbd2cSJim Jagielski return aSubTotalPropertyMap_Impl;
94*b1cdbd2cSJim Jagielski }
95*b1cdbd2cSJim Jagielski
lcl_GetFilterPropertyMap()96*b1cdbd2cSJim Jagielski const SfxItemPropertyMapEntry* lcl_GetFilterPropertyMap()
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski static SfxItemPropertyMapEntry aFilterPropertyMap_Impl[] =
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_CONTHDR), 0, &getBooleanCppuType(), 0, 0},
101*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_COPYOUT), 0, &getBooleanCppuType(), 0, 0},
102*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ISCASE), 0, &getBooleanCppuType(), 0, 0},
103*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_MAXFLD), 0, &getCppuType((sal_Int32*)0), beans::PropertyAttribute::READONLY, 0},
104*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ORIENT), 0, &getCppuType((table::TableOrientation*)0), 0, 0},
105*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_OUTPOS), 0, &getCppuType((table::CellAddress*)0), 0, 0},
106*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_SAVEOUT), 0, &getBooleanCppuType(), 0, 0},
107*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_SKIPDUP), 0, &getBooleanCppuType(), 0, 0},
108*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_USEREGEX), 0, &getBooleanCppuType(), 0, 0},
109*b1cdbd2cSJim Jagielski {0,0,0,0,0,0}
110*b1cdbd2cSJim Jagielski };
111*b1cdbd2cSJim Jagielski return aFilterPropertyMap_Impl;
112*b1cdbd2cSJim Jagielski }
113*b1cdbd2cSJim Jagielski
lcl_GetDBRangePropertyMap()114*b1cdbd2cSJim Jagielski const SfxItemPropertyMapEntry* lcl_GetDBRangePropertyMap()
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski static SfxItemPropertyMapEntry aDBRangePropertyMap_Impl[] =
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_AUTOFLT), 0, &getBooleanCppuType(), 0, 0},
119*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_FLTCRT), 0, &getCppuType((table::CellRangeAddress*)0), 0, 0},
120*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_FROMSELECT),0, &getBooleanCppuType(), 0, 0},
121*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_ISUSER), 0, &getBooleanCppuType(), beans::PropertyAttribute::READONLY, 0 },
122*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_KEEPFORM), 0, &getBooleanCppuType(), 0, 0},
123*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), 0, &getCppuType((uno::Reference<awt::XBitmap>*)0), beans::PropertyAttribute::READONLY, 0 },
124*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), 0, &getCppuType((rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 },
125*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_MOVCELLS), 0, &getBooleanCppuType(), 0, 0},
126*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_REFPERIOD), 0, &getCppuType((sal_Int32*)0), 0, 0},
127*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_STRIPDAT), 0, &getBooleanCppuType(), 0, 0},
128*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_TOKENINDEX),0, &getCppuType((sal_Int32*)0), beans::PropertyAttribute::READONLY, 0 },
129*b1cdbd2cSJim Jagielski {MAP_CHAR_LEN(SC_UNONAME_USEFLTCRT),0, &getBooleanCppuType(), 0, 0},
130*b1cdbd2cSJim Jagielski {0,0,0,0,0,0}
131*b1cdbd2cSJim Jagielski };
132*b1cdbd2cSJim Jagielski return aDBRangePropertyMap_Impl;
133*b1cdbd2cSJim Jagielski }
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski
136*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski #define SCDATABASERANGEOBJ_SERVICE "com.sun.star.sheet.DatabaseRange"
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScConsolidationDescriptor, "ScConsolidationDescriptor", "com.sun.star.sheet.ConsolidationDescriptor" )
141*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScDatabaseRangesObj, "ScDatabaseRangesObj", "com.sun.star.sheet.DatabaseRanges" )
142*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScFilterDescriptorBase, "ScFilterDescriptorBase", "com.sun.star.sheet.SheetFilterDescriptor" )
143*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScSubTotalDescriptorBase, "ScSubTotalDescriptorBase", "com.sun.star.sheet.SubTotalDescriptor" )
144*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScSubTotalFieldObj, "ScSubTotalFieldObj", "com.sun.star.sheet.SubTotalField" )
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski // static
GeneralToSubTotal(sheet::GeneralFunction eSummary)150*b1cdbd2cSJim Jagielski ScSubTotalFunc ScDataUnoConversion::GeneralToSubTotal( sheet::GeneralFunction eSummary )
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski ScSubTotalFunc eSubTotal;
153*b1cdbd2cSJim Jagielski switch (eSummary)
154*b1cdbd2cSJim Jagielski {
155*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_NONE: eSubTotal = SUBTOTAL_FUNC_NONE; break;
156*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_SUM: eSubTotal = SUBTOTAL_FUNC_SUM; break;
157*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_COUNT: eSubTotal = SUBTOTAL_FUNC_CNT2; break;
158*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_AVERAGE: eSubTotal = SUBTOTAL_FUNC_AVE; break;
159*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_MAX: eSubTotal = SUBTOTAL_FUNC_MAX; break;
160*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_MIN: eSubTotal = SUBTOTAL_FUNC_MIN; break;
161*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_PRODUCT: eSubTotal = SUBTOTAL_FUNC_PROD; break;
162*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_COUNTNUMS: eSubTotal = SUBTOTAL_FUNC_CNT; break;
163*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_STDEV: eSubTotal = SUBTOTAL_FUNC_STD; break;
164*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_STDEVP: eSubTotal = SUBTOTAL_FUNC_STDP; break;
165*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_VAR: eSubTotal = SUBTOTAL_FUNC_VAR; break;
166*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_VARP: eSubTotal = SUBTOTAL_FUNC_VARP; break;
167*b1cdbd2cSJim Jagielski case sheet::GeneralFunction_AUTO:
168*b1cdbd2cSJim Jagielski default:
169*b1cdbd2cSJim Jagielski DBG_ERROR("GeneralToSubTotal: falscher enum");
170*b1cdbd2cSJim Jagielski eSubTotal = SUBTOTAL_FUNC_NONE;
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski return eSubTotal;
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski // static
SubTotalToGeneral(ScSubTotalFunc eSubTotal)176*b1cdbd2cSJim Jagielski sheet::GeneralFunction ScDataUnoConversion::SubTotalToGeneral( ScSubTotalFunc eSubTotal )
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski sheet::GeneralFunction eGeneral;
179*b1cdbd2cSJim Jagielski switch (eSubTotal)
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_NONE: eGeneral = sheet::GeneralFunction_NONE; break;
182*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_AVE: eGeneral = sheet::GeneralFunction_AVERAGE; break;
183*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_CNT: eGeneral = sheet::GeneralFunction_COUNTNUMS; break;
184*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_CNT2: eGeneral = sheet::GeneralFunction_COUNT; break;
185*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_MAX: eGeneral = sheet::GeneralFunction_MAX; break;
186*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_MIN: eGeneral = sheet::GeneralFunction_MIN; break;
187*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_PROD: eGeneral = sheet::GeneralFunction_PRODUCT; break;
188*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_STD: eGeneral = sheet::GeneralFunction_STDEV; break;
189*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_STDP: eGeneral = sheet::GeneralFunction_STDEVP; break;
190*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_SUM: eGeneral = sheet::GeneralFunction_SUM; break;
191*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_VAR: eGeneral = sheet::GeneralFunction_VAR; break;
192*b1cdbd2cSJim Jagielski case SUBTOTAL_FUNC_VARP: eGeneral = sheet::GeneralFunction_VARP; break;
193*b1cdbd2cSJim Jagielski default:
194*b1cdbd2cSJim Jagielski DBG_ERROR("SubTotalToGeneral: falscher enum");
195*b1cdbd2cSJim Jagielski eGeneral = sheet::GeneralFunction_NONE;
196*b1cdbd2cSJim Jagielski break;
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski return eGeneral;
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski
201*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski // ScImportDescriptor: alles static
204*b1cdbd2cSJim Jagielski
GetPropertyCount()205*b1cdbd2cSJim Jagielski long ScImportDescriptor::GetPropertyCount()
206*b1cdbd2cSJim Jagielski {
207*b1cdbd2cSJim Jagielski return 4;
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski
FillProperties(uno::Sequence<beans::PropertyValue> & rSeq,const ScImportParam & rParam)210*b1cdbd2cSJim Jagielski void ScImportDescriptor::FillProperties( uno::Sequence<beans::PropertyValue>& rSeq, const ScImportParam& rParam )
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski DBG_ASSERT( rSeq.getLength() == GetPropertyCount(), "falscher Count" );
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski beans::PropertyValue* pArray = rSeq.getArray();
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski sheet::DataImportMode eMode = sheet::DataImportMode_NONE;
217*b1cdbd2cSJim Jagielski if ( rParam.bImport )
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski if ( rParam.bSql )
220*b1cdbd2cSJim Jagielski eMode = sheet::DataImportMode_SQL;
221*b1cdbd2cSJim Jagielski else if ( rParam.nType == ScDbQuery )
222*b1cdbd2cSJim Jagielski eMode = sheet::DataImportMode_QUERY;
223*b1cdbd2cSJim Jagielski else
224*b1cdbd2cSJim Jagielski eMode = sheet::DataImportMode_TABLE; // Type ist immer ScDbQuery oder ScDbTable
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski ::svx::ODataAccessDescriptor aDescriptor;
228*b1cdbd2cSJim Jagielski aDescriptor.setDataSource(rParam.aDBName);
229*b1cdbd2cSJim Jagielski if (aDescriptor.has( svx::daDataSource ))
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_DBNAME );
232*b1cdbd2cSJim Jagielski pArray[0].Value <<= rtl::OUString( rParam.aDBName );
233*b1cdbd2cSJim Jagielski }
234*b1cdbd2cSJim Jagielski else if (aDescriptor.has( svx::daConnectionResource ))
235*b1cdbd2cSJim Jagielski {
236*b1cdbd2cSJim Jagielski pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_CONRES );
237*b1cdbd2cSJim Jagielski pArray[0].Value <<= rtl::OUString( rParam.aDBName );
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski pArray[1].Name = rtl::OUString::createFromAscii( SC_UNONAME_SRCTYPE );
241*b1cdbd2cSJim Jagielski pArray[1].Value <<= eMode;
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski pArray[2].Name = rtl::OUString::createFromAscii( SC_UNONAME_SRCOBJ );
244*b1cdbd2cSJim Jagielski pArray[2].Value <<= rtl::OUString( rParam.aStatement );
245*b1cdbd2cSJim Jagielski
246*b1cdbd2cSJim Jagielski pArray[3].Name = rtl::OUString::createFromAscii( SC_UNONAME_ISNATIVE );
247*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( pArray[3].Value, rParam.bNative );
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski
FillImportParam(ScImportParam & rParam,const uno::Sequence<beans::PropertyValue> & rSeq)250*b1cdbd2cSJim Jagielski void ScImportDescriptor::FillImportParam( ScImportParam& rParam, const uno::Sequence<beans::PropertyValue>& rSeq )
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski rtl::OUString aStrVal;
253*b1cdbd2cSJim Jagielski const beans::PropertyValue* pPropArray = rSeq.getConstArray();
254*b1cdbd2cSJim Jagielski long nPropCount = rSeq.getLength();
255*b1cdbd2cSJim Jagielski for (long i = 0; i < nPropCount; i++)
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski const beans::PropertyValue& rProp = pPropArray[i];
258*b1cdbd2cSJim Jagielski String aPropName(rProp.Name);
259*b1cdbd2cSJim Jagielski
260*b1cdbd2cSJim Jagielski if (aPropName.EqualsAscii( SC_UNONAME_ISNATIVE ))
261*b1cdbd2cSJim Jagielski rParam.bNative = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
262*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_DBNAME ))
263*b1cdbd2cSJim Jagielski {
264*b1cdbd2cSJim Jagielski if ( rProp.Value >>= aStrVal )
265*b1cdbd2cSJim Jagielski rParam.aDBName = String( aStrVal );
266*b1cdbd2cSJim Jagielski }
267*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_CONRES ))
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski if ( rProp.Value >>= aStrVal )
270*b1cdbd2cSJim Jagielski rParam.aDBName = String( aStrVal );
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_SRCOBJ ))
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski if ( rProp.Value >>= aStrVal )
275*b1cdbd2cSJim Jagielski rParam.aStatement = String( aStrVal );
276*b1cdbd2cSJim Jagielski }
277*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_SRCTYPE ))
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski //! test for correct enum type?
280*b1cdbd2cSJim Jagielski sheet::DataImportMode eMode = (sheet::DataImportMode)
281*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::GetEnumFromAny( rProp.Value );
282*b1cdbd2cSJim Jagielski switch (eMode)
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski case sheet::DataImportMode_NONE:
285*b1cdbd2cSJim Jagielski rParam.bImport = sal_False;
286*b1cdbd2cSJim Jagielski break;
287*b1cdbd2cSJim Jagielski case sheet::DataImportMode_SQL:
288*b1cdbd2cSJim Jagielski rParam.bImport = sal_True;
289*b1cdbd2cSJim Jagielski rParam.bSql = sal_True;
290*b1cdbd2cSJim Jagielski break;
291*b1cdbd2cSJim Jagielski case sheet::DataImportMode_TABLE:
292*b1cdbd2cSJim Jagielski rParam.bImport = sal_True;
293*b1cdbd2cSJim Jagielski rParam.bSql = sal_False;
294*b1cdbd2cSJim Jagielski rParam.nType = ScDbTable;
295*b1cdbd2cSJim Jagielski break;
296*b1cdbd2cSJim Jagielski case sheet::DataImportMode_QUERY:
297*b1cdbd2cSJim Jagielski rParam.bImport = sal_True;
298*b1cdbd2cSJim Jagielski rParam.bSql = sal_False;
299*b1cdbd2cSJim Jagielski rParam.nType = ScDbQuery;
300*b1cdbd2cSJim Jagielski break;
301*b1cdbd2cSJim Jagielski default:
302*b1cdbd2cSJim Jagielski DBG_ERROR("falscher Mode");
303*b1cdbd2cSJim Jagielski rParam.bImport = sal_False;
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
310*b1cdbd2cSJim Jagielski
311*b1cdbd2cSJim Jagielski // ScSortDescriptor: alles static
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski //! SortAscending muss aus der SheetSortDescriptor service-Beschreibung raus
314*b1cdbd2cSJim Jagielski
GetPropertyCount()315*b1cdbd2cSJim Jagielski long ScSortDescriptor::GetPropertyCount()
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski return 9; // TableSortDescriptor and SheetSortDescriptor
318*b1cdbd2cSJim Jagielski }
319*b1cdbd2cSJim Jagielski
FillProperties(uno::Sequence<beans::PropertyValue> & rSeq,const ScSortParam & rParam)320*b1cdbd2cSJim Jagielski void ScSortDescriptor::FillProperties( uno::Sequence<beans::PropertyValue>& rSeq, const ScSortParam& rParam )
321*b1cdbd2cSJim Jagielski {
322*b1cdbd2cSJim Jagielski DBG_ASSERT( rSeq.getLength() == GetPropertyCount(), "falscher Count" );
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski beans::PropertyValue* pArray = rSeq.getArray();
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski // Uno-Werte zusammensuchen
327*b1cdbd2cSJim Jagielski
328*b1cdbd2cSJim Jagielski table::CellAddress aOutPos;
329*b1cdbd2cSJim Jagielski aOutPos.Sheet = rParam.nDestTab;
330*b1cdbd2cSJim Jagielski aOutPos.Column = rParam.nDestCol;
331*b1cdbd2cSJim Jagielski aOutPos.Row = rParam.nDestRow;
332*b1cdbd2cSJim Jagielski
333*b1cdbd2cSJim Jagielski sal_uInt16 nSortCount = 0;
334*b1cdbd2cSJim Jagielski while ( nSortCount < MAXSORT && rParam.bDoSort[nSortCount] )
335*b1cdbd2cSJim Jagielski ++nSortCount;
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski uno::Sequence<table::TableSortField> aFields(nSortCount);
338*b1cdbd2cSJim Jagielski if (nSortCount)
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski table::TableSortField* pFieldArray = aFields.getArray();
341*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<nSortCount; i++)
342*b1cdbd2cSJim Jagielski {
343*b1cdbd2cSJim Jagielski pFieldArray[i].Field = rParam.nField[i];
344*b1cdbd2cSJim Jagielski pFieldArray[i].IsAscending = rParam.bAscending[i];
345*b1cdbd2cSJim Jagielski pFieldArray[i].FieldType = table::TableSortFieldType_AUTOMATIC; // immer Automatic
346*b1cdbd2cSJim Jagielski pFieldArray[i].IsCaseSensitive = rParam.bCaseSens;
347*b1cdbd2cSJim Jagielski pFieldArray[i].CollatorLocale = rParam.aCollatorLocale;
348*b1cdbd2cSJim Jagielski pFieldArray[i].CollatorAlgorithm = rtl::OUString( rParam.aCollatorAlgorithm );
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski }
351*b1cdbd2cSJim Jagielski
352*b1cdbd2cSJim Jagielski // Sequence fuellen
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_ISSORTCOLUMNS );
355*b1cdbd2cSJim Jagielski pArray[0].Value = ::cppu::bool2any(!rParam.bByRow);
356*b1cdbd2cSJim Jagielski
357*b1cdbd2cSJim Jagielski pArray[1].Name = rtl::OUString::createFromAscii( SC_UNONAME_CONTHDR );
358*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( pArray[1].Value, rParam.bHasHeader );
359*b1cdbd2cSJim Jagielski
360*b1cdbd2cSJim Jagielski pArray[2].Name = rtl::OUString::createFromAscii( SC_UNONAME_MAXFLD );
361*b1cdbd2cSJim Jagielski pArray[2].Value <<= (sal_Int32) MAXSORT;
362*b1cdbd2cSJim Jagielski
363*b1cdbd2cSJim Jagielski pArray[3].Name = rtl::OUString::createFromAscii( SC_UNONAME_SORTFLD );
364*b1cdbd2cSJim Jagielski pArray[3].Value <<= aFields;
365*b1cdbd2cSJim Jagielski
366*b1cdbd2cSJim Jagielski pArray[4].Name = rtl::OUString::createFromAscii( SC_UNONAME_BINDFMT );
367*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( pArray[4].Value, rParam.bIncludePattern );
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski pArray[5].Name = rtl::OUString::createFromAscii( SC_UNONAME_COPYOUT );
370*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( pArray[5].Value, !rParam.bInplace );
371*b1cdbd2cSJim Jagielski
372*b1cdbd2cSJim Jagielski pArray[6].Name = rtl::OUString::createFromAscii( SC_UNONAME_OUTPOS );
373*b1cdbd2cSJim Jagielski pArray[6].Value <<= aOutPos;
374*b1cdbd2cSJim Jagielski
375*b1cdbd2cSJim Jagielski pArray[7].Name = rtl::OUString::createFromAscii( SC_UNONAME_ISULIST );
376*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( pArray[7].Value, rParam.bUserDef );
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski pArray[8].Name = rtl::OUString::createFromAscii( SC_UNONAME_UINDEX );
379*b1cdbd2cSJim Jagielski pArray[8].Value <<= (sal_Int32) rParam.nUserIndex;
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski
FillSortParam(ScSortParam & rParam,const uno::Sequence<beans::PropertyValue> & rSeq)382*b1cdbd2cSJim Jagielski void ScSortDescriptor::FillSortParam( ScSortParam& rParam, const uno::Sequence<beans::PropertyValue>& rSeq )
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski sal_Bool bOldSortDescriptor(sal_False);
385*b1cdbd2cSJim Jagielski sal_Bool bNewSortDescriptor(sal_False);
386*b1cdbd2cSJim Jagielski const beans::PropertyValue* pPropArray = rSeq.getConstArray();
387*b1cdbd2cSJim Jagielski long nPropCount = rSeq.getLength();
388*b1cdbd2cSJim Jagielski for (long nProp = 0; nProp < nPropCount; nProp++)
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski const beans::PropertyValue& rProp = pPropArray[nProp];
391*b1cdbd2cSJim Jagielski String aPropName(rProp.Name);
392*b1cdbd2cSJim Jagielski
393*b1cdbd2cSJim Jagielski if (aPropName.EqualsAscii( SC_UNONAME_ORIENT ))
394*b1cdbd2cSJim Jagielski {
395*b1cdbd2cSJim Jagielski bOldSortDescriptor = sal_True;
396*b1cdbd2cSJim Jagielski //! test for correct enum type?
397*b1cdbd2cSJim Jagielski table::TableOrientation eOrient = (table::TableOrientation)
398*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::GetEnumFromAny( rProp.Value );
399*b1cdbd2cSJim Jagielski rParam.bByRow = ( eOrient != table::TableOrientation_COLUMNS );
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_ISSORTCOLUMNS ))
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski bNewSortDescriptor = sal_True;
404*b1cdbd2cSJim Jagielski rParam.bByRow = !::cppu::any2bool(rProp.Value);
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_CONTHDR ))
407*b1cdbd2cSJim Jagielski rParam.bHasHeader = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
408*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_MAXFLD ))
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski sal_Int32 nVal;
411*b1cdbd2cSJim Jagielski if ( (rProp.Value >>= nVal) && nVal > MAXSORT )
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski //! specify exceptions
414*b1cdbd2cSJim Jagielski //! throw lang::IllegalArgumentException();
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski }
417*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_SORTFLD ))
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski uno::Sequence<util::SortField> aSeq;
420*b1cdbd2cSJim Jagielski uno::Sequence<table::TableSortField> aNewSeq;
421*b1cdbd2cSJim Jagielski if ( rProp.Value >>= aSeq )
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski bOldSortDescriptor = sal_True;
424*b1cdbd2cSJim Jagielski sal_Int32 nCount = aSeq.getLength();
425*b1cdbd2cSJim Jagielski sal_Int32 i;
426*b1cdbd2cSJim Jagielski if ( nCount > MAXSORT )
427*b1cdbd2cSJim Jagielski {
428*b1cdbd2cSJim Jagielski DBG_ERROR("Zu viele Sortierfelder");
429*b1cdbd2cSJim Jagielski nCount = MAXSORT;
430*b1cdbd2cSJim Jagielski }
431*b1cdbd2cSJim Jagielski const util::SortField* pFieldArray = aSeq.getConstArray();
432*b1cdbd2cSJim Jagielski for (i=0; i<nCount; i++)
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski rParam.nField[i] = (SCCOLROW)pFieldArray[i].Field;
435*b1cdbd2cSJim Jagielski rParam.bAscending[i] = pFieldArray[i].SortAscending;
436*b1cdbd2cSJim Jagielski
437*b1cdbd2cSJim Jagielski // FieldType wird ignoriert
438*b1cdbd2cSJim Jagielski rParam.bDoSort[i] = sal_True;
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski for (i=nCount; i<MAXSORT; i++)
441*b1cdbd2cSJim Jagielski rParam.bDoSort[i] = sal_False;
442*b1cdbd2cSJim Jagielski }
443*b1cdbd2cSJim Jagielski else if ( rProp.Value >>= aNewSeq )
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski bNewSortDescriptor = sal_True;
446*b1cdbd2cSJim Jagielski sal_Int32 nCount = aNewSeq.getLength();
447*b1cdbd2cSJim Jagielski sal_Int32 i;
448*b1cdbd2cSJim Jagielski if ( nCount > MAXSORT )
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski DBG_ERROR("Zu viele Sortierfelder");
451*b1cdbd2cSJim Jagielski nCount = MAXSORT;
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski const table::TableSortField* pFieldArray = aNewSeq.getConstArray();
454*b1cdbd2cSJim Jagielski for (i=0; i<nCount; i++)
455*b1cdbd2cSJim Jagielski {
456*b1cdbd2cSJim Jagielski rParam.nField[i] = (SCCOLROW)pFieldArray[i].Field;
457*b1cdbd2cSJim Jagielski rParam.bAscending[i] = pFieldArray[i].IsAscending;
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski // only one is possible, sometime we should make it possible to have different for every entry
460*b1cdbd2cSJim Jagielski rParam.bCaseSens = pFieldArray[i].IsCaseSensitive;
461*b1cdbd2cSJim Jagielski rParam.aCollatorLocale = pFieldArray[i].CollatorLocale;
462*b1cdbd2cSJim Jagielski rParam.aCollatorAlgorithm = pFieldArray[i].CollatorAlgorithm;
463*b1cdbd2cSJim Jagielski
464*b1cdbd2cSJim Jagielski // FieldType wird ignoriert
465*b1cdbd2cSJim Jagielski rParam.bDoSort[i] = sal_True;
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski for (i=nCount; i<MAXSORT; i++)
468*b1cdbd2cSJim Jagielski rParam.bDoSort[i] = sal_False;
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_ISCASE ))
472*b1cdbd2cSJim Jagielski {
473*b1cdbd2cSJim Jagielski bOldSortDescriptor = sal_True;
474*b1cdbd2cSJim Jagielski rParam.bCaseSens = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_BINDFMT ))
477*b1cdbd2cSJim Jagielski rParam.bIncludePattern = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
478*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_COPYOUT ))
479*b1cdbd2cSJim Jagielski rParam.bInplace = !ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
480*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_OUTPOS ))
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski table::CellAddress aAddress;
483*b1cdbd2cSJim Jagielski if ( rProp.Value >>= aAddress )
484*b1cdbd2cSJim Jagielski {
485*b1cdbd2cSJim Jagielski rParam.nDestTab = aAddress.Sheet;
486*b1cdbd2cSJim Jagielski rParam.nDestCol = (SCCOL)aAddress.Column;
487*b1cdbd2cSJim Jagielski rParam.nDestRow = (SCROW)aAddress.Row;
488*b1cdbd2cSJim Jagielski }
489*b1cdbd2cSJim Jagielski }
490*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_ISULIST ))
491*b1cdbd2cSJim Jagielski rParam.bUserDef = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
492*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_UINDEX ))
493*b1cdbd2cSJim Jagielski {
494*b1cdbd2cSJim Jagielski sal_Int32 nVal = 0;
495*b1cdbd2cSJim Jagielski if ( rProp.Value >>= nVal )
496*b1cdbd2cSJim Jagielski rParam.nUserIndex = (sal_uInt16)nVal;
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_COLLLOC ))
499*b1cdbd2cSJim Jagielski {
500*b1cdbd2cSJim Jagielski bOldSortDescriptor = sal_True;
501*b1cdbd2cSJim Jagielski rProp.Value >>= rParam.aCollatorLocale;
502*b1cdbd2cSJim Jagielski }
503*b1cdbd2cSJim Jagielski else if (aPropName.EqualsAscii( SC_UNONAME_COLLALG ))
504*b1cdbd2cSJim Jagielski {
505*b1cdbd2cSJim Jagielski bOldSortDescriptor = sal_True;
506*b1cdbd2cSJim Jagielski rtl::OUString sStr;
507*b1cdbd2cSJim Jagielski if ( rProp.Value >>= sStr )
508*b1cdbd2cSJim Jagielski rParam.aCollatorAlgorithm = sStr;
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski }
511*b1cdbd2cSJim Jagielski }
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
514*b1cdbd2cSJim Jagielski
ScSubTotalFieldObj(ScSubTotalDescriptorBase * pDesc,sal_uInt16 nP)515*b1cdbd2cSJim Jagielski ScSubTotalFieldObj::ScSubTotalFieldObj( ScSubTotalDescriptorBase* pDesc, sal_uInt16 nP ) :
516*b1cdbd2cSJim Jagielski xRef( pDesc ), // Objekt festhalten
517*b1cdbd2cSJim Jagielski rParent( *pDesc ),
518*b1cdbd2cSJim Jagielski nPos( nP )
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski DBG_ASSERT(pDesc, "ScSubTotalFieldObj: Parent ist 0");
521*b1cdbd2cSJim Jagielski }
522*b1cdbd2cSJim Jagielski
~ScSubTotalFieldObj()523*b1cdbd2cSJim Jagielski ScSubTotalFieldObj::~ScSubTotalFieldObj()
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski
527*b1cdbd2cSJim Jagielski // XSubTotalField
528*b1cdbd2cSJim Jagielski
getGroupColumn()529*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScSubTotalFieldObj::getGroupColumn() throw(uno::RuntimeException)
530*b1cdbd2cSJim Jagielski {
531*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
532*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
533*b1cdbd2cSJim Jagielski rParent.GetData(aParam);
534*b1cdbd2cSJim Jagielski
535*b1cdbd2cSJim Jagielski return aParam.nField[nPos];
536*b1cdbd2cSJim Jagielski }
537*b1cdbd2cSJim Jagielski
setGroupColumn(sal_Int32 nGroupColumn)538*b1cdbd2cSJim Jagielski void SAL_CALL ScSubTotalFieldObj::setGroupColumn( sal_Int32 nGroupColumn ) throw(uno::RuntimeException)
539*b1cdbd2cSJim Jagielski {
540*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
541*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
542*b1cdbd2cSJim Jagielski rParent.GetData(aParam);
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski aParam.nField[nPos] = (SCCOL)nGroupColumn;
545*b1cdbd2cSJim Jagielski
546*b1cdbd2cSJim Jagielski rParent.PutData(aParam);
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski
getSubTotalColumns()549*b1cdbd2cSJim Jagielski uno::Sequence<sheet::SubTotalColumn> SAL_CALL ScSubTotalFieldObj::getSubTotalColumns()
550*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
553*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
554*b1cdbd2cSJim Jagielski rParent.GetData(aParam);
555*b1cdbd2cSJim Jagielski
556*b1cdbd2cSJim Jagielski SCCOL nCount = aParam.nSubTotals[nPos];
557*b1cdbd2cSJim Jagielski uno::Sequence<sheet::SubTotalColumn> aSeq(nCount);
558*b1cdbd2cSJim Jagielski sheet::SubTotalColumn* pAry = aSeq.getArray();
559*b1cdbd2cSJim Jagielski for (SCCOL i=0; i<nCount; i++)
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski pAry[i].Column = aParam.pSubTotals[nPos][i];
562*b1cdbd2cSJim Jagielski pAry[i].Function = ScDataUnoConversion::SubTotalToGeneral(
563*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos][i] );
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski return aSeq;
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski
setSubTotalColumns(const uno::Sequence<sheet::SubTotalColumn> & aSubTotalColumns)568*b1cdbd2cSJim Jagielski void SAL_CALL ScSubTotalFieldObj::setSubTotalColumns(
569*b1cdbd2cSJim Jagielski const uno::Sequence<sheet::SubTotalColumn>& aSubTotalColumns )
570*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
573*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
574*b1cdbd2cSJim Jagielski rParent.GetData(aParam);
575*b1cdbd2cSJim Jagielski
576*b1cdbd2cSJim Jagielski sal_uInt32 nColCount = aSubTotalColumns.getLength();
577*b1cdbd2cSJim Jagielski if ( nColCount <= sal::static_int_cast<sal_uInt32>(SCCOL_MAX) )
578*b1cdbd2cSJim Jagielski {
579*b1cdbd2cSJim Jagielski SCCOL nCount = static_cast<SCCOL>(nColCount);
580*b1cdbd2cSJim Jagielski aParam.nSubTotals[nPos] = nCount;
581*b1cdbd2cSJim Jagielski if (nCount != 0)
582*b1cdbd2cSJim Jagielski {
583*b1cdbd2cSJim Jagielski aParam.pSubTotals[nPos] = new SCCOL[nCount];
584*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos] = new ScSubTotalFunc[nCount];
585*b1cdbd2cSJim Jagielski
586*b1cdbd2cSJim Jagielski const sheet::SubTotalColumn* pAry = aSubTotalColumns.getConstArray();
587*b1cdbd2cSJim Jagielski for (SCCOL i=0; i<nCount; i++)
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski aParam.pSubTotals[nPos][i] = static_cast<SCCOL>(pAry[i].Column);
590*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos][i] =
591*b1cdbd2cSJim Jagielski ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function );
592*b1cdbd2cSJim Jagielski }
593*b1cdbd2cSJim Jagielski }
594*b1cdbd2cSJim Jagielski else
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski aParam.pSubTotals[nPos] = NULL;
597*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos] = NULL;
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski }
600*b1cdbd2cSJim Jagielski //! sonst Exception oder so? (zuviele Spalten)
601*b1cdbd2cSJim Jagielski
602*b1cdbd2cSJim Jagielski rParent.PutData(aParam);
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
606*b1cdbd2cSJim Jagielski
ScSubTotalDescriptorBase()607*b1cdbd2cSJim Jagielski ScSubTotalDescriptorBase::ScSubTotalDescriptorBase() :
608*b1cdbd2cSJim Jagielski aPropSet( lcl_GetSubTotalPropertyMap() )
609*b1cdbd2cSJim Jagielski {
610*b1cdbd2cSJim Jagielski }
611*b1cdbd2cSJim Jagielski
~ScSubTotalDescriptorBase()612*b1cdbd2cSJim Jagielski ScSubTotalDescriptorBase::~ScSubTotalDescriptorBase()
613*b1cdbd2cSJim Jagielski {
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski // GetData/PutData hier nur wegen NewInstance-Krempel implementiert...
617*b1cdbd2cSJim Jagielski
GetData(ScSubTotalParam &) const618*b1cdbd2cSJim Jagielski void ScSubTotalDescriptorBase::GetData( ScSubTotalParam& /* rParam */ ) const
619*b1cdbd2cSJim Jagielski {
620*b1cdbd2cSJim Jagielski DBG_ERROR("ScSubTotalDescriptorBase::GetData soll nicht gerufen werden");
621*b1cdbd2cSJim Jagielski }
622*b1cdbd2cSJim Jagielski
PutData(const ScSubTotalParam &)623*b1cdbd2cSJim Jagielski void ScSubTotalDescriptorBase::PutData( const ScSubTotalParam& /* rParam */ )
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski DBG_ERROR("ScSubTotalDescriptorBase::PutData soll nicht gerufen werden");
626*b1cdbd2cSJim Jagielski }
627*b1cdbd2cSJim Jagielski
628*b1cdbd2cSJim Jagielski // XSubTotalDesctiptor
629*b1cdbd2cSJim Jagielski
GetObjectByIndex_Impl(sal_uInt16 nIndex)630*b1cdbd2cSJim Jagielski ScSubTotalFieldObj* ScSubTotalDescriptorBase::GetObjectByIndex_Impl(sal_uInt16 nIndex)
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski if ( nIndex < getCount() )
633*b1cdbd2cSJim Jagielski return new ScSubTotalFieldObj( this, nIndex );
634*b1cdbd2cSJim Jagielski return NULL;
635*b1cdbd2cSJim Jagielski }
636*b1cdbd2cSJim Jagielski
clear()637*b1cdbd2cSJim Jagielski void SAL_CALL ScSubTotalDescriptorBase::clear() throw(uno::RuntimeException)
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
640*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
641*b1cdbd2cSJim Jagielski GetData(aParam);
642*b1cdbd2cSJim Jagielski
643*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
644*b1cdbd2cSJim Jagielski aParam.bGroupActive[i] = sal_False;
645*b1cdbd2cSJim Jagielski
646*b1cdbd2cSJim Jagielski //! Notify oder so fuer die Field-Objekte???
647*b1cdbd2cSJim Jagielski
648*b1cdbd2cSJim Jagielski PutData(aParam);
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski
addNew(const uno::Sequence<sheet::SubTotalColumn> & aSubTotalColumns,sal_Int32 nGroupColumn)651*b1cdbd2cSJim Jagielski void SAL_CALL ScSubTotalDescriptorBase::addNew(
652*b1cdbd2cSJim Jagielski const uno::Sequence<sheet::SubTotalColumn>& aSubTotalColumns,
653*b1cdbd2cSJim Jagielski sal_Int32 nGroupColumn ) throw(uno::RuntimeException)
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
656*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
657*b1cdbd2cSJim Jagielski GetData(aParam);
658*b1cdbd2cSJim Jagielski
659*b1cdbd2cSJim Jagielski sal_uInt16 nPos = 0;
660*b1cdbd2cSJim Jagielski while ( nPos < MAXSUBTOTAL && aParam.bGroupActive[nPos] )
661*b1cdbd2cSJim Jagielski ++nPos;
662*b1cdbd2cSJim Jagielski
663*b1cdbd2cSJim Jagielski sal_uInt32 nColCount = aSubTotalColumns.getLength();
664*b1cdbd2cSJim Jagielski
665*b1cdbd2cSJim Jagielski if ( nPos < MAXSUBTOTAL && nColCount <= sal::static_int_cast<sal_uInt32>(SCCOL_MAX) )
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski aParam.bGroupActive[nPos] = sal_True;
668*b1cdbd2cSJim Jagielski aParam.nField[nPos] = static_cast<SCCOL>(nGroupColumn);
669*b1cdbd2cSJim Jagielski
670*b1cdbd2cSJim Jagielski delete aParam.pSubTotals[nPos];
671*b1cdbd2cSJim Jagielski delete aParam.pFunctions[nPos];
672*b1cdbd2cSJim Jagielski
673*b1cdbd2cSJim Jagielski SCCOL nCount = static_cast<SCCOL>(nColCount);
674*b1cdbd2cSJim Jagielski aParam.nSubTotals[nPos] = nCount;
675*b1cdbd2cSJim Jagielski if (nCount != 0)
676*b1cdbd2cSJim Jagielski {
677*b1cdbd2cSJim Jagielski aParam.pSubTotals[nPos] = new SCCOL[nCount];
678*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos] = new ScSubTotalFunc[nCount];
679*b1cdbd2cSJim Jagielski
680*b1cdbd2cSJim Jagielski const sheet::SubTotalColumn* pAry = aSubTotalColumns.getConstArray();
681*b1cdbd2cSJim Jagielski for (SCCOL i=0; i<nCount; i++)
682*b1cdbd2cSJim Jagielski {
683*b1cdbd2cSJim Jagielski aParam.pSubTotals[nPos][i] = static_cast<SCCOL>(pAry[i].Column);
684*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos][i] =
685*b1cdbd2cSJim Jagielski ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function );
686*b1cdbd2cSJim Jagielski }
687*b1cdbd2cSJim Jagielski }
688*b1cdbd2cSJim Jagielski else
689*b1cdbd2cSJim Jagielski {
690*b1cdbd2cSJim Jagielski aParam.pSubTotals[nPos] = NULL;
691*b1cdbd2cSJim Jagielski aParam.pFunctions[nPos] = NULL;
692*b1cdbd2cSJim Jagielski }
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski else // too many fields / columns
695*b1cdbd2cSJim Jagielski throw uno::RuntimeException(); // no other exceptions specified
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski PutData(aParam);
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski
700*b1cdbd2cSJim Jagielski // Flags/Einstellungen als Properties
701*b1cdbd2cSJim Jagielski
702*b1cdbd2cSJim Jagielski // XEnumerationAccess
703*b1cdbd2cSJim Jagielski
createEnumeration()704*b1cdbd2cSJim Jagielski uno::Reference<container::XEnumeration> SAL_CALL ScSubTotalDescriptorBase::createEnumeration()
705*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
706*b1cdbd2cSJim Jagielski {
707*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
708*b1cdbd2cSJim Jagielski return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SubTotalFieldsEnumeration")));
709*b1cdbd2cSJim Jagielski }
710*b1cdbd2cSJim Jagielski
711*b1cdbd2cSJim Jagielski // XIndexAccess
712*b1cdbd2cSJim Jagielski
getCount()713*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScSubTotalDescriptorBase::getCount() throw(uno::RuntimeException)
714*b1cdbd2cSJim Jagielski {
715*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
716*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
717*b1cdbd2cSJim Jagielski GetData(aParam);
718*b1cdbd2cSJim Jagielski
719*b1cdbd2cSJim Jagielski sal_uInt16 nCount = 0;
720*b1cdbd2cSJim Jagielski while ( nCount < MAXSUBTOTAL && aParam.bGroupActive[nCount] )
721*b1cdbd2cSJim Jagielski ++nCount;
722*b1cdbd2cSJim Jagielski return nCount;
723*b1cdbd2cSJim Jagielski }
724*b1cdbd2cSJim Jagielski
getByIndex(sal_Int32 nIndex)725*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScSubTotalDescriptorBase::getByIndex( sal_Int32 nIndex )
726*b1cdbd2cSJim Jagielski throw(lang::IndexOutOfBoundsException,
727*b1cdbd2cSJim Jagielski lang::WrappedTargetException, uno::RuntimeException)
728*b1cdbd2cSJim Jagielski {
729*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
730*b1cdbd2cSJim Jagielski uno::Reference<sheet::XSubTotalField> xField(GetObjectByIndex_Impl((sal_uInt16)nIndex));
731*b1cdbd2cSJim Jagielski if (xField.is())
732*b1cdbd2cSJim Jagielski return uno::makeAny(xField);
733*b1cdbd2cSJim Jagielski else
734*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
735*b1cdbd2cSJim Jagielski // return uno::Any();
736*b1cdbd2cSJim Jagielski }
737*b1cdbd2cSJim Jagielski
getElementType()738*b1cdbd2cSJim Jagielski uno::Type SAL_CALL ScSubTotalDescriptorBase::getElementType() throw(uno::RuntimeException)
739*b1cdbd2cSJim Jagielski {
740*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
741*b1cdbd2cSJim Jagielski return getCppuType((uno::Reference<sheet::XSubTotalField>*)0);
742*b1cdbd2cSJim Jagielski }
743*b1cdbd2cSJim Jagielski
hasElements()744*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScSubTotalDescriptorBase::hasElements() throw(uno::RuntimeException)
745*b1cdbd2cSJim Jagielski {
746*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
747*b1cdbd2cSJim Jagielski return ( getCount() != 0 );
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski
750*b1cdbd2cSJim Jagielski // XPropertySet
751*b1cdbd2cSJim Jagielski
getPropertySetInfo()752*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySetInfo> SAL_CALL ScSubTotalDescriptorBase::getPropertySetInfo()
753*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
754*b1cdbd2cSJim Jagielski {
755*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
756*b1cdbd2cSJim Jagielski static uno::Reference<beans::XPropertySetInfo> aRef(
757*b1cdbd2cSJim Jagielski new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
758*b1cdbd2cSJim Jagielski return aRef;
759*b1cdbd2cSJim Jagielski }
760*b1cdbd2cSJim Jagielski
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any & aValue)761*b1cdbd2cSJim Jagielski void SAL_CALL ScSubTotalDescriptorBase::setPropertyValue(
762*b1cdbd2cSJim Jagielski const rtl::OUString& aPropertyName, const uno::Any& aValue )
763*b1cdbd2cSJim Jagielski throw(beans::UnknownPropertyException, beans::PropertyVetoException,
764*b1cdbd2cSJim Jagielski lang::IllegalArgumentException, lang::WrappedTargetException,
765*b1cdbd2cSJim Jagielski uno::RuntimeException)
766*b1cdbd2cSJim Jagielski {
767*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
768*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
769*b1cdbd2cSJim Jagielski GetData(aParam);
770*b1cdbd2cSJim Jagielski
771*b1cdbd2cSJim Jagielski String aString(aPropertyName);
772*b1cdbd2cSJim Jagielski
773*b1cdbd2cSJim Jagielski // some old property names are for 5.2 compatibility
774*b1cdbd2cSJim Jagielski
775*b1cdbd2cSJim Jagielski if (aString.EqualsAscii( SC_UNONAME_CASE ) || aString.EqualsAscii( SC_UNONAME_ISCASE ))
776*b1cdbd2cSJim Jagielski aParam.bCaseSens = ScUnoHelpFunctions::GetBoolFromAny( aValue );
777*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_FORMATS ) || aString.EqualsAscii( SC_UNONAME_BINDFMT ))
778*b1cdbd2cSJim Jagielski aParam.bIncludePattern = ScUnoHelpFunctions::GetBoolFromAny( aValue );
779*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ENABSORT ))
780*b1cdbd2cSJim Jagielski aParam.bDoSort = ScUnoHelpFunctions::GetBoolFromAny( aValue );
781*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_SORTASC ))
782*b1cdbd2cSJim Jagielski aParam.bAscending = ScUnoHelpFunctions::GetBoolFromAny( aValue );
783*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_INSBRK ))
784*b1cdbd2cSJim Jagielski aParam.bPagebreak = ScUnoHelpFunctions::GetBoolFromAny( aValue );
785*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ULIST ) || aString.EqualsAscii( SC_UNONAME_ENUSLIST ))
786*b1cdbd2cSJim Jagielski aParam.bUserDef = ScUnoHelpFunctions::GetBoolFromAny( aValue );
787*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_UINDEX ) || aString.EqualsAscii( SC_UNONAME_USINDEX ))
788*b1cdbd2cSJim Jagielski {
789*b1cdbd2cSJim Jagielski sal_Int32 nVal = 0;
790*b1cdbd2cSJim Jagielski if ( aValue >>= nVal )
791*b1cdbd2cSJim Jagielski aParam.nUserIndex = (sal_uInt16)nVal;
792*b1cdbd2cSJim Jagielski }
793*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_MAXFLD ))
794*b1cdbd2cSJim Jagielski {
795*b1cdbd2cSJim Jagielski sal_Int32 nVal = 0;
796*b1cdbd2cSJim Jagielski if ( (aValue >>= nVal) && nVal > sal::static_int_cast<sal_Int32>(MAXSUBTOTAL) )
797*b1cdbd2cSJim Jagielski {
798*b1cdbd2cSJim Jagielski throw lang::IllegalArgumentException();
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski }
801*b1cdbd2cSJim Jagielski
802*b1cdbd2cSJim Jagielski PutData(aParam);
803*b1cdbd2cSJim Jagielski }
804*b1cdbd2cSJim Jagielski
getPropertyValue(const rtl::OUString & aPropertyName)805*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScSubTotalDescriptorBase::getPropertyValue( const rtl::OUString& aPropertyName )
806*b1cdbd2cSJim Jagielski throw(beans::UnknownPropertyException, lang::WrappedTargetException,
807*b1cdbd2cSJim Jagielski uno::RuntimeException)
808*b1cdbd2cSJim Jagielski {
809*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
810*b1cdbd2cSJim Jagielski ScSubTotalParam aParam;
811*b1cdbd2cSJim Jagielski GetData(aParam);
812*b1cdbd2cSJim Jagielski
813*b1cdbd2cSJim Jagielski String aString(aPropertyName);
814*b1cdbd2cSJim Jagielski uno::Any aRet;
815*b1cdbd2cSJim Jagielski
816*b1cdbd2cSJim Jagielski // some old property names are for 5.2 compatibility
817*b1cdbd2cSJim Jagielski
818*b1cdbd2cSJim Jagielski if (aString.EqualsAscii( SC_UNONAME_CASE ) || aString.EqualsAscii( SC_UNONAME_ISCASE ))
819*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bCaseSens );
820*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_FORMATS ) || aString.EqualsAscii( SC_UNONAME_BINDFMT ))
821*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bIncludePattern );
822*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ENABSORT ))
823*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bDoSort );
824*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_SORTASC ))
825*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bAscending );
826*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_INSBRK ))
827*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bPagebreak );
828*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ULIST ) || aString.EqualsAscii( SC_UNONAME_ENUSLIST ))
829*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bUserDef );
830*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_UINDEX ) || aString.EqualsAscii( SC_UNONAME_USINDEX ))
831*b1cdbd2cSJim Jagielski aRet <<= (sal_Int32) aParam.nUserIndex;
832*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_MAXFLD ))
833*b1cdbd2cSJim Jagielski aRet <<= (sal_Int32) MAXSUBTOTAL;
834*b1cdbd2cSJim Jagielski
835*b1cdbd2cSJim Jagielski return aRet;
836*b1cdbd2cSJim Jagielski }
837*b1cdbd2cSJim Jagielski
SC_IMPL_DUMMY_PROPERTY_LISTENER(ScSubTotalDescriptorBase)838*b1cdbd2cSJim Jagielski SC_IMPL_DUMMY_PROPERTY_LISTENER( ScSubTotalDescriptorBase )
839*b1cdbd2cSJim Jagielski
840*b1cdbd2cSJim Jagielski // XUnoTunnel
841*b1cdbd2cSJim Jagielski
842*b1cdbd2cSJim Jagielski sal_Int64 SAL_CALL ScSubTotalDescriptorBase::getSomething(
843*b1cdbd2cSJim Jagielski const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException)
844*b1cdbd2cSJim Jagielski {
845*b1cdbd2cSJim Jagielski if ( rId.getLength() == 16 &&
846*b1cdbd2cSJim Jagielski 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
847*b1cdbd2cSJim Jagielski rId.getConstArray(), 16 ) )
848*b1cdbd2cSJim Jagielski {
849*b1cdbd2cSJim Jagielski return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
850*b1cdbd2cSJim Jagielski }
851*b1cdbd2cSJim Jagielski return 0;
852*b1cdbd2cSJim Jagielski }
853*b1cdbd2cSJim Jagielski
854*b1cdbd2cSJim Jagielski // static
getUnoTunnelId()855*b1cdbd2cSJim Jagielski const uno::Sequence<sal_Int8>& ScSubTotalDescriptorBase::getUnoTunnelId()
856*b1cdbd2cSJim Jagielski {
857*b1cdbd2cSJim Jagielski static uno::Sequence<sal_Int8> * pSeq = 0;
858*b1cdbd2cSJim Jagielski if( !pSeq )
859*b1cdbd2cSJim Jagielski {
860*b1cdbd2cSJim Jagielski osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
861*b1cdbd2cSJim Jagielski if( !pSeq )
862*b1cdbd2cSJim Jagielski {
863*b1cdbd2cSJim Jagielski static uno::Sequence< sal_Int8 > aSeq( 16 );
864*b1cdbd2cSJim Jagielski rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
865*b1cdbd2cSJim Jagielski pSeq = &aSeq;
866*b1cdbd2cSJim Jagielski }
867*b1cdbd2cSJim Jagielski }
868*b1cdbd2cSJim Jagielski return *pSeq;
869*b1cdbd2cSJim Jagielski }
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski // static
getImplementation(const uno::Reference<sheet::XSubTotalDescriptor> xObj)872*b1cdbd2cSJim Jagielski ScSubTotalDescriptorBase* ScSubTotalDescriptorBase::getImplementation(
873*b1cdbd2cSJim Jagielski const uno::Reference<sheet::XSubTotalDescriptor> xObj )
874*b1cdbd2cSJim Jagielski {
875*b1cdbd2cSJim Jagielski ScSubTotalDescriptorBase* pRet = NULL;
876*b1cdbd2cSJim Jagielski uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
877*b1cdbd2cSJim Jagielski if (xUT.is())
878*b1cdbd2cSJim Jagielski pRet = reinterpret_cast<ScSubTotalDescriptorBase*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
879*b1cdbd2cSJim Jagielski return pRet;
880*b1cdbd2cSJim Jagielski }
881*b1cdbd2cSJim Jagielski
882*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
883*b1cdbd2cSJim Jagielski
ScSubTotalDescriptor()884*b1cdbd2cSJim Jagielski ScSubTotalDescriptor::ScSubTotalDescriptor()
885*b1cdbd2cSJim Jagielski {
886*b1cdbd2cSJim Jagielski }
887*b1cdbd2cSJim Jagielski
~ScSubTotalDescriptor()888*b1cdbd2cSJim Jagielski ScSubTotalDescriptor::~ScSubTotalDescriptor()
889*b1cdbd2cSJim Jagielski {
890*b1cdbd2cSJim Jagielski }
891*b1cdbd2cSJim Jagielski
GetData(ScSubTotalParam & rParam) const892*b1cdbd2cSJim Jagielski void ScSubTotalDescriptor::GetData( ScSubTotalParam& rParam ) const
893*b1cdbd2cSJim Jagielski {
894*b1cdbd2cSJim Jagielski rParam = aStoredParam; // Abfrage fuer Interface
895*b1cdbd2cSJim Jagielski }
896*b1cdbd2cSJim Jagielski
PutData(const ScSubTotalParam & rParam)897*b1cdbd2cSJim Jagielski void ScSubTotalDescriptor::PutData( const ScSubTotalParam& rParam )
898*b1cdbd2cSJim Jagielski {
899*b1cdbd2cSJim Jagielski aStoredParam = rParam; // vom Interface gesetzt
900*b1cdbd2cSJim Jagielski }
901*b1cdbd2cSJim Jagielski
SetParam(const ScSubTotalParam & rNew)902*b1cdbd2cSJim Jagielski void ScSubTotalDescriptor::SetParam( const ScSubTotalParam& rNew )
903*b1cdbd2cSJim Jagielski {
904*b1cdbd2cSJim Jagielski aStoredParam = rNew; // von aussen gesetzt
905*b1cdbd2cSJim Jagielski }
906*b1cdbd2cSJim Jagielski
907*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
908*b1cdbd2cSJim Jagielski
ScRangeSubTotalDescriptor(ScDatabaseRangeObj * pPar)909*b1cdbd2cSJim Jagielski ScRangeSubTotalDescriptor::ScRangeSubTotalDescriptor(ScDatabaseRangeObj* pPar) :
910*b1cdbd2cSJim Jagielski pParent(pPar)
911*b1cdbd2cSJim Jagielski {
912*b1cdbd2cSJim Jagielski if (pParent)
913*b1cdbd2cSJim Jagielski pParent->acquire();
914*b1cdbd2cSJim Jagielski }
915*b1cdbd2cSJim Jagielski
~ScRangeSubTotalDescriptor()916*b1cdbd2cSJim Jagielski ScRangeSubTotalDescriptor::~ScRangeSubTotalDescriptor()
917*b1cdbd2cSJim Jagielski {
918*b1cdbd2cSJim Jagielski if (pParent)
919*b1cdbd2cSJim Jagielski pParent->release();
920*b1cdbd2cSJim Jagielski }
921*b1cdbd2cSJim Jagielski
GetData(ScSubTotalParam & rParam) const922*b1cdbd2cSJim Jagielski void ScRangeSubTotalDescriptor::GetData( ScSubTotalParam& rParam ) const
923*b1cdbd2cSJim Jagielski {
924*b1cdbd2cSJim Jagielski if (pParent)
925*b1cdbd2cSJim Jagielski pParent->GetSubTotalParam( rParam );
926*b1cdbd2cSJim Jagielski }
927*b1cdbd2cSJim Jagielski
PutData(const ScSubTotalParam & rParam)928*b1cdbd2cSJim Jagielski void ScRangeSubTotalDescriptor::PutData( const ScSubTotalParam& rParam )
929*b1cdbd2cSJim Jagielski {
930*b1cdbd2cSJim Jagielski if (pParent)
931*b1cdbd2cSJim Jagielski pParent->SetSubTotalParam( rParam );
932*b1cdbd2cSJim Jagielski }
933*b1cdbd2cSJim Jagielski
934*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
935*b1cdbd2cSJim Jagielski
ScConsolidationDescriptor()936*b1cdbd2cSJim Jagielski ScConsolidationDescriptor::ScConsolidationDescriptor()
937*b1cdbd2cSJim Jagielski {
938*b1cdbd2cSJim Jagielski }
939*b1cdbd2cSJim Jagielski
~ScConsolidationDescriptor()940*b1cdbd2cSJim Jagielski ScConsolidationDescriptor::~ScConsolidationDescriptor()
941*b1cdbd2cSJim Jagielski {
942*b1cdbd2cSJim Jagielski }
943*b1cdbd2cSJim Jagielski
SetParam(const ScConsolidateParam & rNew)944*b1cdbd2cSJim Jagielski void ScConsolidationDescriptor::SetParam( const ScConsolidateParam& rNew )
945*b1cdbd2cSJim Jagielski {
946*b1cdbd2cSJim Jagielski aParam = rNew;
947*b1cdbd2cSJim Jagielski }
948*b1cdbd2cSJim Jagielski
949*b1cdbd2cSJim Jagielski // XConsolidationDescriptor
950*b1cdbd2cSJim Jagielski
getFunction()951*b1cdbd2cSJim Jagielski sheet::GeneralFunction SAL_CALL ScConsolidationDescriptor::getFunction() throw(uno::RuntimeException)
952*b1cdbd2cSJim Jagielski {
953*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
954*b1cdbd2cSJim Jagielski return ScDataUnoConversion::SubTotalToGeneral(aParam.eFunction);
955*b1cdbd2cSJim Jagielski }
956*b1cdbd2cSJim Jagielski
setFunction(sheet::GeneralFunction nFunction)957*b1cdbd2cSJim Jagielski void SAL_CALL ScConsolidationDescriptor::setFunction( sheet::GeneralFunction nFunction )
958*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
961*b1cdbd2cSJim Jagielski aParam.eFunction = ScDataUnoConversion::GeneralToSubTotal(nFunction);
962*b1cdbd2cSJim Jagielski }
963*b1cdbd2cSJim Jagielski
getSources()964*b1cdbd2cSJim Jagielski uno::Sequence<table::CellRangeAddress> SAL_CALL ScConsolidationDescriptor::getSources()
965*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
966*b1cdbd2cSJim Jagielski {
967*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
968*b1cdbd2cSJim Jagielski sal_uInt16 nCount = aParam.nDataAreaCount;
969*b1cdbd2cSJim Jagielski if (!aParam.ppDataAreas)
970*b1cdbd2cSJim Jagielski nCount = 0;
971*b1cdbd2cSJim Jagielski table::CellRangeAddress aRange;
972*b1cdbd2cSJim Jagielski uno::Sequence<table::CellRangeAddress> aSeq(nCount);
973*b1cdbd2cSJim Jagielski table::CellRangeAddress* pAry = aSeq.getArray();
974*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<nCount; i++)
975*b1cdbd2cSJim Jagielski {
976*b1cdbd2cSJim Jagielski ScArea* pArea = aParam.ppDataAreas[i];
977*b1cdbd2cSJim Jagielski if (pArea)
978*b1cdbd2cSJim Jagielski {
979*b1cdbd2cSJim Jagielski aRange.Sheet = pArea->nTab;
980*b1cdbd2cSJim Jagielski aRange.StartColumn = pArea->nColStart;
981*b1cdbd2cSJim Jagielski aRange.StartRow = pArea->nRowStart;
982*b1cdbd2cSJim Jagielski aRange.EndColumn = pArea->nColEnd;
983*b1cdbd2cSJim Jagielski aRange.EndRow = pArea->nRowEnd;
984*b1cdbd2cSJim Jagielski }
985*b1cdbd2cSJim Jagielski pAry[i] = aRange;
986*b1cdbd2cSJim Jagielski }
987*b1cdbd2cSJim Jagielski return aSeq;
988*b1cdbd2cSJim Jagielski }
989*b1cdbd2cSJim Jagielski
setSources(const uno::Sequence<table::CellRangeAddress> & aSources)990*b1cdbd2cSJim Jagielski void SAL_CALL ScConsolidationDescriptor::setSources(
991*b1cdbd2cSJim Jagielski const uno::Sequence<table::CellRangeAddress>& aSources )
992*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
993*b1cdbd2cSJim Jagielski {
994*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
995*b1cdbd2cSJim Jagielski sal_uInt16 nCount = (sal_uInt16)aSources.getLength();
996*b1cdbd2cSJim Jagielski if (nCount)
997*b1cdbd2cSJim Jagielski {
998*b1cdbd2cSJim Jagielski const table::CellRangeAddress* pAry = aSources.getConstArray();
999*b1cdbd2cSJim Jagielski ScArea** pNew = new ScArea*[nCount];
1000*b1cdbd2cSJim Jagielski sal_uInt16 i;
1001*b1cdbd2cSJim Jagielski for (i=0; i<nCount; i++)
1002*b1cdbd2cSJim Jagielski pNew[i] = new ScArea( pAry[i].Sheet,
1003*b1cdbd2cSJim Jagielski static_cast<SCCOL>(pAry[i].StartColumn), pAry[i].StartRow,
1004*b1cdbd2cSJim Jagielski static_cast<SCCOL>(pAry[i].EndColumn), pAry[i].EndRow );
1005*b1cdbd2cSJim Jagielski
1006*b1cdbd2cSJim Jagielski aParam.SetAreas( pNew, nCount ); // kopiert alles
1007*b1cdbd2cSJim Jagielski
1008*b1cdbd2cSJim Jagielski for (i=0; i<nCount; i++)
1009*b1cdbd2cSJim Jagielski delete pNew[i];
1010*b1cdbd2cSJim Jagielski delete[] pNew;
1011*b1cdbd2cSJim Jagielski }
1012*b1cdbd2cSJim Jagielski else
1013*b1cdbd2cSJim Jagielski aParam.ClearDataAreas();
1014*b1cdbd2cSJim Jagielski }
1015*b1cdbd2cSJim Jagielski
getStartOutputPosition()1016*b1cdbd2cSJim Jagielski table::CellAddress SAL_CALL ScConsolidationDescriptor::getStartOutputPosition()
1017*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1018*b1cdbd2cSJim Jagielski {
1019*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1020*b1cdbd2cSJim Jagielski table::CellAddress aPos;
1021*b1cdbd2cSJim Jagielski aPos.Column = aParam.nCol;
1022*b1cdbd2cSJim Jagielski aPos.Row = aParam.nRow;
1023*b1cdbd2cSJim Jagielski aPos.Sheet = aParam.nTab;
1024*b1cdbd2cSJim Jagielski return aPos;
1025*b1cdbd2cSJim Jagielski }
1026*b1cdbd2cSJim Jagielski
setStartOutputPosition(const table::CellAddress & aStartOutputPosition)1027*b1cdbd2cSJim Jagielski void SAL_CALL ScConsolidationDescriptor::setStartOutputPosition(
1028*b1cdbd2cSJim Jagielski const table::CellAddress& aStartOutputPosition )
1029*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1030*b1cdbd2cSJim Jagielski {
1031*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1032*b1cdbd2cSJim Jagielski aParam.nCol = (SCCOL)aStartOutputPosition.Column;
1033*b1cdbd2cSJim Jagielski aParam.nRow = (SCROW)aStartOutputPosition.Row;
1034*b1cdbd2cSJim Jagielski aParam.nTab = aStartOutputPosition.Sheet;
1035*b1cdbd2cSJim Jagielski }
1036*b1cdbd2cSJim Jagielski
getUseColumnHeaders()1037*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScConsolidationDescriptor::getUseColumnHeaders() throw(uno::RuntimeException)
1038*b1cdbd2cSJim Jagielski {
1039*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1040*b1cdbd2cSJim Jagielski return aParam.bByCol;
1041*b1cdbd2cSJim Jagielski }
1042*b1cdbd2cSJim Jagielski
setUseColumnHeaders(sal_Bool bUseColumnHeaders)1043*b1cdbd2cSJim Jagielski void SAL_CALL ScConsolidationDescriptor::setUseColumnHeaders( sal_Bool bUseColumnHeaders )
1044*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1045*b1cdbd2cSJim Jagielski {
1046*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1047*b1cdbd2cSJim Jagielski aParam.bByCol = bUseColumnHeaders;
1048*b1cdbd2cSJim Jagielski }
1049*b1cdbd2cSJim Jagielski
getUseRowHeaders()1050*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScConsolidationDescriptor::getUseRowHeaders() throw(uno::RuntimeException)
1051*b1cdbd2cSJim Jagielski {
1052*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1053*b1cdbd2cSJim Jagielski return aParam.bByRow;
1054*b1cdbd2cSJim Jagielski }
1055*b1cdbd2cSJim Jagielski
setUseRowHeaders(sal_Bool bUseRowHeaders)1056*b1cdbd2cSJim Jagielski void SAL_CALL ScConsolidationDescriptor::setUseRowHeaders( sal_Bool bUseRowHeaders )
1057*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1058*b1cdbd2cSJim Jagielski {
1059*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1060*b1cdbd2cSJim Jagielski aParam.bByRow = bUseRowHeaders;
1061*b1cdbd2cSJim Jagielski }
1062*b1cdbd2cSJim Jagielski
getInsertLinks()1063*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScConsolidationDescriptor::getInsertLinks() throw(uno::RuntimeException)
1064*b1cdbd2cSJim Jagielski {
1065*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1066*b1cdbd2cSJim Jagielski return aParam.bReferenceData;
1067*b1cdbd2cSJim Jagielski }
1068*b1cdbd2cSJim Jagielski
setInsertLinks(sal_Bool bInsertLinks)1069*b1cdbd2cSJim Jagielski void SAL_CALL ScConsolidationDescriptor::setInsertLinks( sal_Bool bInsertLinks )
1070*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1071*b1cdbd2cSJim Jagielski {
1072*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1073*b1cdbd2cSJim Jagielski aParam.bReferenceData = bInsertLinks;
1074*b1cdbd2cSJim Jagielski }
1075*b1cdbd2cSJim Jagielski
1076*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
1077*b1cdbd2cSJim Jagielski
ScFilterDescriptorBase(ScDocShell * pDocShell)1078*b1cdbd2cSJim Jagielski ScFilterDescriptorBase::ScFilterDescriptorBase(ScDocShell* pDocShell) :
1079*b1cdbd2cSJim Jagielski aPropSet( lcl_GetFilterPropertyMap() ),
1080*b1cdbd2cSJim Jagielski pDocSh(pDocShell)
1081*b1cdbd2cSJim Jagielski {
1082*b1cdbd2cSJim Jagielski if (pDocSh)
1083*b1cdbd2cSJim Jagielski pDocSh->GetDocument()->AddUnoObject(*this);
1084*b1cdbd2cSJim Jagielski }
1085*b1cdbd2cSJim Jagielski
~ScFilterDescriptorBase()1086*b1cdbd2cSJim Jagielski ScFilterDescriptorBase::~ScFilterDescriptorBase()
1087*b1cdbd2cSJim Jagielski {
1088*b1cdbd2cSJim Jagielski if (pDocSh)
1089*b1cdbd2cSJim Jagielski pDocSh->GetDocument()->RemoveUnoObject(*this);
1090*b1cdbd2cSJim Jagielski }
1091*b1cdbd2cSJim Jagielski
Notify(SfxBroadcaster &,const SfxHint & rHint)1092*b1cdbd2cSJim Jagielski void ScFilterDescriptorBase::Notify( SfxBroadcaster&, const SfxHint& rHint )
1093*b1cdbd2cSJim Jagielski {
1094*b1cdbd2cSJim Jagielski if ( rHint.ISA( SfxSimpleHint ) )
1095*b1cdbd2cSJim Jagielski {
1096*b1cdbd2cSJim Jagielski sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId();
1097*b1cdbd2cSJim Jagielski if ( nId == SFX_HINT_DYING )
1098*b1cdbd2cSJim Jagielski {
1099*b1cdbd2cSJim Jagielski pDocSh = NULL; // invalid
1100*b1cdbd2cSJim Jagielski }
1101*b1cdbd2cSJim Jagielski }
1102*b1cdbd2cSJim Jagielski }
1103*b1cdbd2cSJim Jagielski
1104*b1cdbd2cSJim Jagielski // XSheetFilterDescriptor and XSheetFilterDescriptor2
1105*b1cdbd2cSJim Jagielski
getFilterFields()1106*b1cdbd2cSJim Jagielski uno::Sequence<sheet::TableFilterField> SAL_CALL ScFilterDescriptorBase::getFilterFields()
1107*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1108*b1cdbd2cSJim Jagielski {
1109*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1110*b1cdbd2cSJim Jagielski ScQueryParam aParam;
1111*b1cdbd2cSJim Jagielski GetData(aParam);
1112*b1cdbd2cSJim Jagielski
1113*b1cdbd2cSJim Jagielski SCSIZE nEntries = aParam.GetEntryCount(); // allozierte Eintraege im Param
1114*b1cdbd2cSJim Jagielski SCSIZE nCount = 0; // aktive
1115*b1cdbd2cSJim Jagielski while ( nCount < nEntries &&
1116*b1cdbd2cSJim Jagielski aParam.GetEntry(nCount).bDoQuery )
1117*b1cdbd2cSJim Jagielski ++nCount;
1118*b1cdbd2cSJim Jagielski
1119*b1cdbd2cSJim Jagielski sheet::TableFilterField aField;
1120*b1cdbd2cSJim Jagielski uno::Sequence<sheet::TableFilterField> aSeq(static_cast<sal_Int32>(nCount));
1121*b1cdbd2cSJim Jagielski sheet::TableFilterField* pAry = aSeq.getArray();
1122*b1cdbd2cSJim Jagielski for (SCSIZE i=0; i<nCount; i++)
1123*b1cdbd2cSJim Jagielski {
1124*b1cdbd2cSJim Jagielski const ScQueryEntry& rEntry = aParam.GetEntry(i);
1125*b1cdbd2cSJim Jagielski
1126*b1cdbd2cSJim Jagielski rtl::OUString aStringValue;
1127*b1cdbd2cSJim Jagielski if (rEntry.pStr)
1128*b1cdbd2cSJim Jagielski aStringValue = *rEntry.pStr;
1129*b1cdbd2cSJim Jagielski
1130*b1cdbd2cSJim Jagielski aField.Connection = (rEntry.eConnect == SC_AND) ? sheet::FilterConnection_AND :
1131*b1cdbd2cSJim Jagielski sheet::FilterConnection_OR;
1132*b1cdbd2cSJim Jagielski aField.Field = rEntry.nField;
1133*b1cdbd2cSJim Jagielski aField.IsNumeric = !rEntry.bQueryByString;
1134*b1cdbd2cSJim Jagielski aField.StringValue = aStringValue;
1135*b1cdbd2cSJim Jagielski aField.NumericValue = rEntry.nVal;
1136*b1cdbd2cSJim Jagielski
1137*b1cdbd2cSJim Jagielski switch (rEntry.eOp) // ScQueryOp
1138*b1cdbd2cSJim Jagielski {
1139*b1cdbd2cSJim Jagielski case SC_EQUAL:
1140*b1cdbd2cSJim Jagielski {
1141*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator_EQUAL;
1142*b1cdbd2cSJim Jagielski if (!rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING)
1143*b1cdbd2cSJim Jagielski {
1144*b1cdbd2cSJim Jagielski if (rEntry.nVal == SC_EMPTYFIELDS)
1145*b1cdbd2cSJim Jagielski {
1146*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator_EMPTY;
1147*b1cdbd2cSJim Jagielski aField.NumericValue = 0;
1148*b1cdbd2cSJim Jagielski }
1149*b1cdbd2cSJim Jagielski else if (rEntry.nVal == SC_NONEMPTYFIELDS)
1150*b1cdbd2cSJim Jagielski {
1151*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator_NOT_EMPTY;
1152*b1cdbd2cSJim Jagielski aField.NumericValue = 0;
1153*b1cdbd2cSJim Jagielski }
1154*b1cdbd2cSJim Jagielski }
1155*b1cdbd2cSJim Jagielski }
1156*b1cdbd2cSJim Jagielski break;
1157*b1cdbd2cSJim Jagielski case SC_LESS: aField.Operator = sheet::FilterOperator_LESS; break;
1158*b1cdbd2cSJim Jagielski case SC_GREATER: aField.Operator = sheet::FilterOperator_GREATER; break;
1159*b1cdbd2cSJim Jagielski case SC_LESS_EQUAL: aField.Operator = sheet::FilterOperator_LESS_EQUAL; break;
1160*b1cdbd2cSJim Jagielski case SC_GREATER_EQUAL: aField.Operator = sheet::FilterOperator_GREATER_EQUAL; break;
1161*b1cdbd2cSJim Jagielski case SC_NOT_EQUAL: aField.Operator = sheet::FilterOperator_NOT_EQUAL; break;
1162*b1cdbd2cSJim Jagielski case SC_TOPVAL: aField.Operator = sheet::FilterOperator_TOP_VALUES; break;
1163*b1cdbd2cSJim Jagielski case SC_BOTVAL: aField.Operator = sheet::FilterOperator_BOTTOM_VALUES; break;
1164*b1cdbd2cSJim Jagielski case SC_TOPPERC: aField.Operator = sheet::FilterOperator_TOP_PERCENT; break;
1165*b1cdbd2cSJim Jagielski case SC_BOTPERC: aField.Operator = sheet::FilterOperator_BOTTOM_PERCENT; break;
1166*b1cdbd2cSJim Jagielski default:
1167*b1cdbd2cSJim Jagielski DBG_ERROR("Falscher Filter-enum");
1168*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator_EMPTY;
1169*b1cdbd2cSJim Jagielski }
1170*b1cdbd2cSJim Jagielski pAry[i] = aField;
1171*b1cdbd2cSJim Jagielski }
1172*b1cdbd2cSJim Jagielski return aSeq;
1173*b1cdbd2cSJim Jagielski }
1174*b1cdbd2cSJim Jagielski
getFilterFields2()1175*b1cdbd2cSJim Jagielski uno::Sequence<sheet::TableFilterField2> SAL_CALL ScFilterDescriptorBase::getFilterFields2()
1176*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1177*b1cdbd2cSJim Jagielski {
1178*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1179*b1cdbd2cSJim Jagielski ScQueryParam aParam;
1180*b1cdbd2cSJim Jagielski GetData(aParam);
1181*b1cdbd2cSJim Jagielski
1182*b1cdbd2cSJim Jagielski SCSIZE nEntries = aParam.GetEntryCount(); // allozierte Eintraege im Param
1183*b1cdbd2cSJim Jagielski SCSIZE nCount = 0; // aktive
1184*b1cdbd2cSJim Jagielski while ( nCount < nEntries &&
1185*b1cdbd2cSJim Jagielski aParam.GetEntry(nCount).bDoQuery )
1186*b1cdbd2cSJim Jagielski ++nCount;
1187*b1cdbd2cSJim Jagielski
1188*b1cdbd2cSJim Jagielski sheet::TableFilterField2 aField;
1189*b1cdbd2cSJim Jagielski uno::Sequence<sheet::TableFilterField2> aSeq(static_cast<sal_Int32>(nCount));
1190*b1cdbd2cSJim Jagielski sheet::TableFilterField2* pAry = aSeq.getArray();
1191*b1cdbd2cSJim Jagielski for (SCSIZE i=0; i<nCount; i++)
1192*b1cdbd2cSJim Jagielski {
1193*b1cdbd2cSJim Jagielski const ScQueryEntry& rEntry = aParam.GetEntry(i);
1194*b1cdbd2cSJim Jagielski
1195*b1cdbd2cSJim Jagielski rtl::OUString aStringValue;
1196*b1cdbd2cSJim Jagielski if (rEntry.pStr)
1197*b1cdbd2cSJim Jagielski aStringValue = *rEntry.pStr;
1198*b1cdbd2cSJim Jagielski
1199*b1cdbd2cSJim Jagielski aField.Connection = (rEntry.eConnect == SC_AND) ? sheet::FilterConnection_AND : sheet::FilterConnection_OR;
1200*b1cdbd2cSJim Jagielski aField.Field = rEntry.nField;
1201*b1cdbd2cSJim Jagielski aField.IsNumeric = !rEntry.bQueryByString;
1202*b1cdbd2cSJim Jagielski aField.StringValue = aStringValue;
1203*b1cdbd2cSJim Jagielski aField.NumericValue = rEntry.nVal;
1204*b1cdbd2cSJim Jagielski
1205*b1cdbd2cSJim Jagielski switch (rEntry.eOp) // ScQueryOp
1206*b1cdbd2cSJim Jagielski {
1207*b1cdbd2cSJim Jagielski case SC_EQUAL:
1208*b1cdbd2cSJim Jagielski {
1209*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator2::EQUAL;
1210*b1cdbd2cSJim Jagielski if (!rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING)
1211*b1cdbd2cSJim Jagielski {
1212*b1cdbd2cSJim Jagielski if (rEntry.nVal == SC_EMPTYFIELDS)
1213*b1cdbd2cSJim Jagielski {
1214*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator2::EMPTY;
1215*b1cdbd2cSJim Jagielski aField.NumericValue = 0;
1216*b1cdbd2cSJim Jagielski }
1217*b1cdbd2cSJim Jagielski else if (rEntry.nVal == SC_NONEMPTYFIELDS)
1218*b1cdbd2cSJim Jagielski {
1219*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator2::NOT_EMPTY;
1220*b1cdbd2cSJim Jagielski aField.NumericValue = 0;
1221*b1cdbd2cSJim Jagielski }
1222*b1cdbd2cSJim Jagielski }
1223*b1cdbd2cSJim Jagielski }
1224*b1cdbd2cSJim Jagielski break;
1225*b1cdbd2cSJim Jagielski case SC_LESS: aField.Operator = sheet::FilterOperator2::LESS; break;
1226*b1cdbd2cSJim Jagielski case SC_GREATER: aField.Operator = sheet::FilterOperator2::GREATER; break;
1227*b1cdbd2cSJim Jagielski case SC_LESS_EQUAL: aField.Operator = sheet::FilterOperator2::LESS_EQUAL; break;
1228*b1cdbd2cSJim Jagielski case SC_GREATER_EQUAL: aField.Operator = sheet::FilterOperator2::GREATER_EQUAL; break;
1229*b1cdbd2cSJim Jagielski case SC_NOT_EQUAL: aField.Operator = sheet::FilterOperator2::NOT_EQUAL; break;
1230*b1cdbd2cSJim Jagielski case SC_TOPVAL: aField.Operator = sheet::FilterOperator2::TOP_VALUES; break;
1231*b1cdbd2cSJim Jagielski case SC_BOTVAL: aField.Operator = sheet::FilterOperator2::BOTTOM_VALUES; break;
1232*b1cdbd2cSJim Jagielski case SC_TOPPERC: aField.Operator = sheet::FilterOperator2::TOP_PERCENT; break;
1233*b1cdbd2cSJim Jagielski case SC_BOTPERC: aField.Operator = sheet::FilterOperator2::BOTTOM_PERCENT; break;
1234*b1cdbd2cSJim Jagielski case SC_CONTAINS: aField.Operator = sheet::FilterOperator2::CONTAINS; break;
1235*b1cdbd2cSJim Jagielski case SC_DOES_NOT_CONTAIN: aField.Operator = sheet::FilterOperator2::DOES_NOT_CONTAIN; break;
1236*b1cdbd2cSJim Jagielski case SC_BEGINS_WITH: aField.Operator = sheet::FilterOperator2::BEGINS_WITH; break;
1237*b1cdbd2cSJim Jagielski case SC_DOES_NOT_BEGIN_WITH: aField.Operator = sheet::FilterOperator2::DOES_NOT_BEGIN_WITH; break;
1238*b1cdbd2cSJim Jagielski case SC_ENDS_WITH: aField.Operator = sheet::FilterOperator2::ENDS_WITH; break;
1239*b1cdbd2cSJim Jagielski case SC_DOES_NOT_END_WITH: aField.Operator = sheet::FilterOperator2::DOES_NOT_END_WITH; break;
1240*b1cdbd2cSJim Jagielski default:
1241*b1cdbd2cSJim Jagielski DBG_ERROR("Falscher Filter-enum");
1242*b1cdbd2cSJim Jagielski aField.Operator = sheet::FilterOperator2::EMPTY;
1243*b1cdbd2cSJim Jagielski }
1244*b1cdbd2cSJim Jagielski pAry[i] = aField;
1245*b1cdbd2cSJim Jagielski }
1246*b1cdbd2cSJim Jagielski return aSeq;
1247*b1cdbd2cSJim Jagielski }
1248*b1cdbd2cSJim Jagielski
setFilterFields(const uno::Sequence<sheet::TableFilterField> & aFilterFields)1249*b1cdbd2cSJim Jagielski void SAL_CALL ScFilterDescriptorBase::setFilterFields(
1250*b1cdbd2cSJim Jagielski const uno::Sequence<sheet::TableFilterField>& aFilterFields )
1251*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1252*b1cdbd2cSJim Jagielski {
1253*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1254*b1cdbd2cSJim Jagielski ScQueryParam aParam;
1255*b1cdbd2cSJim Jagielski GetData(aParam);
1256*b1cdbd2cSJim Jagielski
1257*b1cdbd2cSJim Jagielski SCSIZE nCount = static_cast<SCSIZE>(aFilterFields.getLength());
1258*b1cdbd2cSJim Jagielski DBG_ASSERT( nCount <= MAXQUERY, "setFilterFields: zu viele" );
1259*b1cdbd2cSJim Jagielski
1260*b1cdbd2cSJim Jagielski aParam.Resize( nCount );
1261*b1cdbd2cSJim Jagielski
1262*b1cdbd2cSJim Jagielski const sheet::TableFilterField* pAry = aFilterFields.getConstArray();
1263*b1cdbd2cSJim Jagielski SCSIZE i;
1264*b1cdbd2cSJim Jagielski for (i=0; i<nCount; i++)
1265*b1cdbd2cSJim Jagielski {
1266*b1cdbd2cSJim Jagielski ScQueryEntry& rEntry = aParam.GetEntry(i);
1267*b1cdbd2cSJim Jagielski if (!rEntry.pStr)
1268*b1cdbd2cSJim Jagielski rEntry.pStr = new String; // sollte nicht sein (soll immer initialisiert sein)
1269*b1cdbd2cSJim Jagielski
1270*b1cdbd2cSJim Jagielski rEntry.bDoQuery = sal_True;
1271*b1cdbd2cSJim Jagielski rEntry.eConnect = (pAry[i].Connection == sheet::FilterConnection_AND) ? SC_AND : SC_OR;
1272*b1cdbd2cSJim Jagielski rEntry.nField = pAry[i].Field;
1273*b1cdbd2cSJim Jagielski rEntry.bQueryByString = !pAry[i].IsNumeric;
1274*b1cdbd2cSJim Jagielski *rEntry.pStr = String( pAry[i].StringValue );
1275*b1cdbd2cSJim Jagielski rEntry.nVal = pAry[i].NumericValue;
1276*b1cdbd2cSJim Jagielski
1277*b1cdbd2cSJim Jagielski if (!rEntry.bQueryByString && pDocSh)
1278*b1cdbd2cSJim Jagielski {
1279*b1cdbd2cSJim Jagielski pDocSh->GetDocument()->GetFormatTable()->GetInputLineString(rEntry.nVal, 0, *rEntry.pStr);
1280*b1cdbd2cSJim Jagielski }
1281*b1cdbd2cSJim Jagielski
1282*b1cdbd2cSJim Jagielski switch (pAry[i].Operator) // FilterOperator
1283*b1cdbd2cSJim Jagielski {
1284*b1cdbd2cSJim Jagielski case sheet::FilterOperator_EQUAL: rEntry.eOp = SC_EQUAL; break;
1285*b1cdbd2cSJim Jagielski case sheet::FilterOperator_LESS: rEntry.eOp = SC_LESS; break;
1286*b1cdbd2cSJim Jagielski case sheet::FilterOperator_GREATER: rEntry.eOp = SC_GREATER; break;
1287*b1cdbd2cSJim Jagielski case sheet::FilterOperator_LESS_EQUAL: rEntry.eOp = SC_LESS_EQUAL; break;
1288*b1cdbd2cSJim Jagielski case sheet::FilterOperator_GREATER_EQUAL: rEntry.eOp = SC_GREATER_EQUAL; break;
1289*b1cdbd2cSJim Jagielski case sheet::FilterOperator_NOT_EQUAL: rEntry.eOp = SC_NOT_EQUAL; break;
1290*b1cdbd2cSJim Jagielski case sheet::FilterOperator_TOP_VALUES: rEntry.eOp = SC_TOPVAL; break;
1291*b1cdbd2cSJim Jagielski case sheet::FilterOperator_BOTTOM_VALUES: rEntry.eOp = SC_BOTVAL; break;
1292*b1cdbd2cSJim Jagielski case sheet::FilterOperator_TOP_PERCENT: rEntry.eOp = SC_TOPPERC; break;
1293*b1cdbd2cSJim Jagielski case sheet::FilterOperator_BOTTOM_PERCENT: rEntry.eOp = SC_BOTPERC; break;
1294*b1cdbd2cSJim Jagielski case sheet::FilterOperator_EMPTY:
1295*b1cdbd2cSJim Jagielski {
1296*b1cdbd2cSJim Jagielski rEntry.eOp = SC_EQUAL;
1297*b1cdbd2cSJim Jagielski rEntry.nVal = SC_EMPTYFIELDS;
1298*b1cdbd2cSJim Jagielski rEntry.bQueryByString = sal_False;
1299*b1cdbd2cSJim Jagielski *rEntry.pStr = EMPTY_STRING;
1300*b1cdbd2cSJim Jagielski }
1301*b1cdbd2cSJim Jagielski break;
1302*b1cdbd2cSJim Jagielski case sheet::FilterOperator_NOT_EMPTY:
1303*b1cdbd2cSJim Jagielski {
1304*b1cdbd2cSJim Jagielski rEntry.eOp = SC_EQUAL;
1305*b1cdbd2cSJim Jagielski rEntry.nVal = SC_NONEMPTYFIELDS;
1306*b1cdbd2cSJim Jagielski rEntry.bQueryByString = sal_False;
1307*b1cdbd2cSJim Jagielski *rEntry.pStr = EMPTY_STRING;
1308*b1cdbd2cSJim Jagielski }
1309*b1cdbd2cSJim Jagielski break;
1310*b1cdbd2cSJim Jagielski default:
1311*b1cdbd2cSJim Jagielski DBG_ERROR("Falscher Query-enum");
1312*b1cdbd2cSJim Jagielski rEntry.eOp = SC_EQUAL;
1313*b1cdbd2cSJim Jagielski }
1314*b1cdbd2cSJim Jagielski }
1315*b1cdbd2cSJim Jagielski
1316*b1cdbd2cSJim Jagielski SCSIZE nParamCount = aParam.GetEntryCount(); // Param wird nicht unter 8 resized
1317*b1cdbd2cSJim Jagielski for (i=nCount; i<nParamCount; i++)
1318*b1cdbd2cSJim Jagielski aParam.GetEntry(i).bDoQuery = sal_False; // ueberzaehlige Felder zuruecksetzen
1319*b1cdbd2cSJim Jagielski
1320*b1cdbd2cSJim Jagielski PutData(aParam);
1321*b1cdbd2cSJim Jagielski }
1322*b1cdbd2cSJim Jagielski
setFilterFields2(const uno::Sequence<sheet::TableFilterField2> & aFilterFields)1323*b1cdbd2cSJim Jagielski void SAL_CALL ScFilterDescriptorBase::setFilterFields2(
1324*b1cdbd2cSJim Jagielski const uno::Sequence<sheet::TableFilterField2>& aFilterFields )
1325*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1326*b1cdbd2cSJim Jagielski {
1327*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1328*b1cdbd2cSJim Jagielski ScQueryParam aParam;
1329*b1cdbd2cSJim Jagielski GetData(aParam);
1330*b1cdbd2cSJim Jagielski
1331*b1cdbd2cSJim Jagielski SCSIZE nCount = static_cast<SCSIZE>(aFilterFields.getLength());
1332*b1cdbd2cSJim Jagielski DBG_ASSERT( nCount <= MAXQUERY, "setFilterFields: zu viele" );
1333*b1cdbd2cSJim Jagielski
1334*b1cdbd2cSJim Jagielski aParam.Resize( nCount );
1335*b1cdbd2cSJim Jagielski
1336*b1cdbd2cSJim Jagielski const sheet::TableFilterField2* pAry = aFilterFields.getConstArray();
1337*b1cdbd2cSJim Jagielski SCSIZE i;
1338*b1cdbd2cSJim Jagielski for (i=0; i<nCount; i++)
1339*b1cdbd2cSJim Jagielski {
1340*b1cdbd2cSJim Jagielski ScQueryEntry& rEntry = aParam.GetEntry(i);
1341*b1cdbd2cSJim Jagielski if (!rEntry.pStr)
1342*b1cdbd2cSJim Jagielski rEntry.pStr = new String; // sollte nicht sein (soll immer initialisiert sein)
1343*b1cdbd2cSJim Jagielski
1344*b1cdbd2cSJim Jagielski rEntry.bDoQuery = sal_True;
1345*b1cdbd2cSJim Jagielski rEntry.eConnect = (pAry[i].Connection == sheet::FilterConnection_AND) ? SC_AND : SC_OR;
1346*b1cdbd2cSJim Jagielski rEntry.nField = pAry[i].Field;
1347*b1cdbd2cSJim Jagielski rEntry.bQueryByString = !pAry[i].IsNumeric;
1348*b1cdbd2cSJim Jagielski *rEntry.pStr = String( pAry[i].StringValue );
1349*b1cdbd2cSJim Jagielski rEntry.nVal = pAry[i].NumericValue;
1350*b1cdbd2cSJim Jagielski
1351*b1cdbd2cSJim Jagielski if (!rEntry.bQueryByString && pDocSh)
1352*b1cdbd2cSJim Jagielski {
1353*b1cdbd2cSJim Jagielski pDocSh->GetDocument()->GetFormatTable()->GetInputLineString(rEntry.nVal, 0, *rEntry.pStr);
1354*b1cdbd2cSJim Jagielski }
1355*b1cdbd2cSJim Jagielski
1356*b1cdbd2cSJim Jagielski switch (pAry[i].Operator) // FilterOperator
1357*b1cdbd2cSJim Jagielski {
1358*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::EQUAL: rEntry.eOp = SC_EQUAL; break;
1359*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::LESS: rEntry.eOp = SC_LESS; break;
1360*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::GREATER: rEntry.eOp = SC_GREATER; break;
1361*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::LESS_EQUAL: rEntry.eOp = SC_LESS_EQUAL; break;
1362*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::GREATER_EQUAL: rEntry.eOp = SC_GREATER_EQUAL; break;
1363*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::NOT_EQUAL: rEntry.eOp = SC_NOT_EQUAL; break;
1364*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::TOP_VALUES: rEntry.eOp = SC_TOPVAL; break;
1365*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::BOTTOM_VALUES: rEntry.eOp = SC_BOTVAL; break;
1366*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::TOP_PERCENT: rEntry.eOp = SC_TOPPERC; break;
1367*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::BOTTOM_PERCENT: rEntry.eOp = SC_BOTPERC; break;
1368*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::CONTAINS: rEntry.eOp = SC_CONTAINS; break;
1369*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::DOES_NOT_CONTAIN: rEntry.eOp = SC_DOES_NOT_CONTAIN; break;
1370*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::BEGINS_WITH: rEntry.eOp = SC_BEGINS_WITH; break;
1371*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::DOES_NOT_BEGIN_WITH: rEntry.eOp = SC_DOES_NOT_BEGIN_WITH;break;
1372*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::ENDS_WITH: rEntry.eOp = SC_ENDS_WITH; break;
1373*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::DOES_NOT_END_WITH: rEntry.eOp = SC_DOES_NOT_END_WITH; break;
1374*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::EMPTY:
1375*b1cdbd2cSJim Jagielski {
1376*b1cdbd2cSJim Jagielski rEntry.eOp = SC_EQUAL;
1377*b1cdbd2cSJim Jagielski rEntry.nVal = SC_EMPTYFIELDS;
1378*b1cdbd2cSJim Jagielski rEntry.bQueryByString = sal_False;
1379*b1cdbd2cSJim Jagielski *rEntry.pStr = EMPTY_STRING;
1380*b1cdbd2cSJim Jagielski }
1381*b1cdbd2cSJim Jagielski break;
1382*b1cdbd2cSJim Jagielski case sheet::FilterOperator2::NOT_EMPTY:
1383*b1cdbd2cSJim Jagielski {
1384*b1cdbd2cSJim Jagielski rEntry.eOp = SC_EQUAL;
1385*b1cdbd2cSJim Jagielski rEntry.nVal = SC_NONEMPTYFIELDS;
1386*b1cdbd2cSJim Jagielski rEntry.bQueryByString = sal_False;
1387*b1cdbd2cSJim Jagielski *rEntry.pStr = EMPTY_STRING;
1388*b1cdbd2cSJim Jagielski }
1389*b1cdbd2cSJim Jagielski break;
1390*b1cdbd2cSJim Jagielski default:
1391*b1cdbd2cSJim Jagielski DBG_ERROR("Falscher Query-enum");
1392*b1cdbd2cSJim Jagielski rEntry.eOp = SC_EQUAL;
1393*b1cdbd2cSJim Jagielski }
1394*b1cdbd2cSJim Jagielski }
1395*b1cdbd2cSJim Jagielski
1396*b1cdbd2cSJim Jagielski SCSIZE nParamCount = aParam.GetEntryCount(); // Param wird nicht unter 8 resized
1397*b1cdbd2cSJim Jagielski for (i=nCount; i<nParamCount; i++)
1398*b1cdbd2cSJim Jagielski aParam.GetEntry(i).bDoQuery = sal_False; // ueberzaehlige Felder zuruecksetzen
1399*b1cdbd2cSJim Jagielski
1400*b1cdbd2cSJim Jagielski PutData(aParam);
1401*b1cdbd2cSJim Jagielski }
1402*b1cdbd2cSJim Jagielski
1403*b1cdbd2cSJim Jagielski // Rest sind Properties
1404*b1cdbd2cSJim Jagielski
1405*b1cdbd2cSJim Jagielski // XPropertySet
1406*b1cdbd2cSJim Jagielski
getPropertySetInfo()1407*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySetInfo> SAL_CALL ScFilterDescriptorBase::getPropertySetInfo()
1408*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1409*b1cdbd2cSJim Jagielski {
1410*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1411*b1cdbd2cSJim Jagielski static uno::Reference<beans::XPropertySetInfo> aRef(
1412*b1cdbd2cSJim Jagielski new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
1413*b1cdbd2cSJim Jagielski return aRef;
1414*b1cdbd2cSJim Jagielski }
1415*b1cdbd2cSJim Jagielski
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any & aValue)1416*b1cdbd2cSJim Jagielski void SAL_CALL ScFilterDescriptorBase::setPropertyValue(
1417*b1cdbd2cSJim Jagielski const rtl::OUString& aPropertyName, const uno::Any& aValue )
1418*b1cdbd2cSJim Jagielski throw(beans::UnknownPropertyException, beans::PropertyVetoException,
1419*b1cdbd2cSJim Jagielski lang::IllegalArgumentException, lang::WrappedTargetException,
1420*b1cdbd2cSJim Jagielski uno::RuntimeException)
1421*b1cdbd2cSJim Jagielski {
1422*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1423*b1cdbd2cSJim Jagielski ScQueryParam aParam;
1424*b1cdbd2cSJim Jagielski GetData(aParam);
1425*b1cdbd2cSJim Jagielski
1426*b1cdbd2cSJim Jagielski String aString(aPropertyName);
1427*b1cdbd2cSJim Jagielski if (aString.EqualsAscii( SC_UNONAME_CONTHDR ))
1428*b1cdbd2cSJim Jagielski aParam.bHasHeader = ScUnoHelpFunctions::GetBoolFromAny( aValue );
1429*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_COPYOUT ))
1430*b1cdbd2cSJim Jagielski aParam.bInplace = !(ScUnoHelpFunctions::GetBoolFromAny( aValue ));
1431*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ISCASE ))
1432*b1cdbd2cSJim Jagielski aParam.bCaseSens = ScUnoHelpFunctions::GetBoolFromAny( aValue );
1433*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_MAXFLD ))
1434*b1cdbd2cSJim Jagielski {
1435*b1cdbd2cSJim Jagielski sal_Int32 nVal = 0;
1436*b1cdbd2cSJim Jagielski if ( (aValue >>= nVal) && nVal > sal::static_int_cast<sal_Int32>(MAXQUERY) )
1437*b1cdbd2cSJim Jagielski {
1438*b1cdbd2cSJim Jagielski throw lang::IllegalArgumentException();
1439*b1cdbd2cSJim Jagielski }
1440*b1cdbd2cSJim Jagielski }
1441*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ORIENT ))
1442*b1cdbd2cSJim Jagielski {
1443*b1cdbd2cSJim Jagielski //! test for correct enum type?
1444*b1cdbd2cSJim Jagielski table::TableOrientation eOrient = (table::TableOrientation)
1445*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::GetEnumFromAny( aValue );
1446*b1cdbd2cSJim Jagielski aParam.bByRow = ( eOrient != table::TableOrientation_COLUMNS );
1447*b1cdbd2cSJim Jagielski }
1448*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_OUTPOS ))
1449*b1cdbd2cSJim Jagielski {
1450*b1cdbd2cSJim Jagielski table::CellAddress aAddress;
1451*b1cdbd2cSJim Jagielski if ( aValue >>= aAddress )
1452*b1cdbd2cSJim Jagielski {
1453*b1cdbd2cSJim Jagielski aParam.nDestTab = aAddress.Sheet;
1454*b1cdbd2cSJim Jagielski aParam.nDestCol = (SCCOL)aAddress.Column;
1455*b1cdbd2cSJim Jagielski aParam.nDestRow = (SCROW)aAddress.Row;
1456*b1cdbd2cSJim Jagielski }
1457*b1cdbd2cSJim Jagielski }
1458*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_SAVEOUT ))
1459*b1cdbd2cSJim Jagielski aParam.bDestPers = ScUnoHelpFunctions::GetBoolFromAny( aValue );
1460*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_SKIPDUP ))
1461*b1cdbd2cSJim Jagielski aParam.bDuplicate = !(ScUnoHelpFunctions::GetBoolFromAny( aValue ));
1462*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_USEREGEX ))
1463*b1cdbd2cSJim Jagielski aParam.bRegExp = ScUnoHelpFunctions::GetBoolFromAny( aValue );
1464*b1cdbd2cSJim Jagielski
1465*b1cdbd2cSJim Jagielski PutData(aParam);
1466*b1cdbd2cSJim Jagielski }
1467*b1cdbd2cSJim Jagielski
getPropertyValue(const rtl::OUString & aPropertyName)1468*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScFilterDescriptorBase::getPropertyValue( const rtl::OUString& aPropertyName )
1469*b1cdbd2cSJim Jagielski throw(beans::UnknownPropertyException, lang::WrappedTargetException,
1470*b1cdbd2cSJim Jagielski uno::RuntimeException)
1471*b1cdbd2cSJim Jagielski {
1472*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1473*b1cdbd2cSJim Jagielski ScQueryParam aParam;
1474*b1cdbd2cSJim Jagielski GetData(aParam);
1475*b1cdbd2cSJim Jagielski
1476*b1cdbd2cSJim Jagielski String aString(aPropertyName);
1477*b1cdbd2cSJim Jagielski uno::Any aRet;
1478*b1cdbd2cSJim Jagielski
1479*b1cdbd2cSJim Jagielski if (aString.EqualsAscii( SC_UNONAME_CONTHDR ))
1480*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bHasHeader );
1481*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_COPYOUT ))
1482*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, !(aParam.bInplace) );
1483*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ISCASE ))
1484*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bCaseSens );
1485*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_MAXFLD ))
1486*b1cdbd2cSJim Jagielski aRet <<= (sal_Int32) MAXQUERY;
1487*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_ORIENT ))
1488*b1cdbd2cSJim Jagielski {
1489*b1cdbd2cSJim Jagielski table::TableOrientation eOrient = aParam.bByRow ? table::TableOrientation_ROWS :
1490*b1cdbd2cSJim Jagielski table::TableOrientation_COLUMNS;
1491*b1cdbd2cSJim Jagielski aRet <<= eOrient;
1492*b1cdbd2cSJim Jagielski }
1493*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_OUTPOS ))
1494*b1cdbd2cSJim Jagielski {
1495*b1cdbd2cSJim Jagielski table::CellAddress aOutPos;
1496*b1cdbd2cSJim Jagielski aOutPos.Sheet = aParam.nDestTab;
1497*b1cdbd2cSJim Jagielski aOutPos.Column = aParam.nDestCol;
1498*b1cdbd2cSJim Jagielski aOutPos.Row = aParam.nDestRow;
1499*b1cdbd2cSJim Jagielski aRet <<= aOutPos;
1500*b1cdbd2cSJim Jagielski }
1501*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_SAVEOUT ))
1502*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bDestPers );
1503*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_SKIPDUP ))
1504*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, !(aParam.bDuplicate) );
1505*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_USEREGEX ))
1506*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bRegExp );
1507*b1cdbd2cSJim Jagielski
1508*b1cdbd2cSJim Jagielski return aRet;
1509*b1cdbd2cSJim Jagielski }
1510*b1cdbd2cSJim Jagielski
SC_IMPL_DUMMY_PROPERTY_LISTENER(ScFilterDescriptorBase)1511*b1cdbd2cSJim Jagielski SC_IMPL_DUMMY_PROPERTY_LISTENER( ScFilterDescriptorBase )
1512*b1cdbd2cSJim Jagielski
1513*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
1514*b1cdbd2cSJim Jagielski
1515*b1cdbd2cSJim Jagielski ScFilterDescriptor::ScFilterDescriptor(ScDocShell* pDocShell)
1516*b1cdbd2cSJim Jagielski :
1517*b1cdbd2cSJim Jagielski ScFilterDescriptorBase(pDocShell)
1518*b1cdbd2cSJim Jagielski {
1519*b1cdbd2cSJim Jagielski }
1520*b1cdbd2cSJim Jagielski
~ScFilterDescriptor()1521*b1cdbd2cSJim Jagielski ScFilterDescriptor::~ScFilterDescriptor()
1522*b1cdbd2cSJim Jagielski {
1523*b1cdbd2cSJim Jagielski }
1524*b1cdbd2cSJim Jagielski
GetData(ScQueryParam & rParam) const1525*b1cdbd2cSJim Jagielski void ScFilterDescriptor::GetData( ScQueryParam& rParam ) const
1526*b1cdbd2cSJim Jagielski {
1527*b1cdbd2cSJim Jagielski rParam = aStoredParam; // Abfrage fuer Interface
1528*b1cdbd2cSJim Jagielski }
1529*b1cdbd2cSJim Jagielski
PutData(const ScQueryParam & rParam)1530*b1cdbd2cSJim Jagielski void ScFilterDescriptor::PutData( const ScQueryParam& rParam )
1531*b1cdbd2cSJim Jagielski {
1532*b1cdbd2cSJim Jagielski aStoredParam = rParam; // vom Interface gesetzt
1533*b1cdbd2cSJim Jagielski }
1534*b1cdbd2cSJim Jagielski
SetParam(const ScQueryParam & rNew)1535*b1cdbd2cSJim Jagielski void ScFilterDescriptor::SetParam( const ScQueryParam& rNew )
1536*b1cdbd2cSJim Jagielski {
1537*b1cdbd2cSJim Jagielski aStoredParam = rNew; // von aussen gesetzt
1538*b1cdbd2cSJim Jagielski }
1539*b1cdbd2cSJim Jagielski
1540*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
1541*b1cdbd2cSJim Jagielski
ScRangeFilterDescriptor(ScDocShell * pDocShell,ScDatabaseRangeObj * pPar)1542*b1cdbd2cSJim Jagielski ScRangeFilterDescriptor::ScRangeFilterDescriptor(ScDocShell* pDocShell, ScDatabaseRangeObj* pPar) :
1543*b1cdbd2cSJim Jagielski ScFilterDescriptorBase(pDocShell),
1544*b1cdbd2cSJim Jagielski pParent(pPar)
1545*b1cdbd2cSJim Jagielski {
1546*b1cdbd2cSJim Jagielski if (pParent)
1547*b1cdbd2cSJim Jagielski pParent->acquire();
1548*b1cdbd2cSJim Jagielski }
1549*b1cdbd2cSJim Jagielski
~ScRangeFilterDescriptor()1550*b1cdbd2cSJim Jagielski ScRangeFilterDescriptor::~ScRangeFilterDescriptor()
1551*b1cdbd2cSJim Jagielski {
1552*b1cdbd2cSJim Jagielski if (pParent)
1553*b1cdbd2cSJim Jagielski pParent->release();
1554*b1cdbd2cSJim Jagielski }
1555*b1cdbd2cSJim Jagielski
GetData(ScQueryParam & rParam) const1556*b1cdbd2cSJim Jagielski void ScRangeFilterDescriptor::GetData( ScQueryParam& rParam ) const
1557*b1cdbd2cSJim Jagielski {
1558*b1cdbd2cSJim Jagielski if (pParent)
1559*b1cdbd2cSJim Jagielski pParent->GetQueryParam( rParam );
1560*b1cdbd2cSJim Jagielski }
1561*b1cdbd2cSJim Jagielski
PutData(const ScQueryParam & rParam)1562*b1cdbd2cSJim Jagielski void ScRangeFilterDescriptor::PutData( const ScQueryParam& rParam )
1563*b1cdbd2cSJim Jagielski {
1564*b1cdbd2cSJim Jagielski if (pParent)
1565*b1cdbd2cSJim Jagielski pParent->SetQueryParam( rParam );
1566*b1cdbd2cSJim Jagielski }
1567*b1cdbd2cSJim Jagielski
1568*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
1569*b1cdbd2cSJim Jagielski
ScDataPilotFilterDescriptor(ScDocShell * pDocShell,ScDataPilotDescriptorBase * pPar)1570*b1cdbd2cSJim Jagielski ScDataPilotFilterDescriptor::ScDataPilotFilterDescriptor(ScDocShell* pDocShell, ScDataPilotDescriptorBase* pPar) :
1571*b1cdbd2cSJim Jagielski ScFilterDescriptorBase(pDocShell),
1572*b1cdbd2cSJim Jagielski pParent(pPar)
1573*b1cdbd2cSJim Jagielski {
1574*b1cdbd2cSJim Jagielski if (pParent)
1575*b1cdbd2cSJim Jagielski pParent->acquire();
1576*b1cdbd2cSJim Jagielski }
1577*b1cdbd2cSJim Jagielski
~ScDataPilotFilterDescriptor()1578*b1cdbd2cSJim Jagielski ScDataPilotFilterDescriptor::~ScDataPilotFilterDescriptor()
1579*b1cdbd2cSJim Jagielski {
1580*b1cdbd2cSJim Jagielski if (pParent)
1581*b1cdbd2cSJim Jagielski pParent->release();
1582*b1cdbd2cSJim Jagielski }
1583*b1cdbd2cSJim Jagielski
GetData(ScQueryParam & rParam) const1584*b1cdbd2cSJim Jagielski void ScDataPilotFilterDescriptor::GetData( ScQueryParam& rParam ) const
1585*b1cdbd2cSJim Jagielski {
1586*b1cdbd2cSJim Jagielski if (pParent)
1587*b1cdbd2cSJim Jagielski {
1588*b1cdbd2cSJim Jagielski ScDPObject* pDPObj = pParent->GetDPObject();
1589*b1cdbd2cSJim Jagielski if (pDPObj && pDPObj->IsSheetData())
1590*b1cdbd2cSJim Jagielski rParam = pDPObj->GetSheetDesc()->aQueryParam;
1591*b1cdbd2cSJim Jagielski }
1592*b1cdbd2cSJim Jagielski }
1593*b1cdbd2cSJim Jagielski
PutData(const ScQueryParam & rParam)1594*b1cdbd2cSJim Jagielski void ScDataPilotFilterDescriptor::PutData( const ScQueryParam& rParam )
1595*b1cdbd2cSJim Jagielski {
1596*b1cdbd2cSJim Jagielski if (pParent)
1597*b1cdbd2cSJim Jagielski {
1598*b1cdbd2cSJim Jagielski ScDPObject* pDPObj = pParent->GetDPObject();
1599*b1cdbd2cSJim Jagielski if (pDPObj)
1600*b1cdbd2cSJim Jagielski {
1601*b1cdbd2cSJim Jagielski ScSheetSourceDesc aSheetDesc;
1602*b1cdbd2cSJim Jagielski if (pDPObj->IsSheetData())
1603*b1cdbd2cSJim Jagielski aSheetDesc = *pDPObj->GetSheetDesc();
1604*b1cdbd2cSJim Jagielski aSheetDesc.aQueryParam = rParam;
1605*b1cdbd2cSJim Jagielski pDPObj->SetSheetDesc(aSheetDesc);
1606*b1cdbd2cSJim Jagielski pParent->SetDPObject(pDPObj);
1607*b1cdbd2cSJim Jagielski }
1608*b1cdbd2cSJim Jagielski }
1609*b1cdbd2cSJim Jagielski }
1610*b1cdbd2cSJim Jagielski
1611*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
1612*b1cdbd2cSJim Jagielski
ScDatabaseRangeObj(ScDocShell * pDocSh,const String & rNm)1613*b1cdbd2cSJim Jagielski ScDatabaseRangeObj::ScDatabaseRangeObj(ScDocShell* pDocSh, const String& rNm) :
1614*b1cdbd2cSJim Jagielski pDocShell( pDocSh ),
1615*b1cdbd2cSJim Jagielski aName( rNm ),
1616*b1cdbd2cSJim Jagielski aPropSet( lcl_GetDBRangePropertyMap() )
1617*b1cdbd2cSJim Jagielski {
1618*b1cdbd2cSJim Jagielski pDocShell->GetDocument()->AddUnoObject(*this);
1619*b1cdbd2cSJim Jagielski }
1620*b1cdbd2cSJim Jagielski
~ScDatabaseRangeObj()1621*b1cdbd2cSJim Jagielski ScDatabaseRangeObj::~ScDatabaseRangeObj()
1622*b1cdbd2cSJim Jagielski {
1623*b1cdbd2cSJim Jagielski if (pDocShell)
1624*b1cdbd2cSJim Jagielski pDocShell->GetDocument()->RemoveUnoObject(*this);
1625*b1cdbd2cSJim Jagielski }
1626*b1cdbd2cSJim Jagielski
Notify(SfxBroadcaster &,const SfxHint & rHint)1627*b1cdbd2cSJim Jagielski void ScDatabaseRangeObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
1628*b1cdbd2cSJim Jagielski {
1629*b1cdbd2cSJim Jagielski
1630*b1cdbd2cSJim Jagielski if ( rHint.ISA( SfxSimpleHint ) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
1631*b1cdbd2cSJim Jagielski pDocShell = NULL; // ungueltig geworden
1632*b1cdbd2cSJim Jagielski else if ( rHint.ISA (ScDBRangeRefreshedHint) )
1633*b1cdbd2cSJim Jagielski {
1634*b1cdbd2cSJim Jagielski ScDBData* pDBData = GetDBData_Impl();
1635*b1cdbd2cSJim Jagielski const ScDBRangeRefreshedHint& rRef = (const ScDBRangeRefreshedHint&)rHint;
1636*b1cdbd2cSJim Jagielski ScImportParam aParam;
1637*b1cdbd2cSJim Jagielski pDBData->GetImportParam(aParam);
1638*b1cdbd2cSJim Jagielski if (aParam == rRef.GetImportParam())
1639*b1cdbd2cSJim Jagielski Refreshed_Impl();
1640*b1cdbd2cSJim Jagielski }
1641*b1cdbd2cSJim Jagielski }
1642*b1cdbd2cSJim Jagielski
1643*b1cdbd2cSJim Jagielski // Hilfsfuntionen
1644*b1cdbd2cSJim Jagielski
GetDBData_Impl() const1645*b1cdbd2cSJim Jagielski ScDBData* ScDatabaseRangeObj::GetDBData_Impl() const
1646*b1cdbd2cSJim Jagielski {
1647*b1cdbd2cSJim Jagielski ScDBData* pRet = NULL;
1648*b1cdbd2cSJim Jagielski if (pDocShell)
1649*b1cdbd2cSJim Jagielski {
1650*b1cdbd2cSJim Jagielski ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection();
1651*b1cdbd2cSJim Jagielski if (pNames)
1652*b1cdbd2cSJim Jagielski {
1653*b1cdbd2cSJim Jagielski sal_uInt16 nPos = 0;
1654*b1cdbd2cSJim Jagielski if (pNames->SearchName( aName, nPos ))
1655*b1cdbd2cSJim Jagielski pRet = (*pNames)[nPos];
1656*b1cdbd2cSJim Jagielski }
1657*b1cdbd2cSJim Jagielski }
1658*b1cdbd2cSJim Jagielski return pRet;
1659*b1cdbd2cSJim Jagielski }
1660*b1cdbd2cSJim Jagielski
1661*b1cdbd2cSJim Jagielski // XNamed
1662*b1cdbd2cSJim Jagielski
getName()1663*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL ScDatabaseRangeObj::getName() throw(uno::RuntimeException)
1664*b1cdbd2cSJim Jagielski {
1665*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1666*b1cdbd2cSJim Jagielski return aName;
1667*b1cdbd2cSJim Jagielski }
1668*b1cdbd2cSJim Jagielski
setName(const rtl::OUString & aNewName)1669*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangeObj::setName( const rtl::OUString& aNewName )
1670*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1671*b1cdbd2cSJim Jagielski {
1672*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1673*b1cdbd2cSJim Jagielski if (pDocShell)
1674*b1cdbd2cSJim Jagielski {
1675*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
1676*b1cdbd2cSJim Jagielski String aNewStr(aNewName);
1677*b1cdbd2cSJim Jagielski sal_Bool bOk = aFunc.RenameDBRange( aName, aNewStr, sal_True );
1678*b1cdbd2cSJim Jagielski if (bOk)
1679*b1cdbd2cSJim Jagielski aName = aNewStr;
1680*b1cdbd2cSJim Jagielski }
1681*b1cdbd2cSJim Jagielski }
1682*b1cdbd2cSJim Jagielski
1683*b1cdbd2cSJim Jagielski // XDatabaseRange
1684*b1cdbd2cSJim Jagielski
getDataArea()1685*b1cdbd2cSJim Jagielski table::CellRangeAddress SAL_CALL ScDatabaseRangeObj::getDataArea() throw(uno::RuntimeException)
1686*b1cdbd2cSJim Jagielski {
1687*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1688*b1cdbd2cSJim Jagielski table::CellRangeAddress aAddress;
1689*b1cdbd2cSJim Jagielski ScDBData* pData = GetDBData_Impl();
1690*b1cdbd2cSJim Jagielski if (pData)
1691*b1cdbd2cSJim Jagielski {
1692*b1cdbd2cSJim Jagielski ScRange aRange;
1693*b1cdbd2cSJim Jagielski pData->GetArea(aRange);
1694*b1cdbd2cSJim Jagielski aAddress.Sheet = aRange.aStart.Tab();
1695*b1cdbd2cSJim Jagielski aAddress.StartColumn = aRange.aStart.Col();
1696*b1cdbd2cSJim Jagielski aAddress.StartRow = aRange.aStart.Row();
1697*b1cdbd2cSJim Jagielski aAddress.EndColumn = aRange.aEnd.Col();
1698*b1cdbd2cSJim Jagielski aAddress.EndRow = aRange.aEnd.Row();
1699*b1cdbd2cSJim Jagielski }
1700*b1cdbd2cSJim Jagielski return aAddress;
1701*b1cdbd2cSJim Jagielski }
1702*b1cdbd2cSJim Jagielski
setDataArea(const table::CellRangeAddress & aDataArea)1703*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangeObj::setDataArea( const table::CellRangeAddress& aDataArea )
1704*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1705*b1cdbd2cSJim Jagielski {
1706*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1707*b1cdbd2cSJim Jagielski ScDBData* pData = GetDBData_Impl();
1708*b1cdbd2cSJim Jagielski if ( pDocShell && pData )
1709*b1cdbd2cSJim Jagielski {
1710*b1cdbd2cSJim Jagielski ScDBData aNewData( *pData );
1711*b1cdbd2cSJim Jagielski //! MoveTo ???
1712*b1cdbd2cSJim Jagielski aNewData.SetArea( aDataArea.Sheet, (SCCOL)aDataArea.StartColumn, (SCROW)aDataArea.StartRow,
1713*b1cdbd2cSJim Jagielski (SCCOL)aDataArea.EndColumn, (SCROW)aDataArea.EndRow );
1714*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
1715*b1cdbd2cSJim Jagielski aFunc.ModifyDBData(aNewData, sal_True);
1716*b1cdbd2cSJim Jagielski }
1717*b1cdbd2cSJim Jagielski }
1718*b1cdbd2cSJim Jagielski
getSortDescriptor()1719*b1cdbd2cSJim Jagielski uno::Sequence<beans::PropertyValue> SAL_CALL ScDatabaseRangeObj::getSortDescriptor()
1720*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1721*b1cdbd2cSJim Jagielski {
1722*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1723*b1cdbd2cSJim Jagielski ScSortParam aParam;
1724*b1cdbd2cSJim Jagielski const ScDBData* pData = GetDBData_Impl();
1725*b1cdbd2cSJim Jagielski if (pData)
1726*b1cdbd2cSJim Jagielski {
1727*b1cdbd2cSJim Jagielski pData->GetSortParam(aParam);
1728*b1cdbd2cSJim Jagielski
1729*b1cdbd2cSJim Jagielski // im SortDescriptor sind die Fields innerhalb des Bereichs gezaehlt
1730*b1cdbd2cSJim Jagielski ScRange aDBRange;
1731*b1cdbd2cSJim Jagielski pData->GetArea(aDBRange);
1732*b1cdbd2cSJim Jagielski SCCOLROW nFieldStart = aParam.bByRow ? static_cast<SCCOLROW>(aDBRange.aStart.Col()) : static_cast<SCCOLROW>(aDBRange.aStart.Row());
1733*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<MAXSORT; i++)
1734*b1cdbd2cSJim Jagielski if ( aParam.bDoSort[i] && aParam.nField[i] >= nFieldStart )
1735*b1cdbd2cSJim Jagielski aParam.nField[i] -= nFieldStart;
1736*b1cdbd2cSJim Jagielski }
1737*b1cdbd2cSJim Jagielski
1738*b1cdbd2cSJim Jagielski uno::Sequence<beans::PropertyValue> aSeq( ScSortDescriptor::GetPropertyCount() );
1739*b1cdbd2cSJim Jagielski ScSortDescriptor::FillProperties( aSeq, aParam );
1740*b1cdbd2cSJim Jagielski return aSeq;
1741*b1cdbd2cSJim Jagielski }
1742*b1cdbd2cSJim Jagielski
GetQueryParam(ScQueryParam & rQueryParam) const1743*b1cdbd2cSJim Jagielski void ScDatabaseRangeObj::GetQueryParam(ScQueryParam& rQueryParam) const
1744*b1cdbd2cSJim Jagielski {
1745*b1cdbd2cSJim Jagielski const ScDBData* pData = GetDBData_Impl();
1746*b1cdbd2cSJim Jagielski if (pData)
1747*b1cdbd2cSJim Jagielski {
1748*b1cdbd2cSJim Jagielski pData->GetQueryParam(rQueryParam);
1749*b1cdbd2cSJim Jagielski
1750*b1cdbd2cSJim Jagielski // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt
1751*b1cdbd2cSJim Jagielski ScRange aDBRange;
1752*b1cdbd2cSJim Jagielski pData->GetArea(aDBRange);
1753*b1cdbd2cSJim Jagielski SCCOLROW nFieldStart = rQueryParam.bByRow ? static_cast<SCCOLROW>(aDBRange.aStart.Col()) : static_cast<SCCOLROW>(aDBRange.aStart.Row());
1754*b1cdbd2cSJim Jagielski SCSIZE nCount = rQueryParam.GetEntryCount();
1755*b1cdbd2cSJim Jagielski for (SCSIZE i=0; i<nCount; i++)
1756*b1cdbd2cSJim Jagielski {
1757*b1cdbd2cSJim Jagielski ScQueryEntry& rEntry = rQueryParam.GetEntry(i);
1758*b1cdbd2cSJim Jagielski if (rEntry.bDoQuery && rEntry.nField >= nFieldStart)
1759*b1cdbd2cSJim Jagielski rEntry.nField -= nFieldStart;
1760*b1cdbd2cSJim Jagielski }
1761*b1cdbd2cSJim Jagielski }
1762*b1cdbd2cSJim Jagielski }
1763*b1cdbd2cSJim Jagielski
SetQueryParam(const ScQueryParam & rQueryParam)1764*b1cdbd2cSJim Jagielski void ScDatabaseRangeObj::SetQueryParam(const ScQueryParam& rQueryParam)
1765*b1cdbd2cSJim Jagielski {
1766*b1cdbd2cSJim Jagielski const ScDBData* pData = GetDBData_Impl();
1767*b1cdbd2cSJim Jagielski if (pData)
1768*b1cdbd2cSJim Jagielski {
1769*b1cdbd2cSJim Jagielski // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt
1770*b1cdbd2cSJim Jagielski ScQueryParam aParam(rQueryParam);
1771*b1cdbd2cSJim Jagielski ScRange aDBRange;
1772*b1cdbd2cSJim Jagielski pData->GetArea(aDBRange);
1773*b1cdbd2cSJim Jagielski SCCOLROW nFieldStart = aParam.bByRow ? static_cast<SCCOLROW>(aDBRange.aStart.Col()) : static_cast<SCCOLROW>(aDBRange.aStart.Row());
1774*b1cdbd2cSJim Jagielski
1775*b1cdbd2cSJim Jagielski SCSIZE nCount = aParam.GetEntryCount();
1776*b1cdbd2cSJim Jagielski for (SCSIZE i=0; i<nCount; i++)
1777*b1cdbd2cSJim Jagielski {
1778*b1cdbd2cSJim Jagielski ScQueryEntry& rEntry = aParam.GetEntry(i);
1779*b1cdbd2cSJim Jagielski if (rEntry.bDoQuery)
1780*b1cdbd2cSJim Jagielski rEntry.nField += nFieldStart;
1781*b1cdbd2cSJim Jagielski }
1782*b1cdbd2cSJim Jagielski
1783*b1cdbd2cSJim Jagielski ScDBData aNewData( *pData );
1784*b1cdbd2cSJim Jagielski aNewData.SetQueryParam(aParam);
1785*b1cdbd2cSJim Jagielski aNewData.SetHeader(aParam.bHasHeader); // not in ScDBData::SetQueryParam
1786*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
1787*b1cdbd2cSJim Jagielski aFunc.ModifyDBData(aNewData, sal_True);
1788*b1cdbd2cSJim Jagielski }
1789*b1cdbd2cSJim Jagielski }
1790*b1cdbd2cSJim Jagielski
getFilterDescriptor()1791*b1cdbd2cSJim Jagielski uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScDatabaseRangeObj::getFilterDescriptor()
1792*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1793*b1cdbd2cSJim Jagielski {
1794*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1795*b1cdbd2cSJim Jagielski return new ScRangeFilterDescriptor(pDocShell, this);
1796*b1cdbd2cSJim Jagielski }
1797*b1cdbd2cSJim Jagielski
GetSubTotalParam(ScSubTotalParam & rSubTotalParam) const1798*b1cdbd2cSJim Jagielski void ScDatabaseRangeObj::GetSubTotalParam(ScSubTotalParam& rSubTotalParam) const
1799*b1cdbd2cSJim Jagielski {
1800*b1cdbd2cSJim Jagielski const ScDBData* pData = GetDBData_Impl();
1801*b1cdbd2cSJim Jagielski if (pData)
1802*b1cdbd2cSJim Jagielski {
1803*b1cdbd2cSJim Jagielski pData->GetSubTotalParam(rSubTotalParam);
1804*b1cdbd2cSJim Jagielski
1805*b1cdbd2cSJim Jagielski // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt
1806*b1cdbd2cSJim Jagielski ScRange aDBRange;
1807*b1cdbd2cSJim Jagielski pData->GetArea(aDBRange);
1808*b1cdbd2cSJim Jagielski SCCOL nFieldStart = aDBRange.aStart.Col();
1809*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
1810*b1cdbd2cSJim Jagielski {
1811*b1cdbd2cSJim Jagielski if ( rSubTotalParam.bGroupActive[i] )
1812*b1cdbd2cSJim Jagielski {
1813*b1cdbd2cSJim Jagielski if ( rSubTotalParam.nField[i] >= nFieldStart )
1814*b1cdbd2cSJim Jagielski rSubTotalParam.nField[i] = sal::static_int_cast<SCCOL>( rSubTotalParam.nField[i] - nFieldStart );
1815*b1cdbd2cSJim Jagielski for (SCCOL j=0; j<rSubTotalParam.nSubTotals[i]; j++)
1816*b1cdbd2cSJim Jagielski if ( rSubTotalParam.pSubTotals[i][j] >= nFieldStart )
1817*b1cdbd2cSJim Jagielski rSubTotalParam.pSubTotals[i][j] =
1818*b1cdbd2cSJim Jagielski sal::static_int_cast<SCCOL>( rSubTotalParam.pSubTotals[i][j] - nFieldStart );
1819*b1cdbd2cSJim Jagielski }
1820*b1cdbd2cSJim Jagielski }
1821*b1cdbd2cSJim Jagielski }
1822*b1cdbd2cSJim Jagielski }
1823*b1cdbd2cSJim Jagielski
SetSubTotalParam(const ScSubTotalParam & rSubTotalParam)1824*b1cdbd2cSJim Jagielski void ScDatabaseRangeObj::SetSubTotalParam(const ScSubTotalParam& rSubTotalParam)
1825*b1cdbd2cSJim Jagielski {
1826*b1cdbd2cSJim Jagielski const ScDBData* pData = GetDBData_Impl();
1827*b1cdbd2cSJim Jagielski if (pData)
1828*b1cdbd2cSJim Jagielski {
1829*b1cdbd2cSJim Jagielski // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt
1830*b1cdbd2cSJim Jagielski ScSubTotalParam aParam(rSubTotalParam);
1831*b1cdbd2cSJim Jagielski ScRange aDBRange;
1832*b1cdbd2cSJim Jagielski pData->GetArea(aDBRange);
1833*b1cdbd2cSJim Jagielski SCCOL nFieldStart = aDBRange.aStart.Col();
1834*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
1835*b1cdbd2cSJim Jagielski {
1836*b1cdbd2cSJim Jagielski if ( aParam.bGroupActive[i] )
1837*b1cdbd2cSJim Jagielski {
1838*b1cdbd2cSJim Jagielski aParam.nField[i] = sal::static_int_cast<SCCOL>( aParam.nField[i] + nFieldStart );
1839*b1cdbd2cSJim Jagielski for (SCCOL j=0; j<aParam.nSubTotals[i]; j++)
1840*b1cdbd2cSJim Jagielski aParam.pSubTotals[i][j] = sal::static_int_cast<SCCOL>( aParam.pSubTotals[i][j] + nFieldStart );
1841*b1cdbd2cSJim Jagielski }
1842*b1cdbd2cSJim Jagielski }
1843*b1cdbd2cSJim Jagielski
1844*b1cdbd2cSJim Jagielski ScDBData aNewData( *pData );
1845*b1cdbd2cSJim Jagielski aNewData.SetSubTotalParam(aParam);
1846*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
1847*b1cdbd2cSJim Jagielski aFunc.ModifyDBData(aNewData, sal_True);
1848*b1cdbd2cSJim Jagielski }
1849*b1cdbd2cSJim Jagielski }
1850*b1cdbd2cSJim Jagielski
getSubTotalDescriptor()1851*b1cdbd2cSJim Jagielski uno::Reference<sheet::XSubTotalDescriptor> SAL_CALL ScDatabaseRangeObj::getSubTotalDescriptor()
1852*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1853*b1cdbd2cSJim Jagielski {
1854*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1855*b1cdbd2cSJim Jagielski return new ScRangeSubTotalDescriptor(this);
1856*b1cdbd2cSJim Jagielski }
1857*b1cdbd2cSJim Jagielski
getImportDescriptor()1858*b1cdbd2cSJim Jagielski uno::Sequence<beans::PropertyValue> SAL_CALL ScDatabaseRangeObj::getImportDescriptor()
1859*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1860*b1cdbd2cSJim Jagielski {
1861*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1862*b1cdbd2cSJim Jagielski ScImportParam aParam;
1863*b1cdbd2cSJim Jagielski const ScDBData* pData = GetDBData_Impl();
1864*b1cdbd2cSJim Jagielski if (pData)
1865*b1cdbd2cSJim Jagielski pData->GetImportParam(aParam);
1866*b1cdbd2cSJim Jagielski
1867*b1cdbd2cSJim Jagielski uno::Sequence<beans::PropertyValue> aSeq( ScImportDescriptor::GetPropertyCount() );
1868*b1cdbd2cSJim Jagielski ScImportDescriptor::FillProperties( aSeq, aParam );
1869*b1cdbd2cSJim Jagielski return aSeq;
1870*b1cdbd2cSJim Jagielski }
1871*b1cdbd2cSJim Jagielski
1872*b1cdbd2cSJim Jagielski // XRefreshable
1873*b1cdbd2cSJim Jagielski
refresh()1874*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangeObj::refresh() throw(uno::RuntimeException)
1875*b1cdbd2cSJim Jagielski {
1876*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1877*b1cdbd2cSJim Jagielski ScDBData* pData = GetDBData_Impl();
1878*b1cdbd2cSJim Jagielski if ( pDocShell && pData )
1879*b1cdbd2cSJim Jagielski {
1880*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
1881*b1cdbd2cSJim Jagielski
1882*b1cdbd2cSJim Jagielski // Import zu wiederholen?
1883*b1cdbd2cSJim Jagielski sal_Bool bContinue = sal_True;
1884*b1cdbd2cSJim Jagielski ScImportParam aImportParam;
1885*b1cdbd2cSJim Jagielski pData->GetImportParam( aImportParam );
1886*b1cdbd2cSJim Jagielski if (aImportParam.bImport && !pData->HasImportSelection())
1887*b1cdbd2cSJim Jagielski {
1888*b1cdbd2cSJim Jagielski SCTAB nTab;
1889*b1cdbd2cSJim Jagielski SCCOL nDummyCol;
1890*b1cdbd2cSJim Jagielski SCROW nDummyRow;
1891*b1cdbd2cSJim Jagielski pData->GetArea( nTab, nDummyCol,nDummyRow,nDummyCol,nDummyRow );
1892*b1cdbd2cSJim Jagielski bContinue = aFunc.DoImport( nTab, aImportParam, NULL, sal_True ); //! Api-Flag as parameter
1893*b1cdbd2cSJim Jagielski }
1894*b1cdbd2cSJim Jagielski
1895*b1cdbd2cSJim Jagielski // interne Operationen (sort, query, subtotal) nur, wenn kein Fehler
1896*b1cdbd2cSJim Jagielski if (bContinue)
1897*b1cdbd2cSJim Jagielski aFunc.RepeatDB( pData->GetName(), sal_True, sal_True );
1898*b1cdbd2cSJim Jagielski }
1899*b1cdbd2cSJim Jagielski }
1900*b1cdbd2cSJim Jagielski
addRefreshListener(const uno::Reference<util::XRefreshListener> & xListener)1901*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangeObj::addRefreshListener(
1902*b1cdbd2cSJim Jagielski const uno::Reference<util::XRefreshListener >& xListener )
1903*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1904*b1cdbd2cSJim Jagielski {
1905*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1906*b1cdbd2cSJim Jagielski uno::Reference<util::XRefreshListener>* pObj =
1907*b1cdbd2cSJim Jagielski new uno::Reference<util::XRefreshListener>( xListener );
1908*b1cdbd2cSJim Jagielski aRefreshListeners.Insert( pObj, aRefreshListeners.Count() );
1909*b1cdbd2cSJim Jagielski
1910*b1cdbd2cSJim Jagielski // hold one additional ref to keep this object alive as long as there are listeners
1911*b1cdbd2cSJim Jagielski if ( aRefreshListeners.Count() == 1 )
1912*b1cdbd2cSJim Jagielski acquire();
1913*b1cdbd2cSJim Jagielski }
1914*b1cdbd2cSJim Jagielski
removeRefreshListener(const uno::Reference<util::XRefreshListener> & xListener)1915*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangeObj::removeRefreshListener(
1916*b1cdbd2cSJim Jagielski const uno::Reference<util::XRefreshListener >& xListener )
1917*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1918*b1cdbd2cSJim Jagielski {
1919*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1920*b1cdbd2cSJim Jagielski sal_uInt16 nCount = aRefreshListeners.Count();
1921*b1cdbd2cSJim Jagielski for ( sal_uInt16 n=nCount; n--; )
1922*b1cdbd2cSJim Jagielski {
1923*b1cdbd2cSJim Jagielski uno::Reference<util::XRefreshListener>* pObj = aRefreshListeners[n];
1924*b1cdbd2cSJim Jagielski if ( *pObj == xListener )
1925*b1cdbd2cSJim Jagielski {
1926*b1cdbd2cSJim Jagielski aRefreshListeners.DeleteAndDestroy( n );
1927*b1cdbd2cSJim Jagielski if ( aRefreshListeners.Count() == 0 )
1928*b1cdbd2cSJim Jagielski release(); // release ref for listeners
1929*b1cdbd2cSJim Jagielski break;
1930*b1cdbd2cSJim Jagielski }
1931*b1cdbd2cSJim Jagielski }
1932*b1cdbd2cSJim Jagielski }
1933*b1cdbd2cSJim Jagielski
Refreshed_Impl()1934*b1cdbd2cSJim Jagielski void ScDatabaseRangeObj::Refreshed_Impl()
1935*b1cdbd2cSJim Jagielski {
1936*b1cdbd2cSJim Jagielski lang::EventObject aEvent;
1937*b1cdbd2cSJim Jagielski aEvent.Source = (cppu::OWeakObject*)this;
1938*b1cdbd2cSJim Jagielski for ( sal_uInt16 n=0; n<aRefreshListeners.Count(); n++ )
1939*b1cdbd2cSJim Jagielski (*aRefreshListeners[n])->refreshed( aEvent );
1940*b1cdbd2cSJim Jagielski }
1941*b1cdbd2cSJim Jagielski
1942*b1cdbd2cSJim Jagielski // XCellRangeSource
1943*b1cdbd2cSJim Jagielski
getReferredCells()1944*b1cdbd2cSJim Jagielski uno::Reference<table::XCellRange> SAL_CALL ScDatabaseRangeObj::getReferredCells()
1945*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1946*b1cdbd2cSJim Jagielski {
1947*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1948*b1cdbd2cSJim Jagielski ScRange aRange;
1949*b1cdbd2cSJim Jagielski ScDBData* pData = GetDBData_Impl();
1950*b1cdbd2cSJim Jagielski if ( pData )
1951*b1cdbd2cSJim Jagielski {
1952*b1cdbd2cSJim Jagielski //! static Funktion um ScCellObj/ScCellRangeObj zu erzeugen am ScCellRangeObj ???
1953*b1cdbd2cSJim Jagielski
1954*b1cdbd2cSJim Jagielski pData->GetArea(aRange);
1955*b1cdbd2cSJim Jagielski if ( aRange.aStart == aRange.aEnd )
1956*b1cdbd2cSJim Jagielski return new ScCellObj( pDocShell, aRange.aStart );
1957*b1cdbd2cSJim Jagielski else
1958*b1cdbd2cSJim Jagielski return new ScCellRangeObj( pDocShell, aRange );
1959*b1cdbd2cSJim Jagielski }
1960*b1cdbd2cSJim Jagielski return NULL;
1961*b1cdbd2cSJim Jagielski }
1962*b1cdbd2cSJim Jagielski
1963*b1cdbd2cSJim Jagielski // XPropertySet
1964*b1cdbd2cSJim Jagielski
getPropertySetInfo()1965*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySetInfo> SAL_CALL ScDatabaseRangeObj::getPropertySetInfo()
1966*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1967*b1cdbd2cSJim Jagielski {
1968*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1969*b1cdbd2cSJim Jagielski static uno::Reference<beans::XPropertySetInfo> aRef(
1970*b1cdbd2cSJim Jagielski new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
1971*b1cdbd2cSJim Jagielski return aRef;
1972*b1cdbd2cSJim Jagielski }
1973*b1cdbd2cSJim Jagielski
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any & aValue)1974*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangeObj::setPropertyValue(
1975*b1cdbd2cSJim Jagielski const rtl::OUString& aPropertyName, const uno::Any& aValue )
1976*b1cdbd2cSJim Jagielski throw(beans::UnknownPropertyException, beans::PropertyVetoException,
1977*b1cdbd2cSJim Jagielski lang::IllegalArgumentException, lang::WrappedTargetException,
1978*b1cdbd2cSJim Jagielski uno::RuntimeException)
1979*b1cdbd2cSJim Jagielski {
1980*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
1981*b1cdbd2cSJim Jagielski ScDBData* pData = GetDBData_Impl();
1982*b1cdbd2cSJim Jagielski if ( pDocShell && pData )
1983*b1cdbd2cSJim Jagielski {
1984*b1cdbd2cSJim Jagielski ScDBData aNewData( *pData );
1985*b1cdbd2cSJim Jagielski sal_Bool bDo = sal_True;
1986*b1cdbd2cSJim Jagielski
1987*b1cdbd2cSJim Jagielski String aString(aPropertyName);
1988*b1cdbd2cSJim Jagielski if ( aString.EqualsAscii( SC_UNONAME_KEEPFORM ) )
1989*b1cdbd2cSJim Jagielski aNewData.SetKeepFmt( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
1990*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNONAME_MOVCELLS ) )
1991*b1cdbd2cSJim Jagielski aNewData.SetDoSize( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
1992*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNONAME_STRIPDAT ) )
1993*b1cdbd2cSJim Jagielski aNewData.SetStripData( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
1994*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_AUTOFLT ))
1995*b1cdbd2cSJim Jagielski {
1996*b1cdbd2cSJim Jagielski sal_Bool bAutoFilter(ScUnoHelpFunctions::GetBoolFromAny( aValue ));
1997*b1cdbd2cSJim Jagielski aNewData.SetAutoFilter(bAutoFilter);
1998*b1cdbd2cSJim Jagielski ScRange aRange;
1999*b1cdbd2cSJim Jagielski aNewData.GetArea(aRange);
2000*b1cdbd2cSJim Jagielski ScDocument* pDoc = pDocShell->GetDocument();
2001*b1cdbd2cSJim Jagielski if (bAutoFilter && pDoc)
2002*b1cdbd2cSJim Jagielski pDoc->ApplyFlagsTab( aRange.aStart.Col(), aRange.aStart.Row(),
2003*b1cdbd2cSJim Jagielski aRange.aEnd.Col(), aRange.aStart.Row(),
2004*b1cdbd2cSJim Jagielski aRange.aStart.Tab(), SC_MF_AUTO );
2005*b1cdbd2cSJim Jagielski else if (!bAutoFilter && pDoc)
2006*b1cdbd2cSJim Jagielski pDoc->RemoveFlagsTab(aRange.aStart.Col(), aRange.aStart.Row(),
2007*b1cdbd2cSJim Jagielski aRange.aEnd.Col(), aRange.aStart.Row(),
2008*b1cdbd2cSJim Jagielski aRange.aStart.Tab(), SC_MF_AUTO );
2009*b1cdbd2cSJim Jagielski ScRange aPaintRange(aRange.aStart, aRange.aEnd);
2010*b1cdbd2cSJim Jagielski aPaintRange.aEnd.SetRow(aPaintRange.aStart.Row());
2011*b1cdbd2cSJim Jagielski pDocShell->PostPaint(aPaintRange, PAINT_GRID);
2012*b1cdbd2cSJim Jagielski }
2013*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_USEFLTCRT ))
2014*b1cdbd2cSJim Jagielski {
2015*b1cdbd2cSJim Jagielski if (ScUnoHelpFunctions::GetBoolFromAny( aValue ))
2016*b1cdbd2cSJim Jagielski {
2017*b1cdbd2cSJim Jagielski ScRange aRange;
2018*b1cdbd2cSJim Jagielski aNewData.GetAdvancedQuerySource(aRange);
2019*b1cdbd2cSJim Jagielski aNewData.SetAdvancedQuerySource(&aRange);
2020*b1cdbd2cSJim Jagielski }
2021*b1cdbd2cSJim Jagielski else
2022*b1cdbd2cSJim Jagielski aNewData.SetAdvancedQuerySource(NULL);
2023*b1cdbd2cSJim Jagielski }
2024*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_FLTCRT ))
2025*b1cdbd2cSJim Jagielski {
2026*b1cdbd2cSJim Jagielski table::CellRangeAddress aRange;
2027*b1cdbd2cSJim Jagielski if (aValue >>= aRange)
2028*b1cdbd2cSJim Jagielski {
2029*b1cdbd2cSJim Jagielski ScRange aCoreRange;
2030*b1cdbd2cSJim Jagielski ScUnoConversion::FillScRange(aCoreRange, aRange);
2031*b1cdbd2cSJim Jagielski
2032*b1cdbd2cSJim Jagielski aNewData.SetAdvancedQuerySource(&aCoreRange);
2033*b1cdbd2cSJim Jagielski }
2034*b1cdbd2cSJim Jagielski }
2035*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_FROMSELECT ))
2036*b1cdbd2cSJim Jagielski {
2037*b1cdbd2cSJim Jagielski aNewData.SetImportSelection(::cppu::any2bool(aValue));
2038*b1cdbd2cSJim Jagielski }
2039*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_REFPERIOD ))
2040*b1cdbd2cSJim Jagielski {
2041*b1cdbd2cSJim Jagielski sal_Int32 nRefresh = 0;
2042*b1cdbd2cSJim Jagielski if (aValue >>= nRefresh)
2043*b1cdbd2cSJim Jagielski {
2044*b1cdbd2cSJim Jagielski ScDocument* pDoc = pDocShell->GetDocument();
2045*b1cdbd2cSJim Jagielski aNewData.SetRefreshDelay(nRefresh);
2046*b1cdbd2cSJim Jagielski if (pDoc && pDoc->GetDBCollection())
2047*b1cdbd2cSJim Jagielski {
2048*b1cdbd2cSJim Jagielski aNewData.SetRefreshHandler( pDoc->GetDBCollection()->GetRefreshHandler() );
2049*b1cdbd2cSJim Jagielski aNewData.SetRefreshControl( pDoc->GetRefreshTimerControlAddress() );
2050*b1cdbd2cSJim Jagielski }
2051*b1cdbd2cSJim Jagielski }
2052*b1cdbd2cSJim Jagielski }
2053*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_CONRES ))
2054*b1cdbd2cSJim Jagielski {
2055*b1cdbd2cSJim Jagielski }
2056*b1cdbd2cSJim Jagielski else
2057*b1cdbd2cSJim Jagielski bDo = sal_False;
2058*b1cdbd2cSJim Jagielski
2059*b1cdbd2cSJim Jagielski if (bDo)
2060*b1cdbd2cSJim Jagielski {
2061*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
2062*b1cdbd2cSJim Jagielski aFunc.ModifyDBData(aNewData, sal_True);
2063*b1cdbd2cSJim Jagielski }
2064*b1cdbd2cSJim Jagielski }
2065*b1cdbd2cSJim Jagielski }
2066*b1cdbd2cSJim Jagielski
getPropertyValue(const rtl::OUString & aPropertyName)2067*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScDatabaseRangeObj::getPropertyValue( const rtl::OUString& aPropertyName )
2068*b1cdbd2cSJim Jagielski throw(beans::UnknownPropertyException, lang::WrappedTargetException,
2069*b1cdbd2cSJim Jagielski uno::RuntimeException)
2070*b1cdbd2cSJim Jagielski {
2071*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2072*b1cdbd2cSJim Jagielski uno::Any aRet;
2073*b1cdbd2cSJim Jagielski ScDBData* pData = GetDBData_Impl();
2074*b1cdbd2cSJim Jagielski if ( pData )
2075*b1cdbd2cSJim Jagielski {
2076*b1cdbd2cSJim Jagielski String aString(aPropertyName);
2077*b1cdbd2cSJim Jagielski if ( aString.EqualsAscii( SC_UNONAME_KEEPFORM ) )
2078*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, pData->IsKeepFmt() );
2079*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNONAME_MOVCELLS ) )
2080*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, pData->IsDoSize() );
2081*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNONAME_STRIPDAT ) )
2082*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, pData->IsStripData() );
2083*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNONAME_ISUSER ) )
2084*b1cdbd2cSJim Jagielski {
2085*b1cdbd2cSJim Jagielski // all database ranges except "unnamed" are user defined
2086*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet,
2087*b1cdbd2cSJim Jagielski ( pData->GetName() != ScGlobal::GetRscString(STR_DB_NONAME) ) );
2088*b1cdbd2cSJim Jagielski }
2089*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNO_LINKDISPBIT ) )
2090*b1cdbd2cSJim Jagielski {
2091*b1cdbd2cSJim Jagielski // no target bitmaps for individual entries (would be all equal)
2092*b1cdbd2cSJim Jagielski // ScLinkTargetTypeObj::SetLinkTargetBitmap( aRet, SC_LINKTARGETTYPE_DBAREA );
2093*b1cdbd2cSJim Jagielski }
2094*b1cdbd2cSJim Jagielski else if ( aString.EqualsAscii( SC_UNO_LINKDISPNAME ) )
2095*b1cdbd2cSJim Jagielski aRet <<= rtl::OUString( aName );
2096*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_AUTOFLT ))
2097*b1cdbd2cSJim Jagielski {
2098*b1cdbd2cSJim Jagielski sal_Bool bAutoFilter(GetDBData_Impl()->HasAutoFilter());
2099*b1cdbd2cSJim Jagielski
2100*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, bAutoFilter );
2101*b1cdbd2cSJim Jagielski }
2102*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_USEFLTCRT ))
2103*b1cdbd2cSJim Jagielski {
2104*b1cdbd2cSJim Jagielski ScRange aRange;
2105*b1cdbd2cSJim Jagielski sal_Bool bIsAdvancedSource(GetDBData_Impl()->GetAdvancedQuerySource(aRange));
2106*b1cdbd2cSJim Jagielski
2107*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, bIsAdvancedSource );
2108*b1cdbd2cSJim Jagielski }
2109*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_FLTCRT ))
2110*b1cdbd2cSJim Jagielski {
2111*b1cdbd2cSJim Jagielski table::CellRangeAddress aRange;
2112*b1cdbd2cSJim Jagielski ScRange aCoreRange;
2113*b1cdbd2cSJim Jagielski if (GetDBData_Impl()->GetAdvancedQuerySource(aCoreRange))
2114*b1cdbd2cSJim Jagielski ScUnoConversion::FillApiRange(aRange, aCoreRange);
2115*b1cdbd2cSJim Jagielski
2116*b1cdbd2cSJim Jagielski aRet <<= aRange;
2117*b1cdbd2cSJim Jagielski }
2118*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_FROMSELECT ))
2119*b1cdbd2cSJim Jagielski {
2120*b1cdbd2cSJim Jagielski ScUnoHelpFunctions::SetBoolInAny( aRet, GetDBData_Impl()->HasImportSelection() );
2121*b1cdbd2cSJim Jagielski }
2122*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_REFPERIOD ))
2123*b1cdbd2cSJim Jagielski {
2124*b1cdbd2cSJim Jagielski sal_Int32 nRefresh(GetDBData_Impl()->GetRefreshDelay());
2125*b1cdbd2cSJim Jagielski aRet <<= nRefresh;
2126*b1cdbd2cSJim Jagielski }
2127*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_CONRES ))
2128*b1cdbd2cSJim Jagielski {
2129*b1cdbd2cSJim Jagielski }
2130*b1cdbd2cSJim Jagielski else if (aString.EqualsAscii( SC_UNONAME_TOKENINDEX ))
2131*b1cdbd2cSJim Jagielski {
2132*b1cdbd2cSJim Jagielski // get index for use in formula tokens (read-only)
2133*b1cdbd2cSJim Jagielski aRet <<= static_cast<sal_Int32>(GetDBData_Impl()->GetIndex());
2134*b1cdbd2cSJim Jagielski }
2135*b1cdbd2cSJim Jagielski }
2136*b1cdbd2cSJim Jagielski return aRet;
2137*b1cdbd2cSJim Jagielski }
2138*b1cdbd2cSJim Jagielski
SC_IMPL_DUMMY_PROPERTY_LISTENER(ScDatabaseRangeObj)2139*b1cdbd2cSJim Jagielski SC_IMPL_DUMMY_PROPERTY_LISTENER( ScDatabaseRangeObj )
2140*b1cdbd2cSJim Jagielski
2141*b1cdbd2cSJim Jagielski // XServiceInfo
2142*b1cdbd2cSJim Jagielski
2143*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL ScDatabaseRangeObj::getImplementationName() throw(uno::RuntimeException)
2144*b1cdbd2cSJim Jagielski {
2145*b1cdbd2cSJim Jagielski return rtl::OUString::createFromAscii( "ScDatabaseRangeObj" );
2146*b1cdbd2cSJim Jagielski }
2147*b1cdbd2cSJim Jagielski
supportsService(const rtl::OUString & rServiceName)2148*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScDatabaseRangeObj::supportsService( const rtl::OUString& rServiceName )
2149*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2150*b1cdbd2cSJim Jagielski {
2151*b1cdbd2cSJim Jagielski String aServiceStr( rServiceName );
2152*b1cdbd2cSJim Jagielski return aServiceStr.EqualsAscii( SCDATABASERANGEOBJ_SERVICE ) ||
2153*b1cdbd2cSJim Jagielski aServiceStr.EqualsAscii( SCLINKTARGET_SERVICE );
2154*b1cdbd2cSJim Jagielski }
2155*b1cdbd2cSJim Jagielski
getSupportedServiceNames()2156*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> SAL_CALL ScDatabaseRangeObj::getSupportedServiceNames()
2157*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2158*b1cdbd2cSJim Jagielski {
2159*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> aRet(2);
2160*b1cdbd2cSJim Jagielski rtl::OUString* pArray = aRet.getArray();
2161*b1cdbd2cSJim Jagielski pArray[0] = rtl::OUString::createFromAscii( SCDATABASERANGEOBJ_SERVICE );
2162*b1cdbd2cSJim Jagielski pArray[1] = rtl::OUString::createFromAscii( SCLINKTARGET_SERVICE );
2163*b1cdbd2cSJim Jagielski return aRet;
2164*b1cdbd2cSJim Jagielski }
2165*b1cdbd2cSJim Jagielski
2166*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
2167*b1cdbd2cSJim Jagielski
ScDatabaseRangesObj(ScDocShell * pDocSh)2168*b1cdbd2cSJim Jagielski ScDatabaseRangesObj::ScDatabaseRangesObj(ScDocShell* pDocSh) :
2169*b1cdbd2cSJim Jagielski pDocShell( pDocSh )
2170*b1cdbd2cSJim Jagielski {
2171*b1cdbd2cSJim Jagielski pDocShell->GetDocument()->AddUnoObject(*this);
2172*b1cdbd2cSJim Jagielski }
2173*b1cdbd2cSJim Jagielski
~ScDatabaseRangesObj()2174*b1cdbd2cSJim Jagielski ScDatabaseRangesObj::~ScDatabaseRangesObj()
2175*b1cdbd2cSJim Jagielski {
2176*b1cdbd2cSJim Jagielski if (pDocShell)
2177*b1cdbd2cSJim Jagielski pDocShell->GetDocument()->RemoveUnoObject(*this);
2178*b1cdbd2cSJim Jagielski }
2179*b1cdbd2cSJim Jagielski
Notify(SfxBroadcaster &,const SfxHint & rHint)2180*b1cdbd2cSJim Jagielski void ScDatabaseRangesObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
2181*b1cdbd2cSJim Jagielski {
2182*b1cdbd2cSJim Jagielski // Referenz-Update interessiert hier nicht
2183*b1cdbd2cSJim Jagielski
2184*b1cdbd2cSJim Jagielski if ( rHint.ISA( SfxSimpleHint ) &&
2185*b1cdbd2cSJim Jagielski ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
2186*b1cdbd2cSJim Jagielski {
2187*b1cdbd2cSJim Jagielski pDocShell = NULL; // ungueltig geworden
2188*b1cdbd2cSJim Jagielski }
2189*b1cdbd2cSJim Jagielski }
2190*b1cdbd2cSJim Jagielski
2191*b1cdbd2cSJim Jagielski // XDatabaseRanges
2192*b1cdbd2cSJim Jagielski
GetObjectByIndex_Impl(sal_uInt16 nIndex)2193*b1cdbd2cSJim Jagielski ScDatabaseRangeObj* ScDatabaseRangesObj::GetObjectByIndex_Impl(sal_uInt16 nIndex)
2194*b1cdbd2cSJim Jagielski {
2195*b1cdbd2cSJim Jagielski if (pDocShell)
2196*b1cdbd2cSJim Jagielski {
2197*b1cdbd2cSJim Jagielski ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection();
2198*b1cdbd2cSJim Jagielski if (pNames && nIndex < pNames->GetCount())
2199*b1cdbd2cSJim Jagielski return new ScDatabaseRangeObj( pDocShell, (*pNames)[nIndex]->GetName() );
2200*b1cdbd2cSJim Jagielski }
2201*b1cdbd2cSJim Jagielski return NULL;
2202*b1cdbd2cSJim Jagielski }
2203*b1cdbd2cSJim Jagielski
GetObjectByName_Impl(const rtl::OUString & aName)2204*b1cdbd2cSJim Jagielski ScDatabaseRangeObj* ScDatabaseRangesObj::GetObjectByName_Impl(const rtl::OUString& aName)
2205*b1cdbd2cSJim Jagielski {
2206*b1cdbd2cSJim Jagielski if ( pDocShell && hasByName(aName) )
2207*b1cdbd2cSJim Jagielski {
2208*b1cdbd2cSJim Jagielski String aString(aName);
2209*b1cdbd2cSJim Jagielski return new ScDatabaseRangeObj( pDocShell, aString );
2210*b1cdbd2cSJim Jagielski }
2211*b1cdbd2cSJim Jagielski return NULL;
2212*b1cdbd2cSJim Jagielski }
2213*b1cdbd2cSJim Jagielski
2214*b1cdbd2cSJim Jagielski
addNewByName(const rtl::OUString & aName,const table::CellRangeAddress & aRange)2215*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangesObj::addNewByName( const rtl::OUString& aName,
2216*b1cdbd2cSJim Jagielski const table::CellRangeAddress& aRange )
2217*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2218*b1cdbd2cSJim Jagielski {
2219*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2220*b1cdbd2cSJim Jagielski sal_Bool bDone = sal_False;
2221*b1cdbd2cSJim Jagielski if (pDocShell)
2222*b1cdbd2cSJim Jagielski {
2223*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
2224*b1cdbd2cSJim Jagielski
2225*b1cdbd2cSJim Jagielski String aString(aName);
2226*b1cdbd2cSJim Jagielski ScRange aNameRange( (SCCOL)aRange.StartColumn, (SCROW)aRange.StartRow, aRange.Sheet,
2227*b1cdbd2cSJim Jagielski (SCCOL)aRange.EndColumn, (SCROW)aRange.EndRow, aRange.Sheet );
2228*b1cdbd2cSJim Jagielski bDone = aFunc.AddDBRange( aString, aNameRange, sal_True );
2229*b1cdbd2cSJim Jagielski }
2230*b1cdbd2cSJim Jagielski if (!bDone)
2231*b1cdbd2cSJim Jagielski throw uno::RuntimeException(); // no other exceptions specified
2232*b1cdbd2cSJim Jagielski }
2233*b1cdbd2cSJim Jagielski
removeByName(const rtl::OUString & aName)2234*b1cdbd2cSJim Jagielski void SAL_CALL ScDatabaseRangesObj::removeByName( const rtl::OUString& aName )
2235*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2236*b1cdbd2cSJim Jagielski {
2237*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2238*b1cdbd2cSJim Jagielski sal_Bool bDone = sal_False;
2239*b1cdbd2cSJim Jagielski if (pDocShell)
2240*b1cdbd2cSJim Jagielski {
2241*b1cdbd2cSJim Jagielski ScDBDocFunc aFunc(*pDocShell);
2242*b1cdbd2cSJim Jagielski String aString(aName);
2243*b1cdbd2cSJim Jagielski bDone = aFunc.DeleteDBRange( aString, sal_True );
2244*b1cdbd2cSJim Jagielski }
2245*b1cdbd2cSJim Jagielski if (!bDone)
2246*b1cdbd2cSJim Jagielski throw uno::RuntimeException(); // no other exceptions specified
2247*b1cdbd2cSJim Jagielski }
2248*b1cdbd2cSJim Jagielski
2249*b1cdbd2cSJim Jagielski // XEnumerationAccess
2250*b1cdbd2cSJim Jagielski
createEnumeration()2251*b1cdbd2cSJim Jagielski uno::Reference<container::XEnumeration> SAL_CALL ScDatabaseRangesObj::createEnumeration()
2252*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2253*b1cdbd2cSJim Jagielski {
2254*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2255*b1cdbd2cSJim Jagielski return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.DatabaseRangesEnumeration")));
2256*b1cdbd2cSJim Jagielski }
2257*b1cdbd2cSJim Jagielski
2258*b1cdbd2cSJim Jagielski // XIndexAccess
2259*b1cdbd2cSJim Jagielski
getCount()2260*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScDatabaseRangesObj::getCount() throw(uno::RuntimeException)
2261*b1cdbd2cSJim Jagielski {
2262*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2263*b1cdbd2cSJim Jagielski
2264*b1cdbd2cSJim Jagielski //! "unbenannt" weglassen ?
2265*b1cdbd2cSJim Jagielski
2266*b1cdbd2cSJim Jagielski if (pDocShell)
2267*b1cdbd2cSJim Jagielski {
2268*b1cdbd2cSJim Jagielski ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection();
2269*b1cdbd2cSJim Jagielski if (pNames)
2270*b1cdbd2cSJim Jagielski return pNames->GetCount();
2271*b1cdbd2cSJim Jagielski }
2272*b1cdbd2cSJim Jagielski return 0;
2273*b1cdbd2cSJim Jagielski }
2274*b1cdbd2cSJim Jagielski
getByIndex(sal_Int32 nIndex)2275*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScDatabaseRangesObj::getByIndex( sal_Int32 nIndex )
2276*b1cdbd2cSJim Jagielski throw(lang::IndexOutOfBoundsException,
2277*b1cdbd2cSJim Jagielski lang::WrappedTargetException, uno::RuntimeException)
2278*b1cdbd2cSJim Jagielski {
2279*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2280*b1cdbd2cSJim Jagielski uno::Reference<sheet::XDatabaseRange> xRange(GetObjectByIndex_Impl((sal_uInt16)nIndex));
2281*b1cdbd2cSJim Jagielski if (xRange.is())
2282*b1cdbd2cSJim Jagielski return uno::makeAny(xRange);
2283*b1cdbd2cSJim Jagielski else
2284*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
2285*b1cdbd2cSJim Jagielski // return uno::Any();
2286*b1cdbd2cSJim Jagielski }
2287*b1cdbd2cSJim Jagielski
getElementType()2288*b1cdbd2cSJim Jagielski uno::Type SAL_CALL ScDatabaseRangesObj::getElementType() throw(uno::RuntimeException)
2289*b1cdbd2cSJim Jagielski {
2290*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2291*b1cdbd2cSJim Jagielski return getCppuType((uno::Reference<sheet::XDatabaseRange>*)0);
2292*b1cdbd2cSJim Jagielski }
2293*b1cdbd2cSJim Jagielski
hasElements()2294*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScDatabaseRangesObj::hasElements() throw(uno::RuntimeException)
2295*b1cdbd2cSJim Jagielski {
2296*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2297*b1cdbd2cSJim Jagielski return ( getCount() != 0 );
2298*b1cdbd2cSJim Jagielski }
2299*b1cdbd2cSJim Jagielski
2300*b1cdbd2cSJim Jagielski // XNameAccess
2301*b1cdbd2cSJim Jagielski
getByName(const rtl::OUString & aName)2302*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScDatabaseRangesObj::getByName( const rtl::OUString& aName )
2303*b1cdbd2cSJim Jagielski throw(container::NoSuchElementException,
2304*b1cdbd2cSJim Jagielski lang::WrappedTargetException, uno::RuntimeException)
2305*b1cdbd2cSJim Jagielski {
2306*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2307*b1cdbd2cSJim Jagielski uno::Reference<sheet::XDatabaseRange> xRange(GetObjectByName_Impl(aName));
2308*b1cdbd2cSJim Jagielski if (xRange.is())
2309*b1cdbd2cSJim Jagielski return uno::makeAny(xRange);
2310*b1cdbd2cSJim Jagielski else
2311*b1cdbd2cSJim Jagielski throw container::NoSuchElementException();
2312*b1cdbd2cSJim Jagielski // return uno::Any();
2313*b1cdbd2cSJim Jagielski }
2314*b1cdbd2cSJim Jagielski
getElementNames()2315*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> SAL_CALL ScDatabaseRangesObj::getElementNames()
2316*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2317*b1cdbd2cSJim Jagielski {
2318*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2319*b1cdbd2cSJim Jagielski
2320*b1cdbd2cSJim Jagielski //! "unbenannt" weglassen ?
2321*b1cdbd2cSJim Jagielski
2322*b1cdbd2cSJim Jagielski if (pDocShell)
2323*b1cdbd2cSJim Jagielski {
2324*b1cdbd2cSJim Jagielski ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection();
2325*b1cdbd2cSJim Jagielski if (pNames)
2326*b1cdbd2cSJim Jagielski {
2327*b1cdbd2cSJim Jagielski sal_uInt16 nCount = pNames->GetCount();
2328*b1cdbd2cSJim Jagielski String aName;
2329*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> aSeq(nCount);
2330*b1cdbd2cSJim Jagielski rtl::OUString* pAry = aSeq.getArray();
2331*b1cdbd2cSJim Jagielski for (sal_uInt16 i=0; i<nCount; i++)
2332*b1cdbd2cSJim Jagielski pAry[i] = (*pNames)[i]->GetName();
2333*b1cdbd2cSJim Jagielski
2334*b1cdbd2cSJim Jagielski return aSeq;
2335*b1cdbd2cSJim Jagielski }
2336*b1cdbd2cSJim Jagielski }
2337*b1cdbd2cSJim Jagielski return uno::Sequence<rtl::OUString>(0);
2338*b1cdbd2cSJim Jagielski }
2339*b1cdbd2cSJim Jagielski
hasByName(const rtl::OUString & aName)2340*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScDatabaseRangesObj::hasByName( const rtl::OUString& aName )
2341*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
2342*b1cdbd2cSJim Jagielski {
2343*b1cdbd2cSJim Jagielski ScUnoGuard aGuard;
2344*b1cdbd2cSJim Jagielski
2345*b1cdbd2cSJim Jagielski //! "unbenannt" weglassen ?
2346*b1cdbd2cSJim Jagielski
2347*b1cdbd2cSJim Jagielski if (pDocShell)
2348*b1cdbd2cSJim Jagielski {
2349*b1cdbd2cSJim Jagielski ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection();
2350*b1cdbd2cSJim Jagielski if (pNames)
2351*b1cdbd2cSJim Jagielski {
2352*b1cdbd2cSJim Jagielski String aString(aName);
2353*b1cdbd2cSJim Jagielski sal_uInt16 nPos = 0;
2354*b1cdbd2cSJim Jagielski if (pNames->SearchName( aString, nPos ))
2355*b1cdbd2cSJim Jagielski return sal_True;
2356*b1cdbd2cSJim Jagielski }
2357*b1cdbd2cSJim Jagielski }
2358*b1cdbd2cSJim Jagielski return sal_False;
2359*b1cdbd2cSJim Jagielski }
2360*b1cdbd2cSJim Jagielski
2361*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
2362*b1cdbd2cSJim Jagielski
2363*b1cdbd2cSJim Jagielski
2364*b1cdbd2cSJim Jagielski
2365*b1cdbd2cSJim Jagielski
2366*b1cdbd2cSJim Jagielski
2367