1efeef26fSAndrew Rist /**************************************************************
2efeef26fSAndrew Rist *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10efeef26fSAndrew Rist *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19efeef26fSAndrew Rist *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <tools/gen.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <postithelper.hxx>
30cdf0e10cSrcweir #include <PostItMgr.hxx>
31cdf0e10cSrcweir #include <AnnotationWin.hxx>
32cdf0e10cSrcweir
33cdf0e10cSrcweir #include <fmtfld.hxx>
34cdf0e10cSrcweir #include <txtfld.hxx>
35cdf0e10cSrcweir #include <docufld.hxx>
36cdf0e10cSrcweir #include <ndtxt.hxx>
37cdf0e10cSrcweir #include <cntfrm.hxx>
38cdf0e10cSrcweir #include <pagefrm.hxx>
39cdf0e10cSrcweir #include <rootfrm.hxx>
40cdf0e10cSrcweir #include <txtfrm.hxx>
41cdf0e10cSrcweir #include <tabfrm.hxx>
42cdf0e10cSrcweir #include <IDocumentRedlineAccess.hxx>
43cdf0e10cSrcweir #include <redline.hxx>
44cdf0e10cSrcweir #include <scriptinfo.hxx>
45cdf0e10cSrcweir #include <editeng/charhiddenitem.hxx>
46cdf0e10cSrcweir #include <switerator.hxx>
47cdf0e10cSrcweir
48cdf0e10cSrcweir namespace {
49cdf0e10cSrcweir
50cdf0e10cSrcweir struct LayoutInfoOrder
51cdf0e10cSrcweir {
operator ()__anonfabf18e90111::LayoutInfoOrder52cdf0e10cSrcweir bool operator()( const SwLayoutInfo& rLayoutInfo,
53cdf0e10cSrcweir const SwLayoutInfo& rNewLayoutInfo )
54cdf0e10cSrcweir {
55cdf0e10cSrcweir if ( rLayoutInfo.mnPageNumber != rNewLayoutInfo.mnPageNumber )
56cdf0e10cSrcweir {
57cdf0e10cSrcweir // corresponding <SwFrm> instances are on different pages
58cdf0e10cSrcweir return rLayoutInfo.mnPageNumber < rNewLayoutInfo.mnPageNumber;
59cdf0e10cSrcweir }
60cdf0e10cSrcweir else
61cdf0e10cSrcweir {
62cdf0e10cSrcweir // corresponding <SwFrm> instances are in different repeating table header rows
63cdf0e10cSrcweir ASSERT( rLayoutInfo.mpAnchorFrm->FindTabFrm(),
64cdf0e10cSrcweir "<LayoutInfoOrder::operator()> - table frame not found" );
65cdf0e10cSrcweir ASSERT( rNewLayoutInfo.mpAnchorFrm->FindTabFrm(),
66cdf0e10cSrcweir "<LayoutInfoOrder::operator()> - table frame not found" );
67cdf0e10cSrcweir const SwTabFrm* pLayoutInfoTabFrm( rLayoutInfo.mpAnchorFrm->FindTabFrm() );
68cdf0e10cSrcweir const SwTabFrm* pNewLayoutInfoTabFrm( rNewLayoutInfo.mpAnchorFrm->FindTabFrm() );
69cdf0e10cSrcweir const SwTabFrm* pTmpTabFrm( pNewLayoutInfoTabFrm );
70cdf0e10cSrcweir while ( pTmpTabFrm && pTmpTabFrm->GetFollow() )
71cdf0e10cSrcweir {
72cdf0e10cSrcweir pTmpTabFrm = static_cast<const SwTabFrm*>(pTmpTabFrm->GetFollow()->GetFrm());
73cdf0e10cSrcweir if ( pTmpTabFrm == pLayoutInfoTabFrm )
74cdf0e10cSrcweir {
75cdf0e10cSrcweir return false;
76cdf0e10cSrcweir }
77cdf0e10cSrcweir }
78cdf0e10cSrcweir return true;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir }
81cdf0e10cSrcweir };
82cdf0e10cSrcweir
83cdf0e10cSrcweir } // eof anonymous namespace
84cdf0e10cSrcweir
getLayoutInfos(SwLayoutInfo & o_rInfo,const SwPosition & rAnchorPos,const SwPosition * pAnnotationStartPos)85*dec99bbdSOliver-Rainer Wittmann SwPostItHelper::SwLayoutStatus SwPostItHelper::getLayoutInfos(
86*dec99bbdSOliver-Rainer Wittmann SwLayoutInfo& o_rInfo,
87*dec99bbdSOliver-Rainer Wittmann const SwPosition& rAnchorPos,
88*dec99bbdSOliver-Rainer Wittmann const SwPosition* pAnnotationStartPos )
89cdf0e10cSrcweir {
90cdf0e10cSrcweir SwLayoutStatus aRet = INVISIBLE;
91*dec99bbdSOliver-Rainer Wittmann SwTxtNode* pTxtNode = rAnchorPos.nNode.GetNode().GetTxtNode();
92*dec99bbdSOliver-Rainer Wittmann if ( pTxtNode == NULL )
93cdf0e10cSrcweir return aRet;
94*dec99bbdSOliver-Rainer Wittmann
95*dec99bbdSOliver-Rainer Wittmann SwIterator<SwTxtFrm,SwCntntNode> aIter( *pTxtNode );
96*dec99bbdSOliver-Rainer Wittmann for( SwTxtFrm* pTxtFrm = aIter.First(); pTxtFrm != NULL; pTxtFrm = aIter.Next() )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir if( !pTxtFrm->IsFollow() )
99cdf0e10cSrcweir {
100*dec99bbdSOliver-Rainer Wittmann pTxtFrm = pTxtFrm->GetFrmAtPos( rAnchorPos );
101*dec99bbdSOliver-Rainer Wittmann SwPageFrm *pPage = pTxtFrm ? pTxtFrm->FindPageFrm() : 0;
102*dec99bbdSOliver-Rainer Wittmann if ( pPage != NULL && !pPage->IsInvalid() && !pPage->IsInvalidFly() )
103cdf0e10cSrcweir {
104*dec99bbdSOliver-Rainer Wittmann aRet = VISIBLE;
105*dec99bbdSOliver-Rainer Wittmann
106*dec99bbdSOliver-Rainer Wittmann o_rInfo.mpAnchorFrm = pTxtFrm;
107*dec99bbdSOliver-Rainer Wittmann pTxtFrm->GetCharRect( o_rInfo.mPosition, rAnchorPos, 0 );
108*dec99bbdSOliver-Rainer Wittmann if ( pAnnotationStartPos != NULL )
109cdf0e10cSrcweir {
110*dec99bbdSOliver-Rainer Wittmann o_rInfo.mnStartNodeIdx = pAnnotationStartPos->nNode.GetIndex();
111*dec99bbdSOliver-Rainer Wittmann o_rInfo.mnStartContent = pAnnotationStartPos->nContent.GetIndex();
112cdf0e10cSrcweir }
113*dec99bbdSOliver-Rainer Wittmann else
114cdf0e10cSrcweir {
115*dec99bbdSOliver-Rainer Wittmann o_rInfo.mnStartNodeIdx = 0;
116*dec99bbdSOliver-Rainer Wittmann o_rInfo.mnStartContent = STRING_NOTFOUND;
117*dec99bbdSOliver-Rainer Wittmann }
118*dec99bbdSOliver-Rainer Wittmann o_rInfo.mPageFrame = pPage->Frm();
119*dec99bbdSOliver-Rainer Wittmann o_rInfo.mPagePrtArea = pPage->Prt();
120*dec99bbdSOliver-Rainer Wittmann o_rInfo.mPagePrtArea.Pos() += o_rInfo.mPageFrame.Pos();
121*dec99bbdSOliver-Rainer Wittmann o_rInfo.mnPageNumber = pPage->GetPhyPageNum();
122*dec99bbdSOliver-Rainer Wittmann o_rInfo.meSidebarPosition = pPage->SidebarPosition();
123*dec99bbdSOliver-Rainer Wittmann o_rInfo.mRedlineAuthor = 0;
124*dec99bbdSOliver-Rainer Wittmann
125*dec99bbdSOliver-Rainer Wittmann const IDocumentRedlineAccess* pIDRA = pTxtNode->getIDocumentRedlineAccess();
126*dec99bbdSOliver-Rainer Wittmann if( IDocumentRedlineAccess::IsShowChanges( pIDRA->GetRedlineMode() ) )
127*dec99bbdSOliver-Rainer Wittmann {
128*dec99bbdSOliver-Rainer Wittmann const SwRedline* pRedline = pIDRA->GetRedline( rAnchorPos, 0 );
129*dec99bbdSOliver-Rainer Wittmann if( pRedline )
130*dec99bbdSOliver-Rainer Wittmann {
131*dec99bbdSOliver-Rainer Wittmann if( nsRedlineType_t::REDLINE_INSERT == pRedline->GetType() )
132*dec99bbdSOliver-Rainer Wittmann aRet = INSERTED;
133*dec99bbdSOliver-Rainer Wittmann else if( nsRedlineType_t::REDLINE_DELETE == pRedline->GetType() )
134*dec99bbdSOliver-Rainer Wittmann aRet = DELETED;
135*dec99bbdSOliver-Rainer Wittmann o_rInfo.mRedlineAuthor = pRedline->GetAuthor();
136*dec99bbdSOliver-Rainer Wittmann }
137cdf0e10cSrcweir }
138cdf0e10cSrcweir }
139cdf0e10cSrcweir }
140cdf0e10cSrcweir }
141*dec99bbdSOliver-Rainer Wittmann
142*dec99bbdSOliver-Rainer Wittmann return ( (aRet==VISIBLE) && SwScriptInfo::IsInHiddenRange( *pTxtNode , rAnchorPos.nContent.GetIndex()) )
143*dec99bbdSOliver-Rainer Wittmann ? HIDDEN
144*dec99bbdSOliver-Rainer Wittmann : aRet;
145cdf0e10cSrcweir }
146cdf0e10cSrcweir
getLayoutHeight(const SwRootFrm * pRoot)147cdf0e10cSrcweir long SwPostItHelper::getLayoutHeight( const SwRootFrm* pRoot )
148cdf0e10cSrcweir {
149cdf0e10cSrcweir long nRet = pRoot ? pRoot->Frm().Height() : 0;
150cdf0e10cSrcweir return nRet;
151cdf0e10cSrcweir }
152cdf0e10cSrcweir
setSidebarChanged(SwRootFrm * pRoot,bool bBrowseMode)153cdf0e10cSrcweir void SwPostItHelper::setSidebarChanged( SwRootFrm* pRoot, bool bBrowseMode )
154cdf0e10cSrcweir {
155cdf0e10cSrcweir if( pRoot )
156cdf0e10cSrcweir {
157cdf0e10cSrcweir pRoot->SetSidebarChanged();
158cdf0e10cSrcweir if( bBrowseMode )
159cdf0e10cSrcweir pRoot->InvalidateBrowseWidth();
160cdf0e10cSrcweir }
161cdf0e10cSrcweir }
162cdf0e10cSrcweir
getPageInfo(SwRect & rPageFrm,const SwRootFrm * pRoot,const Point & rPoint)163cdf0e10cSrcweir unsigned long SwPostItHelper::getPageInfo( SwRect& rPageFrm, const SwRootFrm* pRoot, const Point& rPoint )
164cdf0e10cSrcweir {
165cdf0e10cSrcweir unsigned long nRet = 0;
166cdf0e10cSrcweir const SwFrm* pPage = pRoot->GetPageAtPos( rPoint, 0, true );
167cdf0e10cSrcweir if( pPage )
168cdf0e10cSrcweir {
169cdf0e10cSrcweir nRet = pPage->GetPhyPageNum();
170cdf0e10cSrcweir rPageFrm = pPage->Frm();
171cdf0e10cSrcweir }
172cdf0e10cSrcweir return nRet;
173cdf0e10cSrcweir }
174cdf0e10cSrcweir
GetAnchorPosition() const175cdf0e10cSrcweir SwPosition SwAnnotationItem::GetAnchorPosition() const
176cdf0e10cSrcweir {
177*dec99bbdSOliver-Rainer Wittmann SwTxtFld* pTxtFld = mrFmtFld.GetTxtFld();
178*dec99bbdSOliver-Rainer Wittmann //if( pTxtFld )
179*dec99bbdSOliver-Rainer Wittmann //{
180*dec99bbdSOliver-Rainer Wittmann SwTxtNode* pTxtNode = pTxtFld->GetpTxtNode();
181*dec99bbdSOliver-Rainer Wittmann //if( pTxtNode )
182*dec99bbdSOliver-Rainer Wittmann //{
183*dec99bbdSOliver-Rainer Wittmann SwPosition aPos( *pTxtNode );
184*dec99bbdSOliver-Rainer Wittmann aPos.nContent.Assign( pTxtNode, *(pTxtFld->GetStart()) );
185*dec99bbdSOliver-Rainer Wittmann return aPos;
186*dec99bbdSOliver-Rainer Wittmann //}
187*dec99bbdSOliver-Rainer Wittmann //}
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
UseElement()190cdf0e10cSrcweir bool SwAnnotationItem::UseElement()
191cdf0e10cSrcweir {
192*dec99bbdSOliver-Rainer Wittmann return mrFmtFld.IsFldInDoc();
193cdf0e10cSrcweir }
194cdf0e10cSrcweir
GetSidebarWindow(SwEditWin & rEditWin,WinBits nBits,SwPostItMgr & aMgr,SwPostItBits aBits)195cdf0e10cSrcweir sw::sidebarwindows::SwSidebarWin* SwAnnotationItem::GetSidebarWindow(
196cdf0e10cSrcweir SwEditWin& rEditWin,
197cdf0e10cSrcweir WinBits nBits,
198cdf0e10cSrcweir SwPostItMgr& aMgr,
199cdf0e10cSrcweir SwPostItBits aBits)
200cdf0e10cSrcweir {
201cdf0e10cSrcweir return new sw::annotation::SwAnnotationWin( rEditWin, nBits,
202cdf0e10cSrcweir aMgr, aBits,
203cdf0e10cSrcweir *this,
204*dec99bbdSOliver-Rainer Wittmann &mrFmtFld );
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir /*
208cdf0e10cSrcweir SwPosition SwRedCommentItem::GetAnchorPosition()
209cdf0e10cSrcweir {
210cdf0e10cSrcweir return *pRedline->Start();
211cdf0e10cSrcweir }
212cdf0e10cSrcweir
213cdf0e10cSrcweir SwSidebarWin* SwRedCommentItem::GetSidebarWindow(Window* pParent, WinBits nBits,SwPostItMgr* aMgr,SwPostItBits aBits)
214cdf0e10cSrcweir {
215cdf0e10cSrcweir return new SwRedComment(pParent,nBits,aMgr,aBits,pRedline);
216cdf0e10cSrcweir }
217cdf0e10cSrcweir
218cdf0e10cSrcweir bool SwRedCommentItem::UseElement()
219cdf0e10cSrcweir {
220cdf0e10cSrcweir return true;
221cdf0e10cSrcweir }
222cdf0e10cSrcweir */
223