1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
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
28cdf0e10cSrcweir #ifndef _SVSTDARR_HXX
29cdf0e10cSrcweir #define _SVSTDARR_USHORTS
30cdf0e10cSrcweir #include <svl/svstdarr.hxx>
31cdf0e10cSrcweir #endif
32cdf0e10cSrcweir
33cdf0e10cSrcweir #include <vcl/dialog.hxx>
34cdf0e10cSrcweir #include <vcl/msgbox.hxx>
35cdf0e10cSrcweir #include <vcl/wrkwin.hxx>
36cdf0e10cSrcweir #include <viewopt.hxx>
37cdf0e10cSrcweir #include <frmtool.hxx>
38cdf0e10cSrcweir #include <viscrs.hxx>
39cdf0e10cSrcweir #include <crsrsh.hxx>
40cdf0e10cSrcweir #include <doc.hxx>
41cdf0e10cSrcweir #include <swtable.hxx>
42cdf0e10cSrcweir #include <viewimp.hxx>
43cdf0e10cSrcweir #include <dview.hxx>
44cdf0e10cSrcweir #include <rootfrm.hxx>
4569a74367SOliver-Rainer Wittmann #include <txtfrm.hxx>
46cdf0e10cSrcweir #include <docary.hxx>
47cdf0e10cSrcweir #include <extinput.hxx>
48cdf0e10cSrcweir #include <ndtxt.hxx>
4969a74367SOliver-Rainer Wittmann #include <txtfld.hxx>
50cdf0e10cSrcweir #include <scriptinfo.hxx>
5169a74367SOliver-Rainer Wittmann #include <mdiexp.hxx>
52cdf0e10cSrcweir #ifndef _COMCORE_HRC
53cdf0e10cSrcweir #include <comcore.hrc> // ResId fuer Abfrage wenn zu Search & Replaces
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir
56cdf0e10cSrcweir #include <svx/sdr/overlay/overlaymanager.hxx>
57cdf0e10cSrcweir #include <svx/sdrpaintwindow.hxx>
58cdf0e10cSrcweir #include <vcl/svapp.hxx>
59cdf0e10cSrcweir #include <svx/sdr/overlay/overlayselection.hxx>
6069a74367SOliver-Rainer Wittmann #include <overlayrangesoutline.hxx>
6169a74367SOliver-Rainer Wittmann
6269a74367SOliver-Rainer Wittmann #include <boost/scoped_ptr.hpp>
63cdf0e10cSrcweir
64cdf0e10cSrcweir extern void SwCalcPixStatics( OutputDevice *pOut );
65cdf0e10cSrcweir
66cdf0e10cSrcweir //Damit beim ShowCrsr nicht immer wieder die gleiche Size teuer ermittelt
67cdf0e10cSrcweir //werden muss, hier statische Member, die beim Wechsel des MapModes
68cdf0e10cSrcweir // angepasst werden
69cdf0e10cSrcweir
70cdf0e10cSrcweir long SwSelPaintRects::nPixPtX = 0;
71cdf0e10cSrcweir long SwSelPaintRects::nPixPtY = 0;
72cdf0e10cSrcweir MapMode* SwSelPaintRects::pMapMode = 0;
73cdf0e10cSrcweir
74cdf0e10cSrcweir
75cdf0e10cSrcweir #ifdef SHOW_BOOKMARKS
76cdf0e10cSrcweir // #include <IMark.hxx>
77cdf0e10cSrcweir //
78cdf0e10cSrcweir // class SwBookmarkRects : public SwSelPaintRects
79cdf0e10cSrcweir // {
80cdf0e10cSrcweir // virtual void Paint( const Rectangle& rRect );
81cdf0e10cSrcweir // virtual void FillRects();
82cdf0e10cSrcweir //
83cdf0e10cSrcweir // public:
84cdf0e10cSrcweir // SwBookmarkRects( const SwCrsrShell& rSh ) : SwSelPaintRects( rSh ) {}
85cdf0e10cSrcweir // };
86cdf0e10cSrcweir //
87cdf0e10cSrcweir // void SwBookmarkRects::Paint( const Rectangle& rRect )
88cdf0e10cSrcweir // {
89cdf0e10cSrcweir // Window* pWin = GetShell()->GetWin();
90cdf0e10cSrcweir //
91cdf0e10cSrcweir // RasterOp eOld( pWin->GetRasterOp() );
92cdf0e10cSrcweir // sal_Bool bLCol = pWin->IsLineColor();
93cdf0e10cSrcweir // Color aLCol( pWin->GetLineColor() );
94cdf0e10cSrcweir // sal_Bool bFCol = pWin->IsFillColor();
95cdf0e10cSrcweir // Color aFCol( pWin->GetFillColor() );
96cdf0e10cSrcweir //
97cdf0e10cSrcweir // pWin->SetRasterOp( ROP_XOR );
98cdf0e10cSrcweir // Color aCol( RGB_COLORDATA( 0xF0, 0xC8, 0xF0 ) ^ COL_WHITE );
99cdf0e10cSrcweir // pWin->SetFillColor( aCol );
100cdf0e10cSrcweir // pWin->SetLineColor( aCol );
101cdf0e10cSrcweir //
102cdf0e10cSrcweir // pWin->DrawRect( rRect );
103cdf0e10cSrcweir //
104cdf0e10cSrcweir // if( bLCol ) pWin->SetLineColor( aLCol ); else pWin->SetLineColor();
105cdf0e10cSrcweir // if( bFCol ) pWin->SetFillColor( aFCol ); else pWin->SetFillColor();
106cdf0e10cSrcweir // pWin->SetRasterOp( eOld );
107cdf0e10cSrcweir // }
108cdf0e10cSrcweir //
109cdf0e10cSrcweir // void SwBookmarkRects::FillRects()
110cdf0e10cSrcweir // {
111cdf0e10cSrcweir // SwRegionRects aReg( GetShell()->VisArea() );
112cdf0e10cSrcweir //
113cdf0e10cSrcweir // const SwBookmarks& rBkmkTbl = GetShell()->getIDocumentMarkAccess()->getBookmarks();
114cdf0e10cSrcweir // SwShellCrsr* pCrsr = 0;
115cdf0e10cSrcweir // for( sal_uInt16 n = 0; n < rBkmkTbl.Count(); ++n )
116cdf0e10cSrcweir // {
117cdf0e10cSrcweir // const SwBookmark& rBkmk = *rBkmkTbl[ n ];
118cdf0e10cSrcweir // if( rBkmk.IsBookMark() && rBkmk.GetOtherPos() )
119cdf0e10cSrcweir // {
120cdf0e10cSrcweir // if( !pCrsr )
121cdf0e10cSrcweir // {
122cdf0e10cSrcweir // pCrsr = new SwShellCrsr( *GetShell(), rBkmk.GetPos() );
123cdf0e10cSrcweir // pCrsr->SetMark();
124cdf0e10cSrcweir // }
125cdf0e10cSrcweir // else
126cdf0e10cSrcweir // *pCrsr->GetPoint() = rBkmk.GetPos();
127cdf0e10cSrcweir // *pCrsr->GetMark() = *rBkmk.GetOtherPos();
128cdf0e10cSrcweir // pCrsr->FillRects();
129cdf0e10cSrcweir // for( sal_uInt16 i = 0; i < pCrsr->Count(); ++i )
130cdf0e10cSrcweir // aReg -= (*pCrsr)[ i ];
131cdf0e10cSrcweir //
132cdf0e10cSrcweir // pCrsr->Remove( 0, i );
133cdf0e10cSrcweir // }
134cdf0e10cSrcweir // }
135cdf0e10cSrcweir // if( pCrsr ) delete pCrsr;
136cdf0e10cSrcweir //
137cdf0e10cSrcweir // aReg.Invert();
138cdf0e10cSrcweir // SwRects::Insert( &aReg, 0 );
139cdf0e10cSrcweir // }
140cdf0e10cSrcweir //
141cdf0e10cSrcweir // SwBookmarkRects* pBookMarkRects = 0;
142cdf0e10cSrcweir //
143cdf0e10cSrcweir // void ShowBookmarks( const SwCrsrShell* pSh, int nAction, const SwRect* pRect = 0 )
144cdf0e10cSrcweir // {
145cdf0e10cSrcweir // if( !pBookMarkRects && pSh->getIDocumentMarkAccess()->getBookmarks().Count() )
146cdf0e10cSrcweir // pBookMarkRects = new SwBookmarkRects( *pSh );
147cdf0e10cSrcweir //
148cdf0e10cSrcweir // if( pBookMarkRects )
149cdf0e10cSrcweir // {
150cdf0e10cSrcweir // switch( nAction )
151cdf0e10cSrcweir // {
152cdf0e10cSrcweir // case 1: pBookMarkRects->Show(); break;
153cdf0e10cSrcweir // case 2: pBookMarkRects->Hide(); break;
154cdf0e10cSrcweir // case 3: pBookMarkRects->Invalidate( *pRect ); break;
155cdf0e10cSrcweir // }
156cdf0e10cSrcweir //
157cdf0e10cSrcweir // if( !pBookMarkRects->Count() )
158cdf0e10cSrcweir // delete pBookMarkRects, pBookMarkRects = 0;
159cdf0e10cSrcweir // }
160cdf0e10cSrcweir // }
161cdf0e10cSrcweir //
162cdf0e10cSrcweir // #define SHOWBOOKMARKS1( nAct ) ShowBookmarks( GetShell(),nAct );
163cdf0e10cSrcweir // #define SHOWBOOKMARKS2( nAct, pRect ) ShowBookmarks( GetShell(),nAct, pRect );
164cdf0e10cSrcweir
165cdf0e10cSrcweir #else
166cdf0e10cSrcweir
167cdf0e10cSrcweir #define SHOWBOOKMARKS1( nAct )
168cdf0e10cSrcweir #define SHOWBOOKMARKS2( nAct, pRect )
169cdf0e10cSrcweir
170cdf0e10cSrcweir #endif
171cdf0e10cSrcweir
172cdf0e10cSrcweir #ifdef SHOW_REDLINES
173cdf0e10cSrcweir #include <redline.hxx>
174cdf0e10cSrcweir
175cdf0e10cSrcweir class SwRedlineRects : public SwSelPaintRects
176cdf0e10cSrcweir {
177cdf0e10cSrcweir sal_uInt16 nMode;
178cdf0e10cSrcweir sal_uInt16 nNm;
179cdf0e10cSrcweir
180cdf0e10cSrcweir virtual void Paint( const Rectangle& rRect );
181cdf0e10cSrcweir virtual void FillRects();
182cdf0e10cSrcweir
183cdf0e10cSrcweir public:
SwRedlineRects(const SwCrsrShell & rSh,sal_uInt16 nName,sal_uInt16 n)184cdf0e10cSrcweir SwRedlineRects( const SwCrsrShell& rSh, sal_uInt16 nName, sal_uInt16 n )
185cdf0e10cSrcweir : SwSelPaintRects( rSh ), nMode( n ), nNm( nName )
186cdf0e10cSrcweir {}
187cdf0e10cSrcweir };
188cdf0e10cSrcweir
Paint(const Rectangle & rRect)189cdf0e10cSrcweir void SwRedlineRects::Paint( const Rectangle& rRect )
190cdf0e10cSrcweir {
191cdf0e10cSrcweir Window* pWin = GetShell()->GetWin();
192cdf0e10cSrcweir
193cdf0e10cSrcweir RasterOp eOld( pWin->GetRasterOp() );
194cdf0e10cSrcweir sal_Bool bLCol = pWin->IsLineColor();
195cdf0e10cSrcweir Color aLCol( pWin->GetLineColor() );
196cdf0e10cSrcweir sal_Bool bFCol = pWin->IsFillColor();
197cdf0e10cSrcweir Color aFCol( pWin->GetFillColor() );
198cdf0e10cSrcweir
199cdf0e10cSrcweir pWin->SetRasterOp( ROP_XOR );
200cdf0e10cSrcweir Color aCol;
201cdf0e10cSrcweir
202cdf0e10cSrcweir sal_uInt8 nVal = 0xc8 - ( (nMode / 4) * 16 );
203cdf0e10cSrcweir switch( nMode % 4 )
204cdf0e10cSrcweir {
205cdf0e10cSrcweir case 0: aCol = RGB_COLORDATA( nVal, nVal, 0xFF ); break;
206cdf0e10cSrcweir case 1: aCol = RGB_COLORDATA( 0xFF, 0xc8, nVal ); break;
207cdf0e10cSrcweir case 2: aCol = RGB_COLORDATA( nVal, 0xFF, nVal ); break;
208cdf0e10cSrcweir case 3: aCol = RGB_COLORDATA( 0xFF, nVal, nVal ); break;
209cdf0e10cSrcweir }
210cdf0e10cSrcweir aCol = aCol.GetColor() ^ COL_WHITE;
211cdf0e10cSrcweir
212cdf0e10cSrcweir pWin->SetFillColor( aCol );
213cdf0e10cSrcweir pWin->SetLineColor( aCol );
214cdf0e10cSrcweir
215cdf0e10cSrcweir pWin->DrawRect( rRect );
216cdf0e10cSrcweir
217cdf0e10cSrcweir if( bLCol ) pWin->SetLineColor( aLCol ); else pWin->SetLineColor();
218cdf0e10cSrcweir if( bFCol ) pWin->SetFillColor( aFCol ); else pWin->SetFillColor();
219cdf0e10cSrcweir pWin->SetRasterOp( eOld );
220cdf0e10cSrcweir }
221cdf0e10cSrcweir
FillRects()222cdf0e10cSrcweir void SwRedlineRects::FillRects()
223cdf0e10cSrcweir {
224cdf0e10cSrcweir SwRegionRects aReg( GetShell()->VisArea() );
225cdf0e10cSrcweir
226cdf0e10cSrcweir const SwRedlineTbl& rTbl = GetShell()->GetDoc()->GetRedlineTbl();
227cdf0e10cSrcweir SwShellCrsr* pCrsr = 0;
228cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rTbl.Count(); ++n )
229cdf0e10cSrcweir {
230cdf0e10cSrcweir const SwRedline& rRed = *rTbl[ n ];
231cdf0e10cSrcweir if( rRed.HasMark() && (nMode % 4 ) == rRed.GetType() &&
232cdf0e10cSrcweir nNm == rRed.GetAuthor() )
233cdf0e10cSrcweir {
234cdf0e10cSrcweir if( !pCrsr )
235cdf0e10cSrcweir {
236cdf0e10cSrcweir pCrsr = new SwShellCrsr( *GetShell(), *rRed.GetPoint() );
237cdf0e10cSrcweir pCrsr->SetMark();
238cdf0e10cSrcweir }
239cdf0e10cSrcweir else
240cdf0e10cSrcweir *pCrsr->GetPoint() = *rRed.GetPoint();
241cdf0e10cSrcweir *pCrsr->GetMark() = *rRed.GetMark();
242cdf0e10cSrcweir pCrsr->FillRects();
243cdf0e10cSrcweir for( sal_uInt16 i = 0; i < pCrsr->Count(); ++i )
244cdf0e10cSrcweir aReg -= (*pCrsr)[ i ];
245cdf0e10cSrcweir
246cdf0e10cSrcweir pCrsr->Remove( 0, i );
247cdf0e10cSrcweir }
248cdf0e10cSrcweir }
249cdf0e10cSrcweir if( pCrsr ) delete pCrsr;
250cdf0e10cSrcweir
251cdf0e10cSrcweir aReg.Invert();
252cdf0e10cSrcweir SwRects::Insert( &aReg, 0 );
253cdf0e10cSrcweir }
254cdf0e10cSrcweir
255cdf0e10cSrcweir SwRedlineRects* aRedlines[ 10 * 4 ];
256cdf0e10cSrcweir static int bFirstCall = sal_True;
257cdf0e10cSrcweir
ShowRedlines(const SwCrsrShell * pSh,int nAction,const SwRect * pRect=0)258cdf0e10cSrcweir void ShowRedlines( const SwCrsrShell* pSh, int nAction, const SwRect* pRect = 0 )
259cdf0e10cSrcweir {
260cdf0e10cSrcweir if( bFirstCall )
261cdf0e10cSrcweir {
262cdf0e10cSrcweir memset( aRedlines, 0, sizeof(aRedlines));
263cdf0e10cSrcweir bFirstCall = sal_False;
264cdf0e10cSrcweir }
265cdf0e10cSrcweir
266cdf0e10cSrcweir const SwRedlineTbl& rTbl = pSh->GetDoc()->GetRedlineTbl();
267cdf0e10cSrcweir const SwRedlineAuthorTbl& rAuthorTbl = pSh->GetDoc()->GetRedlineAuthorTbl();
268cdf0e10cSrcweir
269cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rAuthorTbl.Count(); ++n )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir for( int i = 0; i < 4; ++i )
272cdf0e10cSrcweir {
273cdf0e10cSrcweir SwRedlineRects** ppRedRect = &aRedlines[ n * 4 + i ];
274cdf0e10cSrcweir if( rTbl.Count() && !*ppRedRect )
275cdf0e10cSrcweir *ppRedRect = new SwRedlineRects( *pSh, n, n * 4 + i );
276cdf0e10cSrcweir
277cdf0e10cSrcweir if( *ppRedRect )
278cdf0e10cSrcweir {
279cdf0e10cSrcweir switch( nAction )
280cdf0e10cSrcweir {
281cdf0e10cSrcweir case 1: (*ppRedRect)->Show(); break;
282cdf0e10cSrcweir case 2: (*ppRedRect)->Hide(); break;
283cdf0e10cSrcweir case 3: (*ppRedRect)->Invalidate( *pRect ); break;
284cdf0e10cSrcweir }
285cdf0e10cSrcweir
286cdf0e10cSrcweir if( !(*ppRedRect)->Count() )
287cdf0e10cSrcweir delete *ppRedRect, *ppRedRect = 0;
288cdf0e10cSrcweir }
289cdf0e10cSrcweir }
290cdf0e10cSrcweir }
291cdf0e10cSrcweir }
292cdf0e10cSrcweir
293cdf0e10cSrcweir #define SHOWREDLINES1( nAct ) ShowRedlines( GetShell(),nAct );
294cdf0e10cSrcweir #define SHOWREDLINES2( nAct, pRect ) ShowRedlines( GetShell(),nAct, pRect );
295cdf0e10cSrcweir
296cdf0e10cSrcweir #else
297cdf0e10cSrcweir
298cdf0e10cSrcweir #define SHOWREDLINES1( nAct )
299cdf0e10cSrcweir #define SHOWREDLINES2( nAct, pRect )
300cdf0e10cSrcweir
301cdf0e10cSrcweir #endif
302cdf0e10cSrcweir
303cdf0e10cSrcweir #ifdef JP_REDLINE
304cdf0e10cSrcweir if( GetDoc()->GetRedlineTbl().Count() )
305cdf0e10cSrcweir {
306cdf0e10cSrcweir SwRedlineTbl& rRedlineTbl = (SwRedlineTbl&)GetDoc()->GetRedlineTbl();
307cdf0e10cSrcweir for( sal_uInt16 i = 0; i < rRedlineTbl.Count(); ++i )
308cdf0e10cSrcweir rRedlineTbl[ i ]->HideRects( *GetShell() );
309cdf0e10cSrcweir }
310cdf0e10cSrcweir #endif
311cdf0e10cSrcweir
312cdf0e10cSrcweir // -------- Ab hier Klassen / Methoden fuer den nicht Text-Cursor ------
313cdf0e10cSrcweir
SwVisCrsr(const SwCrsrShell * pCShell)314cdf0e10cSrcweir SwVisCrsr::SwVisCrsr( const SwCrsrShell * pCShell )
315cdf0e10cSrcweir : pCrsrShell( pCShell )
316cdf0e10cSrcweir {
317cdf0e10cSrcweir pCShell->GetWin()->SetCursor( &aTxtCrsr );
318cdf0e10cSrcweir bIsVisible = aTxtCrsr.IsVisible();
319cdf0e10cSrcweir bIsDragCrsr = sal_False;
320cdf0e10cSrcweir aTxtCrsr.SetWidth( 0 );
321cdf0e10cSrcweir
322cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
323cdf0e10cSrcweir bTimerOn = sal_True;
324cdf0e10cSrcweir SetTimeout( 50 ); // 50msec Verzoegerung
325cdf0e10cSrcweir #endif
326cdf0e10cSrcweir }
327cdf0e10cSrcweir
328cdf0e10cSrcweir
329cdf0e10cSrcweir
~SwVisCrsr()330cdf0e10cSrcweir SwVisCrsr::~SwVisCrsr()
331cdf0e10cSrcweir {
332cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
333cdf0e10cSrcweir if( bTimerOn )
334cdf0e10cSrcweir Stop(); // Timer stoppen
335cdf0e10cSrcweir #endif
336cdf0e10cSrcweir
337cdf0e10cSrcweir if( bIsVisible && aTxtCrsr.IsVisible() )
338cdf0e10cSrcweir aTxtCrsr.Hide();
339cdf0e10cSrcweir
340cdf0e10cSrcweir pCrsrShell->GetWin()->SetCursor( 0 );
341cdf0e10cSrcweir }
342cdf0e10cSrcweir
343cdf0e10cSrcweir
344cdf0e10cSrcweir
345cdf0e10cSrcweir
Show()346cdf0e10cSrcweir void SwVisCrsr::Show()
347cdf0e10cSrcweir {
348cdf0e10cSrcweir if( !bIsVisible )
349cdf0e10cSrcweir {
350cdf0e10cSrcweir bIsVisible = sal_True;
351cdf0e10cSrcweir
352cdf0e10cSrcweir // muss ueberhaupt angezeigt werden ?
353cdf0e10cSrcweir if( pCrsrShell->VisArea().IsOver( pCrsrShell->aCharRect ) )
354cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
355cdf0e10cSrcweir {
356cdf0e10cSrcweir if( bTimerOn )
357cdf0e10cSrcweir Start(); // Timer aufsetzen
358cdf0e10cSrcweir else
359cdf0e10cSrcweir {
360cdf0e10cSrcweir if( IsActive() )
361cdf0e10cSrcweir Stop(); // Timer Stoppen
362cdf0e10cSrcweir
363cdf0e10cSrcweir _SetPosAndShow();
364cdf0e10cSrcweir }
365cdf0e10cSrcweir }
366cdf0e10cSrcweir #else
367cdf0e10cSrcweir _SetPosAndShow();
368cdf0e10cSrcweir #endif
369cdf0e10cSrcweir }
370cdf0e10cSrcweir }
371cdf0e10cSrcweir
372cdf0e10cSrcweir
373cdf0e10cSrcweir
Hide()374cdf0e10cSrcweir void SwVisCrsr::Hide()
375cdf0e10cSrcweir {
376cdf0e10cSrcweir if( bIsVisible )
377cdf0e10cSrcweir {
378cdf0e10cSrcweir bIsVisible = sal_False;
379cdf0e10cSrcweir
380cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
381cdf0e10cSrcweir if( IsActive() )
382cdf0e10cSrcweir Stop(); // Timer Stoppen
383cdf0e10cSrcweir #endif
384cdf0e10cSrcweir
385cdf0e10cSrcweir if( aTxtCrsr.IsVisible() ) // sollten die Flags nicht gueltig sein?
386cdf0e10cSrcweir aTxtCrsr.Hide();
387cdf0e10cSrcweir }
388cdf0e10cSrcweir }
389cdf0e10cSrcweir
390cdf0e10cSrcweir #ifdef SW_CRSR_TIMER
391cdf0e10cSrcweir
Timeout()392cdf0e10cSrcweir void __EXPORT SwVisCrsr::Timeout()
393cdf0e10cSrcweir {
394cdf0e10cSrcweir ASSERT( !bIsDragCrsr, "Timer vorher abschalten" );
395cdf0e10cSrcweir if( bIsVisible )
396cdf0e10cSrcweir {
397cdf0e10cSrcweir if ( !pCrsrShell->GetWin() ) //SwFrmFmt::GetGraphic setzt das Win temp aus!
398cdf0e10cSrcweir Start();
399cdf0e10cSrcweir else
400cdf0e10cSrcweir _SetPosAndShow();
401cdf0e10cSrcweir }
402cdf0e10cSrcweir }
403cdf0e10cSrcweir
ChgCrsrTimerFlag(sal_Bool bTimerOn)404cdf0e10cSrcweir sal_Bool SwCrsrShell::ChgCrsrTimerFlag( sal_Bool bTimerOn )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir return pVisCrsr->ChgTimerFlag( bTimerOn );
407cdf0e10cSrcweir }
408cdf0e10cSrcweir
409cdf0e10cSrcweir
ChgTimerFlag(sal_Bool bFlag)410cdf0e10cSrcweir sal_Bool SwVisCrsr::ChgTimerFlag( sal_Bool bFlag )
411cdf0e10cSrcweir {
412cdf0e10cSrcweir bOld = bTimerOn;
413cdf0e10cSrcweir if( !bFlag && bIsVisible && IsActive() )
414cdf0e10cSrcweir {
415cdf0e10cSrcweir Stop(); // Timer Stoppen
416cdf0e10cSrcweir _SetPosAndShow();
417cdf0e10cSrcweir }
418cdf0e10cSrcweir bTimerOn = bFlag;
419cdf0e10cSrcweir return bOld;
420cdf0e10cSrcweir }
421cdf0e10cSrcweir
422cdf0e10cSrcweir #endif
423cdf0e10cSrcweir
424cdf0e10cSrcweir
_SetPosAndShow()425cdf0e10cSrcweir void SwVisCrsr::_SetPosAndShow()
426cdf0e10cSrcweir {
427cdf0e10cSrcweir SwRect aRect;
428cdf0e10cSrcweir long nTmpY = pCrsrShell->aCrsrHeight.Y();
429cdf0e10cSrcweir if( 0 > nTmpY )
430cdf0e10cSrcweir {
431cdf0e10cSrcweir nTmpY = -nTmpY;
432cdf0e10cSrcweir aTxtCrsr.SetOrientation( 900 );
433cdf0e10cSrcweir aRect = SwRect( pCrsrShell->aCharRect.Pos(),
434cdf0e10cSrcweir Size( pCrsrShell->aCharRect.Height(), nTmpY ) );
435cdf0e10cSrcweir aRect.Pos().X() += pCrsrShell->aCrsrHeight.X();
436cdf0e10cSrcweir if( pCrsrShell->IsOverwriteCrsr() )
437cdf0e10cSrcweir aRect.Pos().Y() += aRect.Width();
438cdf0e10cSrcweir }
439cdf0e10cSrcweir else
440cdf0e10cSrcweir {
441cdf0e10cSrcweir aTxtCrsr.SetOrientation( 0 );
442cdf0e10cSrcweir aRect = SwRect( pCrsrShell->aCharRect.Pos(),
443cdf0e10cSrcweir Size( pCrsrShell->aCharRect.Width(), nTmpY ) );
444cdf0e10cSrcweir aRect.Pos().Y() += pCrsrShell->aCrsrHeight.X();
445cdf0e10cSrcweir }
446cdf0e10cSrcweir
447cdf0e10cSrcweir // check if cursor should show the current cursor bidi level
448cdf0e10cSrcweir aTxtCrsr.SetDirection( CURSOR_DIRECTION_NONE );
449cdf0e10cSrcweir const SwCursor* pTmpCrsr = pCrsrShell->_GetCrsr();
450cdf0e10cSrcweir
451cdf0e10cSrcweir if ( pTmpCrsr && !pCrsrShell->IsOverwriteCrsr() )
452cdf0e10cSrcweir {
453cdf0e10cSrcweir SwNode& rNode = pTmpCrsr->GetPoint()->nNode.GetNode();
454cdf0e10cSrcweir if( rNode.IsTxtNode() )
455cdf0e10cSrcweir {
456cdf0e10cSrcweir const SwTxtNode& rTNd = *rNode.GetTxtNode();
457cdf0e10cSrcweir const SwFrm* pFrm = rTNd.getLayoutFrm( pCrsrShell->GetLayout(), 0, 0, sal_False );
458cdf0e10cSrcweir if ( pFrm )
459cdf0e10cSrcweir {
460cdf0e10cSrcweir const SwScriptInfo* pSI = ((SwTxtFrm*)pFrm)->GetScriptInfo();
461cdf0e10cSrcweir // cursor level has to be shown
462cdf0e10cSrcweir if ( pSI && pSI->CountDirChg() > 1 )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir aTxtCrsr.SetDirection(
465cdf0e10cSrcweir ( pTmpCrsr->GetCrsrBidiLevel() % 2 ) ?
466cdf0e10cSrcweir CURSOR_DIRECTION_RTL :
467cdf0e10cSrcweir CURSOR_DIRECTION_LTR );
468cdf0e10cSrcweir }
469cdf0e10cSrcweir
470cdf0e10cSrcweir if ( pFrm->IsRightToLeft() )
471cdf0e10cSrcweir {
472cdf0e10cSrcweir const OutputDevice *pOut = pCrsrShell->GetOut();
473cdf0e10cSrcweir if ( pOut )
474cdf0e10cSrcweir {
475cdf0e10cSrcweir long nSize = pOut->GetSettings().GetStyleSettings().GetCursorSize();
476cdf0e10cSrcweir Size aSize( nSize, nSize );
477cdf0e10cSrcweir aSize = pOut->PixelToLogic( aSize );
478cdf0e10cSrcweir aRect.Left( aRect.Left() - aSize.Width() );
479cdf0e10cSrcweir }
480cdf0e10cSrcweir }
481cdf0e10cSrcweir }
482cdf0e10cSrcweir }
483cdf0e10cSrcweir }
484cdf0e10cSrcweir
485cdf0e10cSrcweir if( aRect.Height() )
486cdf0e10cSrcweir {
487cdf0e10cSrcweir ::SwCalcPixStatics( pCrsrShell->GetOut() );
488cdf0e10cSrcweir ::SwAlignRect( aRect, (ViewShell*)pCrsrShell );
489cdf0e10cSrcweir }
490cdf0e10cSrcweir if( !pCrsrShell->IsOverwriteCrsr() || bIsDragCrsr ||
491cdf0e10cSrcweir pCrsrShell->IsSelection() )
492cdf0e10cSrcweir aRect.Width( 0 );
493cdf0e10cSrcweir
494cdf0e10cSrcweir aTxtCrsr.SetSize( aRect.SSize() );
495cdf0e10cSrcweir
496cdf0e10cSrcweir aTxtCrsr.SetPos( aRect.Pos() );
497cdf0e10cSrcweir if ( !pCrsrShell->IsCrsrReadonly() || pCrsrShell->GetViewOptions()->IsSelectionInReadonly() )
498cdf0e10cSrcweir {
499cdf0e10cSrcweir if ( pCrsrShell->GetDrawView() )
500cdf0e10cSrcweir ((SwDrawView*)pCrsrShell->GetDrawView())->SetAnimationEnabled(
501cdf0e10cSrcweir !pCrsrShell->IsSelection() );
502cdf0e10cSrcweir
503cdf0e10cSrcweir sal_uInt16 nStyle = bIsDragCrsr ? CURSOR_SHADOW : 0;
504cdf0e10cSrcweir if( nStyle != aTxtCrsr.GetStyle() )
505cdf0e10cSrcweir {
506cdf0e10cSrcweir aTxtCrsr.SetStyle( nStyle );
507cdf0e10cSrcweir aTxtCrsr.SetWindow( bIsDragCrsr ? pCrsrShell->GetWin() : 0 );
508cdf0e10cSrcweir }
509cdf0e10cSrcweir
510cdf0e10cSrcweir aTxtCrsr.Show();
511cdf0e10cSrcweir }
512cdf0e10cSrcweir }
513cdf0e10cSrcweir
514cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
515cdf0e10cSrcweir
SwSelPaintRects(const SwCrsrShell & rCSh)516cdf0e10cSrcweir SwSelPaintRects::SwSelPaintRects( const SwCrsrShell& rCSh )
51769a74367SOliver-Rainer Wittmann : SwRects( 0 )
51869a74367SOliver-Rainer Wittmann , pCShell( &rCSh )
51969a74367SOliver-Rainer Wittmann , mpCursorOverlay( 0 )
52069a74367SOliver-Rainer Wittmann , mbShowTxtInputFldOverlay( true )
52169a74367SOliver-Rainer Wittmann , mpTxtInputFldOverlay( NULL )
522cdf0e10cSrcweir {
523cdf0e10cSrcweir }
524cdf0e10cSrcweir
~SwSelPaintRects()525cdf0e10cSrcweir SwSelPaintRects::~SwSelPaintRects()
526cdf0e10cSrcweir {
527cdf0e10cSrcweir Hide();
528cdf0e10cSrcweir }
529cdf0e10cSrcweir
swapContent(SwSelPaintRects & rSwap)530cdf0e10cSrcweir void SwSelPaintRects::swapContent(SwSelPaintRects& rSwap)
531cdf0e10cSrcweir {
53269a74367SOliver-Rainer Wittmann SwRects aTempRects;
53369a74367SOliver-Rainer Wittmann aTempRects.Insert(this, 0);
53469a74367SOliver-Rainer Wittmann
53569a74367SOliver-Rainer Wittmann Remove(0, Count());
53669a74367SOliver-Rainer Wittmann Insert(&rSwap, 0);
53769a74367SOliver-Rainer Wittmann
53869a74367SOliver-Rainer Wittmann rSwap.Remove(0, rSwap.Count());
53969a74367SOliver-Rainer Wittmann rSwap.Insert(&aTempRects, 0);
540cdf0e10cSrcweir
54169a74367SOliver-Rainer Wittmann // #i75172# also swap mpCursorOverlay
54269a74367SOliver-Rainer Wittmann sdr::overlay::OverlayObject* pTempOverlay = getCursorOverlay();
54369a74367SOliver-Rainer Wittmann setCursorOverlay(rSwap.getCursorOverlay());
54469a74367SOliver-Rainer Wittmann rSwap.setCursorOverlay(pTempOverlay);
545cdf0e10cSrcweir
54669a74367SOliver-Rainer Wittmann const bool bTempShowTxtInputFldOverlay = mbShowTxtInputFldOverlay;
54769a74367SOliver-Rainer Wittmann mbShowTxtInputFldOverlay = rSwap.mbShowTxtInputFldOverlay;
54869a74367SOliver-Rainer Wittmann rSwap.mbShowTxtInputFldOverlay = bTempShowTxtInputFldOverlay;
549cdf0e10cSrcweir
55069a74367SOliver-Rainer Wittmann sw::overlay::OverlayRangesOutline* pTempTxtInputFldOverlay = mpTxtInputFldOverlay;
55169a74367SOliver-Rainer Wittmann mpTxtInputFldOverlay = rSwap.mpTxtInputFldOverlay;
55269a74367SOliver-Rainer Wittmann rSwap.mpTxtInputFldOverlay = pTempTxtInputFldOverlay;
553cdf0e10cSrcweir }
554cdf0e10cSrcweir
Hide()555cdf0e10cSrcweir void SwSelPaintRects::Hide()
556cdf0e10cSrcweir {
55769a74367SOliver-Rainer Wittmann if(mpCursorOverlay)
55869a74367SOliver-Rainer Wittmann {
55969a74367SOliver-Rainer Wittmann delete mpCursorOverlay;
56069a74367SOliver-Rainer Wittmann mpCursorOverlay = 0;
56169a74367SOliver-Rainer Wittmann }
56269a74367SOliver-Rainer Wittmann
56369a74367SOliver-Rainer Wittmann if ( mpTxtInputFldOverlay != NULL )
56469a74367SOliver-Rainer Wittmann {
56569a74367SOliver-Rainer Wittmann delete mpTxtInputFldOverlay;
56669a74367SOliver-Rainer Wittmann mpTxtInputFldOverlay = NULL;
56769a74367SOliver-Rainer Wittmann }
568cdf0e10cSrcweir
56969a74367SOliver-Rainer Wittmann SwRects::Remove( 0, Count() );
570cdf0e10cSrcweir }
571cdf0e10cSrcweir
Show()572cdf0e10cSrcweir void SwSelPaintRects::Show()
573cdf0e10cSrcweir {
57469a74367SOliver-Rainer Wittmann SdrView* pView = (SdrView*)pCShell->GetDrawView();
575cdf0e10cSrcweir
57669a74367SOliver-Rainer Wittmann if(pView && pView->PaintWindowCount())
57769a74367SOliver-Rainer Wittmann {
57869a74367SOliver-Rainer Wittmann // reset rects
57969a74367SOliver-Rainer Wittmann SwRects::Remove( 0, SwRects::Count() );
58069a74367SOliver-Rainer Wittmann FillRects();
581cdf0e10cSrcweir
58269a74367SOliver-Rainer Wittmann // get new rects
58369a74367SOliver-Rainer Wittmann std::vector< basegfx::B2DRange > aNewRanges;
584cdf0e10cSrcweir
58569a74367SOliver-Rainer Wittmann for(sal_uInt16 a(0); a < Count(); a++)
58669a74367SOliver-Rainer Wittmann {
58769a74367SOliver-Rainer Wittmann const SwRect aNextRect((*this)[a]);
58869a74367SOliver-Rainer Wittmann const Rectangle aPntRect(aNextRect.SVRect());
589cdf0e10cSrcweir
590cdf0e10cSrcweir aNewRanges.push_back(basegfx::B2DRange(
591cdf0e10cSrcweir aPntRect.Left(), aPntRect.Top(),
592cdf0e10cSrcweir aPntRect.Right() + 1, aPntRect.Bottom() + 1));
59369a74367SOliver-Rainer Wittmann }
594cdf0e10cSrcweir
59569a74367SOliver-Rainer Wittmann if(mpCursorOverlay)
59669a74367SOliver-Rainer Wittmann {
59769a74367SOliver-Rainer Wittmann if(aNewRanges.size())
59869a74367SOliver-Rainer Wittmann {
59969a74367SOliver-Rainer Wittmann static_cast< sdr::overlay::OverlaySelection* >(mpCursorOverlay)->setRanges(aNewRanges);
60069a74367SOliver-Rainer Wittmann }
60169a74367SOliver-Rainer Wittmann else
60269a74367SOliver-Rainer Wittmann {
60369a74367SOliver-Rainer Wittmann delete mpCursorOverlay;
60469a74367SOliver-Rainer Wittmann mpCursorOverlay = 0;
60569a74367SOliver-Rainer Wittmann }
60669a74367SOliver-Rainer Wittmann }
60769a74367SOliver-Rainer Wittmann else if(Count())
60869a74367SOliver-Rainer Wittmann {
60969a74367SOliver-Rainer Wittmann SdrPaintWindow* pCandidate = pView->GetPaintWindow(0);
61069a74367SOliver-Rainer Wittmann sdr::overlay::OverlayManager* pTargetOverlay = pCandidate->GetOverlayManager();
611cdf0e10cSrcweir
61269a74367SOliver-Rainer Wittmann if(pTargetOverlay)
61369a74367SOliver-Rainer Wittmann {
6146043ac9bSArmin Le Grand // get the system's hilight color
6156043ac9bSArmin Le Grand const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer;
6166043ac9bSArmin Le Grand const Color aHighlight(aSvtOptionsDrawinglayer.getHilightColor());
617cdf0e10cSrcweir
61869a74367SOliver-Rainer Wittmann // create correct selection
61969a74367SOliver-Rainer Wittmann mpCursorOverlay = new sdr::overlay::OverlaySelection(
62069a74367SOliver-Rainer Wittmann sdr::overlay::OVERLAY_TRANSPARENT,
62169a74367SOliver-Rainer Wittmann aHighlight,
62269a74367SOliver-Rainer Wittmann aNewRanges,
623cdf0e10cSrcweir true);
624cdf0e10cSrcweir
62569a74367SOliver-Rainer Wittmann pTargetOverlay->add(*mpCursorOverlay);
62669a74367SOliver-Rainer Wittmann }
62769a74367SOliver-Rainer Wittmann }
62869a74367SOliver-Rainer Wittmann
62969a74367SOliver-Rainer Wittmann HighlightInputFld();
63069a74367SOliver-Rainer Wittmann }
63169a74367SOliver-Rainer Wittmann }
63269a74367SOliver-Rainer Wittmann
63369a74367SOliver-Rainer Wittmann
HighlightInputFld()63469a74367SOliver-Rainer Wittmann void SwSelPaintRects::HighlightInputFld()
63569a74367SOliver-Rainer Wittmann {
63669a74367SOliver-Rainer Wittmann std::vector< basegfx::B2DRange > aInputFldRanges;
63769a74367SOliver-Rainer Wittmann
63869a74367SOliver-Rainer Wittmann if ( mbShowTxtInputFldOverlay )
63969a74367SOliver-Rainer Wittmann {
64069a74367SOliver-Rainer Wittmann SwTxtInputFld* pCurTxtInputFldAtCrsr =
64169a74367SOliver-Rainer Wittmann dynamic_cast<SwTxtInputFld*>(GetShell()->GetTxtFldAtPos( GetShell()->GetCrsr()->Start(), false ));
64269a74367SOliver-Rainer Wittmann if ( pCurTxtInputFldAtCrsr != NULL )
64369a74367SOliver-Rainer Wittmann {
64469a74367SOliver-Rainer Wittmann SwTxtNode* pTxtNode = pCurTxtInputFldAtCrsr->GetpTxtNode();
64569a74367SOliver-Rainer Wittmann ::boost::scoped_ptr<SwShellCrsr> pCrsrForInputTxtFld(
64669a74367SOliver-Rainer Wittmann new SwShellCrsr( *GetShell(), SwPosition( *pTxtNode, *(pCurTxtInputFldAtCrsr->GetStart()) ) ) );
64769a74367SOliver-Rainer Wittmann pCrsrForInputTxtFld->SetMark();
64869a74367SOliver-Rainer Wittmann pCrsrForInputTxtFld->GetMark()->nNode = *pTxtNode;
64969a74367SOliver-Rainer Wittmann pCrsrForInputTxtFld->GetMark()->nContent.Assign( pTxtNode, *(pCurTxtInputFldAtCrsr->End()) );
65069a74367SOliver-Rainer Wittmann
65169a74367SOliver-Rainer Wittmann pCrsrForInputTxtFld->FillRects();
65269a74367SOliver-Rainer Wittmann
65369a74367SOliver-Rainer Wittmann for( sal_uInt16 a(0); a < pCrsrForInputTxtFld->Count(); ++a )
65469a74367SOliver-Rainer Wittmann {
65569a74367SOliver-Rainer Wittmann const SwRect aNextRect((*pCrsrForInputTxtFld)[a]);
65669a74367SOliver-Rainer Wittmann const Rectangle aPntRect(aNextRect.SVRect());
65769a74367SOliver-Rainer Wittmann
65869a74367SOliver-Rainer Wittmann aInputFldRanges.push_back(basegfx::B2DRange(
65969a74367SOliver-Rainer Wittmann aPntRect.Left(), aPntRect.Top(),
66069a74367SOliver-Rainer Wittmann aPntRect.Right() + 1, aPntRect.Bottom() + 1));
66169a74367SOliver-Rainer Wittmann }
66269a74367SOliver-Rainer Wittmann }
66369a74367SOliver-Rainer Wittmann }
66469a74367SOliver-Rainer Wittmann
66569a74367SOliver-Rainer Wittmann if ( aInputFldRanges.size() > 0 )
66669a74367SOliver-Rainer Wittmann {
66769a74367SOliver-Rainer Wittmann if ( mpTxtInputFldOverlay != NULL )
66869a74367SOliver-Rainer Wittmann {
66969a74367SOliver-Rainer Wittmann mpTxtInputFldOverlay->setRanges( aInputFldRanges );
67069a74367SOliver-Rainer Wittmann }
67169a74367SOliver-Rainer Wittmann else
67269a74367SOliver-Rainer Wittmann {
67369a74367SOliver-Rainer Wittmann SdrView* pView = (SdrView*)GetShell()->GetDrawView();
67469a74367SOliver-Rainer Wittmann SdrPaintWindow* pCandidate = pView->GetPaintWindow(0);
67569a74367SOliver-Rainer Wittmann sdr::overlay::OverlayManager* pTargetOverlay = pCandidate->GetOverlayManager();
67669a74367SOliver-Rainer Wittmann
67769a74367SOliver-Rainer Wittmann if(pTargetOverlay)
67869a74367SOliver-Rainer Wittmann {
67969a74367SOliver-Rainer Wittmann // use system's hilight color with decreased luminance as highlight color
68069a74367SOliver-Rainer Wittmann const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer;
68169a74367SOliver-Rainer Wittmann Color aHighlight(aSvtOptionsDrawinglayer.getHilightColor());
68269a74367SOliver-Rainer Wittmann aHighlight.DecreaseLuminance( 128 );
68369a74367SOliver-Rainer Wittmann
68469a74367SOliver-Rainer Wittmann mpTxtInputFldOverlay = new sw::overlay::OverlayRangesOutline( aHighlight, aInputFldRanges );
68569a74367SOliver-Rainer Wittmann pTargetOverlay->add( *mpTxtInputFldOverlay );
68669a74367SOliver-Rainer Wittmann }
68769a74367SOliver-Rainer Wittmann }
68869a74367SOliver-Rainer Wittmann }
68969a74367SOliver-Rainer Wittmann else
69069a74367SOliver-Rainer Wittmann {
69169a74367SOliver-Rainer Wittmann if ( mpTxtInputFldOverlay != NULL )
69269a74367SOliver-Rainer Wittmann {
69369a74367SOliver-Rainer Wittmann delete mpTxtInputFldOverlay;
69469a74367SOliver-Rainer Wittmann mpTxtInputFldOverlay = NULL;
69569a74367SOliver-Rainer Wittmann }
69669a74367SOliver-Rainer Wittmann }
697cdf0e10cSrcweir }
698cdf0e10cSrcweir
69969a74367SOliver-Rainer Wittmann
Invalidate(const SwRect & rRect)700cdf0e10cSrcweir void SwSelPaintRects::Invalidate( const SwRect& rRect )
701cdf0e10cSrcweir {
702cdf0e10cSrcweir sal_uInt16 nSz = Count();
703cdf0e10cSrcweir if( !nSz )
704cdf0e10cSrcweir return;
705cdf0e10cSrcweir
706cdf0e10cSrcweir SwRegionRects aReg( GetShell()->VisArea() );
707cdf0e10cSrcweir aReg.Remove( 0, aReg.Count() );
708cdf0e10cSrcweir aReg.Insert( this, 0 );
709cdf0e10cSrcweir aReg -= rRect;
710cdf0e10cSrcweir SwRects::Remove( 0, nSz );
711cdf0e10cSrcweir SwRects::Insert( &aReg, 0 );
712cdf0e10cSrcweir
713cdf0e10cSrcweir // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
714cdf0e10cSrcweir // Liegt die Selection rechts oder unten ausserhalb des sichtbaren
715cdf0e10cSrcweir // Bereiches, so ist diese nie auf eine Pixel rechts/unten aligned.
716cdf0e10cSrcweir // Das muss hier erkannt und ggf. das Rechteckt erweitert werden.
717cdf0e10cSrcweir // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
718cdf0e10cSrcweir if( GetShell()->bVisPortChgd && 0 != ( nSz = Count()) )
719cdf0e10cSrcweir {
720cdf0e10cSrcweir SwSelPaintRects::Get1PixelInLogic( *GetShell() );
721cdf0e10cSrcweir SwRect* pRect = (SwRect*)GetData();
722cdf0e10cSrcweir for( ; nSz--; ++pRect )
723cdf0e10cSrcweir {
724cdf0e10cSrcweir if( pRect->Right() == GetShell()->aOldRBPos.X() )
725cdf0e10cSrcweir pRect->Right( pRect->Right() + nPixPtX );
726cdf0e10cSrcweir if( pRect->Bottom() == GetShell()->aOldRBPos.Y() )
727cdf0e10cSrcweir pRect->Bottom( pRect->Bottom() + nPixPtY );
728cdf0e10cSrcweir }
729cdf0e10cSrcweir }
730cdf0e10cSrcweir }
731cdf0e10cSrcweir
Paint(const Rectangle &)732cdf0e10cSrcweir void SwSelPaintRects::Paint( const Rectangle& /*rRect*/ )
733cdf0e10cSrcweir {
734cdf0e10cSrcweir // nothing to do with overlays
735cdf0e10cSrcweir }
736cdf0e10cSrcweir
737cdf0e10cSrcweir
738cdf0e10cSrcweir // check current MapMode of the shell and set possibly the static members.
739cdf0e10cSrcweir // Optional set the parameters pX, pY
Get1PixelInLogic(const ViewShell & rSh,long * pX,long * pY)740cdf0e10cSrcweir void SwSelPaintRects::Get1PixelInLogic( const ViewShell& rSh,
741cdf0e10cSrcweir long* pX, long* pY )
742cdf0e10cSrcweir {
743cdf0e10cSrcweir const OutputDevice* pOut = rSh.GetWin();
744cdf0e10cSrcweir if ( ! pOut )
745cdf0e10cSrcweir pOut = rSh.GetOut();
746cdf0e10cSrcweir
747cdf0e10cSrcweir const MapMode& rMM = pOut->GetMapMode();
748cdf0e10cSrcweir if( pMapMode->GetMapUnit() != rMM.GetMapUnit() ||
749cdf0e10cSrcweir pMapMode->GetScaleX() != rMM.GetScaleX() ||
750cdf0e10cSrcweir pMapMode->GetScaleY() != rMM.GetScaleY() )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir *pMapMode = rMM;
753cdf0e10cSrcweir Size aTmp( 1, 1 );
754cdf0e10cSrcweir aTmp = pOut->PixelToLogic( aTmp );
755cdf0e10cSrcweir nPixPtX = aTmp.Width();
756cdf0e10cSrcweir nPixPtY = aTmp.Height();
757cdf0e10cSrcweir }
758cdf0e10cSrcweir if( pX )
759cdf0e10cSrcweir *pX = nPixPtX;
760cdf0e10cSrcweir if( pY )
761cdf0e10cSrcweir *pY = nPixPtY;
762cdf0e10cSrcweir }
763cdf0e10cSrcweir
764cdf0e10cSrcweir
765cdf0e10cSrcweir /* */
766cdf0e10cSrcweir
SwShellCrsr(const SwCrsrShell & rCShell,const SwPosition & rPos)76769a74367SOliver-Rainer Wittmann SwShellCrsr::SwShellCrsr(
76869a74367SOliver-Rainer Wittmann const SwCrsrShell& rCShell,
76969a74367SOliver-Rainer Wittmann const SwPosition &rPos )
77069a74367SOliver-Rainer Wittmann : SwCursor(rPos,0,false)
77169a74367SOliver-Rainer Wittmann , SwSelPaintRects(rCShell)
77269a74367SOliver-Rainer Wittmann , pPt(SwPaM::GetPoint())
773cdf0e10cSrcweir {}
774cdf0e10cSrcweir
775cdf0e10cSrcweir
SwShellCrsr(const SwCrsrShell & rCShell,const SwPosition & rPos,const Point & rPtPos,SwPaM * pRing)77669a74367SOliver-Rainer Wittmann SwShellCrsr::SwShellCrsr(
77769a74367SOliver-Rainer Wittmann const SwCrsrShell& rCShell,
77869a74367SOliver-Rainer Wittmann const SwPosition &rPos,
77969a74367SOliver-Rainer Wittmann const Point& rPtPos,
78069a74367SOliver-Rainer Wittmann SwPaM* pRing )
78169a74367SOliver-Rainer Wittmann : SwCursor(rPos, pRing, false)
78269a74367SOliver-Rainer Wittmann , SwSelPaintRects(rCShell)
78369a74367SOliver-Rainer Wittmann , aMkPt(rPtPos)
78469a74367SOliver-Rainer Wittmann , aPtPt(rPtPos)
78569a74367SOliver-Rainer Wittmann , pPt(SwPaM::GetPoint())
786cdf0e10cSrcweir {}
787cdf0e10cSrcweir
788cdf0e10cSrcweir
SwShellCrsr(SwShellCrsr & rICrsr)789cdf0e10cSrcweir SwShellCrsr::SwShellCrsr( SwShellCrsr& rICrsr )
79069a74367SOliver-Rainer Wittmann : SwCursor(rICrsr)
79169a74367SOliver-Rainer Wittmann , SwSelPaintRects(*rICrsr.GetShell())
79269a74367SOliver-Rainer Wittmann , aMkPt(rICrsr.GetMkPos())
79369a74367SOliver-Rainer Wittmann , aPtPt(rICrsr.GetPtPos())
79469a74367SOliver-Rainer Wittmann , pPt(SwPaM::GetPoint())
795cdf0e10cSrcweir {}
796cdf0e10cSrcweir
~SwShellCrsr()79769a74367SOliver-Rainer Wittmann SwShellCrsr::~SwShellCrsr()
79869a74367SOliver-Rainer Wittmann {}
799cdf0e10cSrcweir
800cdf0e10cSrcweir
IsReadOnlyAvailable() const801cdf0e10cSrcweir bool SwShellCrsr::IsReadOnlyAvailable() const
802cdf0e10cSrcweir {
803cdf0e10cSrcweir return GetShell()->IsReadOnlyAvailable();
804cdf0e10cSrcweir }
805cdf0e10cSrcweir
SetMark()806cdf0e10cSrcweir void SwShellCrsr::SetMark()
807cdf0e10cSrcweir {
808cdf0e10cSrcweir if( SwPaM::GetPoint() == pPt )
809cdf0e10cSrcweir aMkPt = aPtPt;
810cdf0e10cSrcweir else
811cdf0e10cSrcweir aPtPt = aMkPt;
812cdf0e10cSrcweir SwPaM::SetMark();
813cdf0e10cSrcweir }
814cdf0e10cSrcweir
FillRects()815cdf0e10cSrcweir void SwShellCrsr::FillRects()
816cdf0e10cSrcweir {
81769a74367SOliver-Rainer Wittmann // die neuen Rechtecke berechnen
818*5c0a9181SOliver-Rainer Wittmann if ( HasMark()
819*5c0a9181SOliver-Rainer Wittmann && GetPoint()->nNode.GetNode().IsCntntNode()
820*5c0a9181SOliver-Rainer Wittmann && GetPoint()->nNode.GetNode().GetCntntNode()->getLayoutFrm( GetShell()->GetLayout() )
821*5c0a9181SOliver-Rainer Wittmann && ( GetMark()->nNode == GetPoint()->nNode
822*5c0a9181SOliver-Rainer Wittmann || ( GetMark()->nNode.GetNode().IsCntntNode()
823*5c0a9181SOliver-Rainer Wittmann && GetMark()->nNode.GetNode().GetCntntNode()->getLayoutFrm( GetShell()->GetLayout() ) ) ) )
824*5c0a9181SOliver-Rainer Wittmann {
825*5c0a9181SOliver-Rainer Wittmann GetShell()->GetLayout()->CalcFrmRects( *this );
826*5c0a9181SOliver-Rainer Wittmann }
827cdf0e10cSrcweir }
828cdf0e10cSrcweir
829cdf0e10cSrcweir
Show()830cdf0e10cSrcweir void SwShellCrsr::Show()
831cdf0e10cSrcweir {
832cdf0e10cSrcweir SwShellCrsr * pTmp = this;
833cdf0e10cSrcweir do {
834cdf0e10cSrcweir pTmp->SwSelPaintRects::Show();
835cdf0e10cSrcweir } while( this != ( pTmp = dynamic_cast<SwShellCrsr*>(pTmp->GetNext()) ) );
836cdf0e10cSrcweir
837cdf0e10cSrcweir SHOWBOOKMARKS1( 1 )
838cdf0e10cSrcweir SHOWREDLINES1( 1 )
839cdf0e10cSrcweir }
840cdf0e10cSrcweir
841cdf0e10cSrcweir
842cdf0e10cSrcweir // Dieses Rechteck wird neu gepaintet, also ist die SSelection in
843cdf0e10cSrcweir // dem Bereich ungueltig
Invalidate(const SwRect & rRect)844cdf0e10cSrcweir void SwShellCrsr::Invalidate( const SwRect& rRect )
845cdf0e10cSrcweir {
846cdf0e10cSrcweir SwShellCrsr * pTmp = this;
847cdf0e10cSrcweir
848cdf0e10cSrcweir do
849cdf0e10cSrcweir {
850cdf0e10cSrcweir pTmp->SwSelPaintRects::Invalidate( rRect );
851cdf0e10cSrcweir
852cdf0e10cSrcweir // --> FME 2005-08-18 #125102#
853cdf0e10cSrcweir // skip any non SwShellCrsr objects in the ring
854cdf0e10cSrcweir // (see:SwAutoFormat::DeleteSel()
855cdf0e10cSrcweir // <--
856cdf0e10cSrcweir Ring* pTmpRing = pTmp;
857cdf0e10cSrcweir pTmp = 0;
858cdf0e10cSrcweir do
859cdf0e10cSrcweir {
860cdf0e10cSrcweir pTmpRing = pTmpRing->GetNext();
861cdf0e10cSrcweir pTmp = dynamic_cast<SwShellCrsr*>(pTmpRing);
862cdf0e10cSrcweir }
863cdf0e10cSrcweir while ( !pTmp );
864cdf0e10cSrcweir }
865cdf0e10cSrcweir while( this != pTmp );
866cdf0e10cSrcweir
867cdf0e10cSrcweir SHOWBOOKMARKS2( 3, &rRect )
868cdf0e10cSrcweir SHOWREDLINES2( 3, &rRect )
869cdf0e10cSrcweir }
870cdf0e10cSrcweir
871cdf0e10cSrcweir
Hide()872cdf0e10cSrcweir void SwShellCrsr::Hide()
873cdf0e10cSrcweir {
874cdf0e10cSrcweir SwShellCrsr * pTmp = this;
875cdf0e10cSrcweir do {
876cdf0e10cSrcweir pTmp->SwSelPaintRects::Hide();
877cdf0e10cSrcweir } while( this != ( pTmp = dynamic_cast<SwShellCrsr*>(pTmp->GetNext()) ) );
878cdf0e10cSrcweir
879cdf0e10cSrcweir SHOWBOOKMARKS1( 2 )
880cdf0e10cSrcweir SHOWREDLINES1( 2 )
881cdf0e10cSrcweir }
882cdf0e10cSrcweir
Create(SwPaM * pRing) const883cdf0e10cSrcweir SwCursor* SwShellCrsr::Create( SwPaM* pRing ) const
884cdf0e10cSrcweir {
885cdf0e10cSrcweir return new SwShellCrsr( *GetShell(), *GetPoint(), GetPtPos(), pRing );
886cdf0e10cSrcweir }
887cdf0e10cSrcweir
888cdf0e10cSrcweir
MaxReplaceArived()889cdf0e10cSrcweir short SwShellCrsr::MaxReplaceArived()
890cdf0e10cSrcweir {
891cdf0e10cSrcweir short nRet = RET_YES;
892cdf0e10cSrcweir Window* pDlg = LAYOUT_THIS_WINDOW (::GetSearchDialog());
893cdf0e10cSrcweir if( pDlg )
894cdf0e10cSrcweir {
895cdf0e10cSrcweir // alte Actions beenden; die Tabellen-Frames werden angelegt und
896cdf0e10cSrcweir // eine SSelection kann erzeugt werden
897cdf0e10cSrcweir SvUShorts aArr;
898cdf0e10cSrcweir sal_uInt16 nActCnt;
899cdf0e10cSrcweir ViewShell *pShell = const_cast< SwCrsrShell* >( GetShell() ),
900cdf0e10cSrcweir *pSh = pShell;
901cdf0e10cSrcweir do {
902cdf0e10cSrcweir for( nActCnt = 0; pSh->ActionPend(); ++nActCnt )
903cdf0e10cSrcweir pSh->EndAction();
904cdf0e10cSrcweir aArr.Insert( nActCnt, aArr.Count() );
905cdf0e10cSrcweir } while( pShell != ( pSh = (ViewShell*)pSh->GetNext() ) );
906cdf0e10cSrcweir
907cdf0e10cSrcweir {
908cdf0e10cSrcweir nRet = QueryBox( pDlg, SW_RES( MSG_COMCORE_ASKSEARCH )).Execute();
909cdf0e10cSrcweir }
910cdf0e10cSrcweir
911cdf0e10cSrcweir for( sal_uInt16 n = 0; n < aArr.Count(); ++n )
912cdf0e10cSrcweir {
913cdf0e10cSrcweir for( nActCnt = aArr[n]; nActCnt--; )
914cdf0e10cSrcweir pSh->StartAction();
915cdf0e10cSrcweir pSh = (ViewShell*)pSh->GetNext();
916cdf0e10cSrcweir } //swmod 071107//swmod 071225
917cdf0e10cSrcweir }
918cdf0e10cSrcweir else
919cdf0e10cSrcweir // ansonsten aus dem Basic, und dann auf RET_YES schalten
920cdf0e10cSrcweir nRet = RET_YES;
921cdf0e10cSrcweir
922cdf0e10cSrcweir return nRet;
923cdf0e10cSrcweir }
924cdf0e10cSrcweir
SaveTblBoxCntnt(const SwPosition * pPos)925cdf0e10cSrcweir void SwShellCrsr::SaveTblBoxCntnt( const SwPosition* pPos )
926cdf0e10cSrcweir {
927cdf0e10cSrcweir ((SwCrsrShell*)GetShell())->SaveTblBoxCntnt( pPos );
928cdf0e10cSrcweir }
929cdf0e10cSrcweir
UpDown(sal_Bool bUp,sal_uInt16 nCnt)930cdf0e10cSrcweir sal_Bool SwShellCrsr::UpDown( sal_Bool bUp, sal_uInt16 nCnt )
931cdf0e10cSrcweir {
932cdf0e10cSrcweir return SwCursor::UpDown( bUp, nCnt,
933cdf0e10cSrcweir &GetPtPos(), GetShell()->GetUpDownX() );
934cdf0e10cSrcweir }
935cdf0e10cSrcweir
936cdf0e10cSrcweir #ifdef DBG_UTIL
937cdf0e10cSrcweir
938cdf0e10cSrcweir // JP 05.03.98: zum Testen des UNO-Crsr Verhaltens hier die Implementierung
939cdf0e10cSrcweir // am sichtbaren Cursor
940cdf0e10cSrcweir
IsSelOvr(int eFlags)941cdf0e10cSrcweir sal_Bool SwShellCrsr::IsSelOvr( int eFlags )
942cdf0e10cSrcweir {
943cdf0e10cSrcweir return SwCursor::IsSelOvr( eFlags );
944cdf0e10cSrcweir }
945cdf0e10cSrcweir
946cdf0e10cSrcweir #endif
947cdf0e10cSrcweir
948cdf0e10cSrcweir // sal_True: an die Position kann der Cursor gesetzt werden
IsAtValidPos(sal_Bool bPoint) const949cdf0e10cSrcweir sal_Bool SwShellCrsr::IsAtValidPos( sal_Bool bPoint ) const
950cdf0e10cSrcweir {
951cdf0e10cSrcweir if( GetShell() && ( GetShell()->IsAllProtect() ||
952cdf0e10cSrcweir GetShell()->GetViewOptions()->IsReadonly() ||
953cdf0e10cSrcweir ( GetShell()->Imp()->GetDrawView() &&
954cdf0e10cSrcweir GetShell()->Imp()->GetDrawView()->GetMarkedObjectList().GetMarkCount() )))
955cdf0e10cSrcweir return sal_True;
956cdf0e10cSrcweir
957cdf0e10cSrcweir return SwCursor::IsAtValidPos( bPoint );
958cdf0e10cSrcweir }
959cdf0e10cSrcweir
960cdf0e10cSrcweir /* */
961cdf0e10cSrcweir
SwShellTableCrsr(const SwCrsrShell & rCrsrSh,const SwPosition & rPos)962cdf0e10cSrcweir SwShellTableCrsr::SwShellTableCrsr( const SwCrsrShell& rCrsrSh,
963cdf0e10cSrcweir const SwPosition& rPos )
964cdf0e10cSrcweir : SwCursor(rPos,0,false), SwShellCrsr(rCrsrSh, rPos), SwTableCursor(rPos)
965cdf0e10cSrcweir {
966cdf0e10cSrcweir }
967cdf0e10cSrcweir
SwShellTableCrsr(const SwCrsrShell & rCrsrSh,const SwPosition & rMkPos,const Point & rMkPt,const SwPosition & rPtPos,const Point & rPtPt)968cdf0e10cSrcweir SwShellTableCrsr::SwShellTableCrsr( const SwCrsrShell& rCrsrSh,
969cdf0e10cSrcweir const SwPosition& rMkPos, const Point& rMkPt,
970cdf0e10cSrcweir const SwPosition& rPtPos, const Point& rPtPt )
971cdf0e10cSrcweir : SwCursor(rPtPos,0,false), SwShellCrsr(rCrsrSh, rPtPos), SwTableCursor(rPtPos)
972cdf0e10cSrcweir {
973cdf0e10cSrcweir SetMark();
974cdf0e10cSrcweir *GetMark() = rMkPos;
975cdf0e10cSrcweir GetMkPos() = rMkPt;
976cdf0e10cSrcweir GetPtPos() = rPtPt;
977cdf0e10cSrcweir }
978cdf0e10cSrcweir
~SwShellTableCrsr()979cdf0e10cSrcweir SwShellTableCrsr::~SwShellTableCrsr() {}
980cdf0e10cSrcweir
SetMark()981cdf0e10cSrcweir void SwShellTableCrsr::SetMark() { SwShellCrsr::SetMark(); }
982cdf0e10cSrcweir
Create(SwPaM * pRing) const983cdf0e10cSrcweir SwCursor* SwShellTableCrsr::Create( SwPaM* pRing ) const
984cdf0e10cSrcweir {
985cdf0e10cSrcweir return SwShellCrsr::Create( pRing );
986cdf0e10cSrcweir }
MaxReplaceArived()987cdf0e10cSrcweir short SwShellTableCrsr::MaxReplaceArived()
988cdf0e10cSrcweir {
989cdf0e10cSrcweir return SwShellCrsr::MaxReplaceArived();
990cdf0e10cSrcweir }
SaveTblBoxCntnt(const SwPosition * pPos)991cdf0e10cSrcweir void SwShellTableCrsr::SaveTblBoxCntnt( const SwPosition* pPos )
992cdf0e10cSrcweir {
993cdf0e10cSrcweir SwShellCrsr::SaveTblBoxCntnt( pPos );
994cdf0e10cSrcweir }
995cdf0e10cSrcweir
996cdf0e10cSrcweir
FillRects()997cdf0e10cSrcweir void SwShellTableCrsr::FillRects()
998cdf0e10cSrcweir {
999cdf0e10cSrcweir // die neuen Rechtecke berechnen
1000cdf0e10cSrcweir // JP 16.01.98: wenn der Cursor noch "geparkt" ist nichts machen!!
1001cdf0e10cSrcweir if( !aSelBoxes.Count() || bParked ||
1002cdf0e10cSrcweir !GetPoint()->nNode.GetIndex() )
1003cdf0e10cSrcweir return;
1004cdf0e10cSrcweir
1005cdf0e10cSrcweir SwRegionRects aReg( GetShell()->VisArea() );
1006cdf0e10cSrcweir SwNodes& rNds = GetDoc()->GetNodes();
1007cdf0e10cSrcweir for( sal_uInt16 n = 0; n < aSelBoxes.Count(); ++n )
1008cdf0e10cSrcweir {
1009cdf0e10cSrcweir const SwStartNode* pSttNd = (*(aSelBoxes.GetData() + n ))->GetSttNd();
1010cdf0e10cSrcweir const SwTableNode* pSelTblNd = pSttNd->FindTableNode();
1011cdf0e10cSrcweir
1012cdf0e10cSrcweir SwNodeIndex aIdx( *pSttNd );
1013cdf0e10cSrcweir SwCntntNode* pCNd = rNds.GoNextSection( &aIdx, sal_True, sal_False );
1014cdf0e10cSrcweir
1015cdf0e10cSrcweir // TABLE IN TABLE
1016cdf0e10cSrcweir // (see also lcl_FindTopLevelTable in unoobj2.cxx for a different
1017cdf0e10cSrcweir // version to do this)
1018cdf0e10cSrcweir const SwTableNode* pCurTblNd = pCNd->FindTableNode();
1019cdf0e10cSrcweir while ( pSelTblNd != pCurTblNd && pCurTblNd )
1020cdf0e10cSrcweir {
1021cdf0e10cSrcweir aIdx = pCurTblNd->EndOfSectionIndex();
1022cdf0e10cSrcweir pCNd = rNds.GoNextSection( &aIdx, sal_True, sal_False );
1023cdf0e10cSrcweir pCurTblNd = pCNd->FindTableNode();
1024cdf0e10cSrcweir }
1025cdf0e10cSrcweir
1026cdf0e10cSrcweir if( !pCNd )
1027cdf0e10cSrcweir continue;
1028cdf0e10cSrcweir
1029cdf0e10cSrcweir SwFrm* pFrm = pCNd->getLayoutFrm( GetShell()->GetLayout(), &GetSttPos() );
1030cdf0e10cSrcweir while( pFrm && !pFrm->IsCellFrm() )
1031cdf0e10cSrcweir pFrm = pFrm->GetUpper();
1032cdf0e10cSrcweir
1033cdf0e10cSrcweir ASSERT( pFrm, "Node nicht in einer Tabelle" );
1034cdf0e10cSrcweir
1035cdf0e10cSrcweir while ( pFrm )
1036cdf0e10cSrcweir {
1037cdf0e10cSrcweir if( pFrm && aReg.GetOrigin().IsOver( pFrm->Frm() ) )
1038cdf0e10cSrcweir aReg -= pFrm->Frm();
1039cdf0e10cSrcweir
1040cdf0e10cSrcweir pFrm = pFrm->GetNextCellLeaf( MAKEPAGE_NONE );
1041cdf0e10cSrcweir }
1042cdf0e10cSrcweir }
1043cdf0e10cSrcweir aReg.Invert();
1044cdf0e10cSrcweir Insert( &aReg, 0 );
1045cdf0e10cSrcweir }
1046cdf0e10cSrcweir
1047cdf0e10cSrcweir
1048cdf0e10cSrcweir // Pruefe, ob sich der SPoint innerhalb der Tabellen-SSelection befindet
IsInside(const Point & rPt) const1049cdf0e10cSrcweir sal_Bool SwShellTableCrsr::IsInside( const Point& rPt ) const
1050cdf0e10cSrcweir {
1051cdf0e10cSrcweir // die neuen Rechtecke berechnen
1052cdf0e10cSrcweir // JP 16.01.98: wenn der Cursor noch "geparkt" ist nichts machen!!
1053cdf0e10cSrcweir if( !aSelBoxes.Count() || bParked ||
1054cdf0e10cSrcweir !GetPoint()->nNode.GetIndex() )
1055cdf0e10cSrcweir return sal_False;
1056cdf0e10cSrcweir
1057cdf0e10cSrcweir SwNodes& rNds = GetDoc()->GetNodes();
1058cdf0e10cSrcweir for( sal_uInt16 n = 0; n < aSelBoxes.Count(); ++n )
1059cdf0e10cSrcweir {
1060cdf0e10cSrcweir SwNodeIndex aIdx( *(*(aSelBoxes.GetData() + n ))->GetSttNd() );
1061cdf0e10cSrcweir SwCntntNode* pCNd = rNds.GoNextSection( &aIdx, sal_True, sal_False );
1062cdf0e10cSrcweir if( !pCNd )
1063cdf0e10cSrcweir continue;
1064cdf0e10cSrcweir
1065cdf0e10cSrcweir SwFrm* pFrm = pCNd->getLayoutFrm( GetShell()->GetLayout(), &GetPtPos() );
1066cdf0e10cSrcweir while( pFrm && !pFrm->IsCellFrm() )
1067cdf0e10cSrcweir pFrm = pFrm->GetUpper();
1068cdf0e10cSrcweir ASSERT( pFrm, "Node nicht in einer Tabelle" );
1069cdf0e10cSrcweir if( pFrm && pFrm->Frm().IsInside( rPt ) )
1070cdf0e10cSrcweir return sal_True;
1071cdf0e10cSrcweir }
1072cdf0e10cSrcweir return sal_False;
1073cdf0e10cSrcweir }
1074cdf0e10cSrcweir
1075cdf0e10cSrcweir #ifdef DBG_UTIL
1076cdf0e10cSrcweir
1077cdf0e10cSrcweir // JP 05.03.98: zum Testen des UNO-Crsr Verhaltens hier die Implementierung
1078cdf0e10cSrcweir // am sichtbaren Cursor
IsSelOvr(int eFlags)1079cdf0e10cSrcweir sal_Bool SwShellTableCrsr::IsSelOvr( int eFlags )
1080cdf0e10cSrcweir {
1081cdf0e10cSrcweir return SwShellCrsr::IsSelOvr( eFlags );
1082cdf0e10cSrcweir }
1083cdf0e10cSrcweir
1084cdf0e10cSrcweir #endif
1085cdf0e10cSrcweir
IsAtValidPos(sal_Bool bPoint) const1086cdf0e10cSrcweir sal_Bool SwShellTableCrsr::IsAtValidPos( sal_Bool bPoint ) const
1087cdf0e10cSrcweir {
1088cdf0e10cSrcweir return SwShellCrsr::IsAtValidPos( bPoint );
1089cdf0e10cSrcweir }
1090cdf0e10cSrcweir
1091