diff options
author | Oliver-Rainer Wittmann <orw@apache.org> | 2013-12-19 18:50:58 +0000 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-01-08 15:58:35 +0100 |
commit | 0761f81643a6890457e9ef7d913ab5c88c2593a4 (patch) | |
tree | 91bf122795dfac3f9263942ab3c5dee2b4ecea26 /sw/source/core/fields/postithelper.cxx | |
parent | df002e39f7518036ae1c1d2afec7a525ef902327 (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.cxx | 100 |
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: */ |