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