diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 16:15:01 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 16:15:01 +0000 |
commit | 7b0b5cdfeed656b279bc32cd929630d5fc25878b (patch) | |
tree | 5b89fb8497d7329d26c43f109bb014c54ffb0e8c /sw/inc/redline.hxx | |
parent | d791366863cf9659a01b171ce0e727bfe2f28cdf (diff) |
initial import
Diffstat (limited to 'sw/inc/redline.hxx')
-rw-r--r-- | sw/inc/redline.hxx | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/sw/inc/redline.hxx b/sw/inc/redline.hxx new file mode 100644 index 000000000000..51b54f0e1630 --- /dev/null +++ b/sw/inc/redline.hxx @@ -0,0 +1,312 @@ +/************************************************************************* + * + * $RCSfile: redline.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 17:14:27 $ + * + * 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 _REDLINE_HXX +#define _REDLINE_HXX + +#ifndef _DATETIME_HXX //autogen +#include <tools/datetime.hxx> +#endif +#ifndef _STRING_HXX //autogen +#include <tools/string.hxx> +#endif + +#ifndef _PAM_HXX +#include "pam.hxx" +#endif +#ifndef _REDLENUM_HXX +#include "redlenum.hxx" // enums +#endif + +class SfxItemSet; + +class SwRedlineExtraData +{ + SwRedlineExtraData( const SwRedlineExtraData& ); + SwRedlineExtraData& operator=( const SwRedlineExtraData& ); + +protected: + SwRedlineExtraData() {} + +public: + virtual ~SwRedlineExtraData(); + virtual SwRedlineExtraData* CreateNew() const = 0; + + virtual void Accept( SwPaM& rPam ) const; + virtual void Reject( SwPaM& rPam ) const; + virtual int operator == ( const SwRedlineExtraData& ) const; +}; + +class SwRedlineExtraData_FmtColl : public SwRedlineExtraData +{ + String sFmtNm; + SfxItemSet* pSet; + USHORT nPoolId; +public: + SwRedlineExtraData_FmtColl( const String& rColl, USHORT nPoolFmtId, + const SfxItemSet* pSet = 0 ); + virtual ~SwRedlineExtraData_FmtColl(); + virtual SwRedlineExtraData* CreateNew() const; + virtual void Reject( SwPaM& rPam ) const; + virtual int operator == ( const SwRedlineExtraData& ) const; + + void SetItemSet( const SfxItemSet& rSet ); +}; + +class SwRedlineExtraData_Format : public SwRedlineExtraData +{ + USHORT nWhich; +public: + SwRedlineExtraData_Format( USHORT nWhich ); + virtual SwRedlineExtraData* CreateNew() const; + virtual void Reject( SwPaM& rPam ) const; + virtual int operator == ( const SwRedlineExtraData& ) const; +}; + + +class SwRedlineData +{ + friend class SwRedline; + SwRedlineData* pNext; // Verweis auf weitere Daten + SwRedlineExtraData* pExtraData; + + String sComment; + DateTime aStamp; + SwRedlineType eType; + USHORT nAuthor, nSeqNo; + +public: + SwRedlineData( SwRedlineType eT, USHORT nAut ); + SwRedlineData( const SwRedlineData& rCpy, BOOL bCpyNext = TRUE ); + + // fuer sw3io: pNext/pExtraData gehen in eigenen Besitz ueber! + SwRedlineData( SwRedlineType eT, USHORT nAut, const DateTime& rDT, + const String& rCmnt, SwRedlineData* pNxt, + SwRedlineExtraData* pExtraData = 0 ); + + ~SwRedlineData(); + + int operator==( const SwRedlineData& rCmp ) const + { + return nAuthor == rCmp.nAuthor && + eType == rCmp.eType && + sComment == rCmp.sComment && + (( !pNext && !rCmp.pNext ) || + ( pNext && rCmp.pNext && *pNext == *rCmp.pNext )) && + (( !pExtraData && !rCmp.pExtraData ) || + ( pExtraData && rCmp.pExtraData && + *pExtraData == *rCmp.pExtraData )); + } + int operator!=( const SwRedlineData& rCmp ) const + { return !operator==( rCmp ); } + + SwRedlineType GetType() const + { return SwRedlineType( eType & REDLINE_NO_FLAG_MASK); } + SwRedlineType GetRealType() const { return eType; } + USHORT GetAuthor() const { return nAuthor; } + const String& GetComment() const { return sComment; } + const DateTime& GetTimeStamp() const { return aStamp; } + inline const SwRedlineData* Next() const{ return pNext; } + + void SetTimeStamp( const DateTime& rDT) + { aStamp = rDT; aStamp.SetSec( 0 ); aStamp.Set100Sec( 0 ); } + void SetComment( const String& rS ) { sComment = rS; } + void SetAutoFmtFlag() + { eType = SwRedlineType( eType | REDLINE_FORM_AUTOFMT ); } + int CanCombine( const SwRedlineData& rCmp ) const + { + return nAuthor == rCmp.nAuthor && + eType == rCmp.eType && + sComment == rCmp.sComment && + GetTimeStamp() == rCmp.GetTimeStamp() && + (( !pNext && !rCmp.pNext ) || + ( pNext && rCmp.pNext && + pNext->CanCombine( *rCmp.pNext ))) && + (( !pExtraData && !rCmp.pExtraData ) || + ( pExtraData && rCmp.pExtraData && + *pExtraData == *rCmp.pExtraData )); + } + + // ExtraData wird kopiert, der Pointer geht also NICHT in den Besitz + // des RedlineObjectes! + void SetExtraData( const SwRedlineExtraData* pData ); + const SwRedlineExtraData* GetExtraData() const { return pExtraData; } + + // fuers UI-seitige zusammenfassen von Redline-Actionen. Wird z.Z. nur + // fuers Autoformat mit Redline benoetigt. Der Wert != 0 bedeutet dabei, + // das es noch weitere geben kann! + USHORT GetSeqNo() const { return nSeqNo; } + void SetSeqNo( USHORT nNo ) { nSeqNo = nNo; } +}; + + +class SwRedline : public SwPaM +{ + SwRedlineData* pRedlineData; + SwNodeIndex* pCntntSect; + BOOL bDelLastPara : 1; + BOOL bIsLastParaDelete : 1; + BOOL bIsVisible : 1; + + void MoveToSection(); + void CopyToSection(); + void DelCopyOfSection(); + void MoveFromSection(); + +public: + SwRedline( SwRedlineType eType, const SwPaM& rPam ); + SwRedline( SwRedlineType eTyp, const SwPosition& rPos ); + SwRedline( const SwRedlineData& rData, const SwPaM& rPam ); + SwRedline( const SwRedlineData& rData, const SwPosition& rPos ); + // fuer sw3io: pData geht in eigenen Besitz ueber! + SwRedline( SwRedlineData* pData, const SwPosition& rPos, BOOL bVsbl, + BOOL bDelLP, BOOL bIsPD ) : + SwPaM( rPos ), pCntntSect( 0 ), pRedlineData( pData ), + bIsVisible( bVsbl ), bDelLastPara( bDelLP ), bIsLastParaDelete( bIsPD ) + {} + SwRedline( const SwRedline& ); + virtual ~SwRedline(); + + SwNodeIndex* GetContentIdx() const { return pCntntSect; } + // fuers Undo + void SetContentIdx( const SwNodeIndex* ); + + BOOL IsVisible() const { return bIsVisible; } + BOOL IsDelLastPara() const { return bDelLastPara; } + BOOL IsLastParaDelete() const { return bIsLastParaDelete; } + + // das BOOL besagt, ob nach dem setzen der Pos kein Bereich mehr + // aufgespannt ist. -> TRUE, ansonten Bereich und FALSE + void SetStart( const SwPosition& rPos, SwPosition* pSttPtr = 0 ) + { + if( !pSttPtr ) pSttPtr = Start(); + *pSttPtr = rPos; + } + void SetEnd( const SwPosition& rPos, SwPosition* pEndPtr = 0 ) + { + if( !pEndPtr ) pEndPtr = End(); + *pEndPtr = rPos; + } + // liegt eine gueltige Selektion vor? + BOOL HasValidRange() const; + + USHORT GetAuthor() const { return pRedlineData->GetAuthor(); } + const DateTime& GetTimeStamp() const { return pRedlineData->GetTimeStamp(); } + SwRedlineType GetType() const { return pRedlineData->GetType(); } + SwRedlineType GetRealType() const { return pRedlineData->GetRealType(); } + const SwRedlineData& GetRedlineData() const { return *pRedlineData; } + int operator==( const SwRedlineData& rCmp ) const + { return *pRedlineData == rCmp; } + int operator!=( const SwRedlineData& rCmp ) const + { return *pRedlineData != rCmp; } + void SetAutoFmtFlag() { pRedlineData->SetAutoFmtFlag(); } + + USHORT GetStackCount() const; + USHORT GetAuthor( USHORT nPos ) const; + const String& GetAuthorString( USHORT nPos = 0 ) const; + const DateTime& GetTimeStamp( USHORT nPos ) const; + SwRedlineType GetRealType( USHORT nPos ) const; + SwRedlineType GetType( USHORT nPos ) const + { return SwRedlineType( GetRealType( nPos ) & REDLINE_NO_FLAG_MASK); } + const String& GetComment( USHORT nPos ) const; + + const String& GetComment() const { return pRedlineData->GetComment(); } + void SetComment( const String& rS ) { pRedlineData->SetComment( rS ); } + + // ExtraData wird kopiert, der Pointer geht also NICHT in den Besitz + // des RedlineObjectes! + void SetExtraData( const SwRedlineExtraData* pData ) + { pRedlineData->SetExtraData( pData ); } + const SwRedlineExtraData* GetExtraData() const + { return pRedlineData->GetExtraData(); } + + // fuers UI-seitige zusammenfassen von Redline-Actionen. Wird z.Z. nur + // fuers Autoformat mit Redline benoetigt. Der Wert != 0 bedeutet dabei, + // das es noch weitere geben kann! + USHORT GetSeqNo() const { return pRedlineData->GetSeqNo(); } + void SetSeqNo( USHORT nNo ) { pRedlineData->SetSeqNo( nNo ); } + + // Beim Hide/ShowOriginal wird 2 mal ueber die Liste gelaufen, damit + // die Del-Redlines per Copy und Delete versteckt werden. Beim Move + // wird sonst die Attributierung falsch behandelt. + // Alle anderen Aufrufer muessen immer 0 angeben. + void CallDisplayFunc( USHORT nLoop = 0 ); + void Show( USHORT nLoop = 0 ); + void Hide( USHORT nLoop = 0 ); + void ShowOriginal( USHORT nLoop = 0 ); + + void InvalidateRange(); // das Layout anstossen + + BOOL IsOwnRedline( const SwRedline& rRedl ) const + { return GetAuthor() == rRedl.GetAuthor(); } + BOOL CanCombine( const SwRedline& rRedl ) const; + + void PushData( const SwRedline& rRedl, BOOL bOwnAsNext = TRUE ); + BOOL PopData(); + + int operator==( const SwRedline& ) const; + int operator<( const SwRedline& ) const; +}; + + + + + +#endif |