summaryrefslogtreecommitdiff
path: root/editeng
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-11-26 15:17:47 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-11-26 15:27:17 +0000
commit1f1fa03f4f902254f73cc15a3f44c23d489933bb (patch)
tree26be3302bf8f55a8a9fe88c08157215546d9fa9e /editeng
parentc23ab5eaed57cc3fb5860e26c591c73c5b22687b (diff)
rewrite new SvxEditSourceHelper::GetAttributeRun replacement in new style
Change-Id: I906e99afb58dcee3e47a545f575aab71b7edc0e9
Diffstat (limited to 'editeng')
-rw-r--r--editeng/source/uno/unoedhlp.cxx97
1 files changed, 28 insertions, 69 deletions
diff --git a/editeng/source/uno/unoedhlp.cxx b/editeng/source/uno/unoedhlp.cxx
index 82a2b0d79acf..cccb8091b28e 100644
--- a/editeng/source/uno/unoedhlp.cxx
+++ b/editeng/source/uno/unoedhlp.cxx
@@ -108,89 +108,85 @@ SAL_WNODEPRECATED_DECLARATIONS_PUSH
}
SAL_WNODEPRECATED_DECLARATIONS_POP
-sal_Bool SvxEditSourceHelper::GetAttributeRun( sal_uInt16& nStartIndex, sal_uInt16& nEndIndex, const EditEngine& rEE, sal_Int32 nPara, sal_uInt16 nIndex, sal_Bool /*bInCell*/ )
+sal_Bool SvxEditSourceHelper::GetAttributeRun( sal_uInt16& nStartIndex, sal_uInt16& nEndIndex, const EditEngine& rEE, sal_Int32 nPara, sal_uInt16 nIndex, sal_Bool bInCell )
{
// IA2 CWS introduced bInCell, but also did many other changes here.
// Need to verify implementation with AT (IA2 and ATK)
// Old implementation at the end of the method for reference...
-#if 0 // IA2 CWS
-
//added dummy attributes for the default text
- EECharAttribArray aCharAttribs, aTempCharAttribs;
+ std::vector<EECharAttrib> aCharAttribs, aTempCharAttribs;
rEE.GetCharAttribs( nPara, aTempCharAttribs );
- if ( aTempCharAttribs.Count() )
+
+ if (!aTempCharAttribs.empty())
{
sal_uInt32 nIndex2 = 0;
sal_uInt32 nParaLen = rEE.GetTextLen(nPara);
- for ( sal_uInt16 nAttr = 0; nAttr < aTempCharAttribs.Count(); nAttr++ )
+ for (size_t nAttr = 0; nAttr < aTempCharAttribs.size(); ++nAttr)
{
- if ( nIndex2 < aTempCharAttribs[nAttr].nStart )
+ if (nIndex2 < aTempCharAttribs[nAttr].nStart)
{
EECharAttrib aEEAttr;
- aEEAttr.nStart = sal_uInt16(nIndex2);
+ aEEAttr.nStart = nIndex2;
aEEAttr.nEnd = aTempCharAttribs[nAttr].nStart;
- aCharAttribs.Insert( aEEAttr, nAttr );
+ aCharAttribs.insert(aCharAttribs.begin() + nAttr, aEEAttr);
}
nIndex2 = aTempCharAttribs[nAttr].nEnd;
- aCharAttribs.Insert( aTempCharAttribs[nAttr], aCharAttribs.Count() );
+ aCharAttribs.push_back(aTempCharAttribs[nAttr]);
}
if ( nIndex2 != nParaLen )
{
EECharAttrib aEEAttr;
- aEEAttr.nStart = sal_uInt16(nIndex2);
- aEEAttr.nEnd = sal_uInt16(nParaLen);
- aCharAttribs.Insert( aEEAttr, aCharAttribs.Count() );
+ aEEAttr.nStart = nIndex2;
+ aEEAttr.nEnd = nParaLen;
+ aCharAttribs.push_back(aEEAttr);
}
}
// find closest index in front of nIndex
- sal_uInt16 nAttr, nCurrIndex;
- sal_Int32 nClosestStartIndex;
- sal_Int32 nClosestStartIndex_s, nClosestStartIndex_e;
- for( nAttr=0, nClosestStartIndex_s=0, nClosestStartIndex_e=0; nAttr<aCharAttribs.Count(); ++nAttr )
+ sal_uInt16 nCurrIndex;
+ sal_Int32 nClosestStartIndex_s = 0, nClosestStartIndex_e = 0;
+ for(std::vector<EECharAttrib>::iterator i = aCharAttribs.begin(); i < aCharAttribs.end(); ++i)
{
- nCurrIndex = aCharAttribs[nAttr].nStart;
-
- //if( nCurrIndex > nIndex )
- // break; // aCharAttribs array is sorted in increasing order for nStart values
+ nCurrIndex = i->nStart;
if( nCurrIndex > nClosestStartIndex_s &&
nCurrIndex <= nIndex)
{
nClosestStartIndex_s = nCurrIndex;
}
- nCurrIndex = aCharAttribs[nAttr].nEnd;
+ nCurrIndex = i->nEnd;
if ( nCurrIndex > nClosestStartIndex_e &&
nCurrIndex < nIndex )
{
nClosestStartIndex_e = nCurrIndex;
}
}
- nClosestStartIndex = nClosestStartIndex_s > nClosestStartIndex_e ? nClosestStartIndex_s : nClosestStartIndex_e;
+ sal_Int32 nClosestStartIndex = nClosestStartIndex_s > nClosestStartIndex_e ? nClosestStartIndex_s : nClosestStartIndex_e;
// find closest index behind of nIndex
- sal_Int32 nClosestEndIndex;
sal_Int32 nClosestEndIndex_s, nClosestEndIndex_e;
- for( nAttr=0, nClosestEndIndex_s=nClosestEndIndex_e=rEE.GetTextLen(nPara); nAttr<aCharAttribs.Count(); ++nAttr )
+ nClosestEndIndex_s = nClosestEndIndex_e = rEE.GetTextLen(nPara);
+ for(std::vector<EECharAttrib>::iterator i = aCharAttribs.begin(); i < aCharAttribs.end(); ++i)
{
- nCurrIndex = aCharAttribs[nAttr].nEnd;
+ nCurrIndex = i->nEnd;
if( nCurrIndex > nIndex &&
nCurrIndex < nClosestEndIndex_e )
{
nClosestEndIndex_e = nCurrIndex;
}
- nCurrIndex = aCharAttribs[nAttr].nStart;
+ nCurrIndex = i->nStart;
if ( nCurrIndex > nIndex &&
nCurrIndex < nClosestEndIndex_s)
{
nClosestEndIndex_s = nCurrIndex;
}
}
- nClosestEndIndex = nClosestEndIndex_s < nClosestEndIndex_e ? nClosestEndIndex_s : nClosestEndIndex_e;
+ sal_Int32 nClosestEndIndex = nClosestEndIndex_s < nClosestEndIndex_e ? nClosestEndIndex_s : nClosestEndIndex_e;
nStartIndex = static_cast<sal_uInt16>( nClosestStartIndex );
nEndIndex = static_cast<sal_uInt16>( nClosestEndIndex );
+
if ( bInCell )
{
EPosition aStartPos( nPara, nStartIndex ), aEndPos( nPara, nEndIndex );
@@ -256,52 +252,15 @@ sal_Bool SvxEditSourceHelper::GetAttributeRun( sal_uInt16& nStartIndex, sal_uInt
nEndIndex = 0;
if ( aEndPos.nPara > 0 )
{
- for ( sal_uInt16 i = 0; i < aEndPos.nPara; i++ )
- {
- nEndIndex += rEE.GetTextLen(i)+1;
- }
+ for ( sal_uInt16 i = 0; i < aEndPos.nPara; i++ )
+ {
+ nEndIndex += rEE.GetTextLen(i)+1;
+ }
}
nEndIndex += aEndPos.nIndex;
}
return sal_True;
-
-#else // old implementation
- std::vector<EECharAttrib> aCharAttribs;
-
- rEE.GetCharAttribs( nPara, aCharAttribs );
-
- // find closest index in front of nIndex
- sal_uInt16 nCurrIndex;
- sal_Int32 nClosestStartIndex = 0;
- for(std::vector<EECharAttrib>::iterator i = aCharAttribs.begin(); i < aCharAttribs.end(); ++i)
- {
- nCurrIndex = i->nStart;
-
- if( nCurrIndex > nIndex )
- break; // aCharAttribs array is sorted in increasing order for nStart values
- else if( nCurrIndex > nClosestStartIndex )
- {
- nClosestStartIndex = nCurrIndex;
- }
- }
-
- // find closest index behind of nIndex
- sal_Int32 nClosestEndIndex = rEE.GetTextLen(nPara);
- for(std::vector<EECharAttrib>::iterator i = aCharAttribs.begin(); i < aCharAttribs.end(); ++i)
- {
- nCurrIndex = i->nEnd;
-
- if( nCurrIndex > nIndex && nCurrIndex < nClosestEndIndex )
- nClosestEndIndex = nCurrIndex;
- }
-
- nStartIndex = static_cast<sal_uInt16>( nClosestStartIndex );
- nEndIndex = static_cast<sal_uInt16>( nClosestEndIndex );
-
- return sal_True;
-
-#endif
}
Point SvxEditSourceHelper::EEToUserSpace( const Point& rPoint, const Size& rEESize, bool bIsVertical )