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