xref: /aoo4110/main/sc/workben/addin.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 #ifdef _MSC_VER
25*b1cdbd2cSJim Jagielski #pragma hdrstop
26*b1cdbd2cSJim Jagielski #endif
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <usr/factoryhlp.hxx>
29*b1cdbd2cSJim Jagielski #include <usr/macros.hxx>
30*b1cdbd2cSJim Jagielski #include <usr/reflserv.hxx>
31*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
32*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
33*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
34*b1cdbd2cSJim Jagielski #include <tools/date.hxx>
35*b1cdbd2cSJim Jagielski #include <svl/itemprop.hxx>
36*b1cdbd2cSJim Jagielski #include <usr/proptypehlp.hxx>
37*b1cdbd2cSJim Jagielski #include <cppuhelper/factory.hxx>
38*b1cdbd2cSJim Jagielski #include <uno/lbnames.h>
39*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #include <com/sun/star/util/date.hpp>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include "addin.hxx"
44*b1cdbd2cSJim Jagielski #include "result.hxx"
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski using namespace com::sun::star;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski SMART_UNO_IMPLEMENTATION( ScTestAddIn, UsrObject );
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski #define SCADDIN_SERVICE			L"com.sun.star.sheet.AddIn"
56*b1cdbd2cSJim Jagielski #define SCTESTADDIN_SERVICE		L"stardiv.one.sheet.DemoAddIn"
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski extern "C" {
61*b1cdbd2cSJim Jagielski 
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment ** ppEnv)62*b1cdbd2cSJim Jagielski void SAL_CALL component_getImplementationEnvironment(
63*b1cdbd2cSJim Jagielski 	const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski 	*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
66*b1cdbd2cSJim Jagielski }
67*b1cdbd2cSJim Jagielski 
component_writeInfo(void * pServiceManager,registry::XRegistryKey * pRegistryKey)68*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL component_writeInfo(
69*b1cdbd2cSJim Jagielski 	void * pServiceManager, registry::XRegistryKey * pRegistryKey )
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski 	if (pRegistryKey)
72*b1cdbd2cSJim Jagielski 	{
73*b1cdbd2cSJim Jagielski 		try
74*b1cdbd2cSJim Jagielski 		{
75*b1cdbd2cSJim Jagielski 			UString aImpl = L"/";
76*b1cdbd2cSJim Jagielski 			aImpl += ScTestAddIn::getImplementationName_Static();
77*b1cdbd2cSJim Jagielski 			aImpl += L"/UNO/SERVICES";
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 			uno::Reference<registry::XRegistryKey> xNewKey(
80*b1cdbd2cSJim Jagielski 				reinterpret_cast<registry::XRegistryKey*>(pRegistryKey)->createKey(aImpl) );
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 			uno::Sequence <rtl::OUString> aSequ = ScTestAddIn::getSupportedServiceNames_Static();
83*b1cdbd2cSJim Jagielski 			const rtl::OUString * pArray = aSequ.getConstArray();
84*b1cdbd2cSJim Jagielski 			for( INT32 i = 0; i < aSequ.getLength(); i++ )
85*b1cdbd2cSJim Jagielski 				xNewKey->createKey( pArray[i] );
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 			return sal_True;
88*b1cdbd2cSJim Jagielski 		}
89*b1cdbd2cSJim Jagielski 		catch (registry::InvalidRegistryException&)
90*b1cdbd2cSJim Jagielski 		{
91*b1cdbd2cSJim Jagielski 			OSL_ENSHURE( sal_False, "### InvalidRegistryException!" );
92*b1cdbd2cSJim Jagielski 		}
93*b1cdbd2cSJim Jagielski 	}
94*b1cdbd2cSJim Jagielski 	return sal_False;
95*b1cdbd2cSJim Jagielski }
96*b1cdbd2cSJim Jagielski 
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void * pRegistryKey)97*b1cdbd2cSJim Jagielski void * SAL_CALL component_getFactory(
98*b1cdbd2cSJim Jagielski 	const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski 	void* pRet = 0;
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski 	if ( pServiceManager && UString(pImplName) == ScTestAddIn::getImplementationName_Static() )
103*b1cdbd2cSJim Jagielski 	{
104*b1cdbd2cSJim Jagielski 		uno::Reference<lang::XSingleServiceFactory> xFactory( cppu::createOneInstanceFactory(
105*b1cdbd2cSJim Jagielski 				reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
106*b1cdbd2cSJim Jagielski 				ScTestAddIn::getImplementationName_Static(),
107*b1cdbd2cSJim Jagielski 				ScTestAddIn_CreateInstance,
108*b1cdbd2cSJim Jagielski 				ScTestAddIn::getSupportedServiceNames_Static() ) );
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 		if (xFactory.is())
111*b1cdbd2cSJim Jagielski 		{
112*b1cdbd2cSJim Jagielski 			xFactory->acquire();
113*b1cdbd2cSJim Jagielski 			pRet = xFactory.get();
114*b1cdbd2cSJim Jagielski 		}
115*b1cdbd2cSJim Jagielski 	}
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 	return pRet;
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski }	// extern C
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
123*b1cdbd2cSJim Jagielski 
ScTestAddIn()124*b1cdbd2cSJim Jagielski ScTestAddIn::ScTestAddIn()
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski 
~ScTestAddIn()128*b1cdbd2cSJim Jagielski ScTestAddIn::~ScTestAddIn()
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski }
131*b1cdbd2cSJim Jagielski 
getImplementationName_Static()132*b1cdbd2cSJim Jagielski UString ScTestAddIn::getImplementationName_Static()
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski 	return L"stardiv.StarCalc.ScTestAddIn";
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()137*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString > ScTestAddIn::getSupportedServiceNames_Static()
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski 	uno::Sequence< rtl::OUString > aRet(2);
140*b1cdbd2cSJim Jagielski 	rtl::OUString* pArray = aRet.getArray();
141*b1cdbd2cSJim Jagielski 	pArray[0] = SCADDIN_SERVICE;
142*b1cdbd2cSJim Jagielski 	pArray[1] = SCTESTADDIN_SERVICE;
143*b1cdbd2cSJim Jagielski 	return aRet;
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski 
ScTestAddIn_CreateInstance(const uno::Reference<lang::XMultiServiceFactory> &)146*b1cdbd2cSJim Jagielski uno::Reference<uno::XInterface> ScTestAddIn_CreateInstance(
147*b1cdbd2cSJim Jagielski 		const uno::Reference<lang::XMultiServiceFactory>& )
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski 	static uno::Reference<uno::XInterface> xInst = (cppu::OWeakObject*)new ScTestAddIn();
150*b1cdbd2cSJim Jagielski 	return xInst;
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski // XAddIn
155*b1cdbd2cSJim Jagielski 
getProgrammaticFuntionName(const UString & aDisplayName)156*b1cdbd2cSJim Jagielski UString ScTestAddIn::getProgrammaticFuntionName(const UString& aDisplayName)
157*b1cdbd2cSJim Jagielski 								THROWS( (UsrSystemException) )
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski 	//!...
160*b1cdbd2cSJim Jagielski 	return UString();
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski 
getDisplayFunctionName(const UString & aProgrammaticName)163*b1cdbd2cSJim Jagielski UString ScTestAddIn::getDisplayFunctionName(const UString& aProgrammaticName)
164*b1cdbd2cSJim Jagielski 								THROWS( (UsrSystemException) )
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski 	//	return translated strings
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 	UString aRet;
169*b1cdbd2cSJim Jagielski 	if ( aProgrammaticName == L"countParams" )		  aRet = L"ParamAnzahl";
170*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"addOne" )		  aRet = L"PlusEins";
171*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"repeatStr" )	  aRet = L"WiederholeString";
172*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"getDateString" ) aRet = L"Datumsstring";
173*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"getColorValue" ) aRet = L"Farbwert";
174*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"transpose" )	  aRet = L"Transponieren";
175*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"transposeInt" )  aRet = L"IntegerTransponieren";
176*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"repeatMultiple" )aRet = L"Mehrfach";
177*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"getStrOrVal" )	  aRet = L"StringOderWert";
178*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"callAsync" )	  aRet = L"Asynchron";
179*b1cdbd2cSJim Jagielski 	return aRet;
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski 
getFunctionDescription(const UString & aProgrammaticName)182*b1cdbd2cSJim Jagielski UString ScTestAddIn::getFunctionDescription(const UString& aProgrammaticName)
183*b1cdbd2cSJim Jagielski 								THROWS( (UsrSystemException) )
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski 	//	return translated strings
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 	UString aRet;
188*b1cdbd2cSJim Jagielski 	if ( aProgrammaticName == L"countParams" )		  aRet = L"Gibt die Anzahl der Parameter zurueck.";
189*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"addOne" )		  aRet = L"Addiert 1 zur uebergebenen Zahl.";
190*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"repeatStr" )	  aRet = L"Wiederholt eine Zeichenkette.";
191*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"getDateString" ) aRet = L"Wandelt ein Datum in eine Zeichenkette.";
192*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"getColorValue" ) aRet = L"Gibt den Farbwert eines Zellbereichs zurueck. Bei transparentem Hintergrund wird -1 zurueckgegeben";
193*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"transpose" )	  aRet = L"Transponiert eine Matrix.";
194*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"transposeInt" )  aRet = L"Transponiert eine Matrix mit Ganzzahlen.";
195*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"repeatMultiple" )aRet = L"Wiederholt mehrere Bestandteile.";
196*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"getStrOrVal" )	  aRet = L"Gibt einen String oder einen Wert zurueck.";
197*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticName == L"callAsync" )	  aRet = L"Test fuer asynchrone Funktion.";
198*b1cdbd2cSJim Jagielski 	return aRet;
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski 
getDisplayArgumentName(const UString & aProgrammaticFunctionName,INT32 nArgument)201*b1cdbd2cSJim Jagielski UString ScTestAddIn::getDisplayArgumentName(const UString& aProgrammaticFunctionName,
202*b1cdbd2cSJim Jagielski 								INT32 nArgument) THROWS( (UsrSystemException) )
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski 	//	return translated strings
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 	UString aRet;
207*b1cdbd2cSJim Jagielski 	if ( aProgrammaticFunctionName == L"countParams" )
208*b1cdbd2cSJim Jagielski 	{
209*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Parameter";
210*b1cdbd2cSJim Jagielski 	}
211*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"addOne" )
212*b1cdbd2cSJim Jagielski 	{
213*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Wert";
214*b1cdbd2cSJim Jagielski 	}
215*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"repeatStr" )
216*b1cdbd2cSJim Jagielski 	{
217*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"String";
218*b1cdbd2cSJim Jagielski 		else if ( nArgument == 1 )	aRet = L"Anzahl";
219*b1cdbd2cSJim Jagielski 	}
220*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getDateString" )
221*b1cdbd2cSJim Jagielski 	{
222*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Dokument";
223*b1cdbd2cSJim Jagielski 		else if ( nArgument == 1 )	aRet = L"Wert";
224*b1cdbd2cSJim Jagielski 	}
225*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getColorValue" )
226*b1cdbd2cSJim Jagielski 	{
227*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Bereich";
228*b1cdbd2cSJim Jagielski 	}
229*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"transpose" )
230*b1cdbd2cSJim Jagielski 	{
231*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Matrix";
232*b1cdbd2cSJim Jagielski 	}
233*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"transposeInt" )
234*b1cdbd2cSJim Jagielski 	{
235*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Matrix";
236*b1cdbd2cSJim Jagielski 	}
237*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"repeatMultiple" )
238*b1cdbd2cSJim Jagielski 	{
239*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Anzahl";
240*b1cdbd2cSJim Jagielski 		else if ( nArgument == 1 )	aRet = L"Trenner";
241*b1cdbd2cSJim Jagielski 		else if ( nArgument == 2 )	aRet = L"Inhalt";
242*b1cdbd2cSJim Jagielski 	}
243*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getStrOrVal" )
244*b1cdbd2cSJim Jagielski 	{
245*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Flag";
246*b1cdbd2cSJim Jagielski 	}
247*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"callAsync" )
248*b1cdbd2cSJim Jagielski 	{
249*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Name";
250*b1cdbd2cSJim Jagielski 	}
251*b1cdbd2cSJim Jagielski 	return aRet;
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski 
getArgumentDescription(const UString & aProgrammaticFunctionName,INT32 nArgument)254*b1cdbd2cSJim Jagielski UString ScTestAddIn::getArgumentDescription(const UString& aProgrammaticFunctionName,
255*b1cdbd2cSJim Jagielski 								INT32 nArgument) THROWS( (UsrSystemException) )
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski 	//	return translated strings
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 	UString aRet;
260*b1cdbd2cSJim Jagielski 	if ( aProgrammaticFunctionName == L"countParams" )
261*b1cdbd2cSJim Jagielski 	{
262*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Beliebiger Parameter";
263*b1cdbd2cSJim Jagielski 	}
264*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"addOne" )
265*b1cdbd2cSJim Jagielski 	{
266*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Der Wert, zu dem 1 addiert wird";
267*b1cdbd2cSJim Jagielski 	}
268*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"repeatStr" )
269*b1cdbd2cSJim Jagielski 	{
270*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Der Text, der wiederholt wird";
271*b1cdbd2cSJim Jagielski 		else if ( nArgument == 1 )	aRet = L"Die Anzahl der Wiederholungen";
272*b1cdbd2cSJim Jagielski 	}
273*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getDateString" )
274*b1cdbd2cSJim Jagielski 	{
275*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"(intern)";
276*b1cdbd2cSJim Jagielski 		else if ( nArgument == 1 )	aRet = L"Der Wert, der als Datum formatiert wird";
277*b1cdbd2cSJim Jagielski 	}
278*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getColorValue" )
279*b1cdbd2cSJim Jagielski 	{
280*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Der Bereich, dessen Hintergrundfarbe abgefragt wird";
281*b1cdbd2cSJim Jagielski 	}
282*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"transpose" )
283*b1cdbd2cSJim Jagielski 	{
284*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Die Matrix, die transponiert werden soll";
285*b1cdbd2cSJim Jagielski 	}
286*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"transposeInt" )
287*b1cdbd2cSJim Jagielski 	{
288*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Die Matrix, die transponiert werden soll";
289*b1cdbd2cSJim Jagielski 	}
290*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"repeatMultiple" )
291*b1cdbd2cSJim Jagielski 	{
292*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Anzahl der Wiederholungen";
293*b1cdbd2cSJim Jagielski 		else if ( nArgument == 1 )	aRet = L"Text, der zwischen den Inhalten erscheint";
294*b1cdbd2cSJim Jagielski 		else if ( nArgument == 2 )	aRet = L"Mehrere Inhalte";
295*b1cdbd2cSJim Jagielski 	}
296*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getStrOrVal" )
297*b1cdbd2cSJim Jagielski 	{
298*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Wenn Flag 0 ist, wird ein Wert zurueckgegeben, sonst ein String.";
299*b1cdbd2cSJim Jagielski 	}
300*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"callAsync" )
301*b1cdbd2cSJim Jagielski 	{
302*b1cdbd2cSJim Jagielski 		if ( nArgument == 0 )		aRet = L"Ein String";
303*b1cdbd2cSJim Jagielski 	}
304*b1cdbd2cSJim Jagielski 	return aRet;
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski 
getProgrammaticCategoryName(const UString & aProgrammaticFunctionName)307*b1cdbd2cSJim Jagielski UString ScTestAddIn::getProgrammaticCategoryName(const UString& aProgrammaticFunctionName)
308*b1cdbd2cSJim Jagielski 								THROWS( (UsrSystemException) )
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski 	//	return non-translated strings
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski 	UString aRet;
313*b1cdbd2cSJim Jagielski 	if ( aProgrammaticFunctionName == L"countParams" )		  aRet = L"Information";
314*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"addOne" )		  aRet = L"Mathematical";
315*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"repeatStr" )	  aRet = L"Text";
316*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getDateString" ) aRet = L"Date&Time";
317*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getColorValue" ) aRet = L"Spreadsheet";
318*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"transpose" )	  aRet = L"Matrix";
319*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"transposeInt" )  aRet = L"Matrix";
320*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"repeatMultiple" )aRet = L"Text";
321*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"getStrOrVal" )	  aRet = L"Add-In";
322*b1cdbd2cSJim Jagielski 	else if ( aProgrammaticFunctionName == L"callAsync" )	  aRet = L"Realtime";		// new group
323*b1cdbd2cSJim Jagielski 	return aRet;
324*b1cdbd2cSJim Jagielski }
325*b1cdbd2cSJim Jagielski 
getDisplayCategoryName(const UString & aProgrammaticFunctionName)326*b1cdbd2cSJim Jagielski UString ScTestAddIn::getDisplayCategoryName(const UString& aProgrammaticFunctionName)
327*b1cdbd2cSJim Jagielski 								THROWS( (UsrSystemException) )
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski 	//	return translated strings
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski 	return L"irgendwas";	// not used for predefined categories
332*b1cdbd2cSJim Jagielski }
333*b1cdbd2cSJim Jagielski 
334*b1cdbd2cSJim Jagielski // XLocalizable
335*b1cdbd2cSJim Jagielski 
setLocale(const lang::Locale & eLocale)336*b1cdbd2cSJim Jagielski void ScTestAddIn::setLocale(const lang::Locale& eLocale) THROWS( (UsrSystemException) )
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski 	aFuncLoc = eLocale;
339*b1cdbd2cSJim Jagielski //	DBG_ERROR( UStringToString(aFuncLoc.Language, CHARSET_SYSTEM) + String("-") +
340*b1cdbd2cSJim Jagielski //			   UStringToString(aFuncLoc.Country, CHARSET_SYSTEM) );
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski 
getLocale()343*b1cdbd2cSJim Jagielski ::com::sun::star::lang::Locale SAL_CALL ScTestAddIn::getLocale(  ) throw(::com::sun::star::uno::RuntimeException)
344*b1cdbd2cSJim Jagielski {
345*b1cdbd2cSJim Jagielski 	return aFuncLoc;
346*b1cdbd2cSJim Jagielski }
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski // XTestAddIn
349*b1cdbd2cSJim Jagielski 
countParams(const::com::sun::star::uno::Sequence<::com::sun::star::uno::Any> & aArgs)350*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScTestAddIn::countParams( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArgs ) throw(::com::sun::star::uno::RuntimeException)
351*b1cdbd2cSJim Jagielski {
352*b1cdbd2cSJim Jagielski 	return aArgs.getLength();
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski 
addOne(double fValue)355*b1cdbd2cSJim Jagielski double SAL_CALL ScTestAddIn::addOne( double fValue ) throw(::com::sun::star::uno::RuntimeException)
356*b1cdbd2cSJim Jagielski {
357*b1cdbd2cSJim Jagielski 	return fValue + 1.0;
358*b1cdbd2cSJim Jagielski }
359*b1cdbd2cSJim Jagielski 
repeatStr(const::rtl::OUString & aStr,sal_Int32 nCount)360*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScTestAddIn::repeatStr( const ::rtl::OUString& aStr, sal_Int32 nCount ) throw(::com::sun::star::uno::RuntimeException)
361*b1cdbd2cSJim Jagielski {
362*b1cdbd2cSJim Jagielski 	String aRet;
363*b1cdbd2cSJim Jagielski 	String aStrStr = OUStringToString( aStr, CHARSET_SYSTEM );
364*b1cdbd2cSJim Jagielski 	for (long i=0; i<nCount; i++)
365*b1cdbd2cSJim Jagielski 		aRet += aStrStr;
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski 	return StringToOUString( aRet, CHARSET_SYSTEM );
368*b1cdbd2cSJim Jagielski }
369*b1cdbd2cSJim Jagielski 
getDateString(const::com::sun::star::uno::Reference<::com::sun::star::beans::XPropertySet> & xCaller,double fValue)370*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScTestAddIn::getDateString( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xCaller, double fValue ) throw(::com::sun::star::uno::RuntimeException)
371*b1cdbd2cSJim Jagielski {
372*b1cdbd2cSJim Jagielski 	uno::Any aDateAny = xCaller->getPropertyValue( L"NullDate" );
373*b1cdbd2cSJim Jagielski //!	if ( aDateAny.getReflection()->equals( *Date_getReflection() ) )
374*b1cdbd2cSJim Jagielski 	{
375*b1cdbd2cSJim Jagielski 		util::Date aDate;
376*b1cdbd2cSJim Jagielski 		aDateAny >>= aDate;
377*b1cdbd2cSJim Jagielski 		//const Date* pDate = (const Date*)aDateAny.get();
378*b1cdbd2cSJim Jagielski 		//if (pDate)
379*b1cdbd2cSJim Jagielski 		{
380*b1cdbd2cSJim Jagielski 			//Date aNewDate = *pDate;
381*b1cdbd2cSJim Jagielski 			Date aNewDate( aDate.Day, aDate.Month, aDate.Year );
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 			aNewDate += (long)(fValue+0.5);
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski 			String aRet;
386*b1cdbd2cSJim Jagielski 			aRet += aNewDate.GetDay();
387*b1cdbd2cSJim Jagielski 			aRet += '.';
388*b1cdbd2cSJim Jagielski 			aRet += aNewDate.GetMonth();
389*b1cdbd2cSJim Jagielski 			aRet += '.';
390*b1cdbd2cSJim Jagielski 			aRet += aNewDate.GetYear();
391*b1cdbd2cSJim Jagielski 			return StringToOUString( aRet, CHARSET_SYSTEM );
392*b1cdbd2cSJim Jagielski 		}
393*b1cdbd2cSJim Jagielski 	}
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski 	return L"**ERROR**";
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski 
getColorValue(const::com::sun::star::uno::Reference<::com::sun::star::table::XCellRange> & xRange)398*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScTestAddIn::getColorValue( const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange >& xRange ) throw(::com::sun::star::uno::RuntimeException)
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski 	uno::Reference<beans::XPropertySet> xProp( xRange, uno::UNO_QUERY );
401*b1cdbd2cSJim Jagielski 	if (xProp.is())
402*b1cdbd2cSJim Jagielski 	{
403*b1cdbd2cSJim Jagielski 		long nRet = -1;
404*b1cdbd2cSJim Jagielski 		uno::Any aTrans = xProp->getPropertyValue( L"IsCellBackgroundTransparent" );
405*b1cdbd2cSJim Jagielski 		BOOL bIsTrans;
406*b1cdbd2cSJim Jagielski 		aTrans >>= bIsTrans;		//! dont use >>= for BOOL
407*b1cdbd2cSJim Jagielski 		if (!bIsTrans)
408*b1cdbd2cSJim Jagielski 		{
409*b1cdbd2cSJim Jagielski 			uno::Any aCol = xProp->getPropertyValue( L"CellBackColor" );
410*b1cdbd2cSJim Jagielski 			//nRet = NAMESPACE_USR(OPropertyTypeConversion)::toINT32( aCol );
411*b1cdbd2cSJim Jagielski 			aCol >>= nRet;
412*b1cdbd2cSJim Jagielski 		}
413*b1cdbd2cSJim Jagielski 		return nRet;
414*b1cdbd2cSJim Jagielski 	}
415*b1cdbd2cSJim Jagielski 	return 0;
416*b1cdbd2cSJim Jagielski }
417*b1cdbd2cSJim Jagielski 
lcl_GetDoubleElement(const uno::Sequence<uno::Sequence<double>> & aMatrix,long nCol,long nRow)418*b1cdbd2cSJim Jagielski double lcl_GetDoubleElement( const uno::Sequence< uno::Sequence<double> >& aMatrix, long nCol, long nRow )
419*b1cdbd2cSJim Jagielski {
420*b1cdbd2cSJim Jagielski 	if ( nRow < aMatrix.getLength() )
421*b1cdbd2cSJim Jagielski 	{
422*b1cdbd2cSJim Jagielski 		const uno::Sequence<double>& rRowSeq = aMatrix.getConstArray()[nRow];
423*b1cdbd2cSJim Jagielski 		if ( nCol < rRowSeq.getLength() )
424*b1cdbd2cSJim Jagielski 			return rRowSeq.getConstArray()[nCol];
425*b1cdbd2cSJim Jagielski 	}
426*b1cdbd2cSJim Jagielski 	return 0.0;		// error
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski 
lcl_GetLongElement(const uno::Sequence<uno::Sequence<INT32>> & aMatrix,long nCol,long nRow)429*b1cdbd2cSJim Jagielski INT32 lcl_GetLongElement( const uno::Sequence< uno::Sequence<INT32> >& aMatrix, long nCol, long nRow )
430*b1cdbd2cSJim Jagielski {
431*b1cdbd2cSJim Jagielski 	if ( nRow < aMatrix.getLength() )
432*b1cdbd2cSJim Jagielski 	{
433*b1cdbd2cSJim Jagielski 		const uno::Sequence<INT32>& rRowSeq = aMatrix.getConstArray()[nRow];
434*b1cdbd2cSJim Jagielski 		if ( nCol < rRowSeq.getLength() )
435*b1cdbd2cSJim Jagielski 			return rRowSeq.getConstArray()[nCol];
436*b1cdbd2cSJim Jagielski 	}
437*b1cdbd2cSJim Jagielski 	return 0.0;		// error
438*b1cdbd2cSJim Jagielski }
439*b1cdbd2cSJim Jagielski 
transpose(const::com::sun::star::uno::Sequence<::com::sun::star::uno::Sequence<double>> & aMatrix)440*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< double > > SAL_CALL ScTestAddIn::transpose( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< double > >& aMatrix ) throw(::com::sun::star::uno::RuntimeException)
441*b1cdbd2cSJim Jagielski {
442*b1cdbd2cSJim Jagielski 	long nRowCount = aMatrix.getLength();
443*b1cdbd2cSJim Jagielski 	long nColCount = 0;
444*b1cdbd2cSJim Jagielski 	if ( nRowCount )
445*b1cdbd2cSJim Jagielski 		nColCount = aMatrix.getConstArray()[0].getLength();
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski 	uno::Sequence< uno::Sequence<double> > aRet( nColCount );
448*b1cdbd2cSJim Jagielski 	for (long nCol=0; nCol<nColCount; nCol++)
449*b1cdbd2cSJim Jagielski 	{
450*b1cdbd2cSJim Jagielski 		uno::Sequence<double> aSubSeq(nRowCount);
451*b1cdbd2cSJim Jagielski 		for (long nRow=0; nRow<nRowCount; nRow++)
452*b1cdbd2cSJim Jagielski 			aSubSeq.getArray()[nRow] = lcl_GetDoubleElement( aMatrix, nCol, nRow );
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski 		aRet.getArray()[nCol] = aSubSeq;
455*b1cdbd2cSJim Jagielski 	}
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski 	return aRet;
458*b1cdbd2cSJim Jagielski }
459*b1cdbd2cSJim Jagielski 
transposeInt(const::com::sun::star::uno::Sequence<::com::sun::star::uno::Sequence<sal_Int32>> & aMatrix)460*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< sal_Int32 > > SAL_CALL ScTestAddIn::transposeInt( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< sal_Int32 > >& aMatrix ) throw(::com::sun::star::uno::RuntimeException)
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski 	long nRowCount = aMatrix.getLength();
463*b1cdbd2cSJim Jagielski 	long nColCount = 0;
464*b1cdbd2cSJim Jagielski 	if ( nRowCount )
465*b1cdbd2cSJim Jagielski 		nColCount = aMatrix.getConstArray()[0].getLength();
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski 	uno::Sequence< uno::Sequence<INT32> > aRet( nColCount );
468*b1cdbd2cSJim Jagielski 	for (long nCol=0; nCol<nColCount; nCol++)
469*b1cdbd2cSJim Jagielski 	{
470*b1cdbd2cSJim Jagielski 		uno::Sequence<INT32> aSubSeq(nRowCount);
471*b1cdbd2cSJim Jagielski 		for (long nRow=0; nRow<nRowCount; nRow++)
472*b1cdbd2cSJim Jagielski 			aSubSeq.getArray()[nRow] = lcl_GetLongElement( aMatrix, nCol, nRow );
473*b1cdbd2cSJim Jagielski 
474*b1cdbd2cSJim Jagielski 		aRet.getArray()[nCol] = aSubSeq;
475*b1cdbd2cSJim Jagielski 	}
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 	return aRet;
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski 
repeatMultiple(sal_Int32 nCount,const::com::sun::star::uno::Any & aFirst,const::com::sun::star::uno::Sequence<::com::sun::star::uno::Any> & aFollow)480*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScTestAddIn::repeatMultiple( sal_Int32 nCount, const ::com::sun::star::uno::Any& aFirst, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aFollow ) throw(::com::sun::star::uno::RuntimeException)
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski 	String aSeparator;
483*b1cdbd2cSJim Jagielski 	if ( !aFirst.hasValue() )	// not specified
484*b1cdbd2cSJim Jagielski 		aSeparator = ';';
485*b1cdbd2cSJim Jagielski 	else
486*b1cdbd2cSJim Jagielski 	{
487*b1cdbd2cSJim Jagielski 		rtl::OUString aUStr;
488*b1cdbd2cSJim Jagielski 		aFirst >>= aUStr;
489*b1cdbd2cSJim Jagielski 		aSeparator = OUStringToString( aUStr, CHARSET_SYSTEM );
490*b1cdbd2cSJim Jagielski 	}
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski 	String aContent;
493*b1cdbd2cSJim Jagielski 	long nContCount = aFollow.getLength();
494*b1cdbd2cSJim Jagielski 	const uno::Any* pArr = aFollow.getConstArray();
495*b1cdbd2cSJim Jagielski 	for (long nPos=0; nPos<nContCount; nPos++)
496*b1cdbd2cSJim Jagielski 	{
497*b1cdbd2cSJim Jagielski 		if ( nPos > 0 )
498*b1cdbd2cSJim Jagielski 			aContent += ' ';
499*b1cdbd2cSJim Jagielski 		rtl::OUString aUStr;
500*b1cdbd2cSJim Jagielski 		pArr[nPos] >>= aUStr;
501*b1cdbd2cSJim Jagielski 		aContent += OUStringToString( aUStr, CHARSET_SYSTEM );
502*b1cdbd2cSJim Jagielski 	}
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski 	String aRet;
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 	for (long i=0; i<nCount; i++)
507*b1cdbd2cSJim Jagielski 	{
508*b1cdbd2cSJim Jagielski 		if (i>0)
509*b1cdbd2cSJim Jagielski 			aRet += aSeparator;
510*b1cdbd2cSJim Jagielski 		aRet += aContent;
511*b1cdbd2cSJim Jagielski 	}
512*b1cdbd2cSJim Jagielski 
513*b1cdbd2cSJim Jagielski 	return StringToOUString(aRet, CHARSET_SYSTEM);
514*b1cdbd2cSJim Jagielski }
515*b1cdbd2cSJim Jagielski 
getStrOrVal(sal_Int32 nFlag)516*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any SAL_CALL ScTestAddIn::getStrOrVal( sal_Int32 nFlag ) throw(::com::sun::star::uno::RuntimeException)
517*b1cdbd2cSJim Jagielski {
518*b1cdbd2cSJim Jagielski 	uno::Any aRet;
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski 	//! Test
521*b1cdbd2cSJim Jagielski 	if ( nFlag == 42 )
522*b1cdbd2cSJim Jagielski 	{
523*b1cdbd2cSJim Jagielski 		uno::Sequence<rtl::OUString> aInner(3);
524*b1cdbd2cSJim Jagielski 		aInner.getArray()[0] = L"Bla";
525*b1cdbd2cSJim Jagielski 		aInner.getArray()[1] = L"Fasel";
526*b1cdbd2cSJim Jagielski 		aInner.getArray()[2] = L"Suelz";
527*b1cdbd2cSJim Jagielski 		uno::Sequence< uno::Sequence<rtl::OUString> > aOuter( &aInner, 1 );
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski 		//return uno::Any( &aOuter, Sequence< Sequence<UString> >::getReflection() );
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 		aRet <<= aOuter;
532*b1cdbd2cSJim Jagielski 		return aRet;
533*b1cdbd2cSJim Jagielski 	}
534*b1cdbd2cSJim Jagielski 	//! Test
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski 	if ( nFlag )
537*b1cdbd2cSJim Jagielski 		aRet <<= UString(L"This is a string.");
538*b1cdbd2cSJim Jagielski 	else
539*b1cdbd2cSJim Jagielski 		aRet <<= (INT32)42;
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski 	return aRet;
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski 
callAsync(const::rtl::OUString & aString)544*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XVolatileResult > SAL_CALL ScTestAddIn::callAsync( const ::rtl::OUString& aString ) throw(::com::sun::star::uno::RuntimeException)
545*b1cdbd2cSJim Jagielski {
546*b1cdbd2cSJim Jagielski 	String aStr = OUStringToString( aString, CHARSET_SYSTEM );
547*b1cdbd2cSJim Jagielski 	char c = (char) aStr;
548*b1cdbd2cSJim Jagielski 	if ( c >= '0' && c <= '9' )
549*b1cdbd2cSJim Jagielski 	{
550*b1cdbd2cSJim Jagielski 		if (!xNumResult.is())
551*b1cdbd2cSJim Jagielski 			xNumResult = new ScAddInResult( "Num" );
552*b1cdbd2cSJim Jagielski 		return xNumResult;
553*b1cdbd2cSJim Jagielski 	}
554*b1cdbd2cSJim Jagielski 	else
555*b1cdbd2cSJim Jagielski 	{
556*b1cdbd2cSJim Jagielski 		if (!xAlphaResult.is())
557*b1cdbd2cSJim Jagielski 			xAlphaResult = new ScAddInResult( "Str" );
558*b1cdbd2cSJim Jagielski 		return xAlphaResult;
559*b1cdbd2cSJim Jagielski 	}
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski 
563*b1cdbd2cSJim Jagielski // XServiceName
564*b1cdbd2cSJim Jagielski 
getServiceName()565*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScTestAddIn::getServiceName(  ) throw(::com::sun::star::uno::RuntimeException)
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski 	return SCTESTADDIN_SERVICE;		// name of specific AddIn service
568*b1cdbd2cSJim Jagielski }
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski // XServiceInfo
571*b1cdbd2cSJim Jagielski 
getImplementationName()572*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL ScTestAddIn::getImplementationName(  ) throw(::com::sun::star::uno::RuntimeException)
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski 	return getImplementationName_Static();
575*b1cdbd2cSJim Jagielski }
576*b1cdbd2cSJim Jagielski 
supportsService(const::rtl::OUString & ServiceName)577*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScTestAddIn::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException)
578*b1cdbd2cSJim Jagielski {
579*b1cdbd2cSJim Jagielski 	return ServiceName == SCADDIN_SERVICE ||
580*b1cdbd2cSJim Jagielski 			ServiceName == SCTESTADDIN_SERVICE;
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()583*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL ScTestAddIn::getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException)
584*b1cdbd2cSJim Jagielski {
585*b1cdbd2cSJim Jagielski 	return getSupportedServiceNames_Static();
586*b1cdbd2cSJim Jagielski }
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski 
592