xref: /aoo41x/main/sc/source/ui/unoobj/servuno.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 // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <tools/debug.hxx>
28cdf0e10cSrcweir #include <svtools/unoimap.hxx>
29cdf0e10cSrcweir #include <svx/unofill.hxx>
30cdf0e10cSrcweir #include <editeng/unonrule.hxx>
31cdf0e10cSrcweir #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include "servuno.hxx"
34cdf0e10cSrcweir #include "unoguard.hxx"
35cdf0e10cSrcweir #include "unonames.hxx"
36cdf0e10cSrcweir #include "cellsuno.hxx"
37cdf0e10cSrcweir #include "fielduno.hxx"
38cdf0e10cSrcweir #include "styleuno.hxx"
39cdf0e10cSrcweir #include "afmtuno.hxx"
40cdf0e10cSrcweir #include "defltuno.hxx"
41cdf0e10cSrcweir #include "drdefuno.hxx"
42cdf0e10cSrcweir #include "docsh.hxx"
43cdf0e10cSrcweir #include "drwlayer.hxx"
44cdf0e10cSrcweir #include "confuno.hxx"
45cdf0e10cSrcweir #include "shapeuno.hxx"
46cdf0e10cSrcweir #include "cellvaluebinding.hxx"
47cdf0e10cSrcweir #include "celllistsource.hxx"
48cdf0e10cSrcweir #include "addruno.hxx"
49cdf0e10cSrcweir #include "chart2uno.hxx"
50cdf0e10cSrcweir #include "tokenuno.hxx"
51cdf0e10cSrcweir 
52cdf0e10cSrcweir // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver
53cdf0e10cSrcweir #include <svx/xmleohlp.hxx>
54cdf0e10cSrcweir #include <svx/xmlgrhlp.hxx>
55cdf0e10cSrcweir #include <sfx2/docfile.hxx>
56cdf0e10cSrcweir #include <sfx2/docfilt.hxx>
57cdf0e10cSrcweir #include <com/sun/star/script/ScriptEventDescriptor.hpp>
58cdf0e10cSrcweir #include <com/sun/star/script/vba/XVBAEventProcessor.hpp>
59cdf0e10cSrcweir #include <com/sun/star/document/XCodeNameQuery.hpp>
60cdf0e10cSrcweir #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
61cdf0e10cSrcweir #include <com/sun/star/form/XFormsSupplier.hpp>
62cdf0e10cSrcweir #include <svx/unomod.hxx>
63cdf0e10cSrcweir #include <vbahelper/vbaaccesshelper.hxx>
64cdf0e10cSrcweir 
65cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
66cdf0e10cSrcweir #include <basic/basmgr.hxx>
67cdf0e10cSrcweir #include <sfx2/app.hxx>
68cdf0e10cSrcweir 
69cdf0e10cSrcweir using namespace ::com::sun::star;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir class ScVbaObjectForCodeNameProvider : public ::cppu::WeakImplHelper1< container::XNameAccess >
72cdf0e10cSrcweir {
73cdf0e10cSrcweir     uno::Any maWorkbook;
74cdf0e10cSrcweir     uno::Any maCachedObject;
75cdf0e10cSrcweir     ScDocShell* mpDocShell;
76cdf0e10cSrcweir public:
ScVbaObjectForCodeNameProvider(ScDocShell * pDocShell)77cdf0e10cSrcweir     ScVbaObjectForCodeNameProvider( ScDocShell* pDocShell ) : mpDocShell( pDocShell )
78cdf0e10cSrcweir     {
79cdf0e10cSrcweir         ScDocument* pDoc = mpDocShell->GetDocument();
80cdf0e10cSrcweir         if ( !pDoc )
81cdf0e10cSrcweir             throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("")), uno::Reference< uno::XInterface >() );
82cdf0e10cSrcweir 
83cdf0e10cSrcweir         uno::Sequence< uno::Any > aArgs(2);
84cdf0e10cSrcweir         // access the application object ( parent for workbook )
85cdf0e10cSrcweir         aArgs[0] = uno::Any( ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.Application", uno::Sequence< uno::Any >() ) );
86cdf0e10cSrcweir         aArgs[1] = uno::Any( mpDocShell->GetModel() );
87cdf0e10cSrcweir         maWorkbook <<= ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.excel.Workbook", aArgs );
88cdf0e10cSrcweir     }
89cdf0e10cSrcweir 
hasByName(const::rtl::OUString & aName)90cdf0e10cSrcweir     virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException )
91cdf0e10cSrcweir     {
92cdf0e10cSrcweir         ScUnoGuard aGuard;
93cdf0e10cSrcweir         maCachedObject = uno::Any(); // clear cached object
94cdf0e10cSrcweir         String sName = aName;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir         ScDocument* pDoc = mpDocShell->GetDocument();
97cdf0e10cSrcweir         if ( !pDoc )
98cdf0e10cSrcweir             throw uno::RuntimeException();
99cdf0e10cSrcweir         if ( sName == pDoc->GetCodeName() )
100cdf0e10cSrcweir             maCachedObject = maWorkbook;
101cdf0e10cSrcweir         else
102cdf0e10cSrcweir         {
103cdf0e10cSrcweir             String sCodeName;
104cdf0e10cSrcweir             SCTAB nCount = pDoc->GetTableCount();
105cdf0e10cSrcweir             for( SCTAB i = 0; i < nCount; i++ )
106cdf0e10cSrcweir             {
107cdf0e10cSrcweir                 pDoc->GetCodeName( i, sCodeName );
108cdf0e10cSrcweir                 if( sCodeName == sName )
109cdf0e10cSrcweir                 {
110cdf0e10cSrcweir                     String sSheetName;
111cdf0e10cSrcweir                     if( pDoc->GetName( i, sSheetName ) )
112cdf0e10cSrcweir                     {
113cdf0e10cSrcweir                         uno::Reference< frame::XModel > xModel( mpDocShell->GetModel() );
114cdf0e10cSrcweir                         uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( xModel, uno::UNO_QUERY_THROW );
115cdf0e10cSrcweir                         uno::Reference<sheet::XSpreadsheets > xSheets( xSpreadDoc->getSheets(), uno::UNO_QUERY_THROW );
116cdf0e10cSrcweir                         uno::Reference< container::XIndexAccess > xIndexAccess( xSheets, uno::UNO_QUERY_THROW );
117cdf0e10cSrcweir                         uno::Reference< sheet::XSpreadsheet > xSheet( xIndexAccess->getByIndex( i ), uno::UNO_QUERY_THROW );
118cdf0e10cSrcweir                         uno::Sequence< uno::Any > aArgs(3);
119cdf0e10cSrcweir                         aArgs[0] = maWorkbook;
120cdf0e10cSrcweir                         aArgs[1] = uno::Any( xModel );
121cdf0e10cSrcweir                         aArgs[2] = uno::Any( rtl::OUString( sSheetName ) );
122cdf0e10cSrcweir                         // use the convience function
123cdf0e10cSrcweir                         maCachedObject <<= ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.excel.Worksheet", aArgs );
124cdf0e10cSrcweir                         break;
125cdf0e10cSrcweir                     }
126cdf0e10cSrcweir                 }
127cdf0e10cSrcweir             }
128cdf0e10cSrcweir         }
129cdf0e10cSrcweir         return maCachedObject.hasValue();
130cdf0e10cSrcweir 
131cdf0e10cSrcweir     }
getByName(const::rtl::OUString & aName)132cdf0e10cSrcweir     ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
133cdf0e10cSrcweir     {
134cdf0e10cSrcweir         ScUnoGuard aGuard;
135cdf0e10cSrcweir         OSL_TRACE("ScVbaObjectForCodeNameProvider::getByName( %s )",
136cdf0e10cSrcweir             rtl::OUStringToOString( aName, RTL_TEXTENCODING_UTF8 ).getStr() );
137cdf0e10cSrcweir         if ( !hasByName( aName ) )
138cdf0e10cSrcweir             throw ::com::sun::star::container::NoSuchElementException();
139cdf0e10cSrcweir         return maCachedObject;
140cdf0e10cSrcweir     }
getElementNames()141cdf0e10cSrcweir     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames(  ) throw (::com::sun::star::uno::RuntimeException)
142cdf0e10cSrcweir     {
143cdf0e10cSrcweir         ScUnoGuard aGuard;
144cdf0e10cSrcweir         ScDocument* pDoc = mpDocShell->GetDocument();
145cdf0e10cSrcweir         if ( !pDoc )
146cdf0e10cSrcweir             throw uno::RuntimeException();
147cdf0e10cSrcweir         SCTAB nCount = pDoc->GetTableCount();
148cdf0e10cSrcweir         uno::Sequence< rtl::OUString > aNames( nCount + 1 );
149cdf0e10cSrcweir         SCTAB index = 0;
150cdf0e10cSrcweir         String sCodeName;
151cdf0e10cSrcweir         for( ; index < nCount; ++index )
152cdf0e10cSrcweir         {
153cdf0e10cSrcweir             pDoc->GetCodeName( index, sCodeName );
154cdf0e10cSrcweir             aNames[ index ] = sCodeName;
155cdf0e10cSrcweir         }
156cdf0e10cSrcweir         aNames[ index ] = pDoc->GetCodeName();
157cdf0e10cSrcweir         return aNames;
158cdf0e10cSrcweir     }
159cdf0e10cSrcweir     // XElemenAccess
getElementType()160cdf0e10cSrcweir     virtual ::com::sun::star::uno::Type SAL_CALL getElementType(  ) throw (::com::sun::star::uno::RuntimeException){ return uno::Type(); }
hasElements()161cdf0e10cSrcweir     virtual ::sal_Bool SAL_CALL hasElements(  ) throw (::com::sun::star::uno::RuntimeException ) { return sal_True; }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir };
164cdf0e10cSrcweir 
165cdf0e10cSrcweir class ScVbaCodeNameProvider : public ::cppu::WeakImplHelper1< document::XCodeNameQuery >
166cdf0e10cSrcweir {
167cdf0e10cSrcweir ScDocShell* mpDocShell;
168cdf0e10cSrcweir public:
ScVbaCodeNameProvider(ScDocShell * pDocShell)169cdf0e10cSrcweir     ScVbaCodeNameProvider( ScDocShell* pDocShell ) : mpDocShell( pDocShell ) {}
170cdf0e10cSrcweir     // XCodeNameQuery
getCodeNameForObject(const uno::Reference<uno::XInterface> & xIf)171cdf0e10cSrcweir     rtl::OUString SAL_CALL getCodeNameForObject( const uno::Reference< uno::XInterface >& xIf ) throw( uno::RuntimeException )
172cdf0e10cSrcweir     {
173cdf0e10cSrcweir         ScUnoGuard aGuard;
174cdf0e10cSrcweir         rtl::OUString sCodeName;
175cdf0e10cSrcweir         if ( mpDocShell )
176cdf0e10cSrcweir         {
177cdf0e10cSrcweir             OSL_TRACE( "*** In ScVbaCodeNameProvider::getCodeNameForObject");
178cdf0e10cSrcweir             // need to find the page ( and index )  for this control
179cdf0e10cSrcweir             uno::Reference< drawing::XDrawPagesSupplier > xSupplier( mpDocShell->GetModel(), uno::UNO_QUERY_THROW );
180cdf0e10cSrcweir             uno::Reference< container::XIndexAccess > xIndex( xSupplier->getDrawPages(), uno::UNO_QUERY_THROW );
181cdf0e10cSrcweir             sal_Int32 nLen = xIndex->getCount();
182cdf0e10cSrcweir             bool bMatched = false;
183cdf0e10cSrcweir             uno::Sequence< script::ScriptEventDescriptor > aFakeEvents;
184cdf0e10cSrcweir             for ( sal_Int32 index = 0; index < nLen; ++index )
185cdf0e10cSrcweir             {
186cdf0e10cSrcweir                 try
187cdf0e10cSrcweir                 {
188cdf0e10cSrcweir                     uno::Reference< form::XFormsSupplier >  xFormSupplier( xIndex->getByIndex( index ), uno::UNO_QUERY_THROW );
189cdf0e10cSrcweir                     uno::Reference< container::XIndexAccess > xFormIndex( xFormSupplier->getForms(), uno::UNO_QUERY_THROW );
190cdf0e10cSrcweir                     // get the www-standard container
191cdf0e10cSrcweir                     uno::Reference< container::XIndexAccess > xFormControls( xFormIndex->getByIndex(0), uno::UNO_QUERY_THROW );
192cdf0e10cSrcweir                     sal_Int32 nCntrls = xFormControls->getCount();
193cdf0e10cSrcweir                     for( sal_Int32 cIndex = 0; cIndex < nCntrls; ++cIndex )
194cdf0e10cSrcweir                     {
195cdf0e10cSrcweir                         uno::Reference< uno::XInterface > xControl( xFormControls->getByIndex( cIndex ), uno::UNO_QUERY_THROW );
196cdf0e10cSrcweir                         bMatched = ( xControl == xIf );
197cdf0e10cSrcweir                         if ( bMatched )
198cdf0e10cSrcweir                         {
199cdf0e10cSrcweir                             String sName;
200cdf0e10cSrcweir                             mpDocShell->GetDocument()->GetCodeName( static_cast<SCTAB>( index ), sName );
201cdf0e10cSrcweir                             sCodeName = sName;
202cdf0e10cSrcweir                         }
203cdf0e10cSrcweir                     }
204cdf0e10cSrcweir                 }
205cdf0e10cSrcweir                 catch( uno::Exception& ) {}
206cdf0e10cSrcweir                 if ( bMatched )
207cdf0e10cSrcweir                     break;
208cdf0e10cSrcweir             }
209cdf0e10cSrcweir         }
210cdf0e10cSrcweir         // Probably should throw here ( if !bMatched )
211cdf0e10cSrcweir          return sCodeName;
212cdf0e10cSrcweir     }
213cdf0e10cSrcweir 
214cdf0e10cSrcweir };
215cdf0e10cSrcweir 
216cdf0e10cSrcweir //------------------------------------------------------------------------
217cdf0e10cSrcweir //
218cdf0e10cSrcweir struct ProvNamesId_Type
219cdf0e10cSrcweir {
220cdf0e10cSrcweir     const char *    pName;
221cdf0e10cSrcweir     sal_uInt16      nType;
222cdf0e10cSrcweir };
223cdf0e10cSrcweir 
224cdf0e10cSrcweir static const ProvNamesId_Type __FAR_DATA aProvNamesId[] =
225cdf0e10cSrcweir {
226cdf0e10cSrcweir     { "com.sun.star.sheet.Spreadsheet",                 SC_SERVICE_SHEET },
227cdf0e10cSrcweir     { "com.sun.star.text.TextField.URL",                SC_SERVICE_URLFIELD },
228cdf0e10cSrcweir     { "com.sun.star.text.TextField.PageNumber",         SC_SERVICE_PAGEFIELD },
229cdf0e10cSrcweir     { "com.sun.star.text.TextField.PageCount",          SC_SERVICE_PAGESFIELD },
230cdf0e10cSrcweir     { "com.sun.star.text.TextField.Date",               SC_SERVICE_DATEFIELD },
231cdf0e10cSrcweir     { "com.sun.star.text.TextField.Time",               SC_SERVICE_TIMEFIELD },
232cdf0e10cSrcweir     { "com.sun.star.text.TextField.DocumentTitle",      SC_SERVICE_TITLEFIELD },
233cdf0e10cSrcweir     { "com.sun.star.text.TextField.FileName",           SC_SERVICE_FILEFIELD },
234cdf0e10cSrcweir     { "com.sun.star.text.TextField.SheetName",          SC_SERVICE_SHEETFIELD },
235cdf0e10cSrcweir     { "com.sun.star.style.CellStyle",                   SC_SERVICE_CELLSTYLE },
236cdf0e10cSrcweir     { "com.sun.star.style.PageStyle",                   SC_SERVICE_PAGESTYLE },
237cdf0e10cSrcweir     { "com.sun.star.sheet.TableAutoFormat",             SC_SERVICE_AUTOFORMAT },
238cdf0e10cSrcweir     { "com.sun.star.sheet.SheetCellRanges",             SC_SERVICE_CELLRANGES },
239cdf0e10cSrcweir     { "com.sun.star.drawing.GradientTable",             SC_SERVICE_GRADTAB },
240cdf0e10cSrcweir     { "com.sun.star.drawing.HatchTable",                SC_SERVICE_HATCHTAB },
241cdf0e10cSrcweir     { "com.sun.star.drawing.BitmapTable",               SC_SERVICE_BITMAPTAB },
242cdf0e10cSrcweir     { "com.sun.star.drawing.TransparencyGradientTable", SC_SERVICE_TRGRADTAB },
243cdf0e10cSrcweir     { "com.sun.star.drawing.MarkerTable",               SC_SERVICE_MARKERTAB },
244cdf0e10cSrcweir     { "com.sun.star.drawing.DashTable",                 SC_SERVICE_DASHTAB },
245cdf0e10cSrcweir     { "com.sun.star.text.NumberingRules",               SC_SERVICE_NUMRULES },
246cdf0e10cSrcweir     { "com.sun.star.sheet.Defaults",                    SC_SERVICE_DOCDEFLTS },
247cdf0e10cSrcweir     { "com.sun.star.drawing.Defaults",                  SC_SERVICE_DRAWDEFLTS },
248cdf0e10cSrcweir     { "com.sun.star.comp.SpreadsheetSettings",          SC_SERVICE_DOCSPRSETT },
249cdf0e10cSrcweir     { "com.sun.star.document.Settings",                 SC_SERVICE_DOCCONF },
250cdf0e10cSrcweir     { "com.sun.star.image.ImageMapRectangleObject",     SC_SERVICE_IMAP_RECT },
251cdf0e10cSrcweir     { "com.sun.star.image.ImageMapCircleObject",        SC_SERVICE_IMAP_CIRC },
252cdf0e10cSrcweir     { "com.sun.star.image.ImageMapPolygonObject",       SC_SERVICE_IMAP_POLY },
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 		// #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver
255cdf0e10cSrcweir     { "com.sun.star.document.ExportGraphicObjectResolver",  SC_SERVICE_EXPORT_GOR },
256cdf0e10cSrcweir     { "com.sun.star.document.ImportGraphicObjectResolver",  SC_SERVICE_IMPORT_GOR },
257cdf0e10cSrcweir     { "com.sun.star.document.ExportEmbeddedObjectResolver", SC_SERVICE_EXPORT_EOR },
258cdf0e10cSrcweir     { "com.sun.star.document.ImportEmbeddedObjectResolver", SC_SERVICE_IMPORT_EOR },
259cdf0e10cSrcweir 
260cdf0e10cSrcweir     { SC_SERVICENAME_VALBIND,               SC_SERVICE_VALBIND },
261cdf0e10cSrcweir     { SC_SERVICENAME_LISTCELLBIND,          SC_SERVICE_LISTCELLBIND },
262cdf0e10cSrcweir     { SC_SERVICENAME_LISTSOURCE,            SC_SERVICE_LISTSOURCE },
263cdf0e10cSrcweir     { SC_SERVICENAME_CELLADDRESS,           SC_SERVICE_CELLADDRESS },
264cdf0e10cSrcweir     { SC_SERVICENAME_RANGEADDRESS,          SC_SERVICE_RANGEADDRESS },
265cdf0e10cSrcweir 
266cdf0e10cSrcweir     { "com.sun.star.sheet.DocumentSettings",SC_SERVICE_SHEETDOCSET },
267cdf0e10cSrcweir 
268cdf0e10cSrcweir     { SC_SERVICENAME_CHDATAPROV,            SC_SERVICE_CHDATAPROV },
269cdf0e10cSrcweir     { SC_SERVICENAME_FORMULAPARS,           SC_SERVICE_FORMULAPARS },
270cdf0e10cSrcweir     { SC_SERVICENAME_OPCODEMAPPER,          SC_SERVICE_OPCODEMAPPER },
271cdf0e10cSrcweir     { "ooo.vba.VBAObjectModuleObjectProvider", SC_SERVICE_VBAOBJECTPROVIDER },
272cdf0e10cSrcweir     { "ooo.vba.VBACodeNameProvider",        SC_SERVICE_VBACODENAMEPROVIDER },
273cdf0e10cSrcweir     { "ooo.vba.VBAGlobals",                 SC_SERVICE_VBAGLOBALS },
274cdf0e10cSrcweir 
275cdf0e10cSrcweir     // case-correct versions of the service names (#i102468#)
276cdf0e10cSrcweir     { "com.sun.star.text.textfield.URL",                SC_SERVICE_URLFIELD },
277cdf0e10cSrcweir     { "com.sun.star.text.textfield.PageNumber",         SC_SERVICE_PAGEFIELD },
278cdf0e10cSrcweir     { "com.sun.star.text.textfield.PageCount",          SC_SERVICE_PAGESFIELD },
279cdf0e10cSrcweir     { "com.sun.star.text.textfield.Date",               SC_SERVICE_DATEFIELD },
280cdf0e10cSrcweir     { "com.sun.star.text.textfield.Time",               SC_SERVICE_TIMEFIELD },
281cdf0e10cSrcweir     { "com.sun.star.text.textfield.DocumentTitle",      SC_SERVICE_TITLEFIELD },
282cdf0e10cSrcweir     { "com.sun.star.text.textfield.FileName",           SC_SERVICE_FILEFIELD },
283cdf0e10cSrcweir     { "com.sun.star.text.textfield.SheetName",          SC_SERVICE_SHEETFIELD }
284cdf0e10cSrcweir };
285cdf0e10cSrcweir 
286cdf0e10cSrcweir //
287cdf0e10cSrcweir //	old service names that were in 567 still work in createInstance,
288cdf0e10cSrcweir //	in case some macro is still using them
289cdf0e10cSrcweir //
290cdf0e10cSrcweir 
291cdf0e10cSrcweir static const sal_Char* __FAR_DATA aOldNames[SC_SERVICE_COUNT] =
292cdf0e10cSrcweir 	{
293cdf0e10cSrcweir 		"",											// SC_SERVICE_SHEET
294cdf0e10cSrcweir 		"stardiv.one.text.TextField.URL",			// SC_SERVICE_URLFIELD
295cdf0e10cSrcweir 		"stardiv.one.text.TextField.PageNumber",	// SC_SERVICE_PAGEFIELD
296cdf0e10cSrcweir 		"stardiv.one.text.TextField.PageCount",		// SC_SERVICE_PAGESFIELD
297cdf0e10cSrcweir 		"stardiv.one.text.TextField.Date",			// SC_SERVICE_DATEFIELD
298cdf0e10cSrcweir 		"stardiv.one.text.TextField.Time",			// SC_SERVICE_TIMEFIELD
299cdf0e10cSrcweir 		"stardiv.one.text.TextField.DocumentTitle",	// SC_SERVICE_TITLEFIELD
300cdf0e10cSrcweir 		"stardiv.one.text.TextField.FileName",		// SC_SERVICE_FILEFIELD
301cdf0e10cSrcweir 		"stardiv.one.text.TextField.SheetName",		// SC_SERVICE_SHEETFIELD
302cdf0e10cSrcweir 		"stardiv.one.style.CellStyle",				// SC_SERVICE_CELLSTYLE
303cdf0e10cSrcweir 		"stardiv.one.style.PageStyle",				// SC_SERVICE_PAGESTYLE
304cdf0e10cSrcweir 		"",											// SC_SERVICE_AUTOFORMAT
305cdf0e10cSrcweir 		"",											// SC_SERVICE_CELLRANGES
306cdf0e10cSrcweir 		"",											// SC_SERVICE_GRADTAB
307cdf0e10cSrcweir 		"",											// SC_SERVICE_HATCHTAB
308cdf0e10cSrcweir 		"",											// SC_SERVICE_BITMAPTAB
309cdf0e10cSrcweir 		"",											// SC_SERVICE_TRGRADTAB
310cdf0e10cSrcweir 		"",											// SC_SERVICE_MARKERTAB
311cdf0e10cSrcweir 		"",											// SC_SERVICE_DASHTAB
312cdf0e10cSrcweir 		"",											// SC_SERVICE_NUMRULES
313cdf0e10cSrcweir 		"",											// SC_SERVICE_DOCDEFLTS
314cdf0e10cSrcweir 		"",											// SC_SERVICE_DRAWDEFLTS
315cdf0e10cSrcweir 		"",											// SC_SERVICE_DOCSPRSETT
316cdf0e10cSrcweir 		"",											// SC_SERVICE_DOCCONF
317cdf0e10cSrcweir 		"",											// SC_SERVICE_IMAP_RECT
318cdf0e10cSrcweir 		"",											// SC_SERVICE_IMAP_CIRC
319cdf0e10cSrcweir 		"",											// SC_SERVICE_IMAP_POLY
320cdf0e10cSrcweir 
321cdf0e10cSrcweir 		// #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver
322cdf0e10cSrcweir 		"",											// SC_SERVICE_EXPORT_GOR
323cdf0e10cSrcweir 		"",											// SC_SERVICE_IMPORT_GOR
324cdf0e10cSrcweir 		"",											// SC_SERVICE_EXPORT_EOR
325cdf0e10cSrcweir 		"",											// SC_SERVICE_IMPORT_EOR
326cdf0e10cSrcweir 
327cdf0e10cSrcweir 		"",											// SC_SERVICE_VALBIND
328cdf0e10cSrcweir 		"",											// SC_SERVICE_LISTCELLBIND
329cdf0e10cSrcweir 		"",											// SC_SERVICE_LISTSOURCE
330cdf0e10cSrcweir 		"",											// SC_SERVICE_CELLADDRESS
331cdf0e10cSrcweir 		"",											// SC_SERVICE_RANGEADDRESS
332cdf0e10cSrcweir         "",                                         // SC_SERVICE_SHEETDOCSET
333cdf0e10cSrcweir         "",                                         // SC_SERVICE_CHDATAPROV
334cdf0e10cSrcweir         "",                                         // SC_SERVICE_FORMULAPARS
335cdf0e10cSrcweir         "",                                         // SC_SERVICE_OPCODEMAPPER
336cdf0e10cSrcweir         "",                                         // SC_SERVICE_VBAOBJECTPROVIDER
337cdf0e10cSrcweir         "",                                         // SC_SERVICE_VBACODENAMEPROVIDER
338cdf0e10cSrcweir         "",                                         // SC_SERVICE_VBAGLOBALS
339cdf0e10cSrcweir 	};
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 
342cdf0e10cSrcweir 
343cdf0e10cSrcweir 
344cdf0e10cSrcweir //------------------------------------------------------------------------
345cdf0e10cSrcweir 
346cdf0e10cSrcweir //	alles static
347cdf0e10cSrcweir 
348cdf0e10cSrcweir //UNUSED2008-05  String ScServiceProvider::GetProviderName(sal_uInt16 nObjectType)
349cdf0e10cSrcweir //UNUSED2008-05  {
350cdf0e10cSrcweir //UNUSED2008-05      String sRet;
351cdf0e10cSrcweir //UNUSED2008-05      if (nObjectType < SC_SERVICE_COUNT)
352cdf0e10cSrcweir //UNUSED2008-05          sRet = String::CreateFromAscii( aProvNames[nObjectType] );
353cdf0e10cSrcweir //UNUSED2008-05      return sRet;
354cdf0e10cSrcweir //UNUSED2008-05  }
355cdf0e10cSrcweir 
GetProviderType(const String & rServiceName)356cdf0e10cSrcweir sal_uInt16 ScServiceProvider::GetProviderType(const String& rServiceName)
357cdf0e10cSrcweir {
358cdf0e10cSrcweir 	if (rServiceName.Len())
359cdf0e10cSrcweir 	{
360cdf0e10cSrcweir         const sal_uInt16 nEntries =
361cdf0e10cSrcweir             sizeof(aProvNamesId) / sizeof(aProvNamesId[0]);
362cdf0e10cSrcweir         for (sal_uInt16 i = 0; i < nEntries; i++)
363cdf0e10cSrcweir         {
364cdf0e10cSrcweir             if (rServiceName.EqualsAscii( aProvNamesId[i].pName ))
365cdf0e10cSrcweir             {
366cdf0e10cSrcweir                 return aProvNamesId[i].nType;
367cdf0e10cSrcweir             }
368cdf0e10cSrcweir         }
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 		sal_uInt16 i;
371cdf0e10cSrcweir 		for (i=0; i<SC_SERVICE_COUNT; i++)
372cdf0e10cSrcweir         {
373cdf0e10cSrcweir             DBG_ASSERT( aOldNames[i], "ScServiceProvider::GetProviderType: no oldname => crash");
374cdf0e10cSrcweir 			if (rServiceName.EqualsAscii( aOldNames[i] ))
375cdf0e10cSrcweir 			{
376cdf0e10cSrcweir 				DBG_ERROR("old service name used");
377cdf0e10cSrcweir 				return i;
378cdf0e10cSrcweir 			}
379cdf0e10cSrcweir         }
380cdf0e10cSrcweir 	}
381cdf0e10cSrcweir 	return SC_SERVICE_INVALID;
382cdf0e10cSrcweir }
383cdf0e10cSrcweir 
MakeInstance(sal_uInt16 nType,ScDocShell * pDocShell)384cdf0e10cSrcweir uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance(
385cdf0e10cSrcweir 									sal_uInt16 nType, ScDocShell* pDocShell )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir 	uno::Reference<uno::XInterface> xRet;
388cdf0e10cSrcweir 	switch (nType)
389cdf0e10cSrcweir 	{
390cdf0e10cSrcweir 		case SC_SERVICE_SHEET:
391cdf0e10cSrcweir 			//	noch nicht eingefuegt - DocShell=Null
392cdf0e10cSrcweir 			xRet.set((sheet::XSpreadsheet*)new ScTableSheetObj(NULL,0));
393cdf0e10cSrcweir 			break;
394cdf0e10cSrcweir 		case SC_SERVICE_URLFIELD:
395cdf0e10cSrcweir 			xRet.set((text::XTextField*)new ScCellFieldObj( NULL, ScAddress(), ESelection() ));
396cdf0e10cSrcweir 			break;
397cdf0e10cSrcweir 		case SC_SERVICE_PAGEFIELD:
398cdf0e10cSrcweir 		case SC_SERVICE_PAGESFIELD:
399cdf0e10cSrcweir 		case SC_SERVICE_DATEFIELD:
400cdf0e10cSrcweir 		case SC_SERVICE_TIMEFIELD:
401cdf0e10cSrcweir 		case SC_SERVICE_TITLEFIELD:
402cdf0e10cSrcweir 		case SC_SERVICE_FILEFIELD:
403cdf0e10cSrcweir 		case SC_SERVICE_SHEETFIELD:
404cdf0e10cSrcweir 			xRet.set((text::XTextField*)new ScHeaderFieldObj( NULL, 0, nType, ESelection() ));
405cdf0e10cSrcweir 			break;
406cdf0e10cSrcweir 		case SC_SERVICE_CELLSTYLE:
407cdf0e10cSrcweir 			xRet.set((style::XStyle*)new ScStyleObj( NULL, SFX_STYLE_FAMILY_PARA, String() ));
408cdf0e10cSrcweir 			break;
409cdf0e10cSrcweir 		case SC_SERVICE_PAGESTYLE:
410cdf0e10cSrcweir 			xRet.set((style::XStyle*)new ScStyleObj( NULL, SFX_STYLE_FAMILY_PAGE, String() ));
411cdf0e10cSrcweir 			break;
412cdf0e10cSrcweir 		case SC_SERVICE_AUTOFORMAT:
413cdf0e10cSrcweir 			xRet.set((container::XIndexAccess*)new ScAutoFormatObj( SC_AFMTOBJ_INVALID ));
414cdf0e10cSrcweir 			break;
415cdf0e10cSrcweir 		case SC_SERVICE_CELLRANGES:
416cdf0e10cSrcweir 			//	wird nicht eingefuegt, sondern gefuellt
417cdf0e10cSrcweir 			//	-> DocShell muss gesetzt sein, aber leere Ranges
418cdf0e10cSrcweir 			if (pDocShell)
419cdf0e10cSrcweir 				xRet.set((sheet::XSheetCellRanges*)new ScCellRangesObj( pDocShell, ScRangeList() ));
420cdf0e10cSrcweir 			break;
421cdf0e10cSrcweir 
422cdf0e10cSrcweir 		case SC_SERVICE_DOCDEFLTS:
423cdf0e10cSrcweir 			if (pDocShell)
424cdf0e10cSrcweir 				xRet.set((beans::XPropertySet*)new ScDocDefaultsObj( pDocShell ));
425cdf0e10cSrcweir 			break;
426cdf0e10cSrcweir 		case SC_SERVICE_DRAWDEFLTS:
427cdf0e10cSrcweir 			if (pDocShell)
428cdf0e10cSrcweir 				xRet.set((beans::XPropertySet*)new ScDrawDefaultsObj( pDocShell ));
429cdf0e10cSrcweir 			break;
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 		//	Drawing layer tables are not in SvxUnoDrawMSFactory,
432cdf0e10cSrcweir 		//	because SvxUnoDrawMSFactory doesn't have a SdrModel pointer.
433cdf0e10cSrcweir 		//	Drawing layer is always allocated if not there (MakeDrawLayer).
434cdf0e10cSrcweir 
435cdf0e10cSrcweir 		case SC_SERVICE_GRADTAB:
436cdf0e10cSrcweir 			if (pDocShell)
437cdf0e10cSrcweir 				xRet.set(SvxUnoGradientTable_createInstance( pDocShell->MakeDrawLayer() ));
438cdf0e10cSrcweir 			break;
439cdf0e10cSrcweir 		case SC_SERVICE_HATCHTAB:
440cdf0e10cSrcweir 			if (pDocShell)
441cdf0e10cSrcweir 				xRet.set(SvxUnoHatchTable_createInstance( pDocShell->MakeDrawLayer() ));
442cdf0e10cSrcweir 			break;
443cdf0e10cSrcweir 		case SC_SERVICE_BITMAPTAB:
444cdf0e10cSrcweir 			if (pDocShell)
445cdf0e10cSrcweir 				xRet.set(SvxUnoBitmapTable_createInstance( pDocShell->MakeDrawLayer() ));
446cdf0e10cSrcweir 			break;
447cdf0e10cSrcweir 		case SC_SERVICE_TRGRADTAB:
448cdf0e10cSrcweir 			if (pDocShell)
449cdf0e10cSrcweir 				xRet.set(SvxUnoTransGradientTable_createInstance( pDocShell->MakeDrawLayer() ));
450cdf0e10cSrcweir 			break;
451cdf0e10cSrcweir 		case SC_SERVICE_MARKERTAB:
452cdf0e10cSrcweir 			if (pDocShell)
453cdf0e10cSrcweir 				xRet.set(SvxUnoMarkerTable_createInstance( pDocShell->MakeDrawLayer() ));
454cdf0e10cSrcweir 			break;
455cdf0e10cSrcweir 		case SC_SERVICE_DASHTAB:
456cdf0e10cSrcweir 			if (pDocShell)
457cdf0e10cSrcweir 				xRet.set(SvxUnoDashTable_createInstance( pDocShell->MakeDrawLayer() ));
458cdf0e10cSrcweir 			break;
459cdf0e10cSrcweir 		case SC_SERVICE_NUMRULES:
460cdf0e10cSrcweir 			if (pDocShell)
461cdf0e10cSrcweir 				xRet.set(SvxCreateNumRule( pDocShell->MakeDrawLayer() ));
462cdf0e10cSrcweir 			break;
463cdf0e10cSrcweir 		case SC_SERVICE_DOCSPRSETT:
464cdf0e10cSrcweir         case SC_SERVICE_SHEETDOCSET:
465cdf0e10cSrcweir 		case SC_SERVICE_DOCCONF:
466cdf0e10cSrcweir 			if (pDocShell)
467cdf0e10cSrcweir 				xRet.set((beans::XPropertySet*)new ScDocumentConfiguration(pDocShell));
468cdf0e10cSrcweir 			break;
469cdf0e10cSrcweir 
470cdf0e10cSrcweir 		case SC_SERVICE_IMAP_RECT:
471cdf0e10cSrcweir 			xRet.set(SvUnoImageMapRectangleObject_createInstance( ScShapeObj::GetSupportedMacroItems() ));
472cdf0e10cSrcweir 			break;
473cdf0e10cSrcweir 		case SC_SERVICE_IMAP_CIRC:
474cdf0e10cSrcweir 			xRet.set(SvUnoImageMapCircleObject_createInstance( ScShapeObj::GetSupportedMacroItems() ));
475cdf0e10cSrcweir 			break;
476cdf0e10cSrcweir 		case SC_SERVICE_IMAP_POLY:
477cdf0e10cSrcweir 			xRet.set(SvUnoImageMapPolygonObject_createInstance( ScShapeObj::GetSupportedMacroItems() ));
478cdf0e10cSrcweir 			break;
479cdf0e10cSrcweir 
480cdf0e10cSrcweir 		// #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver
481cdf0e10cSrcweir 		case SC_SERVICE_EXPORT_GOR:
482cdf0e10cSrcweir 			xRet.set((::cppu::OWeakObject * )new SvXMLGraphicHelper( GRAPHICHELPER_MODE_WRITE ));
483cdf0e10cSrcweir 			break;
484cdf0e10cSrcweir 
485cdf0e10cSrcweir 		case SC_SERVICE_IMPORT_GOR:
486cdf0e10cSrcweir 			xRet.set((::cppu::OWeakObject * )new SvXMLGraphicHelper( GRAPHICHELPER_MODE_READ ));
487cdf0e10cSrcweir 			break;
488cdf0e10cSrcweir 
489cdf0e10cSrcweir 		case SC_SERVICE_EXPORT_EOR:
490cdf0e10cSrcweir 			if (pDocShell)
491cdf0e10cSrcweir 				xRet.set((::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_WRITE ));
492cdf0e10cSrcweir 			break;
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 		case SC_SERVICE_IMPORT_EOR:
495cdf0e10cSrcweir 			if (pDocShell)
496cdf0e10cSrcweir 				xRet.set((::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_READ ));
497cdf0e10cSrcweir 			break;
498cdf0e10cSrcweir 
499cdf0e10cSrcweir 		case SC_SERVICE_VALBIND:
500cdf0e10cSrcweir 		case SC_SERVICE_LISTCELLBIND:
501cdf0e10cSrcweir 			if (pDocShell)
502cdf0e10cSrcweir 			{
503cdf0e10cSrcweir 				sal_Bool bListPos = ( nType == SC_SERVICE_LISTCELLBIND );
504cdf0e10cSrcweir 				uno::Reference<sheet::XSpreadsheetDocument> xDoc( pDocShell->GetBaseModel(), uno::UNO_QUERY );
505cdf0e10cSrcweir 				xRet.set(*new calc::OCellValueBinding( xDoc, bListPos ));
506cdf0e10cSrcweir 			}
507cdf0e10cSrcweir 			break;
508cdf0e10cSrcweir 		case SC_SERVICE_LISTSOURCE:
509cdf0e10cSrcweir 			if (pDocShell)
510cdf0e10cSrcweir 			{
511cdf0e10cSrcweir 				uno::Reference<sheet::XSpreadsheetDocument> xDoc( pDocShell->GetBaseModel(), uno::UNO_QUERY );
512cdf0e10cSrcweir 				xRet.set(*new calc::OCellListSource( xDoc ));
513cdf0e10cSrcweir 			}
514cdf0e10cSrcweir 			break;
515cdf0e10cSrcweir 		case SC_SERVICE_CELLADDRESS:
516cdf0e10cSrcweir 		case SC_SERVICE_RANGEADDRESS:
517cdf0e10cSrcweir 			if (pDocShell)
518cdf0e10cSrcweir 			{
519cdf0e10cSrcweir 				sal_Bool bRange = ( nType == SC_SERVICE_RANGEADDRESS );
520cdf0e10cSrcweir 				xRet.set(*new ScAddressConversionObj( pDocShell, bRange ));
521cdf0e10cSrcweir 			}
522cdf0e10cSrcweir 			break;
523cdf0e10cSrcweir 
524cdf0e10cSrcweir         case SC_SERVICE_CHDATAPROV:
525cdf0e10cSrcweir             if (pDocShell && pDocShell->GetDocument())
526cdf0e10cSrcweir                 xRet = *new ScChart2DataProvider( pDocShell->GetDocument() );
527cdf0e10cSrcweir             break;
528cdf0e10cSrcweir 
529cdf0e10cSrcweir         case SC_SERVICE_FORMULAPARS:
530cdf0e10cSrcweir             if (pDocShell)
531cdf0e10cSrcweir                 xRet.set(static_cast<sheet::XFormulaParser*>(new ScFormulaParserObj( pDocShell )));
532cdf0e10cSrcweir             break;
533cdf0e10cSrcweir 
534cdf0e10cSrcweir         case SC_SERVICE_OPCODEMAPPER:
535cdf0e10cSrcweir 			if (pDocShell)
536cdf0e10cSrcweir             {
537cdf0e10cSrcweir                 ScDocument* pDoc = pDocShell->GetDocument();
538cdf0e10cSrcweir                 ScAddress aAddress;
539cdf0e10cSrcweir                 ScCompiler* pComp = new ScCompiler(pDoc,aAddress);
540cdf0e10cSrcweir                 pComp->SetGrammar( pDoc->GetGrammar() );
541cdf0e10cSrcweir                 xRet.set(static_cast<sheet::XFormulaOpCodeMapper*>(new ScFormulaOpCodeMapperObj(::std::auto_ptr<formula::FormulaCompiler> (pComp))));
542cdf0e10cSrcweir 				break;
543cdf0e10cSrcweir             }
544cdf0e10cSrcweir         case SC_SERVICE_VBAOBJECTPROVIDER:
545cdf0e10cSrcweir 			if (pDocShell && pDocShell->GetDocument()->IsInVBAMode())
546cdf0e10cSrcweir             {
547cdf0e10cSrcweir                 OSL_TRACE("**** creating VBA Object mapper");
548cdf0e10cSrcweir                 xRet.set(static_cast<container::XNameAccess*>(new ScVbaObjectForCodeNameProvider( pDocShell )));
549cdf0e10cSrcweir             }
550cdf0e10cSrcweir             break;
551cdf0e10cSrcweir         case SC_SERVICE_VBACODENAMEPROVIDER:
552cdf0e10cSrcweir             if (pDocShell && pDocShell->GetDocument()->IsInVBAMode())
553cdf0e10cSrcweir             {
554cdf0e10cSrcweir                 OSL_TRACE("**** creating VBA Object provider");
555cdf0e10cSrcweir 				xRet.set(static_cast<document::XCodeNameQuery*>(new ScVbaCodeNameProvider( pDocShell )));
556cdf0e10cSrcweir 			}
557cdf0e10cSrcweir 			break;
558cdf0e10cSrcweir         case SC_SERVICE_VBAGLOBALS:
559cdf0e10cSrcweir 			if (pDocShell)
560cdf0e10cSrcweir 			{
561cdf0e10cSrcweir                 uno::Any aGlobs;
562cdf0e10cSrcweir 				if ( !pDocShell->GetBasicManager()->GetGlobalUNOConstant( "VBAGlobals", aGlobs ) )
563cdf0e10cSrcweir 				{
564cdf0e10cSrcweir 					uno::Sequence< uno::Any > aArgs(1);
565cdf0e10cSrcweir 					aArgs[ 0 ] <<= pDocShell->GetModel();
566cdf0e10cSrcweir 					xRet = ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.excel.Globals" ) ), aArgs );
567cdf0e10cSrcweir 					pDocShell->GetBasicManager()->SetGlobalUNOConstant( "VBAGlobals", uno::Any( xRet ) );
568cdf0e10cSrcweir 					BasicManager* pAppMgr = SFX_APP()->GetBasicManager();
569cdf0e10cSrcweir 					if ( pAppMgr )
570cdf0e10cSrcweir 						pAppMgr->SetGlobalUNOConstant( "ThisExcelDoc", aArgs[ 0 ] );
571cdf0e10cSrcweir 
572cdf0e10cSrcweir                     // create the VBA document event processor
573cdf0e10cSrcweir                     uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents(
574cdf0e10cSrcweir                         ::ooo::vba::createVBAUnoAPIServiceWithArgs( pDocShell, "com.sun.star.script.vba.VBASpreadsheetEventProcessor", aArgs ), uno::UNO_QUERY );
575cdf0e10cSrcweir                     pDocShell->GetDocument()->SetVbaEventProcessor( xVbaEvents );
576cdf0e10cSrcweir 				}
577cdf0e10cSrcweir 			}
578cdf0e10cSrcweir         break;
579cdf0e10cSrcweir 	}
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 	return xRet;
582cdf0e10cSrcweir }
583cdf0e10cSrcweir 
GetAllServiceNames()584cdf0e10cSrcweir uno::Sequence<rtl::OUString> ScServiceProvider::GetAllServiceNames()
585cdf0e10cSrcweir {
586cdf0e10cSrcweir     const sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]);
587cdf0e10cSrcweir     uno::Sequence<rtl::OUString> aRet(nEntries);
588cdf0e10cSrcweir 	rtl::OUString* pArray = aRet.getArray();
589cdf0e10cSrcweir     for (sal_uInt16 i = 0; i < nEntries; i++)
590cdf0e10cSrcweir     {
591cdf0e10cSrcweir         pArray[i] = rtl::OUString::createFromAscii( aProvNamesId[i].pName );
592cdf0e10cSrcweir     }
593cdf0e10cSrcweir 	return aRet;
594cdf0e10cSrcweir }
595cdf0e10cSrcweir 
596cdf0e10cSrcweir 
597cdf0e10cSrcweir 
598cdf0e10cSrcweir 
599