20 #ifndef INCLUDED_SC_INC_CHGTRACK_HXX
21 #define INCLUDED_SC_INC_CHGTRACK_HXX
29 #include <com/sun/star/uno/Sequence.hxx>
31 #include <tools/datetime.hxx>
46 namespace tools {
class JsonWriter; }
145 pLinkP->
pLink =
this;
153 pLink->
pLink =
nullptr;
162 if ( ( *ppPrev = pNext ) !=
nullptr )
216 const OUString& aUser,
217 const OUString& aComment );
227 void SetUser(
const OUString& r );
268 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz );
342 bool bSplitRange =
false,
bool bWarning =
true )
const;
345 OUString& rStr,
ScDocument& rDoc,
bool bFlag3D =
false )
const;
389 const OUString& aUser,
391 const OUString &sComment,
393 bool bEndOfList =
false );
396 OUString& rStr,
ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true)
const override;
415 short nFrom,
short nTo );
453 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz )
override;
491 OUString& rStr,
ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
494 { pCutOff = p; nCutOff = n; }
519 aFromRange( rFromRange ),
538 sal_Int32
nDx, sal_Int32
nDy, sal_Int32 nDz )
override;
552 const OUString&
aUser,
554 const OUString &sComment,
562 OUString& rStr,
ScDocument& rDoc,
bool bSplitRange =
false,
563 bool bWarning =
true )
const override;
566 OUString& rStr,
ScDocument& rDoc,
bool bFlag3D =
false )
const override;
572 short nFrom,
short nTo )
577 nCutOffFrom( nFrom ),
620 if ( ( pNextInSlot = *pp ) !=
nullptr )
630 if ( ( *ppPrevInSlot = pNextInSlot ) !=
nullptr )
632 ppPrevInSlot =
nullptr;
640 static void GetStringOfCell(
643 static void GetStringOfCell(
656 static bool NeedsNumberFormat(
const ScCellValue& rVal );
660 void GetValueString( OUString& rStr,
const OUString& rValue,
const ScCellValue& rCell,
663 void GetFormulaString( OUString& rStr,
const ScFormulaCell* pCell )
const;
670 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz )
override;
679 bool bOldest, ::std::stack<ScChangeActionContent*>* pRejectActions );
693 const OUString& aUser,
const DateTime& aDateTime,
694 const OUString &sComment,
const ScCellValue& rOldCell,
695 const ScDocument* pDoc,
const OUString& sOldValue );
700 const OUString& sNewValue );
736 { pNextContent = p; }
738 { pPrevContent = p; }
742 void SetOldValue(
const OUString& rOld,
ScDocument* pDoc );
744 void GetOldString( OUString& rStr,
const ScDocument* pDoc )
const;
745 void GetNewString( OUString& rStr,
const ScDocument* pDoc )
const;
749 OUString& rStr,
ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
752 OUString& rStr,
ScDocument&
rDoc,
bool bFlag3D =
false )
const override;
758 bool IsMatrixOrigin()
const;
760 bool IsOldMatrixReference()
const;
781 const OUString&
aUser,
783 const OUString &sComment);
819 #define SC_CHGTRACK_GENERATED_START (sal_uInt32(0xfffffff0))
863 bool bInDeleteUndo:1;
866 bool bUseFixDateTime:1;
867 bool bTimeNanoSeconds:1;
872 SCROW InitContentRowsPerSlot();
876 static bool IsMatrixFormulaRangeDifferent(
882 { aInDeleteRange = rRange; }
884 { bInDelete = bVal; }
886 { bInDeleteTop = bVal; }
888 { bInDeleteUndo = bVal; }
890 { bInPasteCut = bVal; }
892 { eMergeState = eState; }
902 void EndBlockModify(
sal_uLong nEndAction );
914 void AppendOneDeleteRange(
const ScRange& rOrgRange,
918 void LookUpContents(
const ScRange& rOrgRange,
927 void DeleteGeneratedDelContent(
933 void DeleteCellEntries(
934 std::vector<ScChangeActionContent*>&,
944 bool IsLastAction(
sal_uLong nNum )
const;
946 void ClearMsgQueue();
951 SCSIZE ComputeContentSlot( sal_Int32 nRow )
const;
962 bool IsGenerated(
sal_uLong nAction )
const;
966 sal_uLong GetLastSavedActionNumber()
const;
967 void SetLastSavedActionNumber(
sal_uLong nNew);
972 {
return aInDeleteRange; }
978 const OUString&
GetUser()
const {
return maUser;}
988 { bUseFixDateTime = bVal; }
991 { aFixDateTime = rDT; }
1009 void AppendContent(
const ScAddress& rPos,
1013 void AppendContentRange(
const ScRange& rRange,
1028 void AppendContentsIfInRefDoc(
ScDocument& rRefDoc,
1056 nStartLastCut = nEndLastCut = 0;
1057 pLastCutMove.reset();
1061 return nEndLastCut > 0 &&
1062 nStartLastCut <= nEndLastCut &&
1071 void MergePrepare(
const ScChangeAction* pFirstMerge,
bool bShared );
1117 { aModifiedLink = r; ClearMsgQueue(); }
1124 const ScBigRange& aBigRange,
const OUString& sNewValue );
1125 void AppendLoaded( std::unique_ptr<ScChangeAction> pAppend );
1127 { nActionMax = nTempActionMax; }
1130 { aProtectPass = rPass; }
1132 {
return aProtectPass; }
ScChangeTrackMsgQueue aMsgQueue
virtual const ScChangeTrack * GetChangeTrack() const override
ScDocument & GetDocument() const
OUString GetRefString(const ScBigRange &rRange, const ScDocument &rDoc, bool bFlag3D=false) const
const ScCellValue & GetOldCell() const
virtual void GetRefString(OUString &rStr, ScDocument &rDoc, bool bFlag3D=false) const override
void SetLastMerge(sal_uLong nVal)
ScChangeActionType GetType() const
bool IsDialogRoot() const
void SetRejectAction(sal_uLong n)
ScChangeActionContent * GetNextContent() const
std::vector< ScChangeTrackMsgInfo > ScChangeTrackMsgQueue
void RemoveAllDeletedIn()
const ScChangeActionLinkEntry * GetFirstDependentEntry() const
const OUString & GetUser() const
ScChangeAction * GetNext() const
void SetDateTimeUTC(const DateTime &rDT)
virtual void DeleteCellEntries() override
bool IsMasterDelete() const
ScChangeAction * GetLast() const
sal_uLong GetLastMerge() const
void SetMergeState(ScChangeTrackMergeState eState)
virtual void AddContent(ScChangeActionContent *) override
void SetProtection(const css::uno::Sequence< sal_Int8 > &rPass)
virtual ~ScChangeActionDel() override
void SetEndLastCut(sal_uLong nVal)
virtual void UpdateReference(const ScChangeTrack *, UpdateRefMode, const ScBigRange &, sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz)
void SetInDeleteRange(const ScRange &rRange)
ScChangeActionState GetState() const
friend class ScChangeActionIns
const ScChangeActionDelMoveEntry * GetNext() const
ScChangeActionDelMoveEntry * AddCutOffMove(ScChangeActionMove *pMove, short nFrom, short nTo)
ScChangeActionLinkEntry * pNext
std::unique_ptr< ScChangeActionMove > pLastCutMove
const ScChangeActionIns * GetCutOffInsert() const
ScChangeActionLinkEntry * pLinkInsertRow
void SetComment(const OUString &rStr)
ScChangeActionReject(const sal_uLong nActionNumber, const ScChangeActionState eState, const sal_uLong nRejectingNumber, const ScBigRange &aBigRange, const OUString &aUser, const DateTime &aDateTime, const OUString &sComment)
ScChangeActionLinkEntry(const ScChangeActionLinkEntry &)=delete
std::vector< ScChangeTrackMsgInfo > ScChangeTrackMsgStack
ScChangeActionMove(const ScRange &rFromRange, const ScRange &rToRange, ScChangeTrack *pTrackP)
ScChangeActionContent * pFirstGeneratedDelContent
bool IsInDeleteTop() const
bool IsDialogParent() const
void SetModifiedLink(const Link< ScChangeTrack &, void > &r)
bool IsMultiDelete() const
ScChangeActionIns * pCutOff
This is very similar to ScCellValue, except that it references the original value instead of copying ...
ScChangeActionContent * pNextContent
const ScAppOptions & rOpt
bool RemoveDeletedIn(const ScChangeAction *)
ScChangeActionLinkEntry * AddDeleted(ScChangeAction *p)
std::optional< ScChangeTrackMsgInfo > xBlockModifyMsg
sal_uLong GetActionMax() const
bool IsTimeNanoSeconds() const
virtual ~ScChangeActionMove() override
ScChangeAction * GetPrev() const
bool IsInternalRejectable() const
Store arbitrary cell value of any kind.
virtual void GetDescription(OUString &rStr, ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const
const ScChangeActionLinkEntry * GetNext() const
friend class ScChangeActionContent
ScChangeActionLinkEntry * pLinkDeleted
ScChangeActionContentCellType
A link/connection/dependency between change actions.
virtual ScChangeActionLinkEntry * GetDeletedIn() const
size_t SCSIZE
size_t typedef to be able to find places where code was changed from USHORT to size_t and is used to ...
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
ScBigRange & GetFromRange()
void SetInDelete(bool bVal)
void SetInPasteCut(bool bVal)
void RemoveAllDependent()
ScActionColorChanger(const ScChangeTrack &rTrack)
SCROW mnContentRowsPerSlot
void SetDeletedInThis(sal_uLong nActionNumber, const ScChangeTrack *pTrack)
void SetFixDateTimeUTC(const DateTime &rDT)
ScChangeActionMove * GetMove()
ScChangeTrackMsgType eMsgType
ScChangeAction * GetFirst() const
bool IsTopContent() const
virtual void DeleteCellEntries() override
void AddLink(ScChangeAction *p, ScChangeActionLinkEntry *pL)
bool IsRejectable() const
virtual void GetDescription(OUString &rStr, ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const override
void SetActionNumber(sal_uLong n)
virtual void AddContent(ScChangeActionContent *) override
virtual const ScChangeTrack * GetChangeTrack() const override
const css::uno::Sequence< sal_Int8 > & GetProtection() const
bool IsDeleteType() const
void SetState(ScChangeActionState e)
ScChangeAction & operator=(const ScChangeAction &)=delete
void SetType(ScChangeActionType e)
sal_uLong GetStartLastCut() const
ScChangeActionContent * GetFirstGenerated() const
virtual const ScChangeTrack * GetChangeTrack() const override
ScChangeActionContent * GetPrevContent() const
const ScBigRange & GetFromRange() const
SC_DLLPUBLIC bool IsAccepted() const
void InsertInSlot(ScChangeActionContent **pp)
virtual const ScChangeTrack * GetChangeTrack() const override
void SetTimeNanoSeconds(bool bVal)
Reference< XAnimationNode > Clone(const Reference< XAnimationNode > &xSourceNode, const SdPage *pSource, const SdPage *pTarget)
ScChangeActionLinkEntry * pLinkDeletedIn
const DateTime & GetDateTimeUTC() const
ScChangeActionDelMoveEntry * pLinkMove
bool IsInDeleteUndo() const
ScChangeActionLinkEntry & operator=(const ScChangeActionLinkEntry &)=delete
bool IsTabDeleteCol() const
const OUString & GetComment() const
ScChangeAction(const ScChangeAction &)=delete
std::vector< ScChangeActionContent * > mvCells
ScChangeAction * GetAction()
void SetInDeleteUndo(bool bVal)
virtual bool Reject(ScDocument &rDoc) override
virtual void DeleteCellEntries() override
ScBigRange & GetBigRange()
ScChangeActionMap aGeneratedMap
ScBigRange GetOverAllRange() const
bool IsDeletedInDelType(ScChangeActionType) const
ScChangeActionLinkEntry * pLinkInsertTab
void SetLink(ScChangeActionLinkEntry *pLinkP)
virtual void GetDescription(OUString &rStr, ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const override
virtual ~ScChangeAction()
Link< ScChangeTrack &, void > aModifiedLink
void Update(const ScChangeAction &rAction)
void SetNextContent(ScChangeActionContent *p)
virtual void GetRefString(OUString &rStr, ScDocument &rDoc, bool bFlag3D=false) const override
ScChangeActionContent * pPrevContent
void SetDeletedIn(ScChangeAction *)
virtual void DeleteCellEntries() override
sal_uLong GetActionNumber() const
virtual bool Reject(ScDocument &rDoc) override
std::unique_ptr< ScChangeActionContent *[]> ppContentSlots
ScChangeActionContent ** ppPrevInSlot
std::vector< ScChangeActionContent * > mvCells
short GetCutOffTo() const
std::map< sal_uLong, ScChangeAction * > ScChangeActionMap
ScChangeTrackMsgStack aMsgStackFinal
ScChangeActionLinkEntry * AddDependent(ScChangeAction *p)
ScChangeActionContent * pNextInSlot
virtual void AddContent(ScChangeActionContent *) override
const ScRange & GetInDeleteRange() const
bool IsBaseDelete() const
short GetCutOffFrom() const
virtual void DeleteCellEntries() override
ScChangeActionLinkEntry(ScChangeActionLinkEntry **ppPrevP, ScChangeAction *pActionP)
virtual void GetDescription(OUString &rStr, ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const override
ScChangeActionLinkEntry * pLinkInsertCol
css::uno::Sequence< sal_Int8 > aProtectPass
ScChangeActionLinkEntry * pLink
ScChangeActionLinkEntry * GetNext()
virtual void UpdateReference(const ScChangeTrack *, UpdateRefMode, const ScBigRange &, sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz) override
std::set< OUString > maUserCollection
ScChangeTrackMergeState eMergeState
virtual bool Reject(ScDocument &rDoc) override
void SetInDeleteTop(bool bVal)
ScChangeActionLinkEntry * pLinkAny
const ScChangeActionDelMoveEntry * GetFirstMoveEntry() const
bool HasDependent() const
short GetCutOffCount() const
const ScChangeAction * GetAction() const
ScChangeActionMap aPasteCutMap
bool IsInsertType() const
virtual void AddContent(ScChangeActionContent *) override
ScChangeActionDel(const ScDocument *pDoc, const ScRange &rRange, SCCOL nDx, SCROW nDy, ScChangeTrack *)
virtual const ScChangeTrack * GetChangeTrack() const override
const std::set< OUString > & rUsers
virtual bool Reject(ScDocument &rDoc) override
const OUString & GetUser() const
sal_uInt16 nLastUserIndex
void SetCutOffInsert(ScChangeActionIns *p, short n)
sal_uLong GetEndLastCut() const
ScChangeActionDelMoveEntry(ScChangeActionDelMoveEntry **ppPrevP, ScChangeActionMove *pMove, short nFrom, short nTo)
const std::set< OUString > & GetUserCollection() const
void SetUser(const OUString &r)
ScChangeTrackMergeState GetMergeState() const
ScChangeActionLinkEntry * pLinkMove
void SetActionMax(sal_uLong nTempActionMax)
virtual void UpdateReference(const ScChangeTrack *, UpdateRefMode, const ScBigRange &, sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz) override
virtual bool Reject(ScDocument &rDoc)=0
virtual ScChangeActionLinkEntry ** GetDeletedInAddress()
void SetUseFixDateTime(bool bVal)
ScChangeTrackMsgStack aMsgStackTmp
void SetFixDateTimeLocal(const DateTime &rDT)
virtual void ConfigurationChanged(ConfigurationBroadcaster *p, ConfigurationHints nHint)=0
ScChangeActionState eState
const ScCellValue & GetNewCell() const
ScChangeActionContent * GetNextInSlot()
virtual void UpdateReference(const ScChangeTrack *, UpdateRefMode, const ScBigRange &, sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz) override
SC_DLLPUBLIC void GetDelta(sal_Int32 &nDx, sal_Int32 &nDy, sal_Int32 &nDz) const
virtual ~ScChangeActionLinkEntry()
const ScChangeActionLinkEntry * GetFirstDeletedEntry() const
void SetStartLastCut(sal_uLong nVal)
const ScBigRange & GetBigRange() const
bool IsInPasteCut() const
SC_DLLPUBLIC DateTime GetDateTime() const
const DateTime & GetFixDateTime() const
sal_uLong GetRejectAction() const
ScChangeActionLinkEntry * pLinkDependent
virtual void AddContent(ScChangeActionContent *) override
ScChangeActionLinkEntry ** ppPrev
ScChangeActionContent ** GetContentSlots() const
void SetPrevContent(ScChangeActionContent *p)
void RejectRestoreContents(ScChangeTrack *, SCCOL nDx, SCROW nDy)