sc/source/core/tool/addincol.cxx | 672 - sc/source/core/tool/address.cxx | 58 sc/source/core/tool/appoptio.cxx | 56 sc/source/core/tool/callform.cxx | 134 sc/source/core/tool/charthelper.cxx | 240 sc/source/core/tool/chgtrack.cxx | 634 - sc/source/core/tool/compiler.cxx | 360 sc/source/core/tool/consoli.cxx | 222 sc/source/core/tool/dbdata.cxx | 66 sc/source/core/tool/defaultsoptions.cxx | 38 sc/source/core/tool/detfunc.cxx | 140 sc/source/core/tool/filtopt.cxx | 20 sc/source/core/tool/formulaopt.cxx | 404 - sc/source/core/tool/formulaparserpool.cxx | 5 sc/source/core/tool/inputopt.cxx | 90 sc/source/core/tool/interpr1.cxx | 4174 +++++------ sc/source/core/tool/interpr2.cxx | 2782 +++---- sc/source/core/tool/interpr3.cxx | 486 - sc/source/core/tool/interpr5.cxx | 790 +- sc/source/core/tool/interpr7.cxx | 632 - sc/source/core/tool/interpr8.cxx | 444 - sc/source/core/tool/jumpmatrix.cxx | 44 sc/source/core/tool/printopt.cxx | 34 sc/source/core/tool/progress.cxx | 34 sc/source/core/tool/queryparam.cxx | 32 sc/source/core/tool/rangelst.cxx | 54 sc/source/core/tool/rangenam.cxx | 102 sc/source/core/tool/token.cxx | 28 sc/source/core/tool/tokenstringcontext.cxx | 22 sc/source/core/tool/unitconv.cxx | 74 sc/source/ui/Accessibility/AccessibleCell.cxx | 88 sc/source/ui/Accessibility/AccessibleContextBase.cxx | 30 sc/source/ui/Accessibility/AccessibleDocument.cxx | 378 sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx | 146 sc/source/ui/Accessibility/AccessibleEditObject.cxx | 66 sc/source/ui/Accessibility/AccessiblePreviewCell.cxx | 26 sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx | 74 37 files changed, 6842 insertions(+), 6837 deletions(-)
New commits: commit 382ecc31a9480fc0d19dddc917d16a7e744a00e3 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Jul 29 16:12:49 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Jul 29 20:44:14 2020 +0200 loplugin:flatten in sc/core/tool Change-Id: Ibe5302ee320cf2e89c814dfb34ad42f9d72a25aa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99700 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx index 48f5d4c03846..fbc9ac23592f 100644 --- a/sc/source/core/tool/addincol.cxx +++ b/sc/source/core/tool/addincol.cxx @@ -537,23 +537,23 @@ void ScUnoAddInCollection::LoadComponent( const ScUnoAddInFuncData& rFuncData ) { const OUString& aFullName = rFuncData.GetOriginalName(); sal_Int32 nPos = aFullName.lastIndexOf( '.' ); - if ( nPos > 0 ) - { - OUString aServiceName = aFullName.copy( 0, nPos ); + if ( nPos <= 0 ) + return; - try - { - uno::Reference<lang::XMultiServiceFactory> xServiceFactory = comphelper::getProcessServiceFactory(); - uno::Reference<uno::XInterface> xInterface( xServiceFactory->createInstance( aServiceName ) ); + OUString aServiceName = aFullName.copy( 0, nPos ); - if (xInterface.is()) - UpdateFromAddIn( xInterface, aServiceName ); - } - catch (const uno::Exception &) - { - SAL_WARN ("sc", "Failed to create addin component '" - << aServiceName << "'"); - } + try + { + uno::Reference<lang::XMultiServiceFactory> xServiceFactory = comphelper::getProcessServiceFactory(); + uno::Reference<uno::XInterface> xInterface( xServiceFactory->createInstance( aServiceName ) ); + + if (xInterface.is()) + UpdateFromAddIn( xInterface, aServiceName ); + } + catch (const uno::Exception &) + { + SAL_WARN ("sc", "Failed to create addin component '" + << aServiceName << "'"); } } @@ -698,216 +698,216 @@ void ScUnoAddInCollection::ReadFromAddIn( const uno::Reference<uno::XInterface>& { uno::Reference<sheet::XAddIn> xAddIn( xInterface, uno::UNO_QUERY ); uno::Reference<lang::XServiceName> xName( xInterface, uno::UNO_QUERY ); - if ( xAddIn.is() && xName.is() ) - { - // fdo50118 when GetUseEnglishFunctionName() returns true, set the - // locale to en-US to get English function names - if ( SC_MOD()->GetFormulaOptions().GetUseEnglishFuncName() ) - xAddIn->setLocale( lang::Locale( "en", "US", "")); - else - xAddIn->setLocale( Application::GetSettings().GetUILanguageTag().getLocale()); + if ( !(xAddIn.is() && xName.is()) ) + return; - OUString aServiceName( xName->getServiceName() ); - ScUnoAddInHelpIdGenerator aHelpIdGenerator( aServiceName ); + // fdo50118 when GetUseEnglishFunctionName() returns true, set the + // locale to en-US to get English function names + if ( SC_MOD()->GetFormulaOptions().GetUseEnglishFuncName() ) + xAddIn->setLocale( lang::Locale( "en", "US", "")); + else + xAddIn->setLocale( Application::GetSettings().GetUILanguageTag().getLocale()); - //TODO: pass XIntrospection to ReadFromAddIn + OUString aServiceName( xName->getServiceName() ); + ScUnoAddInHelpIdGenerator aHelpIdGenerator( aServiceName ); - uno::Reference<uno::XComponentContext> xContext = comphelper::getProcessComponentContext(); + //TODO: pass XIntrospection to ReadFromAddIn - uno::Reference<beans::XIntrospection> xIntro = beans::theIntrospection::get( xContext ); - uno::Any aObject; - aObject <<= xAddIn; - uno::Reference<beans::XIntrospectionAccess> xAcc = xIntro->inspect(aObject); - if (xAcc.is()) + uno::Reference<uno::XComponentContext> xContext = comphelper::getProcessComponentContext(); + + uno::Reference<beans::XIntrospection> xIntro = beans::theIntrospection::get( xContext ); + uno::Any aObject; + aObject <<= xAddIn; + uno::Reference<beans::XIntrospectionAccess> xAcc = xIntro->inspect(aObject); + if (!xAcc.is()) + return; + + uno::Sequence< uno::Reference<reflection::XIdlMethod> > aMethods = + xAcc->getMethods( beans::MethodConcept::ALL ); + long nNewCount = aMethods.getLength(); + if ( !nNewCount ) + return; + + long nOld = nFuncCount; + nFuncCount = nNewCount+nOld; + if ( nOld ) + { + std::unique_ptr<std::unique_ptr<ScUnoAddInFuncData>[]> ppNew(new std::unique_ptr<ScUnoAddInFuncData>[nFuncCount]); + for (long i=0; i<nOld; i++) + ppNew[i] = std::move(ppFuncData[i]); + ppFuncData = std::move(ppNew); + } + else + ppFuncData.reset(new std::unique_ptr<ScUnoAddInFuncData>[nFuncCount]); + + //TODO: adjust bucket count? + if ( !pExactHashMap ) + pExactHashMap.reset( new ScAddInHashMap ); + if ( !pNameHashMap ) + pNameHashMap.reset( new ScAddInHashMap ); + if ( !pLocalHashMap ) + pLocalHashMap.reset( new ScAddInHashMap ); + + const uno::Reference<reflection::XIdlMethod>* pArray = aMethods.getConstArray(); + for (long nFuncPos=0; nFuncPos<nNewCount; nFuncPos++) + { + ppFuncData[nFuncPos+nOld] = nullptr; + + uno::Reference<reflection::XIdlMethod> xFunc = pArray[nFuncPos]; + if (xFunc.is()) { - uno::Sequence< uno::Reference<reflection::XIdlMethod> > aMethods = - xAcc->getMethods( beans::MethodConcept::ALL ); - long nNewCount = aMethods.getLength(); - if ( nNewCount ) + // leave out internal functions + uno::Reference<reflection::XIdlClass> xClass = + xFunc->getDeclaringClass(); + bool bSkip = true; + if ( xClass.is() ) { - long nOld = nFuncCount; - nFuncCount = nNewCount+nOld; - if ( nOld ) + //TODO: XIdlClass needs getType() method! + OUString sName = xClass->getName(); + bSkip = ( + IsTypeName( sName, + cppu::UnoType<uno::XInterface>::get()) || + IsTypeName( sName, + cppu::UnoType<lang::XServiceName>::get()) || + IsTypeName( sName, + cppu::UnoType<lang::XServiceInfo>::get()) || + IsTypeName( sName, + cppu::UnoType<sheet::XAddIn>::get()) ); + } + if (!bSkip) + { + uno::Reference<reflection::XIdlClass> xReturn = + xFunc->getReturnType(); + if ( !lcl_ValidReturnType( xReturn ) ) + bSkip = true; + } + if (!bSkip) + { + OUString aFuncU = xFunc->getName(); + + // stored function name: (service name).(function) + OUString aFuncName = aServiceName + "." + aFuncU; + + bool bValid = true; + long nVisibleCount = 0; + long nCallerPos = SC_CALLERPOS_NONE; + + uno::Sequence<reflection::ParamInfo> aParams = + xFunc->getParameterInfos(); + long nParamCount = aParams.getLength(); + const reflection::ParamInfo* pParArr = aParams.getConstArray(); + long nParamPos; + for (nParamPos=0; nParamPos<nParamCount; nParamPos++) { - std::unique_ptr<std::unique_ptr<ScUnoAddInFuncData>[]> ppNew(new std::unique_ptr<ScUnoAddInFuncData>[nFuncCount]); - for (long i=0; i<nOld; i++) - ppNew[i] = std::move(ppFuncData[i]); - ppFuncData = std::move(ppNew); + if ( pParArr[nParamPos].aMode != reflection::ParamMode_IN ) + bValid = false; + uno::Reference<reflection::XIdlClass> xParClass = + pParArr[nParamPos].aType; + ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); + if ( eArgType == SC_ADDINARG_NONE ) + bValid = false; + else if ( eArgType == SC_ADDINARG_CALLER ) + nCallerPos = nParamPos; + else + ++nVisibleCount; } - else - ppFuncData.reset(new std::unique_ptr<ScUnoAddInFuncData>[nFuncCount]); - - //TODO: adjust bucket count? - if ( !pExactHashMap ) - pExactHashMap.reset( new ScAddInHashMap ); - if ( !pNameHashMap ) - pNameHashMap.reset( new ScAddInHashMap ); - if ( !pLocalHashMap ) - pLocalHashMap.reset( new ScAddInHashMap ); - - const uno::Reference<reflection::XIdlMethod>* pArray = aMethods.getConstArray(); - for (long nFuncPos=0; nFuncPos<nNewCount; nFuncPos++) + if (bValid) { - ppFuncData[nFuncPos+nOld] = nullptr; + sal_uInt16 nCategory = lcl_GetCategory( + xAddIn->getProgrammaticCategoryName( aFuncU ) ); - uno::Reference<reflection::XIdlMethod> xFunc = pArray[nFuncPos]; - if (xFunc.is()) - { - // leave out internal functions - uno::Reference<reflection::XIdlClass> xClass = - xFunc->getDeclaringClass(); - bool bSkip = true; - if ( xClass.is() ) - { - //TODO: XIdlClass needs getType() method! - OUString sName = xClass->getName(); - bSkip = ( - IsTypeName( sName, - cppu::UnoType<uno::XInterface>::get()) || - IsTypeName( sName, - cppu::UnoType<lang::XServiceName>::get()) || - IsTypeName( sName, - cppu::UnoType<lang::XServiceInfo>::get()) || - IsTypeName( sName, - cppu::UnoType<sheet::XAddIn>::get()) ); - } - if (!bSkip) - { - uno::Reference<reflection::XIdlClass> xReturn = - xFunc->getReturnType(); - if ( !lcl_ValidReturnType( xReturn ) ) - bSkip = true; - } - if (!bSkip) - { - OUString aFuncU = xFunc->getName(); + OString sHelpId = aHelpIdGenerator.GetHelpId( aFuncU ); - // stored function name: (service name).(function) - OUString aFuncName = aServiceName + "." + aFuncU; + OUString aLocalName; + try + { + aLocalName = xAddIn-> + getDisplayFunctionName( aFuncU ); + } + catch(uno::Exception&) + { + aLocalName = "###"; + } - bool bValid = true; - long nVisibleCount = 0; - long nCallerPos = SC_CALLERPOS_NONE; + OUString aDescription; + try + { + aDescription = xAddIn-> + getFunctionDescription( aFuncU ); + } + catch(uno::Exception&) + { + aDescription = "###"; + } - uno::Sequence<reflection::ParamInfo> aParams = - xFunc->getParameterInfos(); - long nParamCount = aParams.getLength(); - const reflection::ParamInfo* pParArr = aParams.getConstArray(); - long nParamPos; - for (nParamPos=0; nParamPos<nParamCount; nParamPos++) - { - if ( pParArr[nParamPos].aMode != reflection::ParamMode_IN ) - bValid = false; - uno::Reference<reflection::XIdlClass> xParClass = - pParArr[nParamPos].aType; - ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); - if ( eArgType == SC_ADDINARG_NONE ) - bValid = false; - else if ( eArgType == SC_ADDINARG_CALLER ) - nCallerPos = nParamPos; - else - ++nVisibleCount; - } - if (bValid) + std::unique_ptr<ScAddInArgDesc[]> pVisibleArgs; + if ( nVisibleCount > 0 ) + { + ScAddInArgDesc aDesc; + pVisibleArgs.reset(new ScAddInArgDesc[nVisibleCount]); + long nDestPos = 0; + for (nParamPos=0; nParamPos<nParamCount; nParamPos++) + { + uno::Reference<reflection::XIdlClass> xParClass = + pParArr[nParamPos].aType; + ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); + if ( eArgType != SC_ADDINARG_CALLER ) { - sal_uInt16 nCategory = lcl_GetCategory( - xAddIn->getProgrammaticCategoryName( aFuncU ) ); - - OString sHelpId = aHelpIdGenerator.GetHelpId( aFuncU ); - - OUString aLocalName; + OUString aArgName; try { - aLocalName = xAddIn-> - getDisplayFunctionName( aFuncU ); + aArgName = xAddIn-> + getDisplayArgumentName( aFuncU, nParamPos ); } catch(uno::Exception&) { - aLocalName = "###"; + aArgName = "###"; } - - OUString aDescription; + OUString aArgDesc; try { - aDescription = xAddIn-> - getFunctionDescription( aFuncU ); + aArgDesc = xAddIn-> + getArgumentDescription( aFuncU, nParamPos ); } catch(uno::Exception&) { - aDescription = "###"; + aArgDesc = "###"; } - std::unique_ptr<ScAddInArgDesc[]> pVisibleArgs; - if ( nVisibleCount > 0 ) - { - ScAddInArgDesc aDesc; - pVisibleArgs.reset(new ScAddInArgDesc[nVisibleCount]); - long nDestPos = 0; - for (nParamPos=0; nParamPos<nParamCount; nParamPos++) - { - uno::Reference<reflection::XIdlClass> xParClass = - pParArr[nParamPos].aType; - ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); - if ( eArgType != SC_ADDINARG_CALLER ) - { - OUString aArgName; - try - { - aArgName = xAddIn-> - getDisplayArgumentName( aFuncU, nParamPos ); - } - catch(uno::Exception&) - { - aArgName = "###"; - } - OUString aArgDesc; - try - { - aArgDesc = xAddIn-> - getArgumentDescription( aFuncU, nParamPos ); - } - catch(uno::Exception&) - { - aArgDesc = "###"; - } - - bool bOptional = - ( eArgType == SC_ADDINARG_VALUE_OR_ARRAY || - eArgType == SC_ADDINARG_VARARGS ); - - aDesc.eType = eArgType; - aDesc.aName = aArgName; - aDesc.aDescription = aArgDesc; - aDesc.bOptional = bOptional; - //TODO: initialize aInternalName only from config? - aDesc.aInternalName = pParArr[nParamPos].aName; - - pVisibleArgs[nDestPos++] = aDesc; - } - } - OSL_ENSURE( nDestPos==nVisibleCount, "wrong count" ); - } + bool bOptional = + ( eArgType == SC_ADDINARG_VALUE_OR_ARRAY || + eArgType == SC_ADDINARG_VARARGS ); + + aDesc.eType = eArgType; + aDesc.aName = aArgName; + aDesc.aDescription = aArgDesc; + aDesc.bOptional = bOptional; + //TODO: initialize aInternalName only from config? + aDesc.aInternalName = pParArr[nParamPos].aName; - ppFuncData[nFuncPos+nOld].reset( new ScUnoAddInFuncData( - aFuncName, aLocalName, aDescription, - nCategory, sHelpId, - xFunc, aObject, - nVisibleCount, pVisibleArgs.get(), nCallerPos ) ); - - const ScUnoAddInFuncData* pData = - ppFuncData[nFuncPos+nOld].get(); - pExactHashMap->emplace( - pData->GetOriginalName(), - pData ); - pNameHashMap->emplace( - pData->GetUpperName(), - pData ); - pLocalHashMap->emplace( - pData->GetUpperLocal(), - pData ); + pVisibleArgs[nDestPos++] = aDesc; } } + OSL_ENSURE( nDestPos==nVisibleCount, "wrong count" ); } + + ppFuncData[nFuncPos+nOld].reset( new ScUnoAddInFuncData( + aFuncName, aLocalName, aDescription, + nCategory, sHelpId, + xFunc, aObject, + nVisibleCount, pVisibleArgs.get(), nCallerPos ) ); + + const ScUnoAddInFuncData* pData = + ppFuncData[nFuncPos+nOld].get(); + pExactHashMap->emplace( + pData->GetOriginalName(), + pData ); + pNameHashMap->emplace( + pData->GetUpperName(), + pData ); + pLocalHashMap->emplace( + pData->GetUpperLocal(), + pData ); } } } @@ -970,97 +970,97 @@ void ScUnoAddInCollection::UpdateFromAddIn( const uno::Reference<uno::XInterface uno::Any aObject; aObject <<= xInterface; uno::Reference<beans::XIntrospectionAccess> xAcc = xIntro->inspect(aObject); - if (xAcc.is()) + if (!xAcc.is()) + return; + + const uno::Sequence< uno::Reference<reflection::XIdlMethod> > aMethods = + xAcc->getMethods( beans::MethodConcept::ALL ); + for (const uno::Reference<reflection::XIdlMethod>& xFunc : aMethods) { - const uno::Sequence< uno::Reference<reflection::XIdlMethod> > aMethods = - xAcc->getMethods( beans::MethodConcept::ALL ); - for (const uno::Reference<reflection::XIdlMethod>& xFunc : aMethods) + if (xFunc.is()) { - if (xFunc.is()) + OUString aFuncU = xFunc->getName(); + + // stored function name: (service name).(function) + OUString aFuncName = rServiceName + "." + aFuncU; + + // internal names are skipped because no FuncData exists + ScUnoAddInFuncData* pOldData = const_cast<ScUnoAddInFuncData*>( GetFuncData( aFuncName ) ); + if ( pOldData ) { - OUString aFuncU = xFunc->getName(); + // Create new (complete) argument info. + // As in ReadFromAddIn, the reflection information is authoritative. + // Local names and descriptions from pOldData are looked up using the + // internal argument name. - // stored function name: (service name).(function) - OUString aFuncName = rServiceName + "." + aFuncU; + bool bValid = true; + long nVisibleCount = 0; + long nCallerPos = SC_CALLERPOS_NONE; - // internal names are skipped because no FuncData exists - ScUnoAddInFuncData* pOldData = const_cast<ScUnoAddInFuncData*>( GetFuncData( aFuncName ) ); - if ( pOldData ) + const uno::Sequence<reflection::ParamInfo> aParams = + xFunc->getParameterInfos(); + long nParamCount = aParams.getLength(); + const reflection::ParamInfo* pParArr = aParams.getConstArray(); + for (long nParamPos=0; nParamPos<nParamCount; nParamPos++) { - // Create new (complete) argument info. - // As in ReadFromAddIn, the reflection information is authoritative. - // Local names and descriptions from pOldData are looked up using the - // internal argument name. - - bool bValid = true; - long nVisibleCount = 0; - long nCallerPos = SC_CALLERPOS_NONE; - - const uno::Sequence<reflection::ParamInfo> aParams = - xFunc->getParameterInfos(); - long nParamCount = aParams.getLength(); - const reflection::ParamInfo* pParArr = aParams.getConstArray(); - for (long nParamPos=0; nParamPos<nParamCount; nParamPos++) - { - if ( pParArr[nParamPos].aMode != reflection::ParamMode_IN ) - bValid = false; - uno::Reference<reflection::XIdlClass> xParClass = - pParArr[nParamPos].aType; - ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); - if ( eArgType == SC_ADDINARG_NONE ) - bValid = false; - else if ( eArgType == SC_ADDINARG_CALLER ) - nCallerPos = nParamPos; - else - ++nVisibleCount; - } - if (bValid) + if ( pParArr[nParamPos].aMode != reflection::ParamMode_IN ) + bValid = false; + uno::Reference<reflection::XIdlClass> xParClass = + pParArr[nParamPos].aType; + ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); + if ( eArgType == SC_ADDINARG_NONE ) + bValid = false; + else if ( eArgType == SC_ADDINARG_CALLER ) + nCallerPos = nParamPos; + else + ++nVisibleCount; + } + if (bValid) + { + std::unique_ptr<ScAddInArgDesc[]> pVisibleArgs; + if ( nVisibleCount > 0 ) { - std::unique_ptr<ScAddInArgDesc[]> pVisibleArgs; - if ( nVisibleCount > 0 ) + ScAddInArgDesc aDesc; + pVisibleArgs.reset(new ScAddInArgDesc[nVisibleCount]); + long nDestPos = 0; + for (const auto& rParam : aParams) { - ScAddInArgDesc aDesc; - pVisibleArgs.reset(new ScAddInArgDesc[nVisibleCount]); - long nDestPos = 0; - for (const auto& rParam : aParams) + uno::Reference<reflection::XIdlClass> xParClass = + rParam.aType; + ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); + if ( eArgType != SC_ADDINARG_CALLER ) { - uno::Reference<reflection::XIdlClass> xParClass = - rParam.aType; - ScAddInArgumentType eArgType = lcl_GetArgType( xParClass ); - if ( eArgType != SC_ADDINARG_CALLER ) + const ScAddInArgDesc* pOldArgDesc = + lcl_FindArgDesc( *pOldData, rParam.aName ); + if ( pOldArgDesc ) { - const ScAddInArgDesc* pOldArgDesc = - lcl_FindArgDesc( *pOldData, rParam.aName ); - if ( pOldArgDesc ) - { - aDesc.aName = pOldArgDesc->aName; - aDesc.aDescription = pOldArgDesc->aDescription; - } - else - aDesc.aName = aDesc.aDescription = "###"; - - bool bOptional = - ( eArgType == SC_ADDINARG_VALUE_OR_ARRAY || - eArgType == SC_ADDINARG_VARARGS ); - - aDesc.eType = eArgType; - aDesc.bOptional = bOptional; - //TODO: initialize aInternalName only from config? - aDesc.aInternalName = rParam.aName; - - pVisibleArgs[nDestPos++] = aDesc; + aDesc.aName = pOldArgDesc->aName; + aDesc.aDescription = pOldArgDesc->aDescription; } + else + aDesc.aName = aDesc.aDescription = "###"; + + bool bOptional = + ( eArgType == SC_ADDINARG_VALUE_OR_ARRAY || + eArgType == SC_ADDINARG_VARARGS ); + + aDesc.eType = eArgType; + aDesc.bOptional = bOptional; + //TODO: initialize aInternalName only from config? + aDesc.aInternalName = rParam.aName; + + pVisibleArgs[nDestPos++] = aDesc; } - OSL_ENSURE( nDestPos==nVisibleCount, "wrong count" ); } + OSL_ENSURE( nDestPos==nVisibleCount, "wrong count" ); + } - pOldData->SetFunction( xFunc, aObject ); - pOldData->SetArguments( nVisibleCount, pVisibleArgs.get() ); - pOldData->SetCallerPos( nCallerPos ); + pOldData->SetFunction( xFunc, aObject ); + pOldData->SetArguments( nVisibleCount, pVisibleArgs.get() ); + pOldData->SetCallerPos( nCallerPos ); - if ( pFunctionList ) - lcl_UpdateFunctionList( *pFunctionList, *pOldData ); - } + if ( pFunctionList ) + lcl_UpdateFunctionList( *pFunctionList, *pOldData ); } } } @@ -1240,32 +1240,32 @@ ScUnoAddInCall::ScUnoAddInCall( ScUnoAddInCollection& rColl, const OUString& rNa { pFuncData = rColl.GetFuncData( rName, true ); // need fully initialized data OSL_ENSURE( pFuncData, "Function Data missing" ); - if ( pFuncData ) - { - long nDescCount = pFuncData->GetArgumentCount(); - const ScAddInArgDesc* pArgs = pFuncData->GetArguments(); + if ( !pFuncData ) + return; - // is aVarArg sequence needed? - if ( nParamCount >= nDescCount && nDescCount > 0 && - pArgs[nDescCount-1].eType == SC_ADDINARG_VARARGS ) - { - long nVarCount = nParamCount - ( nDescCount - 1 ); // size of last argument - aVarArg.realloc( nVarCount ); - bValidCount = true; - } - else if ( nParamCount <= nDescCount ) - { - // all args behind nParamCount must be optional - bValidCount = true; - for (long i=nParamCount; i<nDescCount; i++) - if ( !pArgs[i].bOptional ) - bValidCount = false; - } - // else invalid (too many arguments) + long nDescCount = pFuncData->GetArgumentCount(); + const ScAddInArgDesc* pArgs = pFuncData->GetArguments(); - if ( bValidCount ) - aArgs.realloc( nDescCount ); // sequence must always match function signature + // is aVarArg sequence needed? + if ( nParamCount >= nDescCount && nDescCount > 0 && + pArgs[nDescCount-1].eType == SC_ADDINARG_VARARGS ) + { + long nVarCount = nParamCount - ( nDescCount - 1 ); // size of last argument + aVarArg.realloc( nVarCount ); + bValidCount = true; + } + else if ( nParamCount <= nDescCount ) + { + // all args behind nParamCount must be optional + bValidCount = true; + for (long i=nParamCount; i<nDescCount; i++) + if ( !pArgs[i].bOptional ) + bValidCount = false; } + // else invalid (too many arguments) + + if ( bValidCount ) + aArgs.realloc( nDescCount ); // sequence must always match function signature } ScUnoAddInCall::~ScUnoAddInCall() @@ -1311,27 +1311,27 @@ void ScUnoAddInCall::SetCallerFromObjectShell( const SfxObjectShell* pObjSh ) void ScUnoAddInCall::SetParam( long nPos, const uno::Any& rValue ) { - if ( pFuncData ) + if ( !pFuncData ) + return; + + long nCount = pFuncData->GetArgumentCount(); + const ScAddInArgDesc* pArgs = pFuncData->GetArguments(); + if ( nCount > 0 && nPos >= nCount-1 && pArgs[nCount-1].eType == SC_ADDINARG_VARARGS ) { - long nCount = pFuncData->GetArgumentCount(); - const ScAddInArgDesc* pArgs = pFuncData->GetArguments(); - if ( nCount > 0 && nPos >= nCount-1 && pArgs[nCount-1].eType == SC_ADDINARG_VARARGS ) - { - long nVarPos = nPos-(nCount-1); - if ( nVarPos < aVarArg.getLength() ) - aVarArg.getArray()[nVarPos] = rValue; - else - { - OSL_FAIL("wrong argument number"); - } - } - else if ( nPos < aArgs.getLength() ) - aArgs.getArray()[nPos] = rValue; + long nVarPos = nPos-(nCount-1); + if ( nVarPos < aVarArg.getLength() ) + aVarArg.getArray()[nVarPos] = rValue; else { OSL_FAIL("wrong argument number"); } } + else if ( nPos < aArgs.getLength() ) + aArgs.getArray()[nPos] = rValue; + else + { + OSL_FAIL("wrong argument number"); + } } void ScUnoAddInCall::ExecuteCall() @@ -1389,38 +1389,38 @@ void ScUnoAddInCall::ExecuteCallWithArgs(uno::Sequence<uno::Any>& rCallArgs) aObject = pFuncData->GetObject(); } - if ( xFunction.is() ) - { - uno::Any aAny; - nErrCode = FormulaError::NONE; + if ( !xFunction.is() ) + return; - try - { - aAny = xFunction->invoke( aObject, rCallArgs ); - } - catch(lang::IllegalArgumentException&) - { + uno::Any aAny; + nErrCode = FormulaError::NONE; + + try + { + aAny = xFunction->invoke( aObject, rCallArgs ); + } + catch(lang::IllegalArgumentException&) + { + nErrCode = FormulaError::IllegalArgument; + } + catch(const reflection::InvocationTargetException& rWrapped) + { + if ( rWrapped.TargetException.getValueType().equals( + cppu::UnoType<lang::IllegalArgumentException>::get()) ) nErrCode = FormulaError::IllegalArgument; - } - catch(const reflection::InvocationTargetException& rWrapped) - { - if ( rWrapped.TargetException.getValueType().equals( - cppu::UnoType<lang::IllegalArgumentException>::get()) ) - nErrCode = FormulaError::IllegalArgument; - else if ( rWrapped.TargetException.getValueType().equals( - cppu::UnoType<sheet::NoConvergenceException>::get()) ) - nErrCode = FormulaError::NoConvergence; - else - nErrCode = FormulaError::NoValue; - } - catch(uno::Exception&) - { + else if ( rWrapped.TargetException.getValueType().equals( + cppu::UnoType<sheet::NoConvergenceException>::get()) ) + nErrCode = FormulaError::NoConvergence; + else nErrCode = FormulaError::NoValue; - } - - if (nErrCode == FormulaError::NONE) - SetResult( aAny ); // convert result to Calc types } + catch(uno::Exception&) + { + nErrCode = FormulaError::NoValue; + } + + if (nErrCode == FormulaError::NONE) + SetResult( aAny ); // convert result to Calc types } template <typename T> diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx index 0d75dfe4a816..be7beec97d83 100644 --- a/sc/source/core/tool/address.cxx +++ b/sc/source/core/tool/address.cxx @@ -2156,42 +2156,42 @@ static void lcl_ScRange_Format_XL_Header( OUStringBuffer& rString, const ScRange ScRefFlags nFlags, const ScDocument& rDoc, const ScAddress::Details& rDetails ) { - if( nFlags & ScRefFlags::TAB_3D ) + if( !(nFlags & ScRefFlags::TAB_3D) ) + return; + + OUString aTabName, aDocName; + lcl_Split_DocTab( rDoc, rRange.aStart.Tab(), rDetails, nFlags, aTabName, aDocName ); + switch (rDetails.eConv) { - OUString aTabName, aDocName; - lcl_Split_DocTab( rDoc, rRange.aStart.Tab(), rDetails, nFlags, aTabName, aDocName ); - switch (rDetails.eConv) - { - case formula::FormulaGrammar::CONV_XL_OOX: - if (!aTabName.isEmpty() && aTabName[0] == '\'') + case formula::FormulaGrammar::CONV_XL_OOX: + if (!aTabName.isEmpty() && aTabName[0] == '\'') + { + if (!aDocName.isEmpty()) { - if (!aDocName.isEmpty()) - { - rString.append("'[").append(aDocName).append("]").append(std::u16string_view(aTabName).substr(1)); - } - else - { - rString.append(aTabName); - } - break; + rString.append("'[").append(aDocName).append("]").append(std::u16string_view(aTabName).substr(1)); } - [[fallthrough]]; - default: - if (!aDocName.isEmpty()) + else { - rString.append("[").append(aDocName).append("]"); + rString.append(aTabName); } - rString.append(aTabName); - break; - } - if( nFlags & ScRefFlags::TAB2_3D ) - { - lcl_Split_DocTab( rDoc, rRange.aEnd.Tab(), rDetails, nFlags, aTabName, aDocName ); - rString.append(":"); + break; + } + [[fallthrough]]; + default: + if (!aDocName.isEmpty()) + { + rString.append("[").append(aDocName).append("]"); + } rString.append(aTabName); - } - rString.append("!"); + break; + } + if( nFlags & ScRefFlags::TAB2_3D ) + { + lcl_Split_DocTab( rDoc, rRange.aEnd.Tab(), rDetails, nFlags, aTabName, aDocName ); + rString.append(":"); + rString.append(aTabName); } + rString.append("!"); } // helpers used in ScRange::Format diff --git a/sc/source/core/tool/appoptio.cxx b/sc/source/core/tool/appoptio.cxx index 530a8d9438cb..f66134c0d1c2 100644 --- a/sc/source/core/tool/appoptio.cxx +++ b/sc/source/core/tool/appoptio.cxx @@ -128,18 +128,18 @@ void ScAppOptions::SetLRUFuncList( const sal_uInt16* pList, const sal_uInt16 nCo static void lcl_SetLastFunctions( ScAppOptions& rOpt, const Any& rValue ) { Sequence<sal_Int32> aSeq; - if ( rValue >>= aSeq ) + if ( !(rValue >>= aSeq) ) + return; + + sal_Int32 nCount = aSeq.getLength(); + if ( nCount < SAL_MAX_UINT16 ) { - sal_Int32 nCount = aSeq.getLength(); - if ( nCount < SAL_MAX_UINT16 ) - { - const sal_Int32* pArray = aSeq.getConstArray(); - std::unique_ptr<sal_uInt16[]> pUShorts(new sal_uInt16[nCount]); - for (sal_Int32 i=0; i<nCount; i++) - pUShorts[i] = static_cast<sal_uInt16>(pArray[i]); + const sal_Int32* pArray = aSeq.getConstArray(); + std::unique_ptr<sal_uInt16[]> pUShorts(new sal_uInt16[nCount]); + for (sal_Int32 i=0; i<nCount; i++) + pUShorts[i] = static_cast<sal_uInt16>(pArray[i]); - rOpt.SetLRUFuncList( pUShorts.get(), sal::static_int_cast<sal_uInt16>(nCount) ); - } + rOpt.SetLRUFuncList( pUShorts.get(), sal::static_int_cast<sal_uInt16>(nCount) ); } } @@ -162,29 +162,29 @@ static void lcl_GetLastFunctions( Any& rDest, const ScAppOptions& rOpt ) static void lcl_SetSortList( const Any& rValue ) { Sequence<OUString> aSeq; - if ( rValue >>= aSeq ) - { - long nCount = aSeq.getLength(); - const OUString* pArray = aSeq.getConstArray(); - ScUserList aList; + if ( !(rValue >>= aSeq) ) + return; - // if setting is "default", keep default values from ScUserList ctor - //TODO: mark "default" in a safe way - bool bDefault = ( nCount == 1 && pArray[0] == "NULL" ); + long nCount = aSeq.getLength(); + const OUString* pArray = aSeq.getConstArray(); + ScUserList aList; - if (!bDefault) - { - aList.clear(); + // if setting is "default", keep default values from ScUserList ctor + //TODO: mark "default" in a safe way + bool bDefault = ( nCount == 1 && pArray[0] == "NULL" ); - for (const auto& rStr : std::as_const(aSeq)) - { - ScUserListData* pNew = new ScUserListData( rStr ); - aList.push_back(pNew); - } - } + if (!bDefault) + { + aList.clear(); - ScGlobal::SetUserList( &aList ); + for (const auto& rStr : std::as_const(aSeq)) + { + ScUserListData* pNew = new ScUserListData( rStr ); + aList.push_back(pNew); + } } + + ScGlobal::SetUserList( &aList ); } static void lcl_GetSortList( Any& rDest ) diff --git a/sc/source/core/tool/callform.cxx b/sc/source/core/tool/callform.cxx index 3f5930925724..cbf8ae73a69f 100644 --- a/sc/source/core/tool/callform.cxx +++ b/sc/source/core/tool/callform.cxx @@ -249,74 +249,74 @@ void LegacyFuncData::Call(void** ppParam) const #else osl::Module* pLib = pModuleData->GetInstance(); oslGenericFunction fProc = pLib->getFunctionSymbol(aFuncName); - if (fProc != nullptr) + if (fProc == nullptr) + return; + + switch (nParamCount) { - switch (nParamCount) - { - case 1 : - (*reinterpret_cast<ExFuncPtr1>(fProc))(ppParam[0]); - break; - case 2 : - (*reinterpret_cast<ExFuncPtr2>(fProc))(ppParam[0], ppParam[1]); - break; - case 3 : - (*reinterpret_cast<ExFuncPtr3>(fProc))(ppParam[0], ppParam[1], ppParam[2]); - break; - case 4 : - (*reinterpret_cast<ExFuncPtr4>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3]); - break; - case 5 : - (*reinterpret_cast<ExFuncPtr5>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4]); - break; - case 6 : - (*reinterpret_cast<ExFuncPtr6>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5]); - break; - case 7 : - (*reinterpret_cast<ExFuncPtr7>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6]); - break; - case 8 : - (*reinterpret_cast<ExFuncPtr8>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7]); - break; - case 9 : - (*reinterpret_cast<ExFuncPtr9>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8]); - break; - case 10 : - (*reinterpret_cast<ExFuncPtr10>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9]); - break; - case 11 : - (*reinterpret_cast<ExFuncPtr11>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10]); - break; - case 12: - (*reinterpret_cast<ExFuncPtr12>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11]); - break; - case 13: - (*reinterpret_cast<ExFuncPtr13>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], - ppParam[12]); - break; - case 14 : - (*reinterpret_cast<ExFuncPtr14>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], - ppParam[12], ppParam[13]); - break; - case 15 : - (*reinterpret_cast<ExFuncPtr15>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], - ppParam[12], ppParam[13], ppParam[14]); - break; - case 16 : - (*reinterpret_cast<ExFuncPtr16>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], - ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], - ppParam[12], ppParam[13], ppParam[14], ppParam[15]); - break; - default : break; - } + case 1 : + (*reinterpret_cast<ExFuncPtr1>(fProc))(ppParam[0]); + break; + case 2 : + (*reinterpret_cast<ExFuncPtr2>(fProc))(ppParam[0], ppParam[1]); + break; + case 3 : + (*reinterpret_cast<ExFuncPtr3>(fProc))(ppParam[0], ppParam[1], ppParam[2]); + break; + case 4 : + (*reinterpret_cast<ExFuncPtr4>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3]); + break; + case 5 : + (*reinterpret_cast<ExFuncPtr5>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4]); + break; + case 6 : + (*reinterpret_cast<ExFuncPtr6>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5]); + break; + case 7 : + (*reinterpret_cast<ExFuncPtr7>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6]); + break; + case 8 : + (*reinterpret_cast<ExFuncPtr8>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7]); + break; + case 9 : + (*reinterpret_cast<ExFuncPtr9>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8]); + break; + case 10 : + (*reinterpret_cast<ExFuncPtr10>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9]); + break; + case 11 : + (*reinterpret_cast<ExFuncPtr11>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10]); + break; + case 12: + (*reinterpret_cast<ExFuncPtr12>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11]); + break; + case 13: + (*reinterpret_cast<ExFuncPtr13>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], + ppParam[12]); + break; + case 14 : + (*reinterpret_cast<ExFuncPtr14>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], + ppParam[12], ppParam[13]); + break; + case 15 : + (*reinterpret_cast<ExFuncPtr15>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], + ppParam[12], ppParam[13], ppParam[14]); + break; + case 16 : + (*reinterpret_cast<ExFuncPtr16>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5], + ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11], + ppParam[12], ppParam[13], ppParam[14], ppParam[15]); + break; + default : break; } #endif } diff --git a/sc/source/core/tool/charthelper.cxx b/sc/source/core/tool/charthelper.cxx index 6acca9ce3666..cb31f2c7468f 100644 --- a/sc/source/core/tool/charthelper.cxx +++ b/sc/source/core/tool/charthelper.cxx @@ -118,32 +118,32 @@ void ScChartHelper::AdjustRangesOfChartsOnDestinationPage( const ScDocument* pSr return; SdrPage* pDestPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nDestTab)); - if( pDestPage ) + if( !pDestPage ) + return; + + SdrObjListIter aIter( pDestPage, SdrIterMode::Flat ); + SdrObject* pObject = aIter.Next(); + while( pObject ) { - SdrObjListIter aIter( pDestPage, SdrIterMode::Flat ); - SdrObject* pObject = aIter.Next(); - while( pObject ) + if( pObject->GetObjIdentifier() == OBJ_OLE2 && static_cast<SdrOle2Obj*>(pObject)->IsChart() ) { - if( pObject->GetObjIdentifier() == OBJ_OLE2 && static_cast<SdrOle2Obj*>(pObject)->IsChart() ) + OUString aChartName = static_cast<SdrOle2Obj*>(pObject)->GetPersistName(); + + Reference< chart2::XChartDocument > xChartDoc( pDestDoc->GetChartByName( aChartName ) ); + Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); + if( xChartDoc.is() && xReceiver.is() && !xChartDoc->hasInternalDataProvider() ) { - OUString aChartName = static_cast<SdrOle2Obj*>(pObject)->GetPersistName(); + ::std::vector< ScRangeList > aRangesVector; + pDestDoc->GetChartRanges( aChartName, aRangesVector, pSrcDoc ); - Reference< chart2::XChartDocument > xChartDoc( pDestDoc->GetChartByName( aChartName ) ); - Reference< chart2::data::XDataReceiver > xReceiver( xChartDoc, uno::UNO_QUERY ); - if( xChartDoc.is() && xReceiver.is() && !xChartDoc->hasInternalDataProvider() ) + for( ScRangeList& rScRangeList : aRangesVector ) { - ::std::vector< ScRangeList > aRangesVector; - pDestDoc->GetChartRanges( aChartName, aRangesVector, pSrcDoc ); - - for( ScRangeList& rScRangeList : aRangesVector ) - { - lcl_AdjustRanges( rScRangeList, nSrcTab, nDestTab, pDestDoc->GetTableCount() ); - } - pDestDoc->SetChartRanges( aChartName, aRangesVector ); + lcl_AdjustRanges( rScRangeList, nSrcTab, nDestTab, pDestDoc->GetTableCount() ); } + pDestDoc->SetChartRanges( aChartName, aRangesVector ); } - pObject = aIter.Next(); } + pObject = aIter.Next(); } } @@ -156,21 +156,21 @@ void ScChartHelper::UpdateChartsOnDestinationPage( ScDocument* pDestDoc, const S return; SdrPage* pDestPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nDestTab)); - if( pDestPage ) + if( !pDestPage ) + return; + + SdrObjListIter aIter( pDestPage, SdrIterMode::Flat ); + SdrObject* pObject = aIter.Next(); + while( pObject ) { - SdrObjListIter aIter( pDestPage, SdrIterMode::Flat ); - SdrObject* pObject = aIter.Next(); - while( pObject ) + if( pObject->GetObjIdentifier() == OBJ_OLE2 && static_cast<SdrOle2Obj*>(pObject)->IsChart() ) { - if( pObject->GetObjIdentifier() == OBJ_OLE2 && static_cast<SdrOle2Obj*>(pObject)->IsChart() ) - { - OUString aChartName = static_cast<SdrOle2Obj*>(pObject)->GetPersistName(); - Reference< chart2::XChartDocument > xChartDoc( pDestDoc->GetChartByName( aChartName ) ); - Reference< util::XModifiable > xModif(xChartDoc, uno::UNO_QUERY_THROW); - xModif->setModified( true); - } - pObject = aIter.Next(); + OUString aChartName = static_cast<SdrOle2Obj*>(pObject)->GetPersistName(); + Reference< chart2::XChartDocument > xChartDoc( pDestDoc->GetChartByName( aChartName ) ); + Reference< util::XModifiable > xModif(xChartDoc, uno::UNO_QUERY_THROW); + xModif->setModified( true); } + pObject = aIter.Next(); } } @@ -283,44 +283,44 @@ void ScChartHelper::SetChartRanges( const uno::Reference< chart2::XChartDocument void ScChartHelper::AddRangesIfProtectedChart( ScRangeListVector& rRangesVector, const ScDocument* pDocument, SdrObject* pObject ) { - if ( pDocument && pObject && ( pObject->GetObjIdentifier() == OBJ_OLE2 ) ) + if ( !(pDocument && pObject && ( pObject->GetObjIdentifier() == OBJ_OLE2 )) ) + return; + + SdrOle2Obj* pSdrOle2Obj = dynamic_cast< SdrOle2Obj* >( pObject ); + if ( !(pSdrOle2Obj && pSdrOle2Obj->IsChart()) ) + return; + + const uno::Reference< embed::XEmbeddedObject >& xEmbeddedObj = pSdrOle2Obj->GetObjRef(); + if ( !xEmbeddedObj.is() ) + return; + + bool bDisableDataTableDialog = false; + sal_Int32 nOldState = xEmbeddedObj->getCurrentState(); + svt::EmbeddedObjectRef::TryRunningState( xEmbeddedObj ); + uno::Reference< beans::XPropertySet > xProps( xEmbeddedObj->getComponent(), uno::UNO_QUERY ); + if ( xProps.is() && + ( xProps->getPropertyValue("DisableDataTableDialog") >>= bDisableDataTableDialog ) && + bDisableDataTableDialog ) { - SdrOle2Obj* pSdrOle2Obj = dynamic_cast< SdrOle2Obj* >( pObject ); - if ( pSdrOle2Obj && pSdrOle2Obj->IsChart() ) + ScChartListenerCollection* pCollection = pDocument->GetChartListenerCollection(); + if (pCollection) { - const uno::Reference< embed::XEmbeddedObject >& xEmbeddedObj = pSdrOle2Obj->GetObjRef(); - if ( xEmbeddedObj.is() ) + const OUString& aChartName = pSdrOle2Obj->GetPersistName(); + const ScChartListener* pListener = pCollection->findByName(aChartName); + if (pListener) { - bool bDisableDataTableDialog = false; - sal_Int32 nOldState = xEmbeddedObj->getCurrentState(); - svt::EmbeddedObjectRef::TryRunningState( xEmbeddedObj ); - uno::Reference< beans::XPropertySet > xProps( xEmbeddedObj->getComponent(), uno::UNO_QUERY ); - if ( xProps.is() && - ( xProps->getPropertyValue("DisableDataTableDialog") >>= bDisableDataTableDialog ) && - bDisableDataTableDialog ) - { - ScChartListenerCollection* pCollection = pDocument->GetChartListenerCollection(); - if (pCollection) - { - const OUString& aChartName = pSdrOle2Obj->GetPersistName(); - const ScChartListener* pListener = pCollection->findByName(aChartName); - if (pListener) - { - const ScRangeListRef& rRangeList = pListener->GetRangeList(); - if ( rRangeList.is() ) - { - rRangesVector.push_back( *rRangeList ); - } - } - } - } - if ( xEmbeddedObj->getCurrentState() != nOldState ) + const ScRangeListRef& rRangeList = pListener->GetRangeList(); + if ( rRangeList.is() ) { - xEmbeddedObj->changeState( nOldState ); + rRangesVector.push_back( *rRangeList ); } } } } + if ( xEmbeddedObj->getCurrentState() != nOldState ) + { + xEmbeddedObj->changeState( nOldState ); + } } void ScChartHelper::FillProtectedChartRangesVector( ScRangeListVector& rRangesVector, const ScDocument* pDocument, const SdrPage* pPage ) @@ -339,95 +339,95 @@ void ScChartHelper::FillProtectedChartRangesVector( ScRangeListVector& rRangesVe void ScChartHelper::GetChartNames( ::std::vector< OUString >& rChartNames, const SdrPage* pPage ) { - if ( pPage ) + if ( !pPage ) + return; + + SdrObjListIter aIter( pPage, SdrIterMode::DeepNoGroups ); + SdrObject* pObject = aIter.Next(); + while ( pObject ) { - SdrObjListIter aIter( pPage, SdrIterMode::DeepNoGroups ); - SdrObject* pObject = aIter.Next(); - while ( pObject ) + if ( pObject->GetObjIdentifier() == OBJ_OLE2 ) { - if ( pObject->GetObjIdentifier() == OBJ_OLE2 ) + SdrOle2Obj* pSdrOle2Obj = dynamic_cast< SdrOle2Obj* >( pObject ); + if ( pSdrOle2Obj && pSdrOle2Obj->IsChart() ) { - SdrOle2Obj* pSdrOle2Obj = dynamic_cast< SdrOle2Obj* >( pObject ); - if ( pSdrOle2Obj && pSdrOle2Obj->IsChart() ) - { - rChartNames.push_back( pSdrOle2Obj->GetPersistName() ); - } + rChartNames.push_back( pSdrOle2Obj->GetPersistName() ); } - pObject = aIter.Next(); } + pObject = aIter.Next(); } } void ScChartHelper::CreateProtectedChartListenersAndNotify( ScDocument* pDoc, const SdrPage* pPage, ScModelObj* pModelObj, SCTAB nTab, const ScRangeListVector& rRangesVector, const ::std::vector< OUString >& rExcludedChartNames, bool bSameDoc ) { - if ( pDoc && pPage && pModelObj ) + if ( !(pDoc && pPage && pModelObj) ) + return; + + size_t nRangeListCount = rRangesVector.size(); + size_t nRangeList = 0; + SdrObjListIter aIter( pPage, SdrIterMode::DeepNoGroups ); + SdrObject* pObject = aIter.Next(); + while ( pObject ) { - size_t nRangeListCount = rRangesVector.size(); - size_t nRangeList = 0; - SdrObjListIter aIter( pPage, SdrIterMode::DeepNoGroups ); - SdrObject* pObject = aIter.Next(); - while ( pObject ) + if ( pObject->GetObjIdentifier() == OBJ_OLE2 ) { - if ( pObject->GetObjIdentifier() == OBJ_OLE2 ) + SdrOle2Obj* pSdrOle2Obj = dynamic_cast< SdrOle2Obj* >( pObject ); + if ( pSdrOle2Obj && pSdrOle2Obj->IsChart() ) { - SdrOle2Obj* pSdrOle2Obj = dynamic_cast< SdrOle2Obj* >( pObject ); - if ( pSdrOle2Obj && pSdrOle2Obj->IsChart() ) + const OUString& aChartName = pSdrOle2Obj->GetPersistName(); + ::std::vector< OUString >::const_iterator aEnd = rExcludedChartNames.end(); + ::std::vector< OUString >::const_iterator aFound = ::std::find( rExcludedChartNames.begin(), aEnd, aChartName ); + if ( aFound == aEnd ) { - const OUString& aChartName = pSdrOle2Obj->GetPersistName(); - ::std::vector< OUString >::const_iterator aEnd = rExcludedChartNames.end(); - ::std::vector< OUString >::const_iterator aFound = ::std::find( rExcludedChartNames.begin(), aEnd, aChartName ); - if ( aFound == aEnd ) + const uno::Reference< embed::XEmbeddedObject >& xEmbeddedObj = pSdrOle2Obj->GetObjRef(); + if ( xEmbeddedObj.is() && ( nRangeList < nRangeListCount ) ) { - const uno::Reference< embed::XEmbeddedObject >& xEmbeddedObj = pSdrOle2Obj->GetObjRef(); - if ( xEmbeddedObj.is() && ( nRangeList < nRangeListCount ) ) + bool bDisableDataTableDialog = false; + svt::EmbeddedObjectRef::TryRunningState( xEmbeddedObj ); + uno::Reference< beans::XPropertySet > xProps( xEmbeddedObj->getComponent(), uno::UNO_QUERY ); + if ( xProps.is() && + ( xProps->getPropertyValue("DisableDataTableDialog") >>= bDisableDataTableDialog ) && + bDisableDataTableDialog ) { - bool bDisableDataTableDialog = false; - svt::EmbeddedObjectRef::TryRunningState( xEmbeddedObj ); - uno::Reference< beans::XPropertySet > xProps( xEmbeddedObj->getComponent(), uno::UNO_QUERY ); - if ( xProps.is() && - ( xProps->getPropertyValue("DisableDataTableDialog") >>= bDisableDataTableDialog ) && - bDisableDataTableDialog ) + if ( bSameDoc ) { - if ( bSameDoc ) + ScChartListenerCollection* pCollection = pDoc->GetChartListenerCollection(); + if (pCollection && !pCollection->findByName(aChartName)) { - ScChartListenerCollection* pCollection = pDoc->GetChartListenerCollection(); - if (pCollection && !pCollection->findByName(aChartName)) - { - ScRangeList aRangeList( rRangesVector[ nRangeList++ ] ); - ScRangeListRef rRangeList( new ScRangeList( aRangeList ) ); - ScChartListener* pChartListener = new ScChartListener( aChartName, pDoc, rRangeList ); - pCollection->insert( pChartListener ); - pChartListener->StartListeningTo(); - } - } - else - { - xProps->setPropertyValue("DisableDataTableDialog", - uno::makeAny( false ) ); - xProps->setPropertyValue("DisableComplexChartTypes", - uno::makeAny( false ) ); + ScRangeList aRangeList( rRangesVector[ nRangeList++ ] ); + ScRangeListRef rRangeList( new ScRangeList( aRangeList ) ); + ScChartListener* pChartListener = new ScChartListener( aChartName, pDoc, rRangeList ); + pCollection->insert( pChartListener ); + pChartListener->StartListeningTo(); } } + else + { + xProps->setPropertyValue("DisableDataTableDialog", + uno::makeAny( false ) ); + xProps->setPropertyValue("DisableComplexChartTypes", + uno::makeAny( false ) ); + } } + } - if (pModelObj->HasChangesListeners()) - { - tools::Rectangle aRectangle = pSdrOle2Obj->GetSnapRect(); - ScRange aRange( pDoc->GetRange( nTab, aRectangle ) ); - ScRangeList aChangeRanges( aRange ); + if (pModelObj->HasChangesListeners()) + { + tools::Rectangle aRectangle = pSdrOle2Obj->GetSnapRect(); + ScRange aRange( pDoc->GetRange( nTab, aRectangle ) ); + ScRangeList aChangeRanges( aRange ); - uno::Sequence< beans::PropertyValue > aProperties( 1 ); - aProperties[ 0 ].Name = "Name"; - aProperties[ 0 ].Value <<= aChartName; + uno::Sequence< beans::PropertyValue > aProperties( 1 ); + aProperties[ 0 ].Name = "Name"; + aProperties[ 0 ].Value <<= aChartName; - pModelObj->NotifyChanges( "insert-chart", aChangeRanges, aProperties ); - } + pModelObj->NotifyChanges( "insert-chart", aChangeRanges, aProperties ); } } } - pObject = aIter.Next(); } + pObject = aIter.Next(); } } diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx index ab1714d3683e..4f12df13ec42 100644 --- a/sc/source/core/tool/chgtrack.cxx +++ b/sc/source/core/tool/chgtrack.cxx @@ -478,27 +478,27 @@ void ScChangeAction::GetDescription( return; } - if (pReject->HasDependent()) - { - ScChangeActionMap aMap; - pCT->GetDependents( pReject, aMap, false, true ); - ScChangeActionMap::iterator itChangeAction = std::find_if(aMap.begin(), aMap.end(), - [&pReject](const ScChangeActionMap::value_type& rEntry) { - return rEntry.second->GetType() == SC_CAT_MOVE || pReject->IsDeleteType(); }); - if (itChangeAction != aMap.end()) - { - if( itChangeAction->second->GetType() == SC_CAT_MOVE) - aBuf.append( - ScResId(STR_CHANGED_MOVE_REJECTION_WARNING)); - else - aBuf.append( - ScResId(STR_CHANGED_DELETE_REJECTION_WARNING)); + if (!pReject->HasDependent()) + return; - aBuf.append(' '); - rStr = aBuf.makeStringAndClear(); - return; - } - } + ScChangeActionMap aMap; + pCT->GetDependents( pReject, aMap, false, true ); + ScChangeActionMap::iterator itChangeAction = std::find_if(aMap.begin(), aMap.end(), + [&pReject](const ScChangeActionMap::value_type& rEntry) { + return rEntry.second->GetType() == SC_CAT_MOVE || pReject->IsDeleteType(); }); + if (itChangeAction == aMap.end()) + return; + + if( itChangeAction->second->GetType() == SC_CAT_MOVE) + aBuf.append( + ScResId(STR_CHANGED_MOVE_REJECTION_WARNING)); + else + aBuf.append( + ScResId(STR_CHANGED_DELETE_REJECTION_WARNING)); + + aBuf.append(' '); + rStr = aBuf.makeStringAndClear(); + return; } OUString ScChangeAction::GetRefString( @@ -711,19 +711,19 @@ void ScChangeActionIns::GetDescription( OUString aRsc = ScResId(STR_CHANGED_INSERT); sal_Int32 nPos = aRsc.indexOf("#1"); - if (nPos >= 0) - { - // Construct a range string to replace '#1' first. - OUStringBuffer aBuf(ScResId(pWhatId)); - aBuf.append(' '); - aBuf.append(GetRefString(GetBigRange(), pDoc)); - OUString aRangeStr = aBuf.makeStringAndClear(); + if (nPos < 0) + return; - aRsc = aRsc.replaceAt(nPos, 2, aRangeStr); // replace '#1' with the range string. + // Construct a range string to replace '#1' first. + OUStringBuffer aBuf(ScResId(pWhatId)); + aBuf.append(' '); + aBuf.append(GetRefString(GetBigRange(), pDoc)); + OUString aRangeStr = aBuf.makeStringAndClear(); - aBuf.append(rStr).append(aRsc); - rStr = aBuf.makeStringAndClear(); - } + aRsc = aRsc.replaceAt(nPos, 2, aRangeStr); // replace '#1' with the range string. + + aBuf.append(rStr).append(aRsc); + rStr = aBuf.makeStringAndClear(); } bool ScChangeActionIns::IsEndOfList() const @@ -959,19 +959,19 @@ void ScChangeActionDel::GetDescription( OUString aRsc = ScResId(STR_CHANGED_DELETE); sal_Int32 nPos = aRsc.indexOf("#1"); - if (nPos >= 0) - { - // Build a string to replace with. - OUStringBuffer aBuf; - aBuf.append(ScResId(pWhatId)); - aBuf.append(' '); - aBuf.append(GetRefString(aTmpRange, pDoc)); - OUString aRangeStr = aBuf.makeStringAndClear(); - aRsc = aRsc.replaceAt(nPos, 2, aRangeStr); // replace '#1' with the string. + if (nPos < 0) + return; - aBuf.append(rStr).append(aRsc); - rStr = aBuf.makeStringAndClear(); // append to the original. - } + // Build a string to replace with. + OUStringBuffer aBuf; + aBuf.append(ScResId(pWhatId)); + aBuf.append(' '); + aBuf.append(GetRefString(aTmpRange, pDoc)); + OUString aRangeStr = aBuf.makeStringAndClear(); + aRsc = aRsc.replaceAt(nPos, 2, aRangeStr); // replace '#1' with the string. + + aBuf.append(rStr).append(aRsc); + rStr = aBuf.makeStringAndClear(); // append to the original. } bool ScChangeActionDel::Reject( ScDocument* pDoc ) @@ -1095,35 +1095,35 @@ void ScChangeActionDel::UndoCutOffMoves() void ScChangeActionDel::UndoCutOffInsert() { //Restore cut off Insert - if ( pCutOff ) + if ( !pCutOff ) + return; + + switch ( pCutOff->GetType() ) { - switch ( pCutOff->GetType() ) + case SC_CAT_INSERT_COLS : + if ( nCutOff < 0 ) + pCutOff->GetBigRange().aEnd.IncCol( -nCutOff ); + else + pCutOff->GetBigRange().aStart.IncCol( -nCutOff ); + break; + case SC_CAT_INSERT_ROWS : + if ( nCutOff < 0 ) + pCutOff->GetBigRange().aEnd.IncRow( -nCutOff ); + else + pCutOff->GetBigRange().aStart.IncRow( -nCutOff ); + break; + case SC_CAT_INSERT_TABS : + if ( nCutOff < 0 ) + pCutOff->GetBigRange().aEnd.IncTab( -nCutOff ); + else + pCutOff->GetBigRange().aStart.IncTab( -nCutOff ); + break; + default: { - case SC_CAT_INSERT_COLS : - if ( nCutOff < 0 ) - pCutOff->GetBigRange().aEnd.IncCol( -nCutOff ); - else - pCutOff->GetBigRange().aStart.IncCol( -nCutOff ); - break; - case SC_CAT_INSERT_ROWS : - if ( nCutOff < 0 ) - pCutOff->GetBigRange().aEnd.IncRow( -nCutOff ); - else - pCutOff->GetBigRange().aStart.IncRow( -nCutOff ); - break; - case SC_CAT_INSERT_TABS : - if ( nCutOff < 0 ) - pCutOff->GetBigRange().aEnd.IncTab( -nCutOff ); - else - pCutOff->GetBigRange().aStart.IncTab( -nCutOff ); - break; - default: - { - // added to avoid warnings - } + // added to avoid warnings } - SetCutOffInsert( nullptr, 0 ); } + SetCutOffInsert( nullptr, 0 ); } // ScChangeActionMove @@ -1866,21 +1866,21 @@ static void lcl_InvalidateReference( const ScDocument* pDoc, formula::FormulaTok { rRef1.SetTabDeleted( true ); } - if ( rTok.GetType() == formula::svDoubleRef ) + if ( rTok.GetType() != formula::svDoubleRef ) + return; + + ScSingleRefData& rRef2 = rTok.GetDoubleRef()->Ref2; + if ( rPos.Col() < 0 || pDoc->MaxCol() < rPos.Col() ) { - ScSingleRefData& rRef2 = rTok.GetDoubleRef()->Ref2; - if ( rPos.Col() < 0 || pDoc->MaxCol() < rPos.Col() ) - { - rRef2.SetColDeleted( true ); - } - if ( rPos.Row() < 0 || pDoc->MaxRow() < rPos.Row() ) - { - rRef2.SetRowDeleted( true ); - } - if ( rPos.Tab() < 0 || MAXTAB < rPos.Tab() ) - { - rRef2.SetTabDeleted( true ); - } + rRef2.SetColDeleted( true ); + } + if ( rPos.Row() < 0 || pDoc->MaxRow() < rPos.Row() ) + { + rRef2.SetRowDeleted( true ); + } + if ( rPos.Tab() < 0 || MAXTAB < rPos.Tab() ) + { + rRef2.SetTabDeleted( true ); } } @@ -1902,111 +1902,113 @@ void ScChangeActionContent::UpdateReference( const ScChangeTrack* pTrack, bool bOldFormula = maOldCell.meType == CELLTYPE_FORMULA; bool bNewFormula = maNewCell.meType == CELLTYPE_FORMULA; - if ( bOldFormula || bNewFormula ) - { // Adjust UpdateReference via ScFormulaCell (there) - if ( pTrack->IsInDelete() ) - { - const ScRange& rDelRange = pTrack->GetInDeleteRange(); - if ( nDx > 0 ) - nDx = rDelRange.aEnd.Col() - rDelRange.aStart.Col() + 1; - else if ( nDx < 0 ) - nDx = -(rDelRange.aEnd.Col() - rDelRange.aStart.Col() + 1); - if ( nDy > 0 ) - nDy = rDelRange.aEnd.Row() - rDelRange.aStart.Row() + 1; - else if ( nDy < 0 ) - nDy = -(rDelRange.aEnd.Row() - rDelRange.aStart.Row() + 1); - if ( nDz > 0 ) - nDz = rDelRange.aEnd.Tab() - rDelRange.aStart.Tab() + 1; - else if ( nDz < 0 ) - nDz = -(rDelRange.aEnd.Tab() - rDelRange.aStart.Tab() + 1); - } - ScBigRange aTmpRange( rRange ); - switch ( eMode ) - { - case URM_INSDEL : - if ( nDx < 0 || nDy < 0 || nDz < 0 ) - { // Delete starts there after removed range - // Position is changed there - if ( nDx ) - aTmpRange.aStart.IncCol( -nDx ); - if ( nDy ) - aTmpRange.aStart.IncRow( -nDy ); - if ( nDz ) - aTmpRange.aStart.IncTab( -nDz ); - } - break; - case URM_MOVE : - // Move is Source here and Target there - // Position needs to be adjusted before that - if ( bOldFormula ) - maOldCell.mpFormula->aPos = aBigRange.aStart.MakeAddress(); - if ( bNewFormula ) - maNewCell.mpFormula->aPos = aBigRange.aStart.MakeAddress(); + if ( !(bOldFormula || bNewFormula) ) + return; + +// Adjust UpdateReference via ScFormulaCell (there) + if ( pTrack->IsInDelete() ) + { + const ScRange& rDelRange = pTrack->GetInDeleteRange(); + if ( nDx > 0 ) + nDx = rDelRange.aEnd.Col() - rDelRange.aStart.Col() + 1; + else if ( nDx < 0 ) + nDx = -(rDelRange.aEnd.Col() - rDelRange.aStart.Col() + 1); + if ( nDy > 0 ) + nDy = rDelRange.aEnd.Row() - rDelRange.aStart.Row() + 1; + else if ( nDy < 0 ) + nDy = -(rDelRange.aEnd.Row() - rDelRange.aStart.Row() + 1); + if ( nDz > 0 ) + nDz = rDelRange.aEnd.Tab() - rDelRange.aStart.Tab() + 1; + else if ( nDz < 0 ) + nDz = -(rDelRange.aEnd.Tab() - rDelRange.aStart.Tab() + 1); + } + ScBigRange aTmpRange( rRange ); + switch ( eMode ) + { + case URM_INSDEL : + if ( nDx < 0 || nDy < 0 || nDz < 0 ) + { // Delete starts there after removed range + // Position is changed there if ( nDx ) - { - aTmpRange.aStart.IncCol( nDx ); - aTmpRange.aEnd.IncCol( nDx ); - } + aTmpRange.aStart.IncCol( -nDx ); if ( nDy ) - { - aTmpRange.aStart.IncRow( nDy ); - aTmpRange.aEnd.IncRow( nDy ); - } + aTmpRange.aStart.IncRow( -nDy ); if ( nDz ) - { - aTmpRange.aStart.IncTab( nDz ); - aTmpRange.aEnd.IncTab( nDz ); - } - break; - default: - { - // added to avoid warnings + aTmpRange.aStart.IncTab( -nDz ); } - } - ScRange aRange( aTmpRange.MakeRange() ); - - sc::RefUpdateContext aRefCxt(*pTrack->GetDocument()); - aRefCxt.meMode = eMode; - aRefCxt.maRange = aRange; - aRefCxt.mnColDelta = nDx; - aRefCxt.mnRowDelta = nDy; - aRefCxt.mnTabDelta = nDz; - - if ( bOldFormula ) - maOldCell.mpFormula->UpdateReference(aRefCxt); - if ( bNewFormula ) - maNewCell.mpFormula->UpdateReference(aRefCxt); - - if ( !aBigRange.aStart.IsValid( pTrack->GetDocument() ) ) - { //FIXME: - // UpdateReference cannot handle positions outside of the Document. - // Therefore set everything to #REF! - //TODO: Remove the need for this hack! This means big changes to ScAddress etc.! - const ScBigAddress& rPos = aBigRange.aStart; + break; + case URM_MOVE : + // Move is Source here and Target there + // Position needs to be adjusted before that if ( bOldFormula ) + maOldCell.mpFormula->aPos = aBigRange.aStart.MakeAddress(); + if ( bNewFormula ) + maNewCell.mpFormula->aPos = aBigRange.aStart.MakeAddress(); + if ( nDx ) { - formula::FormulaToken* t; - ScTokenArray* pArr = maOldCell.mpFormula->GetCode(); - formula::FormulaTokenArrayPlainIterator aIter(*pArr); - while ( ( t = aIter.GetNextReference() ) != nullptr ) - lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); - aIter.Reset(); - while ( ( t = aIter.GetNextReferenceRPN() ) != nullptr ) - lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); + aTmpRange.aStart.IncCol( nDx ); + aTmpRange.aEnd.IncCol( nDx ); } - if ( bNewFormula ) + if ( nDy ) + { + aTmpRange.aStart.IncRow( nDy ); + aTmpRange.aEnd.IncRow( nDy ); + } + if ( nDz ) { - formula::FormulaToken* t; - ScTokenArray* pArr = maNewCell.mpFormula->GetCode(); - formula::FormulaTokenArrayPlainIterator aIter(*pArr); - while ( ( t = aIter.GetNextReference() ) != nullptr ) - lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); - aIter.Reset(); - while ( ( t = aIter.GetNextReferenceRPN() ) != nullptr ) - lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); + aTmpRange.aStart.IncTab( nDz ); + aTmpRange.aEnd.IncTab( nDz ); } + break; + default: + { + // added to avoid warnings } } + ScRange aRange( aTmpRange.MakeRange() ); + + sc::RefUpdateContext aRefCxt(*pTrack->GetDocument()); + aRefCxt.meMode = eMode; + aRefCxt.maRange = aRange; + aRefCxt.mnColDelta = nDx; + aRefCxt.mnRowDelta = nDy; + aRefCxt.mnTabDelta = nDz; + + if ( bOldFormula ) + maOldCell.mpFormula->UpdateReference(aRefCxt); + if ( bNewFormula ) + maNewCell.mpFormula->UpdateReference(aRefCxt); + + if ( aBigRange.aStart.IsValid( pTrack->GetDocument() ) ) + return; + +//FIXME: + // UpdateReference cannot handle positions outside of the Document. + // Therefore set everything to #REF! + //TODO: Remove the need for this hack! This means big changes to ScAddress etc.! + const ScBigAddress& rPos = aBigRange.aStart; + if ( bOldFormula ) + { + formula::FormulaToken* t; + ScTokenArray* pArr = maOldCell.mpFormula->GetCode(); + formula::FormulaTokenArrayPlainIterator aIter(*pArr); + while ( ( t = aIter.GetNextReference() ) != nullptr ) + lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); + aIter.Reset(); + while ( ( t = aIter.GetNextReferenceRPN() ) != nullptr ) + lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); + } + if ( bNewFormula ) + { + formula::FormulaToken* t; + ScTokenArray* pArr = maNewCell.mpFormula->GetCode(); + formula::FormulaTokenArrayPlainIterator aIter(*pArr); + while ( ( t = aIter.GetNextReference() ) != nullptr ) + lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); + aIter.Reset(); + while ( ( t = aIter.GetNextReferenceRPN() ) != nullptr ) + lcl_InvalidateReference( pTrack->GetDocument(), *t, rPos ); + } } bool ScChangeActionContent::IsMatrixOrigin() const @@ -2200,28 +2202,28 @@ ScChangeAction* ScChangeTrack::GetLastSaved() const void ScChangeTrack::ConfigurationChanged( utl::ConfigurationBroadcaster*, ConfigurationHints ) { - if ( !pDoc->IsInDtorClear() ) - { - const SvtUserOptions& rUserOptions = SC_MOD()->GetUserOptions(); - size_t nOldCount = maUserCollection.size(); + if ( pDoc->IsInDtorClear() ) + return; - OUStringBuffer aBuf; - aBuf.append(rUserOptions.GetFirstName()); - aBuf.append(' '); - aBuf.append(rUserOptions.GetLastName()); - SetUser(aBuf.makeStringAndClear()); + const SvtUserOptions& rUserOptions = SC_MOD()->GetUserOptions(); + size_t nOldCount = maUserCollection.size(); - if ( maUserCollection.size() != nOldCount ) - { - // New user in collection -> have to repaint because - // colors may be different now (#106697#). - // (Has to be done in the Notify handler, to be sure - // the user collection has already been updated) - - SfxObjectShell* pDocSh = pDoc->GetDocumentShell(); - if (pDocSh) - pDocSh->Broadcast( ScPaintHint( ScRange(0,0,0,pDoc->MaxCol(),pDoc->MaxRow(),MAXTAB), PaintPartFlags::Grid ) ); - } + OUStringBuffer aBuf; + aBuf.append(rUserOptions.GetFirstName()); + aBuf.append(' '); + aBuf.append(rUserOptions.GetLastName()); + SetUser(aBuf.makeStringAndClear()); + + if ( maUserCollection.size() != nOldCount ) + { + // New user in collection -> have to repaint because + // colors may be different now (#106697#). + // (Has to be done in the Notify handler, to be sure + // the user collection has already been updated) + + SfxObjectShell* pDocSh = pDoc->GetDocumentShell(); + if (pDocSh) + pDocSh->Broadcast( ScPaintHint( ScRange(0,0,0,pDoc->MaxCol(),pDoc->MaxRow(),MAXTAB), PaintPartFlags::Grid ) ); } } @@ -2247,36 +2249,36 @@ void ScChangeTrack::StartBlockModify( ScChangeTrackMsgType eMsgType, void ScChangeTrack::EndBlockModify( sal_uLong nEndAction ) { - if ( aModifiedLink.IsSet() ) + if ( !aModifiedLink.IsSet() ) + return; + + if ( xBlockModifyMsg ) { - if ( xBlockModifyMsg ) + if ( xBlockModifyMsg->nStartAction <= nEndAction ) { - if ( xBlockModifyMsg->nStartAction <= nEndAction ) - { - xBlockModifyMsg->nEndAction = nEndAction; - // Blocks dissolved in Blocks - aMsgStackFinal.push_back( *xBlockModifyMsg ); - } - else - xBlockModifyMsg.reset(); - if (aMsgStackTmp.empty()) - xBlockModifyMsg.reset(); - else - { - xBlockModifyMsg = aMsgStackTmp.back(); // Maybe Block in Block - aMsgStackTmp.pop_back(); - } + xBlockModifyMsg->nEndAction = nEndAction; + // Blocks dissolved in Blocks + aMsgStackFinal.push_back( *xBlockModifyMsg ); } - if ( !xBlockModifyMsg ) + else + xBlockModifyMsg.reset(); + if (aMsgStackTmp.empty()) + xBlockModifyMsg.reset(); + else { - bool bNew = !aMsgStackFinal.empty(); - aMsgQueue.reserve(aMsgQueue.size() + aMsgStackFinal.size()); - aMsgQueue.insert(aMsgQueue.end(), aMsgStackFinal.rbegin(), aMsgStackFinal.rend()); - aMsgStackFinal.clear(); - if ( bNew ) - aModifiedLink.Call( *this ); + xBlockModifyMsg = aMsgStackTmp.back(); // Maybe Block in Block + aMsgStackTmp.pop_back(); } } + if ( !xBlockModifyMsg ) + { + bool bNew = !aMsgStackFinal.empty(); + aMsgQueue.reserve(aMsgQueue.size() + aMsgStackFinal.size()); + aMsgQueue.insert(aMsgQueue.end(), aMsgStackFinal.rbegin(), aMsgStackFinal.rend()); + aMsgStackFinal.clear(); + if ( bNew ) + aModifiedLink.Call( *this ); + } } ScChangeTrackMsgQueue& ScChangeTrack::GetMsgQueue() @@ -2402,22 +2404,22 @@ void ScChangeTrack::Append( ScChangeAction* pAppend, sal_uLong nAction ) UpdateReference( pAppend, false ); MasterLinks( pAppend ); - if ( aModifiedLink.IsSet() ) + if ( !aModifiedLink.IsSet() ) + return; + + NotifyModified( ScChangeTrackMsgType::Append, nAction, nAction ); + if ( pAppend->GetType() == SC_CAT_CONTENT ) { - NotifyModified( ScChangeTrackMsgType::Append, nAction, nAction ); - if ( pAppend->GetType() == SC_CAT_CONTENT ) + ScChangeActionContent* pContent = static_cast<ScChangeActionContent*>(pAppend); + if ( ( pContent = pContent->GetPrevContent() ) != nullptr ) { - ScChangeActionContent* pContent = static_cast<ScChangeActionContent*>(pAppend); - if ( ( pContent = pContent->GetPrevContent() ) != nullptr ) - { - sal_uLong nMod = pContent->GetActionNumber(); - NotifyModified( ScChangeTrackMsgType::Change, nMod, nMod ); - } + sal_uLong nMod = pContent->GetActionNumber(); + NotifyModified( ScChangeTrackMsgType::Change, nMod, nMod ); } - else - NotifyModified( ScChangeTrackMsgType::Change, pFirst->GetActionNumber(), - pLast->GetActionNumber() ); } + else + NotifyModified( ScChangeTrackMsgType::Change, pFirst->GetActionNumber(), + pLast->GetActionNumber() ); } void ScChangeTrack::Append( ScChangeAction* pAppend ) @@ -2652,21 +2654,21 @@ void ScChangeTrack::AppendContent( const ScAddress& rPos, const ScCellValue& rOl void ScChangeTrack::SetLastCutMoveRange( const ScRange& rRange, ScDocument* pRefDoc ) { - if ( pLastCutMove ) - { - // Do not link ToRange with Deletes and don't change its size - // This is actually unnecessary, as a delete triggers a ResetLastCut - // in ScViewFunc::PasteFromClip before that - ScBigRange& r = pLastCutMove->GetBigRange(); - r.aEnd.SetCol( -1 ); - r.aEnd.SetRow( -1 ); - r.aEnd.SetTab( -1 ); - r.aStart.SetCol( -1 - (rRange.aEnd.Col() - rRange.aStart.Col()) ); - r.aStart.SetRow( -1 - (rRange.aEnd.Row() - rRange.aStart.Row()) ); - r.aStart.SetTab( -1 - (rRange.aEnd.Tab() - rRange.aStart.Tab()) ); - // Contents in FromRange we should overwrite - LookUpContents( rRange, pRefDoc, 0, 0, 0 ); - } + if ( !pLastCutMove ) + return; + + // Do not link ToRange with Deletes and don't change its size + // This is actually unnecessary, as a delete triggers a ResetLastCut + // in ScViewFunc::PasteFromClip before that + ScBigRange& r = pLastCutMove->GetBigRange(); + r.aEnd.SetCol( -1 ); + r.aEnd.SetRow( -1 ); + r.aEnd.SetTab( -1 ); + r.aStart.SetCol( -1 - (rRange.aEnd.Col() - rRange.aStart.Col()) ); + r.aStart.SetRow( -1 - (rRange.aEnd.Row() - rRange.aStart.Row()) ); + r.aStart.SetTab( -1 - (rRange.aEnd.Tab() - rRange.aStart.Tab()) ); + // Contents in FromRange we should overwrite + LookUpContents( rRange, pRefDoc, 0, 0, 0 ); } void ScChangeTrack::AppendContentRange( const ScRange& rRange, @@ -2982,46 +2984,46 @@ void ScChangeTrack::Dependencies( ScChangeAction* pAct ) } } - if ( pLinkMove ) - { - if ( eActType == SC_CAT_CONTENT ) - { // Content is depending on FromRange - const ScBigAddress& rPos = rRange.aStart; - for ( ScChangeActionLinkEntry* pL = pLinkMove; pL; pL = pL->GetNext() ) + if ( !pLinkMove ) + return; + + if ( eActType == SC_CAT_CONTENT ) + { // Content is depending on FromRange + const ScBigAddress& rPos = rRange.aStart; + for ( ScChangeActionLinkEntry* pL = pLinkMove; pL; pL = pL->GetNext() ) + { + ScChangeActionMove* pTest = static_cast<ScChangeActionMove*>(pL->GetAction()); + if ( !pTest->IsRejected() && + pTest->GetFromRange().In( rPos ) ) { - ScChangeActionMove* pTest = static_cast<ScChangeActionMove*>(pL->GetAction()); - if ( !pTest->IsRejected() && - pTest->GetFromRange().In( rPos ) ) - { - AddDependentWithNotify( pTest, pAct ); - } + AddDependentWithNotify( pTest, pAct ); } } - else if ( eActType == SC_CAT_MOVE ) - { // Move FromRange is depending on ToRange - const ScBigRange& rFromRange = static_cast<ScChangeActionMove*>(pAct)->GetFromRange(); - for ( ScChangeActionLinkEntry* pL = pLinkMove; pL; pL = pL->GetNext() ) + } + else if ( eActType == SC_CAT_MOVE ) + { // Move FromRange is depending on ToRange + const ScBigRange& rFromRange = static_cast<ScChangeActionMove*>(pAct)->GetFromRange(); + for ( ScChangeActionLinkEntry* pL = pLinkMove; pL; pL = pL->GetNext() ) + { + ScChangeActionMove* pTest = static_cast<ScChangeActionMove*>(pL->GetAction()); + if ( !pTest->IsRejected() && + pTest->GetBigRange().Intersects( rFromRange ) ) { - ScChangeActionMove* pTest = static_cast<ScChangeActionMove*>(pL->GetAction()); - if ( !pTest->IsRejected() && - pTest->GetBigRange().Intersects( rFromRange ) ) - { - AddDependentWithNotify( pTest, pAct ); - } + AddDependentWithNotify( pTest, pAct ); } } - else - { // Inserts and Deletes are depending as soon as they cross FromRange or - // ToRange - for ( ScChangeActionLinkEntry* pL = pLinkMove; pL; pL = pL->GetNext() ) + } + else + { // Inserts and Deletes are depending as soon as they cross FromRange or + // ToRange + for ( ScChangeActionLinkEntry* pL = pLinkMove; pL; pL = pL->GetNext() ) + { + ScChangeActionMove* pTest = static_cast<ScChangeActionMove*>(pL->GetAction()); + if ( !pTest->IsRejected() && + (pTest->GetFromRange().Intersects( rRange ) || + pTest->GetBigRange().Intersects( rRange )) ) { - ScChangeActionMove* pTest = static_cast<ScChangeActionMove*>(pL->GetAction()); - if ( !pTest->IsRejected() && - (pTest->GetFromRange().Intersects( rRange ) || - pTest->GetBigRange().Intersects( rRange )) ) - { - AddDependentWithNotify( pTest, pAct ); - } + AddDependentWithNotify( pTest, pAct ); } } } @@ -3215,22 +3217,22 @@ void ScChangeTrack::MergePrepare( const ScChangeAction* pFirstMerge, bool bShare void ScChangeTrack::MergeOwn( ScChangeAction* pAct, sal_uLong nFirstMerge, bool bShared ) { // #i94841# [Collaboration] When deleting rows is rejected, the content is sometimes wrong - if ( bShared || !ScChangeTrack::MergeIgnore( *pAct, nFirstMerge ) ) + if ( !(bShared || !ScChangeTrack::MergeIgnore( *pAct, nFirstMerge )) ) + return; + + SetMergeState( SC_CTMS_OWN ); + if ( pAct->IsDeleteType() ) { - SetMergeState( SC_CTMS_OWN ); - if ( pAct->IsDeleteType() ) + if ( static_cast<ScChangeActionDel*>(pAct)->IsTopDelete() ) { - if ( static_cast<ScChangeActionDel*>(pAct)->IsTopDelete() ) - { - SetInDeleteTop( true ); - SetInDeleteRange( static_cast<ScChangeActionDel*>(pAct)-> - GetOverAllRange().MakeRange() ); - } + SetInDeleteTop( true ); + SetInDeleteRange( static_cast<ScChangeActionDel*>(pAct)-> + GetOverAllRange().MakeRange() ); } - UpdateReference( pAct, false ); - SetInDeleteTop( false ); - SetMergeState( SC_CTMS_OTHER ); // Preceding by default MergeOther! } + UpdateReference( pAct, false ); + SetInDeleteTop( false ); + SetMergeState( SC_CTMS_OTHER ); // Preceding by default MergeOther! } void ScChangeTrack::UpdateReference( ScChangeAction* pAct, bool bUndo ) @@ -4659,44 +4661,44 @@ ScChangeTrack* ScChangeTrack::Clone( ScDocument* pDocument ) const void ScChangeTrack::MergeActionState( ScChangeAction* pAct, const ScChangeAction* pOtherAct ) { - if ( pAct->IsVirgin() ) + if ( !pAct->IsVirgin() ) + return; + + if ( pOtherAct->IsAccepted() ) { - if ( pOtherAct->IsAccepted() ) - { - pAct->Accept(); - if ( pOtherAct->IsRejecting() ) - { - pAct->SetRejectAction( pOtherAct->GetRejectAction() ); - } - } - else if ( pOtherAct->IsRejected() ) + pAct->Accept(); + if ( pOtherAct->IsRejecting() ) { - pAct->SetRejected(); + pAct->SetRejectAction( pOtherAct->GetRejectAction() ); } } + else if ( pOtherAct->IsRejected() ) + { + pAct->SetRejected(); + } } /// Get info about a single ScChangeAction element. static void lcl_getTrackedChange(ScDocument* pDoc, int nIndex, const ScChangeAction* pAction, tools::JsonWriter& rRedlines) { - if (pAction->GetType() == SC_CAT_CONTENT) - { - auto redlinesNode = rRedlines.startNode(""); - rRedlines.put("index", static_cast<sal_Int64>(nIndex)); + if (pAction->GetType() != SC_CAT_CONTENT) + return; - rRedlines.put("author", pAction->GetUser()); + auto redlinesNode = rRedlines.startNode(""); + rRedlines.put("index", static_cast<sal_Int64>(nIndex)); - rRedlines.put("type", "Modify"); + rRedlines.put("author", pAction->GetUser()); - rRedlines.put("comment", pAction->GetComment()); + rRedlines.put("type", "Modify"); - OUString aDescription; - pAction->GetDescription(aDescription, pDoc, true); - rRedlines.put("description", aDescription); + rRedlines.put("comment", pAction->GetComment()); - OUString sDateTime = utl::toISO8601(pAction->GetDateTimeUTC().GetUNODateTime()); - rRedlines.put("dateTime", sDateTime); - } + OUString aDescription; + pAction->GetDescription(aDescription, pDoc, true); + rRedlines.put("description", aDescription); + + OUString sDateTime = utl::toISO8601(pAction->GetDateTimeUTC().GetUNODateTime()); + rRedlines.put("dateTime", sDateTime); } void ScChangeTrack::GetChangeTrackInfo(tools::JsonWriter& aRedlines) diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 3dc18b0fe5dc..4eb3012b04ad 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -262,19 +262,19 @@ void ScCompiler::SetNumberFormatter( SvNumberFormatter* pFormatter ) void ScCompiler::SetFormulaLanguage( const ScCompiler::OpCodeMapPtr & xMap ) { - if (xMap) + if (!xMap) + return; + + mxSymbols = xMap; + if (mxSymbols->isEnglish()) { - mxSymbols = xMap; - if (mxSymbols->isEnglish()) - { - if (!pCharClassEnglish) - InitCharClassEnglish(); - pCharClass = pCharClassEnglish; - } - else - pCharClass = ScGlobal::getCharClassPtr(); - SetGrammarAndRefConvention( mxSymbols->getGrammar(), GetGrammar()); + if (!pCharClassEnglish) + InitCharClassEnglish(); + pCharClass = pCharClassEnglish; } + else + pCharClass = ScGlobal::getCharClassPtr(); + SetGrammarAndRefConvention( mxSymbols->getGrammar(), GetGrammar()); } void ScCompiler::SetGrammarAndRefConvention( @@ -409,8 +409,9 @@ ScCompiler::Convention::Convention( FormulaGrammar::AddressConvention eConv ) /* ~ */ t[126] = ScCharFlags::Char; // OOo specific /* 127 */ // FREE - if( FormulaGrammar::CONV_XL_A1 == meConv || FormulaGrammar::CONV_XL_R1C1 == meConv || FormulaGrammar::CONV_XL_OOX == meConv ) - { + if( !(FormulaGrammar::CONV_XL_A1 == meConv || FormulaGrammar::CONV_XL_R1C1 == meConv || FormulaGrammar::CONV_XL_OOX == meConv) ) +return; + /* */ t[32] |= ScCharFlags::Word; /* ! */ t[33] |= ScCharFlags::Ident | ScCharFlags::Word; /* " */ t[34] |= ScCharFlags::Word; @@ -445,7 +446,6 @@ ScCompiler::Convention::Convention( FormulaGrammar::AddressConvention eConv ) /* | */ t[124]|= ScCharFlags::Word; /* } */ t[125]|= ScCharFlags::Word; /* ~ */ t[126]|= ScCharFlags::Word; - } ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits