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