/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _VISCRS_HXX #define _VISCRS_HXX #include #include "swcrsr.hxx" #include "swrect.hxx" #include "swregion.hxx" class SwCrsrShell; class SwShellCrsr; class SwTxtInputFld; // -------- Ab hier Klassen / Methoden fuer den nicht Text-Cursor ------ class SwVisCrsr #ifdef SW_CRSR_TIMER : private Timer #endif { friend void _InitCore(); friend void _FinitCore(); sal_Bool bIsVisible : 1; sal_Bool bIsDragCrsr : 1; #ifdef SW_CRSR_TIMER sal_Bool bTimerOn : 1; #endif Cursor aTxtCrsr; const SwCrsrShell* pCrsrShell; #ifdef SW_CRSR_TIMER virtual void Timeout(); #endif void _SetPosAndShow(); public: SwVisCrsr( const SwCrsrShell * pCShell ); ~SwVisCrsr(); void Show(); void Hide(); sal_Bool IsVisible() const { return bIsVisible; } void SetDragCrsr( sal_Bool bFlag = sal_True ) { bIsDragCrsr = bFlag; } #ifdef SW_CRSR_TIMER sal_Bool ChgTimerFlag( sal_Bool bTimerOn = sal_True ); #endif }; // ------ Ab hier Klassen / Methoden fuer die Selectionen ------- // #i75172# predefines namespace sdr { namespace overlay { class OverlayObject; }} namespace sw { namespace overlay { class OverlayRangesOutline; }} class SwSelPaintRects : public SwRects { friend void _InitCore(); friend void _FinitCore(); static long nPixPtX, nPixPtY; static MapMode *pMapMode; // die Shell const SwCrsrShell* pCShell; virtual void Paint( const Rectangle& rRect ); // #i75172# sdr::overlay::OverlayObject* mpCursorOverlay; // #i75172# access to mpCursorOverlay for swapContent sdr::overlay::OverlayObject* getCursorOverlay() const { return mpCursorOverlay; } void setCursorOverlay(sdr::overlay::OverlayObject* pNew) { mpCursorOverlay = pNew; } bool mbShowTxtInputFldOverlay; sw::overlay::OverlayRangesOutline* mpTxtInputFldOverlay; void HighlightInputFld(); public: SwSelPaintRects( const SwCrsrShell& rCSh ); virtual ~SwSelPaintRects(); virtual void FillRects() = 0; // #i75172# in SwCrsrShell::CreateCrsr() the content of SwSelPaintRects is exchanged. To // make a complete swap access to mpCursorOverlay is needed there void swapContent(SwSelPaintRects& rSwap); void Show(); void Hide(); void Invalidate( const SwRect& rRect ); inline void SetShowTxtInputFldOverlay( const bool bShow ) { mbShowTxtInputFldOverlay = bShow; } const SwCrsrShell* GetShell() const { return pCShell; } // check current MapMode of the shell and set possibly the static members. // Optional set the parameters pX, pY static void Get1PixelInLogic( const ViewShell& rSh, long* pX = 0, long* pY = 0 ); }; class SwShellCrsr : public virtual SwCursor, public SwSelPaintRects { // Dokument-Positionen der Start/End-Charakter einer SSelection Point aMkPt, aPtPt; const SwPosition* pPt; // fuer Zuordung vom GetPoint() zum aPtPt using SwCursor::UpDown; public: SwShellCrsr( const SwCrsrShell& rCrsrSh, const SwPosition &rPos ); SwShellCrsr( const SwCrsrShell& rCrsrSh, const SwPosition &rPos, const Point& rPtPos, SwPaM* pRing = 0 ); SwShellCrsr( SwShellCrsr& ); virtual ~SwShellCrsr(); virtual void FillRects(); // fuer Table- und normalen Crsr void Show(); // Update und zeige alle Selektionen an void Hide(); // verstecke alle Selektionen void Invalidate( const SwRect& rRect ); const Point& GetPtPos() const { return( SwPaM::GetPoint() == pPt ? aPtPt : aMkPt ); } Point& GetPtPos() { return( SwPaM::GetPoint() == pPt ? aPtPt : aMkPt ); } const Point& GetMkPos() const { return( SwPaM::GetMark() == pPt ? aPtPt : aMkPt ); } Point& GetMkPos() { return( SwPaM::GetMark() == pPt ? aPtPt : aMkPt ); } const Point& GetSttPos() const { return( SwPaM::Start() == pPt ? aPtPt : aMkPt ); } Point& GetSttPos() { return( SwPaM::Start() == pPt ? aPtPt : aMkPt ); } const Point& GetEndPos() const { return( SwPaM::End() == pPt ? aPtPt : aMkPt ); } Point& GetEndPos() { return( SwPaM::End() == pPt ? aPtPt : aMkPt ); } virtual void SetMark(); virtual SwCursor* Create( SwPaM* pRing = 0 ) const; virtual short MaxReplaceArived(); //returns RET_YES/RET_CANCEL/RET_NO virtual void SaveTblBoxCntnt( const SwPosition* pPos = 0 ); sal_Bool UpDown( sal_Bool bUp, sal_uInt16 nCnt = 1 ); // sal_True: an die Position kann der Cursor gesetzt werden virtual sal_Bool IsAtValidPos( sal_Bool bPoint = sal_True ) const; #ifdef DBG_UTIL // JP 05.03.98: zum Testen des UNO-Crsr Verhaltens hier die Implementierung // am sichtbaren Cursor virtual sal_Bool IsSelOvr( int eFlags = ( nsSwCursorSelOverFlags::SELOVER_CHECKNODESSECTION | nsSwCursorSelOverFlags::SELOVER_TOGGLE | nsSwCursorSelOverFlags::SELOVER_CHANGEPOS )); #endif virtual bool IsReadOnlyAvailable() const; DECL_FIXEDMEMPOOL_NEWDEL( SwShellCrsr ) }; class SwShellTableCrsr : public virtual SwShellCrsr, public virtual SwTableCursor { // die Selection hat die gleiche Reihenfolge wie die // TabellenBoxen. D.h., wird aus dem einen Array an einer Position // etwas geloescht, dann muss es auch im anderen erfolgen!! public: SwShellTableCrsr( const SwCrsrShell& rCrsrSh, const SwPosition& rPos ); SwShellTableCrsr( const SwCrsrShell& rCrsrSh, const SwPosition &rMkPos, const Point& rMkPt, const SwPosition &rPtPos, const Point& rPtPt ); virtual ~SwShellTableCrsr(); virtual void FillRects(); // fuer Table- und normalen Crsr // Pruefe, ob sich der SPoint innerhalb der Tabellen-SSelection befindet sal_Bool IsInside( const Point& rPt ) const; virtual void SetMark(); virtual SwCursor* Create( SwPaM* pRing = 0 ) const; virtual short MaxReplaceArived(); //returns RET_YES/RET_CANCEL/RET_NO virtual void SaveTblBoxCntnt( const SwPosition* pPos = 0 ); // sal_True: an die Position kann der Cursor gesetzt werden virtual sal_Bool IsAtValidPos( sal_Bool bPoint = sal_True ) const; #ifdef DBG_UTIL // JP 05.03.98: zum Testen des UNO-Crsr Verhaltens hier die Implementierung // am sichtbaren Cursor virtual sal_Bool IsSelOvr( int eFlags = ( nsSwCursorSelOverFlags::SELOVER_CHECKNODESSECTION | nsSwCursorSelOverFlags::SELOVER_TOGGLE | nsSwCursorSelOverFlags::SELOVER_CHANGEPOS )); #endif }; #endif // _VISCRS_HXX