28 #include <com/sun/star/uno/Sequence.hxx>
30 #include <tools/datetime.hxx>
45 namespace tools {
class JsonWriter; }
144 pLinkP->
pLink =
this;
152 pLink->
pLink =
nullptr;
161 if ( ( *ppPrev = pNext ) !=
nullptr )
215 const OUString& aUser,
216 const OUString& aComment );
226 void SetUser(
const OUString& r );
267 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz );
340 ScDocument& rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const;
386 const OUString& aUser,
388 const OUString &sComment,
390 bool bEndOfList =
false );
393 ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true)
const override;
412 short nFrom,
short nTo );
450 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz )
override;
488 ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
491 { pCutOff = p; nCutOff = n; }
516 aFromRange( rFromRange ),
535 sal_Int32
nDx, sal_Int32
nDy, sal_Int32 nDz )
override;
549 const OUString&
aUser,
551 const OUString &sComment,
559 ScDocument& rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
567 short nFrom,
short nTo )
572 nCutOffFrom( nFrom ),
615 if ( ( pNextInSlot = *pp ) !=
nullptr )
625 if ( ( *ppPrevInSlot = pNextInSlot ) !=
nullptr )
627 ppPrevInSlot =
nullptr;
635 static OUString GetStringOfCell(
638 static OUString GetStringOfCell(
651 static bool NeedsNumberFormat(
const ScCellValue& rVal );
655 OUString GetValueString(
const OUString& rValue,
const ScCellValue& rCell,
658 OUString GetFormulaString(
const ScFormulaCell* pCell )
const;
665 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz )
override;
674 bool bOldest, ::std::stack<ScChangeActionContent*>* pRejectActions );
688 const OUString& aUser,
const DateTime& aDateTime,
689 const OUString &sComment,
const ScCellValue& rOldCell,
690 const ScDocument* pDoc,
const OUString& sOldValue );
695 const OUString& sNewValue );
731 { pNextContent = p; }
733 { pPrevContent = p; }
737 void SetOldValue(
const OUString& rOld,
ScDocument* pDoc );
739 OUString GetOldString(
const ScDocument* pDoc )
const;
740 OUString GetNewString(
const ScDocument* pDoc )
const;
744 ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
752 bool IsMatrixOrigin()
const;
754 bool IsOldMatrixReference()
const;
775 const OUString&
aUser,
777 const OUString &sComment);
813 #define SC_CHGTRACK_GENERATED_START (sal_uInt32(0xfffffff0))
857 bool bInDeleteUndo:1;
860 bool bUseFixDateTime:1;
861 bool bTimeNanoSeconds:1;
866 SCROW InitContentRowsPerSlot();
870 static bool IsMatrixFormulaRangeDifferent(
876 { aInDeleteRange = rRange; }
878 { bInDelete = bVal; }
880 { bInDeleteTop = bVal; }
882 { bInDeleteUndo = bVal; }
884 { bInPasteCut = bVal; }
886 { eMergeState = eState; }
896 void EndBlockModify(
sal_uLong nEndAction );
908 void AppendOneDeleteRange(
const ScRange& rOrgRange,
912 void LookUpContents(
const ScRange& rOrgRange,
921 void DeleteGeneratedDelContent(
927 void DeleteCellEntries(
928 std::vector<ScChangeActionContent*>&,
938 bool IsLastAction(
sal_uLong nNum )
const;
940 void ClearMsgQueue();
945 SCSIZE ComputeContentSlot( sal_Int32 nRow )
const;
956 bool IsGenerated(
sal_uLong nAction )
const;
960 sal_uLong GetLastSavedActionNumber()
const;
961 void SetLastSavedActionNumber(
sal_uLong nNew);
966 {
return aInDeleteRange; }
972 const OUString&
GetUser()
const {
return maUser;}
982 { bUseFixDateTime = bVal; }
985 { aFixDateTime = rDT; }
1003 void AppendContent(
const ScAddress& rPos,
1007 void AppendContentRange(
const ScRange& rRange,
1022 void AppendContentsIfInRefDoc(
ScDocument& rRefDoc,
1050 nStartLastCut = nEndLastCut = 0;
1051 pLastCutMove.reset();
1055 return nEndLastCut > 0 &&
1056 nStartLastCut <= nEndLastCut &&
1065 void MergePrepare(
const ScChangeAction* pFirstMerge,
bool bShared );
1111 { aModifiedLink = r; ClearMsgQueue(); }
1118 const ScBigRange& aBigRange,
const OUString& sNewValue );
1119 void AppendLoaded( std::unique_ptr<ScChangeAction> pAppend );
1121 { nActionMax = nTempActionMax; }
1124 { aProtectPass = rPass; }
1126 {
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
void SetLastMerge(sal_uLong nVal)
virtual OUString GetRefString(ScDocument &rDoc, bool bFlag3D=false) const override
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
virtual OUString GetDescription(ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const
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.
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
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()
virtual OUString GetRefString(ScDocument &rDoc, bool bFlag3D=false) const override
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 ~ScChangeAction()
Link< ScChangeTrack &, void > aModifiedLink
void Update(const ScChangeAction &rAction)
void SetNextContent(ScChangeActionContent *p)
void Clear(EHistoryType eHistory)
ScChangeActionContent * pPrevContent
void SetDeletedIn(ScChangeAction *)
virtual OUString GetDescription(ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const override
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)
ScChangeActionLinkEntry * pLinkInsertCol
css::uno::Sequence< sal_Int8 > aProtectPass
ScChangeActionLinkEntry * pLink
ScChangeActionLinkEntry * GetNext()
virtual OUString GetDescription(ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const override
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 OUString GetDescription(ScDocument &rDoc, bool bSplitRange=false, bool bWarning=true) const override
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
virtual void SetValue(tools::Long nNew) override
void SetPrevContent(ScChangeActionContent *p)
void RejectRestoreContents(ScChangeTrack *, SCCOL nDx, SCROW nDy)