summaryrefslogtreecommitdiff
path: root/sw/source/core/fields/postithelper.cxx
diff options
context:
space:
mode:
authorOliver-Rainer Wittmann <orw@apache.org>2013-12-19 18:50:58 +0000
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-01-08 15:58:35 +0100
commit0761f81643a6890457e9ef7d913ab5c88c2593a4 (patch)
tree91bf122795dfac3f9263942ab3c5dee2b4ecea26 /sw/source/core/fields/postithelper.cxx
parentdf002e39f7518036ae1c1d2afec7a525ef902327 (diff)
123792: complete annotations on text ranges feature
- rely annotations on text ranges on new annotation marks - support arbitrary text ranges for annotations - fix undo/redo regarding annotations an text ranges - support annotations on overlapping text ranges - fix *.docx import for annotations on overlapping text ranges - fix ODF import of annotations on text ranges cherry-picked from branch ooxml-osba (cherry picked from commit ebd2922ebd3cf2d3899fb80780d38f367197aadf) Conflicts: sw/Library_sw.mk sw/inc/IDocumentMarkAccess.hxx sw/inc/SidebarWin.hxx sw/inc/doc.hxx sw/inc/docufld.hxx sw/inc/hintids.hxx sw/inc/ndhints.hxx sw/inc/txatbase.hxx sw/inc/unobookmark.hxx sw/inc/unofield.hxx sw/inc/unoport.hxx sw/source/core/access/accpara.cxx sw/source/core/bastyp/init.cxx sw/source/core/crsr/bookmrk.cxx sw/source/core/crsr/findtxt.cxx sw/source/core/doc/dbgoutsw.cxx sw/source/core/doc/docbm.cxx sw/source/core/doc/doccorr.cxx sw/source/core/doc/docdde.cxx sw/source/core/doc/docedt.cxx sw/source/core/doc/docfld.cxx sw/source/core/doc/doclay.cxx sw/source/core/doc/tblrwcl.cxx sw/source/core/docnode/ndcopy.cxx sw/source/core/docnode/nodes.cxx sw/source/core/docnode/section.cxx sw/source/core/edit/edfld.cxx sw/source/core/fields/docufld.cxx sw/source/core/fields/postithelper.cxx sw/source/core/fields/reffld.cxx sw/source/core/inc/MarkManager.hxx sw/source/core/inc/crossrefbookmark.hxx sw/source/core/text/inftxt.cxx sw/source/core/text/itratr.cxx sw/source/core/text/txtfrm.cxx sw/source/core/txtnode/atrfld.cxx sw/source/core/txtnode/ndtxt.cxx sw/source/core/txtnode/thints.cxx sw/source/core/undo/undel.cxx sw/source/core/undo/undobj.cxx sw/source/core/unocore/unofield.cxx sw/source/core/unocore/unoport.cxx sw/source/core/unocore/unoportenum.cxx sw/source/filter/html/htmlatr.cxx sw/source/filter/html/htmlgrin.cxx sw/source/filter/html/wrthtml.cxx sw/source/filter/writer/writer.cxx sw/source/filter/ww1/fltshell.cxx sw/source/filter/ww8/wrtw8nds.cxx sw/source/filter/ww8/ww8par.cxx sw/source/ui/dialog/uiregionsw.cxx sw/source/ui/dochdl/swdtflvr.cxx sw/source/ui/docvw/PostItMgr.cxx sw/source/ui/docvw/SidebarWin.cxx sw/source/ui/fldui/fldmgr.cxx sw/source/ui/fldui/fldref.cxx sw/source/ui/inc/fldmgr.hxx sw/source/ui/inc/wrtsh.hxx sw/source/ui/shells/textfld.cxx sw/source/ui/uiview/view2.cxx sw/source/ui/utlui/navipi.cxx sw/source/ui/wrtsh/wrtsh2.cxx writerfilter/source/dmapper/DomainMapper_Impl.cxx writerfilter/source/dmapper/DomainMapper_Impl.hxx writerfilter/source/dmapper/PropertyMap.cxx xmloff/inc/txtfldi.hxx xmloff/source/text/txtfldi.cxx xmloff/source/text/txtparae.cxx Change-Id: Ie4cc467dbb837054c73742262ee20f35c151ff3f
Diffstat (limited to 'sw/source/core/fields/postithelper.cxx')
-rw-r--r--sw/source/core/fields/postithelper.cxx100
1 files changed, 52 insertions, 48 deletions
diff --git a/sw/source/core/fields/postithelper.cxx b/sw/source/core/fields/postithelper.cxx
index 7d9b83e7f057..73d163a2b3fe 100644
--- a/sw/source/core/fields/postithelper.cxx
+++ b/sw/source/core/fields/postithelper.cxx
@@ -75,62 +75,66 @@ struct LayoutInfoOrder
} // eof anonymous namespace
-SwPostItHelper::SwLayoutStatus SwPostItHelper::getLayoutInfos( std::vector< SwLayoutInfo >& rInfo, SwPosition& rPos )
+SwPostItHelper::SwLayoutStatus SwPostItHelper::getLayoutInfos(
+ SwLayoutInfo& o_rInfo,
+ const SwPosition& rAnchorPos,
+ const SwPosition* pAnnotationStartPos )
{
SwLayoutStatus aRet = INVISIBLE;
- const SwTxtNode* pTxtNode = rPos.nNode.GetNode().GetTxtNode();
- SwCntntNode* pNode = rPos.nNode.GetNode().GetCntntNode(); // getfirstcontentnode // getnext...
- if( !pNode )
+ SwTxtNode* pTxtNode = rAnchorPos.nNode.GetNode().GetTxtNode();
+ if ( pTxtNode == NULL )
return aRet;
- SwIterator<SwTxtFrm,SwCntntNode> aIter( *pNode );
- for( SwTxtFrm* pTxtFrm = aIter.First(); pTxtFrm; pTxtFrm = aIter.Next() )
+
+ SwIterator<SwTxtFrm,SwCntntNode> aIter( *pTxtNode );
+ for( SwTxtFrm* pTxtFrm = aIter.First(); pTxtFrm != NULL; pTxtFrm = aIter.Next() )
{
if( !pTxtFrm->IsFollow() )
{
- pTxtFrm = ((SwTxtFrm*)pTxtFrm)->GetFrmAtPos( rPos );
- SwPageFrm *pPage = pTxtFrm ? pTxtFrm->FindPageFrm() : 0;
- // #i103490#
- if ( pPage && !pPage->IsInvalid() && !pPage->IsInvalidFly() )
+ pTxtFrm = pTxtFrm->GetFrmAtPos( rAnchorPos );
+ SwPageFrm *pPage = pTxtFrm ? pTxtFrm->FindPageFrm() : 0;
+ if ( pPage != NULL && !pPage->IsInvalid() && !pPage->IsInvalidFly() )
{
- SwLayoutInfo aInfo;
- pTxtFrm->GetCharRect( aInfo.mPosition, rPos, 0 );
- aInfo.mpAnchorFrm = pTxtFrm;
- aInfo.mPageFrame = pPage->Frm();
- aInfo.mPagePrtArea = pPage->Prt();
- aInfo.mPagePrtArea.Pos() += aInfo.mPageFrame.Pos();
- aInfo.mnPageNumber = pPage->GetPhyPageNum();
- aInfo.meSidebarPosition = pPage->SidebarPosition();
- aInfo.mRedlineAuthor = 0;
-
- if( aRet == INVISIBLE )
+ aRet = VISIBLE;
+
+ o_rInfo.mpAnchorFrm = pTxtFrm;
+ pTxtFrm->GetCharRect( o_rInfo.mPosition, rAnchorPos, 0 );
+ if ( pAnnotationStartPos != NULL )
{
- aRet = VISIBLE;
- const IDocumentRedlineAccess* pIDRA = pNode->getIDocumentRedlineAccess();
- if( IDocumentRedlineAccess::IsShowChanges( pIDRA->GetRedlineMode() ) )
- {
- const SwRedline* pRedline = pIDRA->GetRedline( rPos, 0 );
- if( pRedline )
- {
- if( nsRedlineType_t::REDLINE_INSERT == pRedline->GetType() )
- aRet = INSERTED;
- else if( nsRedlineType_t::REDLINE_DELETE == pRedline->GetType() )
- aRet = DELETED;
- aInfo.mRedlineAuthor = pRedline->GetAuthor();
- }
- }
+ o_rInfo.mnStartNodeIdx = pAnnotationStartPos->nNode.GetIndex();
+ o_rInfo.mnStartContent = pAnnotationStartPos->nContent.GetIndex();
}
-
+ else
{
- std::vector< SwLayoutInfo >::iterator aInsPosIter =
- std::lower_bound( rInfo.begin(), rInfo.end(),
- aInfo, LayoutInfoOrder() );
-
- rInfo.insert( aInsPosIter, aInfo );
+ o_rInfo.mnStartNodeIdx = 0;
+ o_rInfo.mnStartContent = -1;
+ }
+ o_rInfo.mPageFrame = pPage->Frm();
+ o_rInfo.mPagePrtArea = pPage->Prt();
+ o_rInfo.mPagePrtArea.Pos() += o_rInfo.mPageFrame.Pos();
+ o_rInfo.mnPageNumber = pPage->GetPhyPageNum();
+ o_rInfo.meSidebarPosition = pPage->SidebarPosition();
+ o_rInfo.mRedlineAuthor = 0;
+
+ const IDocumentRedlineAccess* pIDRA = pTxtNode->getIDocumentRedlineAccess();
+ if( IDocumentRedlineAccess::IsShowChanges( pIDRA->GetRedlineMode() ) )
+ {
+ const SwRedline* pRedline = pIDRA->GetRedline( rAnchorPos, 0 );
+ if( pRedline )
+ {
+ if( nsRedlineType_t::REDLINE_INSERT == pRedline->GetType() )
+ aRet = INSERTED;
+ else if( nsRedlineType_t::REDLINE_DELETE == pRedline->GetType() )
+ aRet = DELETED;
+ o_rInfo.mRedlineAuthor = pRedline->GetAuthor();
+ }
}
}
}
}
- return ((aRet==VISIBLE) && SwScriptInfo::IsInHiddenRange( *pTxtNode , rPos.nContent.GetIndex()) ) ? HIDDEN : aRet;
+
+ return ( (aRet==VISIBLE) && SwScriptInfo::IsInHiddenRange( *pTxtNode , rAnchorPos.nContent.GetIndex()) )
+ ? HIDDEN
+ : aRet;
}
long SwPostItHelper::getLayoutHeight( const SwRootFrm* pRoot )
@@ -163,17 +167,17 @@ unsigned long SwPostItHelper::getPageInfo( SwRect& rPageFrm, const SwRootFrm* pR
SwPosition SwAnnotationItem::GetAnchorPosition() const
{
- SwTxtFld* pFld = pFmtFld->GetTxtFld();
- SwTxtNode* pTNd = pFld->GetpTxtNode();
+ SwTxtFld* pTxtFld = mrFmtFld.GetTxtFld();
+ SwTxtNode* pTxtNode = pTxtFld->GetpTxtNode();
- SwPosition aPos( *pTNd );
- aPos.nContent.Assign( pTNd, *pFld->GetStart() );
+ SwPosition aPos( *pTxtNode );
+ aPos.nContent.Assign( pTxtNode, *(pTxtFld->GetStart()) );
return aPos;
}
bool SwAnnotationItem::UseElement()
{
- return pFmtFld->IsFldInDoc();
+ return mrFmtFld.IsFldInDoc();
}
sw::sidebarwindows::SwSidebarWin* SwAnnotationItem::GetSidebarWindow(
@@ -185,7 +189,7 @@ sw::sidebarwindows::SwSidebarWin* SwAnnotationItem::GetSidebarWindow(
return new sw::annotation::SwAnnotationWin( rEditWin, nBits,
aMgr, aBits,
*this,
- pFmtFld );
+ &mrFmtFld );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */