sc/source/ui/app/inputhdl.cxx | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-)
New commits: commit ad8a7bf570576186f37d5c30bb41bb119ded1626 Author: Eike Rathke <er...@redhat.com> Date: Mon May 12 23:22:22 2014 +0200 include parentheses replacement in functions' formula data, fdo#75264 ... to actually make hitting Enter on a function tip work so the parentheses are added and the cursor is placed in between and the correct description is displayed. Change-Id: I2cbe8f9e2b745a8331aeb8744b64d0baa1f0513e diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index da4f5a2..f35ab6a 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -98,6 +98,11 @@ namespace { // and the quotation mark (so string constants can be skipped) const sal_Char pMinDelimiters[] = " !\""; +// Formula data replacement character for a pair of parentheses at end of +// function name, to force sorting parentheses before all other characters. +// Collation may treat parentheses differently. +const sal_Unicode cParenthesesReplacement = 0x0001; + sal_Unicode lcl_getSheetSeparator(ScDocument* pDoc) { ScCompiler aComp(pDoc, ScAddress()); @@ -720,6 +725,7 @@ void ScInputHandler::GetFormulaData() else pFormulaDataPara = new ScTypedCaseStrSet; + const OUString aParenthesesReplacement( cParenthesesReplacement); const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); sal_uLong nListCount = pFuncList->GetCount(); for(sal_uLong i=0;i<nListCount;i++) @@ -727,7 +733,6 @@ void ScInputHandler::GetFormulaData() const ScFuncDesc* pDesc = pFuncList->GetFunction( i ); if ( pDesc->pFuncName ) { - pFormulaData->insert(ScTypedStrData(*pDesc->pFuncName, 0.0, ScTypedStrData::Standard)); const sal_Unicode* pName = pDesc->pFuncName->getStr(); const sal_Int32 nLen = pDesc->pFuncName->getLength(); // fdo#75264 fill maFormulaChar with all characters used in formula names @@ -736,6 +741,8 @@ void ScInputHandler::GetFormulaData() sal_Unicode c = pName[ j ]; maFormulaChar.insert( c ); } + OUString aFuncName = *pDesc->pFuncName + aParenthesesReplacement; + pFormulaData->insert(ScTypedStrData(aFuncName, 0.0, ScTypedStrData::Standard)); pDesc->initArgumentInfo(); OUString aEntry = pDesc->getSignature(); pFormulaDataPara->insert(ScTypedStrData(aEntry, 0.0, ScTypedStrData::Standard)); @@ -830,9 +837,10 @@ void ScInputHandler::ShowTipCursor() nArgPos = aHelper.GetArgStart( aSelText, nNextFStart, 0 ); nArgs = static_cast<sal_uInt16>(ppFDesc->getParameterCount()); + OUString aFuncName = ppFDesc->getFunctionName() + "("; OUString aNew; ScTypedCaseStrSet::const_iterator it = - findText(*pFormulaDataPara, pFormulaDataPara->end(), ppFDesc->getFunctionName(), aNew, false); + findText(*pFormulaDataPara, pFormulaDataPara->end(), aFuncName, aNew, false); if (it != pFormulaDataPara->end()) { bool bFlag = false; @@ -1084,7 +1092,8 @@ void ScInputHandler::UseFormulaData() miAutoPosFormula = findText(*pFormulaData, miAutoPosFormula, aText, aNew, false); if (miAutoPosFormula != pFormulaData->end()) { - aNew += "()"; + if (aNew[aNew.getLength()-1] == cParenthesesReplacement) + aNew = aNew.copy( 0, aNew.getLength()-1) + "()"; ShowTip( aNew ); aAutoSearch = aText; } @@ -1227,6 +1236,8 @@ void ScInputHandler::NextFormulaEntry( bool bBack ) if (itNew != pFormulaData->end()) { miAutoPosFormula = itNew; + if (aNew[aNew.getLength()-1] == cParenthesesReplacement) + aNew = aNew.copy( 0, aNew.getLength()-1) + "()"; ShowTip(aNew); // Display a quick help } } @@ -1288,7 +1299,9 @@ void ScInputHandler::PasteFunctionData() if (pFormulaData && miAutoPosFormula != pFormulaData->end()) { const ScTypedStrData& rData = *miAutoPosFormula; - const OUString& aInsert = rData.GetString(); + OUString aInsert = rData.GetString(); + if (aInsert[aInsert.getLength()-1] == cParenthesesReplacement) + aInsert = aInsert.copy( 0, aInsert.getLength()-1) + "()"; bool bParInserted = false; DataChanging(); // Cannot be new commit ead754112a1ecaa456d8b5d7231ed178bbcb3a0b Author: Eike Rathke <er...@redhat.com> Date: Mon May 12 19:04:48 2014 +0200 nitpick: avoid triple redirection inside loop, fdo#75264 related Also, it's fdo#12345 instead of fdo12345 (just to provide better "grep'ability"). Change-Id: Id1c1f849addcb96f71408ba38e2dde8e316271be diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index 22a0e05..da4f5a2 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -728,10 +728,12 @@ void ScInputHandler::GetFormulaData() if ( pDesc->pFuncName ) { pFormulaData->insert(ScTypedStrData(*pDesc->pFuncName, 0.0, ScTypedStrData::Standard)); - // fdo75264 fill maFormulaChar with all characters used in formula names - for ( sal_Int32 j = 0; j < pDesc->pFuncName->getLength(); j++ ) + const sal_Unicode* pName = pDesc->pFuncName->getStr(); + const sal_Int32 nLen = pDesc->pFuncName->getLength(); + // fdo#75264 fill maFormulaChar with all characters used in formula names + for ( sal_Int32 j = 0; j < nLen; j++ ) { - sal_Unicode c = pDesc->pFuncName->getStr()[ j ]; + sal_Unicode c = pName[ j ]; maFormulaChar.insert( c ); } pDesc->initArgumentInfo(); @@ -1018,7 +1020,7 @@ bool ScInputHandler::GetFuncName( OUString& aStart, OUString& aResult ) aStart = ScGlobal::pCharClass->uppercase( aStart ); sal_Int32 nPos = aStart.getLength() - 1; sal_Unicode c = aStart[ nPos ]; - // fdo75264 use maFormulaChar to check if characters are used in function names + // fdo#75264 use maFormulaChar to check if characters are used in function names ::std::set< sal_Unicode >::const_iterator p = maFormulaChar.find( c ); if ( p == maFormulaChar.end() ) return false; // last character is not part of any function name, quit _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits