xref: /aoo4110/main/sc/source/ui/unoobj/appluno.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "appluno.hxx"
28*b1cdbd2cSJim Jagielski #include "sal/types.h"
29*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
30*b1cdbd2cSJim Jagielski #include <cppuhelper/factory.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/sfxmodelfactory.hxx>
34*b1cdbd2cSJim Jagielski #include "afmtuno.hxx"
35*b1cdbd2cSJim Jagielski #include "funcuno.hxx"
36*b1cdbd2cSJim Jagielski #include "filtuno.hxx"
37*b1cdbd2cSJim Jagielski #include "miscuno.hxx"
38*b1cdbd2cSJim Jagielski #include "scmod.hxx"
39*b1cdbd2cSJim Jagielski #include "appoptio.hxx"
40*b1cdbd2cSJim Jagielski #include "inputopt.hxx"
41*b1cdbd2cSJim Jagielski #include "printopt.hxx"
42*b1cdbd2cSJim Jagielski #include "userlist.hxx"
43*b1cdbd2cSJim Jagielski #include "sc.hrc"			// VAR_ARGS
44*b1cdbd2cSJim Jagielski #include "unoguard.hxx"
45*b1cdbd2cSJim Jagielski #include "unonames.hxx"
46*b1cdbd2cSJim Jagielski #include "funcdesc.hxx"
47*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/FunctionArgument.hpp>
48*b1cdbd2cSJim Jagielski #include "ScPanelFactory.hxx"
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski using namespace com::sun::star;
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski // Calc document
55*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScDocument_getSupportedServiceNames() throw();
56*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScDocument_getImplementationName() throw();
57*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScDocument_createInstance(
58*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr, const sal_uInt64 _nCreationFlags ) throw( uno::Exception );
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski // Calc XML import
61*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_getSupportedServiceNames() throw();
62*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLImport_getImplementationName() throw();
63*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_createInstance(
64*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
65*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Meta_getSupportedServiceNames() throw();
66*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLImport_Meta_getImplementationName() throw();
67*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Meta_createInstance(
68*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
69*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Styles_getSupportedServiceNames() throw();
70*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLImport_Styles_getImplementationName() throw();
71*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Styles_createInstance(
72*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
73*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Content_getSupportedServiceNames() throw();
74*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLImport_Content_getImplementationName() throw();
75*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Content_createInstance(
76*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
77*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Settings_getSupportedServiceNames() throw();
78*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLImport_Settings_getImplementationName() throw();
79*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Settings_createInstance(
80*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski // Calc XML export
83*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOOoExport_getSupportedServiceNames() throw();
84*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOOoExport_getImplementationName() throw();
85*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOOoExport_createInstance(
86*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
87*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOOoExport_Meta_getSupportedServiceNames() throw();
88*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOOoExport_Meta_getImplementationName() throw();
89*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOOoExport_Meta_createInstance(
90*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
91*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOOoExport_Styles_getSupportedServiceNames() throw();
92*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOOoExport_Styles_getImplementationName() throw();
93*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOOoExport_Styles_createInstance(
94*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
95*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOOoExport_Content_getSupportedServiceNames() throw();
96*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOOoExport_Content_getImplementationName() throw();
97*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOOoExport_Content_createInstance(
98*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
99*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOOoExport_Settings_getSupportedServiceNames() throw();
100*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOOoExport_Settings_getImplementationName() throw();
101*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOOoExport_Settings_createInstance(
102*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski // Calc XML Oasis export
105*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOasisExport_getSupportedServiceNames() throw();
106*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOasisExport_getImplementationName() throw();
107*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOasisExport_createInstance(
108*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
109*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOasisExport_Meta_getSupportedServiceNames() throw();
110*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOasisExport_Meta_getImplementationName() throw();
111*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOasisExport_Meta_createInstance(
112*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
113*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOasisExport_Styles_getSupportedServiceNames() throw();
114*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOasisExport_Styles_getImplementationName() throw();
115*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOasisExport_Styles_createInstance(
116*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
117*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOasisExport_Content_getSupportedServiceNames() throw();
118*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOasisExport_Content_getImplementationName() throw();
119*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOasisExport_Content_createInstance(
120*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
121*b1cdbd2cSJim Jagielski extern uno::Sequence< rtl::OUString > SAL_CALL ScXMLOasisExport_Settings_getSupportedServiceNames() throw();
122*b1cdbd2cSJim Jagielski extern rtl::OUString SAL_CALL ScXMLOasisExport_Settings_getImplementationName() throw();
123*b1cdbd2cSJim Jagielski extern uno::Reference< uno::XInterface > SAL_CALL ScXMLOasisExport_Settings_createInstance(
124*b1cdbd2cSJim Jagielski 			const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski //	Anzahl der Funktionen, die als zuletzt benutzt gespeichert werden
129*b1cdbd2cSJim Jagielski //!	Define mit funcpage.hxx und dwfunctr.hxx zusammenfassen !!!
130*b1cdbd2cSJim Jagielski #define LRU_MAX 10
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski //	Spezial-Werte fuer Zoom
133*b1cdbd2cSJim Jagielski //!	irgendwo zentral
134*b1cdbd2cSJim Jagielski #define SC_ZOOMVAL_OPTIMAL		(-1)
135*b1cdbd2cSJim Jagielski #define SC_ZOOMVAL_WHOLEPAGE	(-2)
136*b1cdbd2cSJim Jagielski #define SC_ZOOMVAL_PAGEWIDTH	(-3)
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski //	Anzahl der PropertyValues in einer Function-Description
139*b1cdbd2cSJim Jagielski #define SC_FUNCDESC_PROPCOUNT	5
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski //	alles ohne Which-ID, Map nur fuer PropertySetInfo
144*b1cdbd2cSJim Jagielski 
lcl_GetSettingsPropertyMap()145*b1cdbd2cSJim Jagielski static const SfxItemPropertyMapEntry* lcl_GetSettingsPropertyMap()
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski     static SfxItemPropertyMapEntry aSettingsPropertyMap_Impl[] =
148*b1cdbd2cSJim Jagielski 	{
149*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_DOAUTOCP), 0,  &getBooleanCppuType(),              0, 0},
150*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_ENTERED),  0,  &getBooleanCppuType(),              0, 0},
151*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_EXPREF),   0,  &getBooleanCppuType(),              0, 0},
152*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_EXTFMT),   0,  &getBooleanCppuType(),              0, 0},
153*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_LINKUPD),  0,  &getCppuType((sal_Int16*)0),        0, 0},
154*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_MARKHDR),  0,  &getBooleanCppuType(),              0, 0},
155*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_METRIC),   0,  &getCppuType((sal_Int16*)0),        0, 0},
156*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_MOVEDIR),  0,  &getCppuType((sal_Int16*)0),        0, 0},
157*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_MOVESEL),  0,  &getBooleanCppuType(),              0, 0},
158*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PRALLSH),  0,  &getBooleanCppuType(),              0, 0},
159*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PREMPTY),  0,  &getBooleanCppuType(),              0, 0},
160*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_RANGEFIN), 0,  &getBooleanCppuType(),              0, 0},
161*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_SCALE),    0,  &getCppuType((sal_Int16*)0),        0, 0},
162*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_STBFUNC),  0,  &getCppuType((sal_Int16*)0),        0, 0},
163*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_ULISTS),   0,  &getCppuType((uno::Sequence<rtl::OUString>*)0), 0, 0},
164*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PRMETRICS),0,  &getBooleanCppuType(),              0, 0},
165*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_USETABCOL),0,  &getBooleanCppuType(),              0, 0},
166*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_REPLWARN), 0,  &getBooleanCppuType(),              0, 0},
167*b1cdbd2cSJim Jagielski         {0,0,0,0,0,0}
168*b1cdbd2cSJim Jagielski 	};
169*b1cdbd2cSJim Jagielski 	return aSettingsPropertyMap_Impl;
170*b1cdbd2cSJim Jagielski }
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski #define SCFUNCTIONLISTOBJ_SERVICE		"com.sun.star.sheet.FunctionDescriptions"
175*b1cdbd2cSJim Jagielski #define SCRECENTFUNCTIONSOBJ_SERVICE	"com.sun.star.sheet.RecentFunctions"
176*b1cdbd2cSJim Jagielski #define SCSPREADSHEETSETTINGS_SERVICE	"com.sun.star.sheet.GlobalSheetSettings"
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScFunctionListObj, "ScFunctionListObj", SCFUNCTIONLISTOBJ_SERVICE )
179*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScRecentFunctionsObj, "ScRecentFunctionsObj", SCRECENTFUNCTIONSOBJ_SERVICE )
180*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScSpreadsheetSettings, "ScSpreadsheetSettings", SCSPREADSHEETSETTINGS_SERVICE )
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski extern "C" {
185*b1cdbd2cSJim Jagielski 
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)186*b1cdbd2cSJim Jagielski SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment(
187*b1cdbd2cSJim Jagielski     const sal_Char ** ppEnvTypeName, uno_Environment ** /* ppEnv */ )
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski 	*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski 
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void *)192*b1cdbd2cSJim Jagielski SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
193*b1cdbd2cSJim Jagielski     const sal_Char * pImplName, void * pServiceManager, void * /* pRegistryKey */ )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski 	if (!pServiceManager)
196*b1cdbd2cSJim Jagielski 		return NULL;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 	uno::Reference<lang::XSingleServiceFactory> xFactory;
199*b1cdbd2cSJim Jagielski 	rtl::OUString aImpl(rtl::OUString::createFromAscii(pImplName));
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 	if ( aImpl == ScSpreadsheetSettings::getImplementationName_Static() )
202*b1cdbd2cSJim Jagielski     {
203*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createOneInstanceFactory(
204*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
205*b1cdbd2cSJim Jagielski 				ScSpreadsheetSettings::getImplementationName_Static(),
206*b1cdbd2cSJim Jagielski 				ScSpreadsheetSettings_CreateInstance,
207*b1cdbd2cSJim Jagielski 				ScSpreadsheetSettings::getSupportedServiceNames_Static() ));
208*b1cdbd2cSJim Jagielski     }
209*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScRecentFunctionsObj::getImplementationName_Static() )
210*b1cdbd2cSJim Jagielski     {
211*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createOneInstanceFactory(
212*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
213*b1cdbd2cSJim Jagielski 				ScRecentFunctionsObj::getImplementationName_Static(),
214*b1cdbd2cSJim Jagielski 				ScRecentFunctionsObj_CreateInstance,
215*b1cdbd2cSJim Jagielski 				ScRecentFunctionsObj::getSupportedServiceNames_Static() ));
216*b1cdbd2cSJim Jagielski     }
217*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScFunctionListObj::getImplementationName_Static() )
218*b1cdbd2cSJim Jagielski     {
219*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createOneInstanceFactory(
220*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
221*b1cdbd2cSJim Jagielski 				ScFunctionListObj::getImplementationName_Static(),
222*b1cdbd2cSJim Jagielski 				ScFunctionListObj_CreateInstance,
223*b1cdbd2cSJim Jagielski 				ScFunctionListObj::getSupportedServiceNames_Static() ));
224*b1cdbd2cSJim Jagielski     }
225*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScAutoFormatsObj::getImplementationName_Static() )
226*b1cdbd2cSJim Jagielski     {
227*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createOneInstanceFactory(
228*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
229*b1cdbd2cSJim Jagielski 				ScAutoFormatsObj::getImplementationName_Static(),
230*b1cdbd2cSJim Jagielski 				ScAutoFormatsObj_CreateInstance,
231*b1cdbd2cSJim Jagielski 				ScAutoFormatsObj::getSupportedServiceNames_Static() ));
232*b1cdbd2cSJim Jagielski     }
233*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScFunctionAccess::getImplementationName_Static() )
234*b1cdbd2cSJim Jagielski     {
235*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createOneInstanceFactory(
236*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
237*b1cdbd2cSJim Jagielski 				ScFunctionAccess::getImplementationName_Static(),
238*b1cdbd2cSJim Jagielski 				ScFunctionAccess_CreateInstance,
239*b1cdbd2cSJim Jagielski 				ScFunctionAccess::getSupportedServiceNames_Static() ));
240*b1cdbd2cSJim Jagielski     }
241*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScFilterOptionsObj::getImplementationName_Static() )
242*b1cdbd2cSJim Jagielski     {
243*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createSingleFactory(
244*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
245*b1cdbd2cSJim Jagielski 				ScFilterOptionsObj::getImplementationName_Static(),
246*b1cdbd2cSJim Jagielski 				ScFilterOptionsObj_CreateInstance,
247*b1cdbd2cSJim Jagielski 				ScFilterOptionsObj::getSupportedServiceNames_Static() ));
248*b1cdbd2cSJim Jagielski     }
249*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLImport_getImplementationName() )
250*b1cdbd2cSJim Jagielski     {
251*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createSingleFactory(
252*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
253*b1cdbd2cSJim Jagielski 				ScXMLImport_getImplementationName(),
254*b1cdbd2cSJim Jagielski 				ScXMLImport_createInstance,
255*b1cdbd2cSJim Jagielski 				ScXMLImport_getSupportedServiceNames() ));
256*b1cdbd2cSJim Jagielski     }
257*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLImport_Meta_getImplementationName() )
258*b1cdbd2cSJim Jagielski     {
259*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createSingleFactory(
260*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
261*b1cdbd2cSJim Jagielski 				ScXMLImport_Meta_getImplementationName(),
262*b1cdbd2cSJim Jagielski 				ScXMLImport_Meta_createInstance,
263*b1cdbd2cSJim Jagielski 				ScXMLImport_Meta_getSupportedServiceNames() ));
264*b1cdbd2cSJim Jagielski     }
265*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLImport_Styles_getImplementationName() )
266*b1cdbd2cSJim Jagielski     {
267*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createSingleFactory(
268*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
269*b1cdbd2cSJim Jagielski 				ScXMLImport_Styles_getImplementationName(),
270*b1cdbd2cSJim Jagielski 				ScXMLImport_Styles_createInstance,
271*b1cdbd2cSJim Jagielski 				ScXMLImport_Styles_getSupportedServiceNames() ));
272*b1cdbd2cSJim Jagielski     }
273*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLImport_Content_getImplementationName() )
274*b1cdbd2cSJim Jagielski     {
275*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createSingleFactory(
276*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
277*b1cdbd2cSJim Jagielski 				ScXMLImport_Content_getImplementationName(),
278*b1cdbd2cSJim Jagielski 				ScXMLImport_Content_createInstance,
279*b1cdbd2cSJim Jagielski 				ScXMLImport_Content_getSupportedServiceNames() ));
280*b1cdbd2cSJim Jagielski     }
281*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLImport_Settings_getImplementationName() )
282*b1cdbd2cSJim Jagielski     {
283*b1cdbd2cSJim Jagielski 		xFactory.set(cppu::createSingleFactory(
284*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
285*b1cdbd2cSJim Jagielski 				ScXMLImport_Settings_getImplementationName(),
286*b1cdbd2cSJim Jagielski 				ScXMLImport_Settings_createInstance,
287*b1cdbd2cSJim Jagielski 				ScXMLImport_Settings_getSupportedServiceNames() ));
288*b1cdbd2cSJim Jagielski     }
289*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOOoExport_getImplementationName() )
290*b1cdbd2cSJim Jagielski     {
291*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
292*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
293*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_getImplementationName(),
294*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_createInstance,
295*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_getSupportedServiceNames() );
296*b1cdbd2cSJim Jagielski     }
297*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOOoExport_Meta_getImplementationName() )
298*b1cdbd2cSJim Jagielski     {
299*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
300*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
301*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Meta_getImplementationName(),
302*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Meta_createInstance,
303*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Meta_getSupportedServiceNames() );
304*b1cdbd2cSJim Jagielski     }
305*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOOoExport_Styles_getImplementationName() )
306*b1cdbd2cSJim Jagielski     {
307*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
308*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
309*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Styles_getImplementationName(),
310*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Styles_createInstance,
311*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Styles_getSupportedServiceNames() );
312*b1cdbd2cSJim Jagielski     }
313*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOOoExport_Content_getImplementationName() )
314*b1cdbd2cSJim Jagielski     {
315*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
316*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
317*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Content_getImplementationName(),
318*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Content_createInstance,
319*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Content_getSupportedServiceNames() );
320*b1cdbd2cSJim Jagielski     }
321*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOOoExport_Settings_getImplementationName() )
322*b1cdbd2cSJim Jagielski     {
323*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
324*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
325*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Settings_getImplementationName(),
326*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Settings_createInstance,
327*b1cdbd2cSJim Jagielski 				ScXMLOOoExport_Settings_getSupportedServiceNames() );
328*b1cdbd2cSJim Jagielski     }
329*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOasisExport_getImplementationName() )
330*b1cdbd2cSJim Jagielski     {
331*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
332*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
333*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_getImplementationName(),
334*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_createInstance,
335*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_getSupportedServiceNames() );
336*b1cdbd2cSJim Jagielski     }
337*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOasisExport_Meta_getImplementationName() )
338*b1cdbd2cSJim Jagielski     {
339*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
340*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
341*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Meta_getImplementationName(),
342*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Meta_createInstance,
343*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Meta_getSupportedServiceNames() );
344*b1cdbd2cSJim Jagielski     }
345*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOasisExport_Styles_getImplementationName() )
346*b1cdbd2cSJim Jagielski     {
347*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
348*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
349*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Styles_getImplementationName(),
350*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Styles_createInstance,
351*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Styles_getSupportedServiceNames() );
352*b1cdbd2cSJim Jagielski     }
353*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOasisExport_Content_getImplementationName() )
354*b1cdbd2cSJim Jagielski     {
355*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
356*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
357*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Content_getImplementationName(),
358*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Content_createInstance,
359*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Content_getSupportedServiceNames() );
360*b1cdbd2cSJim Jagielski     }
361*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScXMLOasisExport_Settings_getImplementationName() )
362*b1cdbd2cSJim Jagielski     {
363*b1cdbd2cSJim Jagielski 		xFactory = cppu::createSingleFactory(
364*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
365*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Settings_getImplementationName(),
366*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Settings_createInstance,
367*b1cdbd2cSJim Jagielski 				ScXMLOasisExport_Settings_getSupportedServiceNames() );
368*b1cdbd2cSJim Jagielski     }
369*b1cdbd2cSJim Jagielski 	else if ( aImpl == ScDocument_getImplementationName() )
370*b1cdbd2cSJim Jagielski     {
371*b1cdbd2cSJim Jagielski 		xFactory.set(sfx2::createSfxModelFactory(
372*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
373*b1cdbd2cSJim Jagielski 				ScDocument_getImplementationName(),
374*b1cdbd2cSJim Jagielski 				ScDocument_createInstance,
375*b1cdbd2cSJim Jagielski 				ScDocument_getSupportedServiceNames() ));
376*b1cdbd2cSJim Jagielski     }
377*b1cdbd2cSJim Jagielski     else if ( aImpl == ::sc::sidebar::ScPanelFactory::getImplementationName() )
378*b1cdbd2cSJim Jagielski     {
379*b1cdbd2cSJim Jagielski         xFactory = ::cppu::createSingleFactory(
380*b1cdbd2cSJim Jagielski             reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
381*b1cdbd2cSJim Jagielski             ::sc::sidebar::ScPanelFactory::getImplementationName(),
382*b1cdbd2cSJim Jagielski             ::sc::sidebar::ScPanelFactory::createInstance,
383*b1cdbd2cSJim Jagielski             ::sc::sidebar::ScPanelFactory::getSupportedServiceNames() );
384*b1cdbd2cSJim Jagielski     }
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 	void* pRet = NULL;
387*b1cdbd2cSJim Jagielski 	if (xFactory.is())
388*b1cdbd2cSJim Jagielski 	{
389*b1cdbd2cSJim Jagielski 		xFactory->acquire();
390*b1cdbd2cSJim Jagielski 		pRet = xFactory.get();
391*b1cdbd2cSJim Jagielski 	}
392*b1cdbd2cSJim Jagielski 	return pRet;
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski }	// extern C
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
398*b1cdbd2cSJim Jagielski 
ScSpreadsheetSettings()399*b1cdbd2cSJim Jagielski ScSpreadsheetSettings::ScSpreadsheetSettings() :
400*b1cdbd2cSJim Jagielski 	aPropSet( lcl_GetSettingsPropertyMap() )
401*b1cdbd2cSJim Jagielski {
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski 
~ScSpreadsheetSettings()404*b1cdbd2cSJim Jagielski ScSpreadsheetSettings::~ScSpreadsheetSettings()
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski }
407*b1cdbd2cSJim Jagielski 
ScSpreadsheetSettings_CreateInstance(const uno::Reference<lang::XMultiServiceFactory> &)408*b1cdbd2cSJim Jagielski uno::Reference<uno::XInterface>	SAL_CALL ScSpreadsheetSettings_CreateInstance(
409*b1cdbd2cSJim Jagielski                         const uno::Reference<lang::XMultiServiceFactory>& /* rSMgr */ )
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
412*b1cdbd2cSJim Jagielski 	ScDLL::Init();
413*b1cdbd2cSJim Jagielski 	static uno::Reference<uno::XInterface> xInst((cppu::OWeakObject*)new ScSpreadsheetSettings());
414*b1cdbd2cSJim Jagielski 	return xInst;
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski 
getImplementationName_Static()417*b1cdbd2cSJim Jagielski rtl::OUString ScSpreadsheetSettings::getImplementationName_Static()
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski 	return rtl::OUString::createFromAscii( "stardiv.StarCalc.ScSpreadsheetSettings" );
420*b1cdbd2cSJim Jagielski }
421*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()422*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> ScSpreadsheetSettings::getSupportedServiceNames_Static()
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski 	uno::Sequence<rtl::OUString> aRet(1);
425*b1cdbd2cSJim Jagielski 	rtl::OUString* pArray = aRet.getArray();
426*b1cdbd2cSJim Jagielski 	pArray[0] = rtl::OUString::createFromAscii( SCSPREADSHEETSETTINGS_SERVICE );
427*b1cdbd2cSJim Jagielski 	return aRet;
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski // XPropertySet
431*b1cdbd2cSJim Jagielski 
getPropertySetInfo()432*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySetInfo> SAL_CALL ScSpreadsheetSettings::getPropertySetInfo()
433*b1cdbd2cSJim Jagielski 														throw(uno::RuntimeException)
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
436*b1cdbd2cSJim Jagielski 	static uno::Reference<beans::XPropertySetInfo> aRef(
437*b1cdbd2cSJim Jagielski 		new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
438*b1cdbd2cSJim Jagielski 	return aRef;
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski 
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any & aValue)441*b1cdbd2cSJim Jagielski void SAL_CALL ScSpreadsheetSettings::setPropertyValue(
442*b1cdbd2cSJim Jagielski 						const rtl::OUString& aPropertyName, const uno::Any& aValue )
443*b1cdbd2cSJim Jagielski 				throw(beans::UnknownPropertyException, beans::PropertyVetoException,
444*b1cdbd2cSJim Jagielski 						lang::IllegalArgumentException, lang::WrappedTargetException,
445*b1cdbd2cSJim Jagielski 						uno::RuntimeException)
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
448*b1cdbd2cSJim Jagielski 	String aString(aPropertyName);
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 	ScModule* pScMod = SC_MOD();
451*b1cdbd2cSJim Jagielski 	ScAppOptions   aAppOpt(pScMod->GetAppOptions());
452*b1cdbd2cSJim Jagielski 	ScInputOptions aInpOpt(pScMod->GetInputOptions());
453*b1cdbd2cSJim Jagielski 	sal_Bool bSaveApp = sal_False;
454*b1cdbd2cSJim Jagielski 	sal_Bool bSaveInp = sal_False;
455*b1cdbd2cSJim Jagielski 	// print options aren't loaded until needed
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski 	if (aString.EqualsAscii( SC_UNONAME_DOAUTOCP ))
458*b1cdbd2cSJim Jagielski 	{
459*b1cdbd2cSJim Jagielski 		aAppOpt.SetAutoComplete( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
460*b1cdbd2cSJim Jagielski 		bSaveApp = sal_True;
461*b1cdbd2cSJim Jagielski 	}
462*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_ENTERED ))
463*b1cdbd2cSJim Jagielski 	{
464*b1cdbd2cSJim Jagielski 		aInpOpt.SetEnterEdit( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
465*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
466*b1cdbd2cSJim Jagielski 	}
467*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_EXPREF ))
468*b1cdbd2cSJim Jagielski 	{
469*b1cdbd2cSJim Jagielski 		aInpOpt.SetExpandRefs( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
470*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
471*b1cdbd2cSJim Jagielski 	}
472*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_EXTFMT ))
473*b1cdbd2cSJim Jagielski 	{
474*b1cdbd2cSJim Jagielski 		aInpOpt.SetExtendFormat( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
475*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
476*b1cdbd2cSJim Jagielski 	}
477*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_LINKUPD ))
478*b1cdbd2cSJim Jagielski 	{
479*b1cdbd2cSJim Jagielski 		aAppOpt.SetLinkMode( (ScLkUpdMode) ScUnoHelpFunctions::GetInt16FromAny( aValue ) );
480*b1cdbd2cSJim Jagielski 		bSaveApp = sal_True;
481*b1cdbd2cSJim Jagielski 	}
482*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_MARKHDR ))
483*b1cdbd2cSJim Jagielski 	{
484*b1cdbd2cSJim Jagielski 		aInpOpt.SetMarkHeader( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
485*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
486*b1cdbd2cSJim Jagielski 	}
487*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_MOVESEL ))
488*b1cdbd2cSJim Jagielski 	{
489*b1cdbd2cSJim Jagielski 		aInpOpt.SetMoveSelection( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
490*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
491*b1cdbd2cSJim Jagielski 	}
492*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_RANGEFIN ))
493*b1cdbd2cSJim Jagielski 	{
494*b1cdbd2cSJim Jagielski 		aInpOpt.SetRangeFinder( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
495*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
496*b1cdbd2cSJim Jagielski 	}
497*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_USETABCOL ))
498*b1cdbd2cSJim Jagielski 	{
499*b1cdbd2cSJim Jagielski 		aInpOpt.SetUseTabCol( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
500*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
501*b1cdbd2cSJim Jagielski 	}
502*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_PRMETRICS ))
503*b1cdbd2cSJim Jagielski 	{
504*b1cdbd2cSJim Jagielski 		aInpOpt.SetTextWysiwyg( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
505*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
506*b1cdbd2cSJim Jagielski 	}
507*b1cdbd2cSJim Jagielski     else if (aString.EqualsAscii( SC_UNONAME_REPLWARN ))
508*b1cdbd2cSJim Jagielski 	{
509*b1cdbd2cSJim Jagielski         aInpOpt.SetReplaceCellsWarn( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
510*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
511*b1cdbd2cSJim Jagielski 	}
512*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_METRIC ))
513*b1cdbd2cSJim Jagielski 	{
514*b1cdbd2cSJim Jagielski 		aAppOpt.SetAppMetric( (FieldUnit) ScUnoHelpFunctions::GetInt16FromAny( aValue ) );
515*b1cdbd2cSJim Jagielski 		bSaveApp = sal_True;
516*b1cdbd2cSJim Jagielski 	}
517*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_MOVEDIR ))
518*b1cdbd2cSJim Jagielski 	{
519*b1cdbd2cSJim Jagielski 		aInpOpt.SetMoveDir( ScUnoHelpFunctions::GetInt16FromAny( aValue ) );
520*b1cdbd2cSJim Jagielski 		bSaveInp = sal_True;
521*b1cdbd2cSJim Jagielski 	}
522*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_SCALE ))
523*b1cdbd2cSJim Jagielski 	{
524*b1cdbd2cSJim Jagielski 		short nVal = ScUnoHelpFunctions::GetInt16FromAny( aValue );
525*b1cdbd2cSJim Jagielski 		if ( nVal < 0 )
526*b1cdbd2cSJim Jagielski 		{
527*b1cdbd2cSJim Jagielski 			SvxZoomType eType = SVX_ZOOM_PERCENT;
528*b1cdbd2cSJim Jagielski 			switch (nVal)
529*b1cdbd2cSJim Jagielski 			{
530*b1cdbd2cSJim Jagielski 				case SC_ZOOMVAL_OPTIMAL:	eType = SVX_ZOOM_OPTIMAL;	break;
531*b1cdbd2cSJim Jagielski 				case SC_ZOOMVAL_WHOLEPAGE:	eType = SVX_ZOOM_WHOLEPAGE;	break;
532*b1cdbd2cSJim Jagielski 				case SC_ZOOMVAL_PAGEWIDTH:	eType = SVX_ZOOM_PAGEWIDTH;	break;
533*b1cdbd2cSJim Jagielski 			}
534*b1cdbd2cSJim Jagielski 			aAppOpt.SetZoomType( eType );
535*b1cdbd2cSJim Jagielski 		}
536*b1cdbd2cSJim Jagielski 		else if ( nVal >= MINZOOM && nVal <= MAXZOOM )
537*b1cdbd2cSJim Jagielski 		{
538*b1cdbd2cSJim Jagielski 			aAppOpt.SetZoom( nVal );
539*b1cdbd2cSJim Jagielski 			aAppOpt.SetZoomType( SVX_ZOOM_PERCENT );
540*b1cdbd2cSJim Jagielski 		}
541*b1cdbd2cSJim Jagielski 		bSaveApp = sal_True;
542*b1cdbd2cSJim Jagielski 	}
543*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_STBFUNC ))
544*b1cdbd2cSJim Jagielski 	{
545*b1cdbd2cSJim Jagielski 		aAppOpt.SetStatusFunc( ScUnoHelpFunctions::GetInt16FromAny( aValue ) );
546*b1cdbd2cSJim Jagielski 		bSaveApp = sal_True;
547*b1cdbd2cSJim Jagielski 	}
548*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_ULISTS ))
549*b1cdbd2cSJim Jagielski 	{
550*b1cdbd2cSJim Jagielski 		ScUserList* pUserList = ScGlobal::GetUserList();
551*b1cdbd2cSJim Jagielski 		uno::Sequence<rtl::OUString> aSeq;
552*b1cdbd2cSJim Jagielski 		if ( pUserList && ( aValue >>= aSeq ) )
553*b1cdbd2cSJim Jagielski 		{
554*b1cdbd2cSJim Jagielski 			//	es wird direkt die "lebende" Liste veraendert,
555*b1cdbd2cSJim Jagielski 			//	mehr tut ScGlobal::SetUserList auch nicht
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski 			pUserList->FreeAll();					// alle Eintraege raus
558*b1cdbd2cSJim Jagielski 			sal_uInt16 nCount = (sal_uInt16)aSeq.getLength();
559*b1cdbd2cSJim Jagielski 			const rtl::OUString* pAry = aSeq.getConstArray();
560*b1cdbd2cSJim Jagielski 			for (sal_uInt16 i=0; i<nCount; i++)
561*b1cdbd2cSJim Jagielski 			{
562*b1cdbd2cSJim Jagielski 				String aEntry = pAry[i];
563*b1cdbd2cSJim Jagielski 				ScUserListData* pData = new ScUserListData(aEntry);
564*b1cdbd2cSJim Jagielski 				if (!pUserList->Insert(pData))		// hinten anhaengen
565*b1cdbd2cSJim Jagielski 					delete pData;					// sollte nicht vorkommen
566*b1cdbd2cSJim Jagielski 			}
567*b1cdbd2cSJim Jagielski 			bSaveApp = sal_True;	// Liste wird mit den App-Optionen gespeichert
568*b1cdbd2cSJim Jagielski 		}
569*b1cdbd2cSJim Jagielski 	}
570*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_PRALLSH ))
571*b1cdbd2cSJim Jagielski 	{
572*b1cdbd2cSJim Jagielski 		ScPrintOptions aPrintOpt(pScMod->GetPrintOptions());
573*b1cdbd2cSJim Jagielski 		aPrintOpt.SetAllSheets( ScUnoHelpFunctions::GetBoolFromAny( aValue ) );
574*b1cdbd2cSJim Jagielski 		pScMod->SetPrintOptions( aPrintOpt );
575*b1cdbd2cSJim Jagielski 	}
576*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_PREMPTY ))
577*b1cdbd2cSJim Jagielski 	{
578*b1cdbd2cSJim Jagielski 		ScPrintOptions aPrintOpt(pScMod->GetPrintOptions());
579*b1cdbd2cSJim Jagielski 		aPrintOpt.SetSkipEmpty( !ScUnoHelpFunctions::GetBoolFromAny( aValue ) );	// reversed
580*b1cdbd2cSJim Jagielski 		pScMod->SetPrintOptions( aPrintOpt );
581*b1cdbd2cSJim Jagielski 		SFX_APP()->Broadcast( SfxSimpleHint( SID_SCPRINTOPTIONS ) );	// update previews
582*b1cdbd2cSJim Jagielski 	}
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski 	if ( bSaveApp )
585*b1cdbd2cSJim Jagielski 		pScMod->SetAppOptions( aAppOpt );
586*b1cdbd2cSJim Jagielski 	if ( bSaveInp )
587*b1cdbd2cSJim Jagielski 		pScMod->SetInputOptions( aInpOpt );
588*b1cdbd2cSJim Jagielski }
589*b1cdbd2cSJim Jagielski 
getPropertyValue(const rtl::OUString & aPropertyName)590*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScSpreadsheetSettings::getPropertyValue( const rtl::OUString& aPropertyName )
591*b1cdbd2cSJim Jagielski 				throw(beans::UnknownPropertyException, lang::WrappedTargetException,
592*b1cdbd2cSJim Jagielski 						uno::RuntimeException)
593*b1cdbd2cSJim Jagielski {
594*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
595*b1cdbd2cSJim Jagielski 	String aString = aPropertyName;
596*b1cdbd2cSJim Jagielski 	uno::Any aRet;
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski 	ScModule* pScMod = SC_MOD();
599*b1cdbd2cSJim Jagielski 	ScAppOptions   aAppOpt = pScMod->GetAppOptions();
600*b1cdbd2cSJim Jagielski 	ScInputOptions aInpOpt = pScMod->GetInputOptions();
601*b1cdbd2cSJim Jagielski 	// print options aren't loaded until needed
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 	if (aString.EqualsAscii( SC_UNONAME_DOAUTOCP ))		ScUnoHelpFunctions::SetBoolInAny( aRet, aAppOpt.GetAutoComplete() );
604*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_ENTERED ))	ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetEnterEdit() );
605*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_EXPREF ))	ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetExpandRefs() );
606*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_EXTFMT ))	ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetExtendFormat() );
607*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_LINKUPD ))	aRet <<= (sal_Int16) aAppOpt.GetLinkMode();
608*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_MARKHDR ))	ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetMarkHeader() );
609*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_MOVESEL ))	ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetMoveSelection() );
610*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_RANGEFIN )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetRangeFinder() );
611*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_USETABCOL )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetUseTabCol() );
612*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_PRMETRICS )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetTextWysiwyg() );
613*b1cdbd2cSJim Jagielski     else if (aString.EqualsAscii( SC_UNONAME_REPLWARN )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetReplaceCellsWarn() );
614*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_METRIC ))	aRet <<= (sal_Int16) aAppOpt.GetAppMetric();
615*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_MOVEDIR ))	aRet <<= (sal_Int16) aInpOpt.GetMoveDir();
616*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_STBFUNC ))	aRet <<= (sal_Int16) aAppOpt.GetStatusFunc();
617*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_SCALE ))
618*b1cdbd2cSJim Jagielski 	{
619*b1cdbd2cSJim Jagielski 		sal_Int16 nZoomVal = 0;
620*b1cdbd2cSJim Jagielski 		switch ( aAppOpt.GetZoomType() )
621*b1cdbd2cSJim Jagielski 		{
622*b1cdbd2cSJim Jagielski 			case SVX_ZOOM_PERCENT:	 nZoomVal = aAppOpt.GetZoom();	  break;
623*b1cdbd2cSJim Jagielski 			case SVX_ZOOM_OPTIMAL:	 nZoomVal = SC_ZOOMVAL_OPTIMAL;	  break;
624*b1cdbd2cSJim Jagielski 			case SVX_ZOOM_WHOLEPAGE: nZoomVal = SC_ZOOMVAL_WHOLEPAGE; break;
625*b1cdbd2cSJim Jagielski 			case SVX_ZOOM_PAGEWIDTH: nZoomVal = SC_ZOOMVAL_PAGEWIDTH; break;
626*b1cdbd2cSJim Jagielski             default:
627*b1cdbd2cSJim Jagielski             {
628*b1cdbd2cSJim Jagielski                 // added to avoid warnings
629*b1cdbd2cSJim Jagielski             }
630*b1cdbd2cSJim Jagielski 		}
631*b1cdbd2cSJim Jagielski 		aRet <<= (sal_Int16) nZoomVal;
632*b1cdbd2cSJim Jagielski 	}
633*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_ULISTS ))
634*b1cdbd2cSJim Jagielski 	{
635*b1cdbd2cSJim Jagielski 		ScUserList* pUserList = ScGlobal::GetUserList();
636*b1cdbd2cSJim Jagielski 		if (pUserList)
637*b1cdbd2cSJim Jagielski 		{
638*b1cdbd2cSJim Jagielski 			sal_uInt16 nCount = pUserList->GetCount();
639*b1cdbd2cSJim Jagielski 			uno::Sequence<rtl::OUString> aSeq(nCount);
640*b1cdbd2cSJim Jagielski 			rtl::OUString* pAry = aSeq.getArray();
641*b1cdbd2cSJim Jagielski 			for (sal_uInt16 i=0; i<nCount; i++)
642*b1cdbd2cSJim Jagielski 			{
643*b1cdbd2cSJim Jagielski 				String aEntry((*pUserList)[i]->GetString());
644*b1cdbd2cSJim Jagielski 				pAry[i] = aEntry;
645*b1cdbd2cSJim Jagielski 			}
646*b1cdbd2cSJim Jagielski 			aRet <<= aSeq;
647*b1cdbd2cSJim Jagielski 		}
648*b1cdbd2cSJim Jagielski 	}
649*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_PRALLSH ))
650*b1cdbd2cSJim Jagielski 		ScUnoHelpFunctions::SetBoolInAny( aRet, pScMod->GetPrintOptions().GetAllSheets() );
651*b1cdbd2cSJim Jagielski 	else if (aString.EqualsAscii( SC_UNONAME_PREMPTY ))
652*b1cdbd2cSJim Jagielski 		ScUnoHelpFunctions::SetBoolInAny( aRet, !pScMod->GetPrintOptions().GetSkipEmpty() );	// reversed
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski 	return aRet;
655*b1cdbd2cSJim Jagielski }
656*b1cdbd2cSJim Jagielski 
SC_IMPL_DUMMY_PROPERTY_LISTENER(ScSpreadsheetSettings)657*b1cdbd2cSJim Jagielski SC_IMPL_DUMMY_PROPERTY_LISTENER( ScSpreadsheetSettings )
658*b1cdbd2cSJim Jagielski 
659*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
660*b1cdbd2cSJim Jagielski 
661*b1cdbd2cSJim Jagielski ScRecentFunctionsObj::ScRecentFunctionsObj()
662*b1cdbd2cSJim Jagielski {
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski 
~ScRecentFunctionsObj()665*b1cdbd2cSJim Jagielski ScRecentFunctionsObj::~ScRecentFunctionsObj()
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski }
668*b1cdbd2cSJim Jagielski 
669*b1cdbd2cSJim Jagielski // stuff for exService_...
670*b1cdbd2cSJim Jagielski 
ScRecentFunctionsObj_CreateInstance(const uno::Reference<lang::XMultiServiceFactory> &)671*b1cdbd2cSJim Jagielski uno::Reference<uno::XInterface>	SAL_CALL ScRecentFunctionsObj_CreateInstance(
672*b1cdbd2cSJim Jagielski                         const uno::Reference<lang::XMultiServiceFactory>& /* rSMgr */ )
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
675*b1cdbd2cSJim Jagielski 	ScDLL::Init();
676*b1cdbd2cSJim Jagielski 	static uno::Reference<uno::XInterface> xInst((cppu::OWeakObject*)new ScRecentFunctionsObj());
677*b1cdbd2cSJim Jagielski 	return xInst;
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski 
getImplementationName_Static()680*b1cdbd2cSJim Jagielski rtl::OUString ScRecentFunctionsObj::getImplementationName_Static()
681*b1cdbd2cSJim Jagielski {
682*b1cdbd2cSJim Jagielski 	return rtl::OUString::createFromAscii( "stardiv.StarCalc.ScRecentFunctionsObj" );
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()685*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> ScRecentFunctionsObj::getSupportedServiceNames_Static()
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski 	uno::Sequence<rtl::OUString> aRet(1);
688*b1cdbd2cSJim Jagielski 	rtl::OUString* pArray = aRet.getArray();
689*b1cdbd2cSJim Jagielski 	pArray[0] = rtl::OUString::createFromAscii( SCRECENTFUNCTIONSOBJ_SERVICE );
690*b1cdbd2cSJim Jagielski 	return aRet;
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski // XRecentFunctions
694*b1cdbd2cSJim Jagielski 
getRecentFunctionIds()695*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int32> SAL_CALL ScRecentFunctionsObj::getRecentFunctionIds()
696*b1cdbd2cSJim Jagielski 														throw(uno::RuntimeException)
697*b1cdbd2cSJim Jagielski {
698*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
699*b1cdbd2cSJim Jagielski 	const ScAppOptions& rOpt = SC_MOD()->GetAppOptions();
700*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = rOpt.GetLRUFuncListCount();
701*b1cdbd2cSJim Jagielski 	const sal_uInt16* pFuncs = rOpt.GetLRUFuncList();
702*b1cdbd2cSJim Jagielski 	if (pFuncs)
703*b1cdbd2cSJim Jagielski 	{
704*b1cdbd2cSJim Jagielski 		uno::Sequence<sal_Int32> aSeq(nCount);
705*b1cdbd2cSJim Jagielski 		sal_Int32* pAry = aSeq.getArray();
706*b1cdbd2cSJim Jagielski 		for (sal_uInt16 i=0; i<nCount; i++)
707*b1cdbd2cSJim Jagielski 			pAry[i] = pFuncs[i];
708*b1cdbd2cSJim Jagielski 		return aSeq;
709*b1cdbd2cSJim Jagielski 	}
710*b1cdbd2cSJim Jagielski 	return uno::Sequence<sal_Int32>(0);
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski 
setRecentFunctionIds(const uno::Sequence<sal_Int32> & aRecentFunctionIds)713*b1cdbd2cSJim Jagielski void SAL_CALL ScRecentFunctionsObj::setRecentFunctionIds(
714*b1cdbd2cSJim Jagielski 					const uno::Sequence<sal_Int32>& aRecentFunctionIds )
715*b1cdbd2cSJim Jagielski 									throw(uno::RuntimeException)
716*b1cdbd2cSJim Jagielski {
717*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
718*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = (sal_uInt16) Min( aRecentFunctionIds.getLength(), (sal_Int32) LRU_MAX );
719*b1cdbd2cSJim Jagielski 	const sal_Int32* pAry = aRecentFunctionIds.getConstArray();
720*b1cdbd2cSJim Jagielski 
721*b1cdbd2cSJim Jagielski 	sal_uInt16* pFuncs = nCount ? new sal_uInt16[nCount] : NULL;
722*b1cdbd2cSJim Jagielski 	for (sal_uInt16 i=0; i<nCount; i++)
723*b1cdbd2cSJim Jagielski 		pFuncs[i] = (sal_uInt16)pAry[i];		//! auf gueltige Werte testen?
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski 	ScModule* pScMod = SC_MOD();
726*b1cdbd2cSJim Jagielski 	ScAppOptions aNewOpts(pScMod->GetAppOptions());
727*b1cdbd2cSJim Jagielski 	aNewOpts.SetLRUFuncList(pFuncs, nCount);
728*b1cdbd2cSJim Jagielski 	pScMod->SetAppOptions(aNewOpts);
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski 	pScMod->RecentFunctionsChanged();		// update function list child window
731*b1cdbd2cSJim Jagielski 
732*b1cdbd2cSJim Jagielski 	delete[] pFuncs;
733*b1cdbd2cSJim Jagielski }
734*b1cdbd2cSJim Jagielski 
getMaxRecentFunctions()735*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScRecentFunctionsObj::getMaxRecentFunctions() throw(uno::RuntimeException)
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski 	return LRU_MAX;
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski 
740*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
741*b1cdbd2cSJim Jagielski 
ScFunctionListObj()742*b1cdbd2cSJim Jagielski ScFunctionListObj::ScFunctionListObj()
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski }
745*b1cdbd2cSJim Jagielski 
~ScFunctionListObj()746*b1cdbd2cSJim Jagielski ScFunctionListObj::~ScFunctionListObj()
747*b1cdbd2cSJim Jagielski {
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski // stuff for exService_...
751*b1cdbd2cSJim Jagielski 
ScFunctionListObj_CreateInstance(const uno::Reference<lang::XMultiServiceFactory> &)752*b1cdbd2cSJim Jagielski uno::Reference<uno::XInterface>	SAL_CALL ScFunctionListObj_CreateInstance(
753*b1cdbd2cSJim Jagielski                         const uno::Reference<lang::XMultiServiceFactory>& /* rSMgr */ )
754*b1cdbd2cSJim Jagielski {
755*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
756*b1cdbd2cSJim Jagielski 	ScDLL::Init();
757*b1cdbd2cSJim Jagielski 	static uno::Reference<uno::XInterface> xInst((cppu::OWeakObject*)new ScFunctionListObj());
758*b1cdbd2cSJim Jagielski 	return xInst;
759*b1cdbd2cSJim Jagielski }
760*b1cdbd2cSJim Jagielski 
getImplementationName_Static()761*b1cdbd2cSJim Jagielski rtl::OUString ScFunctionListObj::getImplementationName_Static()
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski 	return rtl::OUString::createFromAscii( "stardiv.StarCalc.ScFunctionListObj" );
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()766*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> ScFunctionListObj::getSupportedServiceNames_Static()
767*b1cdbd2cSJim Jagielski {
768*b1cdbd2cSJim Jagielski 	uno::Sequence<rtl::OUString> aRet(1);
769*b1cdbd2cSJim Jagielski 	rtl::OUString* pArray = aRet.getArray();
770*b1cdbd2cSJim Jagielski 	pArray[0] = rtl::OUString::createFromAscii( SCFUNCTIONLISTOBJ_SERVICE );
771*b1cdbd2cSJim Jagielski 	return aRet;
772*b1cdbd2cSJim Jagielski }
773*b1cdbd2cSJim Jagielski 
774*b1cdbd2cSJim Jagielski 
lcl_FillSequence(uno::Sequence<beans::PropertyValue> & rSequence,const ScFuncDesc & rDesc)775*b1cdbd2cSJim Jagielski static void lcl_FillSequence( uno::Sequence<beans::PropertyValue>& rSequence, const ScFuncDesc& rDesc )
776*b1cdbd2cSJim Jagielski {
777*b1cdbd2cSJim Jagielski     rDesc.initArgumentInfo();   // full argument info is needed
778*b1cdbd2cSJim Jagielski 
779*b1cdbd2cSJim Jagielski 	DBG_ASSERT( rSequence.getLength() == SC_FUNCDESC_PROPCOUNT, "Falscher Count" );
780*b1cdbd2cSJim Jagielski 
781*b1cdbd2cSJim Jagielski 	beans::PropertyValue* pArray = rSequence.getArray();
782*b1cdbd2cSJim Jagielski 
783*b1cdbd2cSJim Jagielski 	pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_ID );
784*b1cdbd2cSJim Jagielski 	pArray[0].Value <<= (sal_Int32) rDesc.nFIndex;
785*b1cdbd2cSJim Jagielski 
786*b1cdbd2cSJim Jagielski 	pArray[1].Name = rtl::OUString::createFromAscii( SC_UNONAME_CATEGORY );
787*b1cdbd2cSJim Jagielski 	pArray[1].Value <<= (sal_Int32) rDesc.nCategory;
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski 	pArray[2].Name = rtl::OUString::createFromAscii( SC_UNONAME_NAME );
790*b1cdbd2cSJim Jagielski 	if (rDesc.pFuncName)
791*b1cdbd2cSJim Jagielski 		pArray[2].Value <<= rtl::OUString( *rDesc.pFuncName );
792*b1cdbd2cSJim Jagielski 
793*b1cdbd2cSJim Jagielski 	pArray[3].Name = rtl::OUString::createFromAscii( SC_UNONAME_DESCRIPTION );
794*b1cdbd2cSJim Jagielski 	if (rDesc.pFuncDesc)
795*b1cdbd2cSJim Jagielski 		pArray[3].Value <<= rtl::OUString( *rDesc.pFuncDesc );
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski 	pArray[4].Name = rtl::OUString::createFromAscii( SC_UNONAME_ARGUMENTS );
798*b1cdbd2cSJim Jagielski 	if (rDesc.ppDefArgNames && rDesc.ppDefArgDescs && rDesc.pDefArgFlags )
799*b1cdbd2cSJim Jagielski 	{
800*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = rDesc.nArgCount;
801*b1cdbd2cSJim Jagielski 		if (nCount >= PAIRED_VAR_ARGS)
802*b1cdbd2cSJim Jagielski 		    nCount -= PAIRED_VAR_ARGS - 2;
803*b1cdbd2cSJim Jagielski         else if (nCount >= VAR_ARGS)
804*b1cdbd2cSJim Jagielski             nCount -= VAR_ARGS - 1;
805*b1cdbd2cSJim Jagielski         sal_uInt16 nSeqCount = rDesc.GetSuppressedArgCount();
806*b1cdbd2cSJim Jagielski         if (nSeqCount >= PAIRED_VAR_ARGS)
807*b1cdbd2cSJim Jagielski             nSeqCount -= PAIRED_VAR_ARGS - 2;
808*b1cdbd2cSJim Jagielski         else if (nSeqCount >= VAR_ARGS)
809*b1cdbd2cSJim Jagielski             nSeqCount -= VAR_ARGS - 1;
810*b1cdbd2cSJim Jagielski 
811*b1cdbd2cSJim Jagielski         if (nSeqCount)
812*b1cdbd2cSJim Jagielski         {
813*b1cdbd2cSJim Jagielski             uno::Sequence<sheet::FunctionArgument> aArgSeq(nSeqCount);
814*b1cdbd2cSJim Jagielski             sheet::FunctionArgument* pArgAry = aArgSeq.getArray();
815*b1cdbd2cSJim Jagielski             for (sal_uInt16 i=0, j=0; i<nCount; i++)
816*b1cdbd2cSJim Jagielski             {
817*b1cdbd2cSJim Jagielski                 if (!rDesc.pDefArgFlags[i].bSuppress)
818*b1cdbd2cSJim Jagielski                 {
819*b1cdbd2cSJim Jagielski                     String aArgName;
820*b1cdbd2cSJim Jagielski                     if (rDesc.ppDefArgNames[i]) aArgName = *rDesc.ppDefArgNames[i];
821*b1cdbd2cSJim Jagielski                     String aArgDesc;
822*b1cdbd2cSJim Jagielski                     if (rDesc.ppDefArgDescs[i]) aArgDesc = *rDesc.ppDefArgDescs[i];
823*b1cdbd2cSJim Jagielski                     sheet::FunctionArgument aArgument;
824*b1cdbd2cSJim Jagielski                     aArgument.Name		  = aArgName;
825*b1cdbd2cSJim Jagielski                     aArgument.Description = aArgDesc;
826*b1cdbd2cSJim Jagielski                     aArgument.IsOptional  = rDesc.pDefArgFlags[i].bOptional;
827*b1cdbd2cSJim Jagielski                     pArgAry[j++] = aArgument;
828*b1cdbd2cSJim Jagielski                 }
829*b1cdbd2cSJim Jagielski             }
830*b1cdbd2cSJim Jagielski             pArray[4].Value <<= aArgSeq;
831*b1cdbd2cSJim Jagielski         }
832*b1cdbd2cSJim Jagielski 	}
833*b1cdbd2cSJim Jagielski }
834*b1cdbd2cSJim Jagielski 
835*b1cdbd2cSJim Jagielski // XFunctionDescriptions
836*b1cdbd2cSJim Jagielski 
getById(sal_Int32 nId)837*b1cdbd2cSJim Jagielski uno::Sequence<beans::PropertyValue> SAL_CALL ScFunctionListObj::getById( sal_Int32 nId )
838*b1cdbd2cSJim Jagielski 								throw(lang::IllegalArgumentException, uno::RuntimeException)
839*b1cdbd2cSJim Jagielski {
840*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
841*b1cdbd2cSJim Jagielski 	const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
842*b1cdbd2cSJim Jagielski 	if ( pFuncList )
843*b1cdbd2cSJim Jagielski 	{
844*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = (sal_uInt16)pFuncList->GetCount();
845*b1cdbd2cSJim Jagielski 		for (sal_uInt16 nIndex=0; nIndex<nCount; nIndex++)
846*b1cdbd2cSJim Jagielski 		{
847*b1cdbd2cSJim Jagielski 			const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex);
848*b1cdbd2cSJim Jagielski 			if ( pDesc && pDesc->nFIndex == nId )
849*b1cdbd2cSJim Jagielski 			{
850*b1cdbd2cSJim Jagielski 				uno::Sequence<beans::PropertyValue> aSeq( SC_FUNCDESC_PROPCOUNT );
851*b1cdbd2cSJim Jagielski 				lcl_FillSequence( aSeq, *pDesc );
852*b1cdbd2cSJim Jagielski 				return aSeq;
853*b1cdbd2cSJim Jagielski 			}
854*b1cdbd2cSJim Jagielski 		}
855*b1cdbd2cSJim Jagielski 
856*b1cdbd2cSJim Jagielski 		throw lang::IllegalArgumentException();			// not found
857*b1cdbd2cSJim Jagielski 	}
858*b1cdbd2cSJim Jagielski 	else
859*b1cdbd2cSJim Jagielski 		throw uno::RuntimeException();					// should not happen
860*b1cdbd2cSJim Jagielski 
861*b1cdbd2cSJim Jagielski //    return uno::Sequence<beans::PropertyValue>(0);
862*b1cdbd2cSJim Jagielski }
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski // XNameAccess
865*b1cdbd2cSJim Jagielski 
getByName(const rtl::OUString & aName)866*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScFunctionListObj::getByName( const rtl::OUString& aName )
867*b1cdbd2cSJim Jagielski 			throw(container::NoSuchElementException,
868*b1cdbd2cSJim Jagielski 					lang::WrappedTargetException, uno::RuntimeException)
869*b1cdbd2cSJim Jagielski {
870*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
871*b1cdbd2cSJim Jagielski 	String aNameStr(aName);
872*b1cdbd2cSJim Jagielski 	const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
873*b1cdbd2cSJim Jagielski 	if ( pFuncList )
874*b1cdbd2cSJim Jagielski 	{
875*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = (sal_uInt16)pFuncList->GetCount();
876*b1cdbd2cSJim Jagielski 		for (sal_uInt16 nIndex=0; nIndex<nCount; nIndex++)
877*b1cdbd2cSJim Jagielski 		{
878*b1cdbd2cSJim Jagielski 			const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex);
879*b1cdbd2cSJim Jagielski 			//!	Case-insensitiv ???
880*b1cdbd2cSJim Jagielski 			if ( pDesc && pDesc->pFuncName && aNameStr == *pDesc->pFuncName )
881*b1cdbd2cSJim Jagielski 			{
882*b1cdbd2cSJim Jagielski 				uno::Sequence<beans::PropertyValue> aSeq( SC_FUNCDESC_PROPCOUNT );
883*b1cdbd2cSJim Jagielski 				lcl_FillSequence( aSeq, *pDesc );
884*b1cdbd2cSJim Jagielski                 return uno::makeAny(aSeq);
885*b1cdbd2cSJim Jagielski 			}
886*b1cdbd2cSJim Jagielski 		}
887*b1cdbd2cSJim Jagielski 
888*b1cdbd2cSJim Jagielski 		throw container::NoSuchElementException();		// not found
889*b1cdbd2cSJim Jagielski 	}
890*b1cdbd2cSJim Jagielski 	else
891*b1cdbd2cSJim Jagielski 		throw uno::RuntimeException();					// should not happen
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski //    return uno::Any();
894*b1cdbd2cSJim Jagielski }
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski // XIndexAccess
897*b1cdbd2cSJim Jagielski 
getCount()898*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScFunctionListObj::getCount() throw(uno::RuntimeException)
899*b1cdbd2cSJim Jagielski {
900*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
901*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = 0;
902*b1cdbd2cSJim Jagielski 	const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
903*b1cdbd2cSJim Jagielski 	if ( pFuncList )
904*b1cdbd2cSJim Jagielski 		nCount = (sal_uInt16)pFuncList->GetCount();
905*b1cdbd2cSJim Jagielski 	return nCount;
906*b1cdbd2cSJim Jagielski }
907*b1cdbd2cSJim Jagielski 
getByIndex(sal_Int32 nIndex)908*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScFunctionListObj::getByIndex( sal_Int32 nIndex )
909*b1cdbd2cSJim Jagielski 							throw(lang::IndexOutOfBoundsException,
910*b1cdbd2cSJim Jagielski 									lang::WrappedTargetException, uno::RuntimeException)
911*b1cdbd2cSJim Jagielski {
912*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
913*b1cdbd2cSJim Jagielski 	const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
914*b1cdbd2cSJim Jagielski 	if ( pFuncList )
915*b1cdbd2cSJim Jagielski 	{
916*b1cdbd2cSJim Jagielski 		if ( nIndex >= 0 && nIndex < (sal_Int32)pFuncList->GetCount() )
917*b1cdbd2cSJim Jagielski 		{
918*b1cdbd2cSJim Jagielski 			const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex);
919*b1cdbd2cSJim Jagielski 			if ( pDesc )
920*b1cdbd2cSJim Jagielski 			{
921*b1cdbd2cSJim Jagielski 				uno::Sequence<beans::PropertyValue> aSeq( SC_FUNCDESC_PROPCOUNT );
922*b1cdbd2cSJim Jagielski 				lcl_FillSequence( aSeq, *pDesc );
923*b1cdbd2cSJim Jagielski                 return uno::makeAny(aSeq);
924*b1cdbd2cSJim Jagielski 			}
925*b1cdbd2cSJim Jagielski 		}
926*b1cdbd2cSJim Jagielski 
927*b1cdbd2cSJim Jagielski 		throw lang::IndexOutOfBoundsException();		// illegal index
928*b1cdbd2cSJim Jagielski 	}
929*b1cdbd2cSJim Jagielski 	else
930*b1cdbd2cSJim Jagielski 		throw uno::RuntimeException();					// should not happen
931*b1cdbd2cSJim Jagielski 
932*b1cdbd2cSJim Jagielski //    return uno::Any();
933*b1cdbd2cSJim Jagielski }
934*b1cdbd2cSJim Jagielski 
935*b1cdbd2cSJim Jagielski // XEnumerationAccess
936*b1cdbd2cSJim Jagielski 
createEnumeration()937*b1cdbd2cSJim Jagielski uno::Reference<container::XEnumeration> SAL_CALL ScFunctionListObj::createEnumeration()
938*b1cdbd2cSJim Jagielski 													throw(uno::RuntimeException)
939*b1cdbd2cSJim Jagielski {
940*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
941*b1cdbd2cSJim Jagielski     return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.FunctionDescriptionEnumeration")));
942*b1cdbd2cSJim Jagielski }
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski // XElementAccess
945*b1cdbd2cSJim Jagielski 
getElementType()946*b1cdbd2cSJim Jagielski uno::Type SAL_CALL ScFunctionListObj::getElementType() throw(uno::RuntimeException)
947*b1cdbd2cSJim Jagielski {
948*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
949*b1cdbd2cSJim Jagielski 	return getCppuType((uno::Sequence<beans::PropertyValue>*)0);
950*b1cdbd2cSJim Jagielski }
951*b1cdbd2cSJim Jagielski 
hasElements()952*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScFunctionListObj::hasElements() throw(uno::RuntimeException)
953*b1cdbd2cSJim Jagielski {
954*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
955*b1cdbd2cSJim Jagielski 	return ( getCount() > 0 );
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski 
getElementNames()958*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> SAL_CALL ScFunctionListObj::getElementNames() throw(uno::RuntimeException)
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
961*b1cdbd2cSJim Jagielski 	const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
962*b1cdbd2cSJim Jagielski 	if ( pFuncList )
963*b1cdbd2cSJim Jagielski 	{
964*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = (sal_uInt16)pFuncList->GetCount();
965*b1cdbd2cSJim Jagielski 		uno::Sequence<rtl::OUString> aSeq(nCount);
966*b1cdbd2cSJim Jagielski 		rtl::OUString* pAry = aSeq.getArray();
967*b1cdbd2cSJim Jagielski 		for (sal_uInt16 nIndex=0; nIndex<nCount; nIndex++)
968*b1cdbd2cSJim Jagielski 		{
969*b1cdbd2cSJim Jagielski 			const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex);
970*b1cdbd2cSJim Jagielski 			if ( pDesc && pDesc->pFuncName )
971*b1cdbd2cSJim Jagielski 				pAry[nIndex] = *pDesc->pFuncName;
972*b1cdbd2cSJim Jagielski 		}
973*b1cdbd2cSJim Jagielski 		return aSeq;
974*b1cdbd2cSJim Jagielski 	}
975*b1cdbd2cSJim Jagielski 	return uno::Sequence<rtl::OUString>(0);
976*b1cdbd2cSJim Jagielski }
977*b1cdbd2cSJim Jagielski 
hasByName(const rtl::OUString & aName)978*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScFunctionListObj::hasByName( const rtl::OUString& aName )
979*b1cdbd2cSJim Jagielski 										throw(uno::RuntimeException)
980*b1cdbd2cSJim Jagielski {
981*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
982*b1cdbd2cSJim Jagielski 	String aNameStr(aName);
983*b1cdbd2cSJim Jagielski 	const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList();
984*b1cdbd2cSJim Jagielski 	if ( pFuncList )
985*b1cdbd2cSJim Jagielski 	{
986*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = (sal_uInt16)pFuncList->GetCount();
987*b1cdbd2cSJim Jagielski 		for (sal_uInt16 nIndex=0; nIndex<nCount; nIndex++)
988*b1cdbd2cSJim Jagielski 		{
989*b1cdbd2cSJim Jagielski 			const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex);
990*b1cdbd2cSJim Jagielski 			//!	Case-insensitiv ???
991*b1cdbd2cSJim Jagielski 			if ( pDesc && pDesc->pFuncName && aNameStr == *pDesc->pFuncName )
992*b1cdbd2cSJim Jagielski 				return sal_True;
993*b1cdbd2cSJim Jagielski 		}
994*b1cdbd2cSJim Jagielski 	}
995*b1cdbd2cSJim Jagielski 	return sal_False;
996*b1cdbd2cSJim Jagielski }
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
999*b1cdbd2cSJim Jagielski 
1000*b1cdbd2cSJim Jagielski 
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski 
1003