diff options
Diffstat (limited to 'sc/source/ui/unoobj')
-rw-r--r-- | sc/source/ui/unoobj/cellsuno.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/unoobj/chart2uno.cxx | 69 | ||||
-rw-r--r-- | sc/source/ui/unoobj/chartuno.cxx | 11 | ||||
-rw-r--r-- | sc/source/ui/unoobj/docuno.cxx | 93 | ||||
-rw-r--r-- | sc/source/ui/unoobj/funcuno.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/unoobj/scdetect.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/unoobj/servuno.cxx | 133 | ||||
-rw-r--r-- | sc/source/ui/unoobj/textuno.cxx | 41 |
8 files changed, 216 insertions, 141 deletions
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index cfe51aed6edc..f3418a84e2ef 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -1093,7 +1093,7 @@ BOOL lcl_PutDataArray( ScDocShell& rDocShell, const ScRange& rRange, { pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); pUndoDoc->InitUndo( pDoc, nTab, nTab ); - pDoc->CopyToDocument( rRange, IDF_CONTENTS, FALSE, pUndoDoc ); + pDoc->CopyToDocument( rRange, IDF_CONTENTS|IDF_NOCAPTIONS, FALSE, pUndoDoc ); } pDoc->DeleteAreaTab( nStartCol, nStartRow, nEndCol, nEndRow, nTab, IDF_CONTENTS ); diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx index ccd1b558342b..07ed8709ab01 100644 --- a/sc/source/ui/unoobj/chart2uno.cxx +++ b/sc/source/ui/unoobj/chart2uno.cxx @@ -500,6 +500,10 @@ void Chart2Positioner::glueState() ScRefTokenHelper::getDoubleRefDataFromToken(aData, *itr); SCCOLROW n1 = aData.Ref1.nCol; SCCOLROW n2 = aData.Ref2.nCol; + if (n1 > MAXCOL) + n1 = MAXCOL; + if (n2 > MAXCOL) + n2 = MAXCOL; SCCOLROW nTmp = n2 - n1 + 1; if (n1 < mnStartCol) mnStartCol = static_cast<SCCOL>(n1); @@ -510,14 +514,18 @@ void Chart2Positioner::glueState() n1 = aData.Ref1.nRow; n2 = aData.Ref2.nRow; + if (n1 > MAXROW) + n1 = MAXROW; + if (n2 > MAXROW) + n2 = MAXROW; nTmp = n2 - n1 + 1; if (n1 < mnStartRow) - mnStartRow = static_cast<SCCOL>(n1); + mnStartRow = static_cast<SCROW>(n1); if (n2 > nEndRow) - nEndRow = static_cast<SCCOL>(n2); + nEndRow = static_cast<SCROW>(n2); if (nTmp > nMaxRows) - nMaxRows = static_cast<SCCOL>(nTmp); + nMaxRows = static_cast<SCROW>(nTmp); } // total column size ? @@ -534,6 +542,14 @@ void Chart2Positioner::glueState() meGlue = GLUETYPE_COLS; return; } + // #i103540# prevent invalid vector size + if ((nC <= 0) || (nR <= 0)) + { + invalidateGlue(); + mnStartCol = 0; + mnStartRow = 0; + return; + } sal_uInt32 nCR = static_cast<sal_uInt32>(nC*nR); const sal_uInt8 nHole = 0; @@ -957,15 +973,6 @@ void lcl_convertTokensToString(OUString& rStr, const vector<ScSharedTokenRef>& r func.getString(rStr); } -void lcl_convertTokenToString(OUString& rStr, const ScSharedTokenRef& rToken, ScDocument* pDoc, - FormulaGrammar::Grammar eGrammar) -{ - const sal_Unicode cRangeSep = ScCompiler::GetNativeSymbol(ocSep).GetChar(0); - Tokens2RangeString func(pDoc, eGrammar, cRangeSep); - func.operator() (rToken); - func.getString(rStr); -} - } // anonymous namespace // DataProvider ============================================================== @@ -995,44 +1002,6 @@ void ScChart2DataProvider::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint } } -void lcl_SeperateOneColumnRange(ScRange aR, const ScAddress& rPos, ScRangeListRef& xRanges) -{ - if (aR.aStart == rPos) - { - aR.aStart.SetRow(aR.aStart.Row() + 1); - xRanges->Join(aR); - } - else if (aR.aEnd == rPos) - { - aR.aStart.SetRow(aR.aStart.Row() - 1); - xRanges->Join(aR); - } - else - { - xRanges->Join(ScRange(aR.aStart, ScAddress(rPos.Col(), rPos.Row() - 1, rPos.Tab()))); - xRanges->Join(ScRange(ScAddress(rPos.Col(), rPos.Row() + 1, rPos.Tab()), aR.aEnd )); - } -} - -void lcl_SeperateOneRowRange(ScRange aR, const ScAddress& rPos, ScRangeListRef& xRanges) -{ - if (aR.aStart == rPos) - { - aR.aStart.SetCol(aR.aStart.Col() + 1); - xRanges->Join(aR); - } - else if (aR.aEnd == rPos) - { - aR.aStart.SetCol(aR.aStart.Col() - 1); - xRanges->Join(aR); - } - else - { - xRanges->Join(ScRange(aR.aStart, ScAddress(rPos.Col() - 1, rPos.Row(), rPos.Tab()))); - xRanges->Join(ScRange(ScAddress(rPos.Col() + 1, rPos.Row(), rPos.Tab()), aR.aEnd )); - } -} - ::sal_Bool SAL_CALL ScChart2DataProvider::createDataSourcePossible( const uno::Sequence< beans::PropertyValue >& aArguments ) throw (uno::RuntimeException) { diff --git a/sc/source/ui/unoobj/chartuno.cxx b/sc/source/ui/unoobj/chartuno.cxx index d1c65e87ad9b..3c584a94a775 100644 --- a/sc/source/ui/unoobj/chartuno.cxx +++ b/sc/source/ui/unoobj/chartuno.cxx @@ -255,14 +255,19 @@ void SAL_CALL ScChartsObj::addNewByName( const rtl::OUString& aName, xReceiver.set( xCompSupp->getComponent(), uno::UNO_QUERY ); if( xReceiver.is()) { + String sRangeStr; + xNewRanges->Format(sRangeStr, SCR_ABS_3D, pDoc); + // connect - xReceiver->attachDataProvider( xDataProvider ); + if( sRangeStr.Len() ) + xReceiver->attachDataProvider( xDataProvider ); + else + sRangeStr = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM( "all" ) ); + uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( pDocShell->GetModel(), uno::UNO_QUERY ); xReceiver->attachNumberFormatsSupplier( xNumberFormatsSupplier ); // set arguments - String sRangeStr; - xNewRanges->Format(sRangeStr, SCR_ABS_3D, pDoc); uno::Sequence< beans::PropertyValue > aArgs( 4 ); aArgs[0] = beans::PropertyValue( ::rtl::OUString::createFromAscii("CellRangeRepresentation"), -1, diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index c924205bdce5..3e2295d73471 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -60,6 +60,9 @@ #include <com/sun/star/script/XLibraryContainer.hpp> #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/ServiceNotRegisteredException.hpp> +#include <com/sun/star/document/XDocumentEventBroadcaster.hpp> +#include <com/sun/star/script/XInvocation.hpp> +#include <com/sun/star/reflection/XIdlClassProvider.hpp> #include <comphelper/processfactory.hxx> #include "docuno.hxx" @@ -218,21 +221,37 @@ ScModelObj::ScModelObj( ScDocShell* pDocSh ) : aPropSet( lcl_GetDocOptPropertyMap() ), pDocShell( pDocSh ), pPrintFuncCache( NULL ), - maChangesListeners( m_aMutex ) + maChangesListeners( m_aMutex ), + mnXlsWriteProtPass( 0 ) { // pDocShell may be NULL if this is the base of a ScDocOptionsObj if ( pDocShell ) { pDocShell->GetDocument()->AddUnoObject(*this); // SfxModel is derived from SfxListener + } +} + +ScModelObj::~ScModelObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + if (xNumberAgg.is()) + xNumberAgg->setDelegator(uno::Reference<uno::XInterface>()); + + delete pPrintFuncCache; +} +uno::Reference< uno::XAggregation> ScModelObj::GetFormatter() +{ + if ( !xNumberAgg.is() ) + { // setDelegator veraendert den RefCount, darum eine Referenz selber halten // (direkt am m_refCount, um sich beim release nicht selbst zu loeschen) comphelper::increment( m_refCount ); - // waehrend des queryInterface braucht man ein Ref auf das // SvNumberFormatsSupplierObj, sonst wird es geloescht. - uno::Reference<util::XNumberFormatsSupplier> xFormatter(new SvNumberFormatsSupplierObj( - pDocShell->GetDocument()->GetFormatTable() )); + uno::Reference<util::XNumberFormatsSupplier> xFormatter(new SvNumberFormatsSupplierObj(pDocShell->GetDocument()->GetFormatTable() )); { xNumberAgg.set(uno::Reference<uno::XAggregation>( xFormatter, uno::UNO_QUERY )); // extra block to force deletion of the temporary before setDelegator @@ -243,20 +262,9 @@ ScModelObj::ScModelObj( ScDocShell* pDocSh ) : if (xNumberAgg.is()) xNumberAgg->setDelegator( (cppu::OWeakObject*)this ); - comphelper::decrement( m_refCount ); - } -} - -ScModelObj::~ScModelObj() -{ - if (pDocShell) - pDocShell->GetDocument()->RemoveUnoObject(*this); - - if (xNumberAgg.is()) - xNumberAgg->setDelegator(uno::Reference<uno::XInterface>()); - - delete pPrintFuncCache; + } // if ( !xNumberAgg.is() ) + return xNumberAgg; } ScDocument* ScModelObj::GetDocument() const @@ -277,13 +285,6 @@ void ScModelObj::UpdateAllRowHeights(const ScMarkData* pTabMark) pDocShell->UpdateAllRowHeights(pTabMark); } -ScDrawLayer* ScModelObj::MakeDrawLayer() -{ - if (pDocShell) - return pDocShell->MakeDrawLayer(); - return NULL; -} - void ScModelObj::BeforeXMLLoading() { if (pDocShell) @@ -296,6 +297,13 @@ void ScModelObj::AfterXMLLoading(sal_Bool bRet) pDocShell->AfterXMLLoading(bRet); } +ScSheetSaveData* ScModelObj::GetSheetSaveData() +{ + if (pDocShell) + return pDocShell->GetSheetSaveData(); + return NULL; +} + uno::Any SAL_CALL ScModelObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) { @@ -316,8 +324,19 @@ uno::Any SAL_CALL ScModelObj::queryInterface( const uno::Type& rType ) SC_QUERYINTERFACE( util::XChangesNotifier ) uno::Any aRet(SfxBaseModel::queryInterface( rType )); - if ( !aRet.hasValue() && xNumberAgg.is() ) - aRet = xNumberAgg->queryAggregation( rType ); + if ( !aRet.hasValue() + && rType != ::getCppuType((uno::Reference< com::sun::star::document::XDocumentEventBroadcaster>*)0) + && rType != ::getCppuType((uno::Reference< com::sun::star::frame::XController>*)0) + && rType != ::getCppuType((uno::Reference< com::sun::star::frame::XFrame>*)0) + && rType != ::getCppuType((uno::Reference< com::sun::star::script::XInvocation>*)0) + && rType != ::getCppuType((uno::Reference< com::sun::star::reflection::XIdlClassProvider>*)0) + && rType != ::getCppuType((uno::Reference< com::sun::star::beans::XFastPropertySet>*)0) + && rType != ::getCppuType((uno::Reference< com::sun::star::awt::XWindow>*)0)) + { + GetFormatter(); + if ( xNumberAgg.is() ) + aRet = xNumberAgg->queryAggregation( rType ); + } return aRet; } @@ -342,7 +361,7 @@ uno::Sequence<uno::Type> SAL_CALL ScModelObj::getTypes() throw(uno::RuntimeExcep const uno::Type* pParentPtr = aParentTypes.getConstArray(); uno::Sequence<uno::Type> aAggTypes; - if ( xNumberAgg.is() ) + if ( GetFormatter().is() ) { const uno::Type& rProvType = ::getCppuType((uno::Reference<lang::XTypeProvider>*) 0); uno::Any aNumProv(xNumberAgg->queryAggregation(rProvType)); @@ -433,7 +452,7 @@ void ScModelObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { // NumberFormatter-Pointer am Uno-Objekt neu setzen - if (xNumberAgg.is()) + if (GetFormatter().is()) { SvNumberFormatsSupplierObj* pNumFmt = SvNumberFormatsSupplierObj::getImplementation( @@ -1430,6 +1449,14 @@ void SAL_CALL ScModelObj::setPropertyValue( if ( aObjName.getLength() ) pDoc->RestoreChartListener( aObjName ); } + else if ( aString.EqualsAscii( "WriteProtectionPassword" ) ) + { + /* This is a hack for #160550# to preserve the write-protection + password in an XLS roundtrip. This property MUST NOT be used + for any other purpose. This property will be deleted when the + feature "Write Protection With Password" will be implemented. */ + aValue >>= mnXlsWriteProtPass; + } if ( aNewOpt != rOldOpt ) { @@ -1592,6 +1619,14 @@ uno::Any SAL_CALL ScModelObj::getPropertyValue( const rtl::OUString& aPropertyNa { ScUnoHelpFunctions::SetBoolInAny( aRet, (pDocShell->GetCreateMode() == SFX_CREATE_MODE_INTERNAL) ); } + else if ( aString.EqualsAscii( "WriteProtectionPassword" ) ) + { + /* This is a hack for #160550# to preserve the write-protection + password in an XLS roundtrip. This property MUST NOT be used + for any other purpose. This property will be deleted when the + feature "Write Protection With Password" will be implemented. */ + aRet <<= mnXlsWriteProtPass; + } } return aRet; @@ -1760,7 +1795,7 @@ sal_Int64 SAL_CALL ScModelObj::getSomething( if ( nRet ) return nRet; - if ( xNumberAgg.is() ) + if ( GetFormatter().is() ) { const uno::Type& rTunnelType = ::getCppuType((uno::Reference<lang::XUnoTunnel>*) 0); uno::Any aNumTunnel(xNumberAgg->queryAggregation(rTunnelType)); diff --git a/sc/source/ui/unoobj/funcuno.cxx b/sc/source/ui/unoobj/funcuno.cxx index 1d9f3a1d9213..a50b4003b0ac 100644 --- a/sc/source/ui/unoobj/funcuno.cxx +++ b/sc/source/ui/unoobj/funcuno.cxx @@ -57,6 +57,7 @@ #include "patattr.hxx" #include "docpool.hxx" #include "attrib.hxx" +#include "clipparam.hxx" using namespace com::sun::star; @@ -175,9 +176,8 @@ BOOL lcl_CopyData( ScDocument* pSrcDoc, const ScRange& rSrcRange, ScMarkData aSourceMark; aSourceMark.SelectOneTable( nSrcTab ); // for CopyToClip aSourceMark.SetMarkArea( rSrcRange ); - pSrcDoc->CopyToClip( rSrcRange.aStart.Col(),rSrcRange.aStart.Row(), - rSrcRange.aEnd.Col(),rSrcRange.aEnd.Row(), - FALSE, pClipDoc, FALSE, &aSourceMark ); + ScClipParam aClipParam(rSrcRange, false); + pSrcDoc->CopyToClip(aClipParam, pClipDoc, &aSourceMark, false); if ( pClipDoc->HasAttrib( 0,0,nSrcTab, MAXCOL,MAXROW,nSrcTab, HASATTR_MERGED | HASATTR_OVERLAPPED ) ) diff --git a/sc/source/ui/unoobj/scdetect.cxx b/sc/source/ui/unoobj/scdetect.cxx index 1b17c2e130ac..6ed8181091ac 100644 --- a/sc/source/ui/unoobj/scdetect.cxx +++ b/sc/source/ui/unoobj/scdetect.cxx @@ -350,7 +350,7 @@ static BOOL lcl_IsAnyXMLFilter( const SfxFilter* pFilter ) // maybe that IsStorage() already created an error! if ( bIsStorage ) { - uno::Reference < embed::XStorage > xStorage(aMedium.GetStorage()); + uno::Reference < embed::XStorage > xStorage(aMedium.GetStorage( sal_False )); if ( aMedium.GetLastStorageCreationState() != ERRCODE_NONE ) { // error during storage creation means _here_ that the medium diff --git a/sc/source/ui/unoobj/servuno.cxx b/sc/source/ui/unoobj/servuno.cxx index d4ef17e79a8d..47e1be008645 100644 --- a/sc/source/ui/unoobj/servuno.cxx +++ b/sc/source/ui/unoobj/servuno.cxx @@ -121,56 +121,72 @@ public: }; //------------------------------------------------------------------------ +// +struct ProvNamesId_Type +{ + const char * pName; + sal_uInt16 nType; +}; -static const sal_Char* __FAR_DATA aProvNames[SC_SERVICE_COUNT] = - { - "com.sun.star.sheet.Spreadsheet", // SC_SERVICE_SHEET - "com.sun.star.text.TextField.URL", // SC_SERVICE_URLFIELD - "com.sun.star.text.TextField.PageNumber", // SC_SERVICE_PAGEFIELD - "com.sun.star.text.TextField.PageCount", // SC_SERVICE_PAGESFIELD - "com.sun.star.text.TextField.Date", // SC_SERVICE_DATEFIELD - "com.sun.star.text.TextField.Time", // SC_SERVICE_TIMEFIELD - "com.sun.star.text.TextField.DocumentTitle",// SC_SERVICE_TITLEFIELD - "com.sun.star.text.TextField.FileName", // SC_SERVICE_FILEFIELD - "com.sun.star.text.TextField.SheetName", // SC_SERVICE_SHEETFIELD - "com.sun.star.style.CellStyle", // SC_SERVICE_CELLSTYLE - "com.sun.star.style.PageStyle", // SC_SERVICE_PAGESTYLE - "com.sun.star.sheet.TableAutoFormat", // SC_SERVICE_AUTOFORMAT - "com.sun.star.sheet.SheetCellRanges", // SC_SERVICE_CELLRANGES - "com.sun.star.drawing.GradientTable", // SC_SERVICE_GRADTAB - "com.sun.star.drawing.HatchTable", // SC_SERVICE_HATCHTAB - "com.sun.star.drawing.BitmapTable", // SC_SERVICE_BITMAPTAB - "com.sun.star.drawing.TransparencyGradientTable", // SC_SERVICE_TRGRADTAB - "com.sun.star.drawing.MarkerTable", // SC_SERVICE_MARKERTAB - "com.sun.star.drawing.DashTable", // SC_SERVICE_DASHTAB - "com.sun.star.text.NumberingRules", // SC_SERVICE_NUMRULES - "com.sun.star.sheet.Defaults", // SC_SERVICE_DOCDEFLTS - "com.sun.star.drawing.Defaults", // SC_SERVICE_DRAWDEFLTS - "com.sun.star.comp.SpreadsheetSettings", // SC_SERVICE_DOCSPRSETT - "com.sun.star.document.Settings", // SC_SERVICE_DOCCONF - "com.sun.star.image.ImageMapRectangleObject",// SC_SERVICE_IMAP_RECT - "com.sun.star.image.ImageMapCircleObject", // SC_SERVICE_IMAP_CIRC - "com.sun.star.image.ImageMapPolygonObject", // SC_SERVICE_IMAP_POLY +static const ProvNamesId_Type __FAR_DATA aProvNamesId[] = +{ + { "com.sun.star.sheet.Spreadsheet", SC_SERVICE_SHEET }, + { "com.sun.star.text.TextField.URL", SC_SERVICE_URLFIELD }, + { "com.sun.star.text.TextField.PageNumber", SC_SERVICE_PAGEFIELD }, + { "com.sun.star.text.TextField.PageCount", SC_SERVICE_PAGESFIELD }, + { "com.sun.star.text.TextField.Date", SC_SERVICE_DATEFIELD }, + { "com.sun.star.text.TextField.Time", SC_SERVICE_TIMEFIELD }, + { "com.sun.star.text.TextField.DocumentTitle", SC_SERVICE_TITLEFIELD }, + { "com.sun.star.text.TextField.FileName", SC_SERVICE_FILEFIELD }, + { "com.sun.star.text.TextField.SheetName", SC_SERVICE_SHEETFIELD }, + { "com.sun.star.style.CellStyle", SC_SERVICE_CELLSTYLE }, + { "com.sun.star.style.PageStyle", SC_SERVICE_PAGESTYLE }, + { "com.sun.star.sheet.TableAutoFormat", SC_SERVICE_AUTOFORMAT }, + { "com.sun.star.sheet.SheetCellRanges", SC_SERVICE_CELLRANGES }, + { "com.sun.star.drawing.GradientTable", SC_SERVICE_GRADTAB }, + { "com.sun.star.drawing.HatchTable", SC_SERVICE_HATCHTAB }, + { "com.sun.star.drawing.BitmapTable", SC_SERVICE_BITMAPTAB }, + { "com.sun.star.drawing.TransparencyGradientTable", SC_SERVICE_TRGRADTAB }, + { "com.sun.star.drawing.MarkerTable", SC_SERVICE_MARKERTAB }, + { "com.sun.star.drawing.DashTable", SC_SERVICE_DASHTAB }, + { "com.sun.star.text.NumberingRules", SC_SERVICE_NUMRULES }, + { "com.sun.star.sheet.Defaults", SC_SERVICE_DOCDEFLTS }, + { "com.sun.star.drawing.Defaults", SC_SERVICE_DRAWDEFLTS }, + { "com.sun.star.comp.SpreadsheetSettings", SC_SERVICE_DOCSPRSETT }, + { "com.sun.star.document.Settings", SC_SERVICE_DOCCONF }, + { "com.sun.star.image.ImageMapRectangleObject", SC_SERVICE_IMAP_RECT }, + { "com.sun.star.image.ImageMapCircleObject", SC_SERVICE_IMAP_CIRC }, + { "com.sun.star.image.ImageMapPolygonObject", SC_SERVICE_IMAP_POLY }, // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver - "com.sun.star.document.ExportGraphicObjectResolver", // SC_SERVICE_EXPORT_GOR - "com.sun.star.document.ImportGraphicObjectResolver", // SC_SERVICE_IMPORT_GOR - "com.sun.star.document.ExportEmbeddedObjectResolver", // SC_SERVICE_EXPORT_EOR - "com.sun.star.document.ImportEmbeddedObjectResolver", // SC_SERVICE_IMPORT_EOR - - SC_SERVICENAME_VALBIND, // SC_SERVICE_VALBIND - SC_SERVICENAME_LISTCELLBIND, // SC_SERVICE_LISTCELLBIND - SC_SERVICENAME_LISTSOURCE, // SC_SERVICE_LISTSOURCE - SC_SERVICENAME_CELLADDRESS, // SC_SERVICE_CELLADDRESS - SC_SERVICENAME_RANGEADDRESS, // SC_SERVICE_RANGEADDRESS - - "com.sun.star.sheet.DocumentSettings", // SC_SERVICE_SHEETDOCSET - - SC_SERVICENAME_CHDATAPROV, // SC_SERVICE_CHDATAPROV - SC_SERVICENAME_FORMULAPARS, // SC_SERVICE_FORMULAPARS - SC_SERVICENAME_OPCODEMAPPER, // SC_SERVICE_OPCODEMAPPER - "ooo.vba.VBACodeNameProvider", // SC_SERVICE_OPCODEMAPPER - }; + { "com.sun.star.document.ExportGraphicObjectResolver", SC_SERVICE_EXPORT_GOR }, + { "com.sun.star.document.ImportGraphicObjectResolver", SC_SERVICE_IMPORT_GOR }, + { "com.sun.star.document.ExportEmbeddedObjectResolver", SC_SERVICE_EXPORT_EOR }, + { "com.sun.star.document.ImportEmbeddedObjectResolver", SC_SERVICE_IMPORT_EOR }, + + { SC_SERVICENAME_VALBIND, SC_SERVICE_VALBIND }, + { SC_SERVICENAME_LISTCELLBIND, SC_SERVICE_LISTCELLBIND }, + { SC_SERVICENAME_LISTSOURCE, SC_SERVICE_LISTSOURCE }, + { SC_SERVICENAME_CELLADDRESS, SC_SERVICE_CELLADDRESS }, + { SC_SERVICENAME_RANGEADDRESS, SC_SERVICE_RANGEADDRESS }, + + { "com.sun.star.sheet.DocumentSettings",SC_SERVICE_SHEETDOCSET }, + + { SC_SERVICENAME_CHDATAPROV, SC_SERVICE_CHDATAPROV }, + { SC_SERVICENAME_FORMULAPARS, SC_SERVICE_FORMULAPARS }, + { SC_SERVICENAME_OPCODEMAPPER, SC_SERVICE_OPCODEMAPPER }, + { "ooo.vba.VBACodeNameProvider", SC_SERVICE_VBACODENAMEPROVIDER }, + + // case-correct versions of the service names (#i102468#) + { "com.sun.star.text.textfield.URL", SC_SERVICE_URLFIELD }, + { "com.sun.star.text.textfield.PageNumber", SC_SERVICE_PAGEFIELD }, + { "com.sun.star.text.textfield.PageCount", SC_SERVICE_PAGESFIELD }, + { "com.sun.star.text.textfield.Date", SC_SERVICE_DATEFIELD }, + { "com.sun.star.text.textfield.Time", SC_SERVICE_TIMEFIELD }, + { "com.sun.star.text.textfield.DocumentTitle", SC_SERVICE_TITLEFIELD }, + { "com.sun.star.text.textfield.FileName", SC_SERVICE_FILEFIELD }, + { "com.sun.star.text.textfield.SheetName", SC_SERVICE_SHEETFIELD }, +}; // // old service names that were in 567 still work in createInstance, @@ -244,11 +260,17 @@ sal_uInt16 ScServiceProvider::GetProviderType(const String& rServiceName) { if (rServiceName.Len()) { - USHORT i; - for (i=0; i<SC_SERVICE_COUNT; i++) - if (rServiceName.EqualsAscii( aProvNames[i] )) - return i; + const sal_uInt16 nEntries = + sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); + for (sal_uInt16 i = 0; i < nEntries; i++) + { + if (rServiceName.EqualsAscii( aProvNamesId[i].pName )) + { + return aProvNamesId[i].nType; + } + } + USHORT i; for (i=0; i<SC_SERVICE_COUNT; i++) { DBG_ASSERT( aOldNames[i], "ScServiceProvider::GetProviderType: no oldname => crash"); @@ -441,10 +463,13 @@ uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance( uno::Sequence<rtl::OUString> ScServiceProvider::GetAllServiceNames() { - uno::Sequence<rtl::OUString> aRet(SC_SERVICE_COUNT); + const sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); + uno::Sequence<rtl::OUString> aRet(nEntries); rtl::OUString* pArray = aRet.getArray(); - for (sal_uInt16 i = 0; i < SC_SERVICE_COUNT; i++) - pArray[i] = rtl::OUString::createFromAscii( aProvNames[i] ); + for (sal_uInt16 i = 0; i < nEntries; i++) + { + pArray[i] = rtl::OUString::createFromAscii( aProvNamesId[i].pName ); + } return aRet; } diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx index bd481dfc49f0..a9e6a799e010 100644 --- a/sc/source/ui/unoobj/textuno.cxx +++ b/sc/source/ui/unoobj/textuno.cxx @@ -897,6 +897,47 @@ uno::Reference<text::XTextRange> SAL_CALL ScDrawTextCursor::getEnd() throw(uno:: return xRange; } +// XUnoTunnel + +sal_Int64 SAL_CALL ScDrawTextCursor::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this)); + } + return SvxUnoTextCursor::getSomething( rId ); +} + +// static +const uno::Sequence<sal_Int8>& ScDrawTextCursor::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScDrawTextCursor* ScDrawTextCursor::getImplementation( const uno::Reference<uno::XInterface> xObj ) +{ + ScDrawTextCursor* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = reinterpret_cast<ScDrawTextCursor*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId()))); + return pRet; +} + //------------------------------------------------------------------------ ScSimpleEditSourceHelper::ScSimpleEditSourceHelper() |