summaryrefslogtreecommitdiff
path: root/sw/inc/swcrsr.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/inc/swcrsr.hxx')
-rw-r--r--sw/inc/swcrsr.hxx348
1 files changed, 348 insertions, 0 deletions
diff --git a/sw/inc/swcrsr.hxx b/sw/inc/swcrsr.hxx
new file mode 100644
index 000000000000..b87b94d2fc21
--- /dev/null
+++ b/sw/inc/swcrsr.hxx
@@ -0,0 +1,348 @@
+/*************************************************************************
+ *
+ * $RCSfile: swcrsr.hxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:14:28 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef _SWCRSR_HXX
+#define _SWCRSR_HXX
+
+#ifndef _WORDSEL_HXX //autogen
+#include <svtools/wordsel.hxx>
+#endif
+#ifndef _PAM_HXX //autogen
+#include <pam.hxx>
+#endif
+#ifndef _TBLSEL_HXX //autogen
+#include <tblsel.hxx>
+#endif
+#ifndef _CSHTYP_HXX //autogen
+#include <cshtyp.hxx>
+#endif
+
+
+class SwShellCrsr;
+class SwShellTableCrsr;
+class SwTableCursor;
+class SwUnoCrsr;
+class SwUnoTableCrsr;
+struct _SwCursor_SavePos;
+
+// ein Basis-Struktur fuer die Parameter der Find-Methoden
+// return - Werte vom Found-Aufruf.
+const int FIND_NOT_FOUND = 0;
+const int FIND_FOUND = 1;
+const int FIND_NO_RING = 2;
+
+struct SwFindParas
+{
+ virtual int Find( SwPaM*, SwMoveFn, const SwPaM*, FASTBOOL ) = 0;
+ virtual int IsReplaceMode() const = 0;
+};
+
+enum SwCursorSelOverFlags
+{
+ SELOVER_NONE = 0x00,
+ SELOVER_CHECKNODESSECTION = 0x01,
+ SELOVER_TOGGLE = 0x02,
+ SELOVER_ENABLEREVDIREKTION = 0x04,
+ SELOVER_CHANGEPOS = 0x08
+};
+
+class SwCursor : public SwPaM
+{
+ friend class SwCrsrSaveState;
+
+ _SwCursor_SavePos* pSavePos;
+
+ ULONG FindAll( SwFindParas& , SwDocPositions, SwDocPositions, FindRanges );
+
+protected:
+ virtual _SwCursor_SavePos* CreateNewSavePos() const;
+ void SaveState();
+ void RestoreState();
+
+ const _SwCursor_SavePos* GetSavePos() const { return pSavePos; }
+
+public:
+ SwCursor( const SwPosition &rPos, SwPaM* pRing = 0 );
+ SwCursor( SwCursor& );
+ virtual ~SwCursor();
+
+ virtual SwCursor* Create( SwPaM* pRing = 0 ) const;
+
+ virtual operator SwShellCrsr* ();
+ virtual operator SwShellTableCrsr* ();
+ virtual operator SwTableCursor* ();
+ virtual operator SwUnoCrsr* ();
+ virtual operator SwUnoTableCrsr* ();
+
+ inline operator const SwShellCrsr* () const;
+ inline operator const SwShellTableCrsr* () const;
+ inline operator const SwTableCursor* () const;
+ inline operator const SwUnoCrsr* () const;
+ inline operator const SwUnoTableCrsr* () const;
+
+ virtual FASTBOOL MaxReplaceArived();
+ virtual void SaveTblBoxCntnt( const SwPosition* pPos = 0 );
+
+ void FillFindPos( SwDocPositions ePos, SwPosition& rPos ) const;
+ SwMoveFnCollection* MakeFindRange( SwDocPositions, SwDocPositions,
+ SwPaM* ) const;
+
+ ULONG Find( const SearchParam& rParam,
+ SwDocPositions nStart, SwDocPositions nEnde,
+ FindRanges = FND_IN_BODY,
+ int bReplace = FALSE );
+
+ ULONG Find( const SwTxtFmtColl& rFmtColl,
+ SwDocPositions nStart, SwDocPositions nEnde,
+ FindRanges = FND_IN_BODY,
+ const SwTxtFmtColl* pReplFmt = 0 );
+
+ ULONG Find( const SfxItemSet& rSet, FASTBOOL bNoCollections,
+ SwDocPositions nStart, SwDocPositions nEnde,
+ FindRanges = FND_IN_BODY,
+ const SearchParam* pTextPara = 0,
+ const SfxItemSet* rReplSet = 0 );
+
+/* int IsWordFNC( FNIsWord fnIsWord ) const;
+ int GoWordFNC( FNGoWord fnGoWord );
+ FASTBOOL IsStartWord()const { return IsWordFNC( WordSelection::IsStartWord ); }
+ FASTBOOL IsEndWord() const { return IsWordFNC( WordSelection::IsEndWord ); }
+ FASTBOOL IsInWord() const { return IsWordFNC( WordSelection::IsInWord ); }
+ FASTBOOL GoStartWord() { return GoWordFNC( WordSelection::GoStartWord ); }
+ FASTBOOL GoEndWord() { return GoWordFNC( WordSelection::GoEndWord ); }
+ FASTBOOL GoNextWord() { return GoWordFNC( WordSelection::GoNextWord ); }
+ FASTBOOL GoPrevWord() { return GoWordFNC( WordSelection::GoPrevWord ); }
+*/
+ FASTBOOL IsStartWord()const;
+ FASTBOOL IsEndWord() const;
+ FASTBOOL IsInWord() const;
+ FASTBOOL GoStartWord();
+ FASTBOOL GoEndWord();
+ FASTBOOL GoNextWord();
+ FASTBOOL GoPrevWord();
+ FASTBOOL SelectWord( const Point* pPt = 0 );
+
+ enum SentenceMoveType
+ {
+ NEXT_SENT,
+ PREV_SENT,
+ START_SENT,
+ END_SENT
+ };
+ FASTBOOL GoSentence(SentenceMoveType eMoveType);
+ FASTBOOL GoNextSentence(){return GoSentence(NEXT_SENT);}
+ FASTBOOL GoPrevSentence(){return GoSentence(PREV_SENT);}
+
+ FASTBOOL LeftRight( BOOL bLeft, USHORT nCnt = 1 );
+ FASTBOOL UpDown( BOOL bUp, USHORT nCnt = 1,
+ Point* pPt = 0, long nUpDownX = 0 );
+ FASTBOOL LeftRightMargin( BOOL bLeftMargin, BOOL bAPI = FALSE );
+ FASTBOOL IsAtLeftRightMargin( BOOL bLeftMargin, BOOL bAPI = FALSE ) const;
+ FASTBOOL SttEndDoc( BOOL bSttDoc );
+ FASTBOOL GoPrevNextCell( BOOL bNext, USHORT nCnt );
+
+ FASTBOOL Left( USHORT nCnt = 1 ) { return LeftRight( TRUE, nCnt ); }
+ FASTBOOL Right( USHORT nCnt = 1 ) { return LeftRight( FALSE, nCnt ); }
+ FASTBOOL Up( USHORT nCnt = 1 ) { return UpDown( TRUE, nCnt ); }
+ FASTBOOL Down( USHORT nCnt = 1 ) { return UpDown( FALSE, nCnt ); }
+ FASTBOOL LeftMargin() { return LeftRightMargin( TRUE ); }
+ FASTBOOL RightMargin() { return LeftRightMargin( FALSE ); }
+ FASTBOOL SttDoc() { return SttEndDoc( TRUE ); }
+ FASTBOOL EndDoc() { return SttEndDoc( FALSE ); }
+ FASTBOOL GoNextCell( USHORT nCnt = 1 ) { return GoPrevNextCell( TRUE, nCnt ); }
+ FASTBOOL GoPrevCell( USHORT nCnt = 1 ) { return GoPrevNextCell( FALSE, nCnt ); }
+ FASTBOOL GotoTable( const String& rName );
+ FASTBOOL GotoTblBox( const String& rName );
+ FASTBOOL GotoRegion( const String& rName );
+ FASTBOOL GotoFtnAnchor();
+ FASTBOOL GotoFtnTxt();
+ FASTBOOL GotoNextFtnAnchor();
+ FASTBOOL GotoPrevFtnAnchor();
+ FASTBOOL GotoNextFtnCntnt();
+ FASTBOOL GotoPrevFtnCntnt();
+
+ FASTBOOL MovePara( SwWhichPara, SwPosPara );
+ FASTBOOL MoveSection( SwWhichSection, SwPosSection );
+ FASTBOOL MoveTable( SwWhichTable, SwPosTable );
+ FASTBOOL MoveRegion( SwWhichRegion, SwPosRegion );
+
+
+ // gibt es eine Selection vom Content in die Tabelle
+ // Return Wert gibt an, ob der Crsr auf der alten Position verbleibt
+ virtual FASTBOOL IsSelOvr( int eFlags =
+ ( SELOVER_CHECKNODESSECTION |
+ SELOVER_TOGGLE | SELOVER_CHANGEPOS ));
+ virtual FASTBOOL IsInProtectTable( FASTBOOL bMove = FALSE,
+ FASTBOOL bChgCrsr = TRUE );
+ FASTBOOL IsNoCntnt() const;
+
+ void RestoreSavePos(); // Point auf die SavePos setzen
+
+ // TRUE: an die Position kann der Cursor gesetzt werden
+ virtual FASTBOOL IsAtValidPos( BOOL bPoint = TRUE ) const;
+
+ // darf der Cursor in ReadOnlyBereiche?
+ FASTBOOL IsReadOnlyAvailable() const;
+
+ DECL_FIXEDMEMPOOL_NEWDEL( SwCursor )
+};
+
+
+class SwCrsrSaveState
+{
+ SwCursor& rCrsr;
+public:
+ SwCrsrSaveState( SwCursor& rC ) : rCrsr( rC ) { rC.SaveState(); }
+ ~SwCrsrSaveState() { rCrsr.RestoreState(); }
+};
+
+struct _SwCursor_SavePos
+{
+ ULONG nNode;
+ xub_StrLen nCntnt;
+ _SwCursor_SavePos* pNext;
+
+ _SwCursor_SavePos( const SwCursor& rCrsr )
+ : nNode( rCrsr.GetPoint()->nNode.GetIndex() ),
+ nCntnt( rCrsr.GetPoint()->nContent.GetIndex() ),
+ pNext( 0 )
+ {}
+ virtual ~_SwCursor_SavePos() {}
+};
+
+
+
+class SwTableCursor : public virtual SwCursor
+{
+
+protected:
+ ULONG nTblPtNd, nTblMkNd;
+ xub_StrLen nTblPtCnt, nTblMkCnt;
+ SwSelBoxes aSelBoxes;
+ BOOL bChg : 1;
+ BOOL bParked : 1; // Tabellen-Cursor wurde geparkt
+
+public:
+ SwTableCursor( const SwPosition &rPos, SwPaM* pRing = 0 );
+ SwTableCursor( SwTableCursor& );
+ virtual ~SwTableCursor();
+
+ virtual operator SwTableCursor* ();
+
+ void InsertBox( const SwTableBox& rTblBox );
+ void DeleteBox( USHORT nPos ) { aSelBoxes.Remove( nPos ); bChg = TRUE; }
+ USHORT GetBoxesCount() const { return aSelBoxes.Count(); }
+ const SwSelBoxes& GetBoxes() const { return aSelBoxes; }
+
+ // Baut fuer alle Boxen die Cursor auf
+ SwCursor* MakeBoxSels( SwCursor* pAktCrsr );
+ // sind irgendwelche Boxen mit einem Schutz versehen?
+ FASTBOOL HasReadOnlyBoxSel() const;
+
+ // wurde der TabelleCursor veraendert ? Wenn ja speicher gleich
+ // die neuen Werte.
+ FASTBOOL IsCrsrMovedUpdt();
+ // wurde der TabelleCursor veraendert ?
+ FASTBOOL IsCrsrMoved() const
+ {
+ return nTblMkNd != GetMark()->nNode.GetIndex() ||
+ nTblPtNd != GetPoint()->nNode.GetIndex() ||
+ nTblMkCnt != GetMark()->nContent.GetIndex() ||
+ nTblPtCnt != GetPoint()->nContent.GetIndex();
+ }
+
+ FASTBOOL IsChgd() const { return bChg; }
+
+ // Parke den Tabellen-Cursor auf dem StartNode der Boxen.
+ void ParkCrsr();
+
+};
+
+
+// --------------------------- inline Methoden ----------------------
+
+inline SwCursor::operator const SwShellCrsr* () const
+{
+ return (SwShellCrsr*)*((SwCursor*)this);
+}
+
+inline SwCursor::operator const SwShellTableCrsr* () const
+{
+ return (SwShellTableCrsr*)*((SwCursor*)this);
+}
+
+inline SwCursor::operator const SwTableCursor* () const
+{
+ return (SwTableCursor*)*((SwCursor*)this);
+}
+
+inline SwCursor::operator const SwUnoCrsr* () const
+{
+ return (SwUnoCrsr*)*((SwCursor*)this);
+}
+
+inline SwCursor::operator const SwUnoTableCrsr* () const
+{
+ return (SwUnoTableCrsr*)*((SwCursor*)this);
+}
+
+
+#endif
+