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 ()__anon1901b8d10111::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