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 );
341 bool bSplitRange =
false,
bool bWarning =
true )
const;
344 OUString& rStr,
ScDocument& rDoc,
bool bFlag3D =
false )
const;
388 const OUString& aUser,
390 const OUString &sComment,
392 bool bEndOfList =
false );
395 OUString& rStr,
ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true)
const override;
414 short nFrom,
short nTo );
452 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz )
override;
490 OUString& rStr,
ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
493 { pCutOff = p; nCutOff = n; }
518 aFromRange( rFromRange ),
537 sal_Int32
nDx, sal_Int32
nDy, sal_Int32 nDz )
override;
551 const OUString&
aUser,
553 const OUString &sComment,
561 OUString& rStr,
ScDocument& rDoc,
bool bSplitRange =
false,
562 bool bWarning =
true )
const override;
565 OUString& rStr,
ScDocument& rDoc,
bool bFlag3D =
false )
const override;
571 short nFrom,
short nTo )
576 nCutOffFrom( nFrom ),
619 if ( ( pNextInSlot = *pp ) !=
nullptr )
629 if ( ( *ppPrevInSlot = pNextInSlot ) !=
nullptr )
631 ppPrevInSlot =
nullptr;
639 static void GetStringOfCell(
642 static void GetStringOfCell(
655 static bool NeedsNumberFormat(
const ScCellValue& rVal );
659 void GetValueString( OUString& rStr,
const OUString& rValue,
const ScCellValue& rCell,
662 void GetFormulaString( OUString& rStr,
const ScFormulaCell* pCell )
const;
669 sal_Int32 nDx, sal_Int32 nDy, sal_Int32 nDz )
override;
678 bool bOldest, ::std::stack<ScChangeActionContent*>* pRejectActions );
692 const OUString& aUser,
const DateTime& aDateTime,
693 const OUString &sComment,
const ScCellValue& rOldCell,
694 const ScDocument* pDoc,
const OUString& sOldValue );
699 const OUString& sNewValue );
735 { pNextContent = p; }
737 { pPrevContent = p; }
741 void SetOldValue(
const OUString& rOld,
ScDocument* pDoc );
743 void GetOldString( OUString& rStr,
const ScDocument* pDoc )
const;
744 void GetNewString( OUString& rStr,
const ScDocument* pDoc )
const;
748 OUString& rStr,
ScDocument&
rDoc,
bool bSplitRange =
false,
bool bWarning =
true )
const override;
751 OUString& rStr,
ScDocument&
rDoc,
bool bFlag3D =
false )
const override;
757 bool IsMatrixOrigin()
const;
759 bool IsOldMatrixReference()
const;
780 const OUString&
aUser,
782 const OUString &sComment);
818 #define SC_CHGTRACK_GENERATED_START (sal_uInt32(0xfffffff0))
862 bool bInDeleteUndo:1;
865 bool bUseFixDateTime:1;
866 bool bTimeNanoSeconds:1;
871 SCROW InitContentRowsPerSlot();
875 static bool IsMatrixFormulaRangeDifferent(
881 { aInDeleteRange = rRange; }
883 { bInDelete = bVal; }
885 { bInDeleteTop = bVal; }
887 { bInDeleteUndo = bVal; }
889 { bInPasteCut = bVal; }
891 { eMergeState = eState; }
901 void EndBlockModify(
sal_uLong nEndAction );
913 void AppendOneDeleteRange(
const ScRange& rOrgRange,
917 void LookUpContents(
const ScRange& rOrgRange,
926 void DeleteGeneratedDelContent(
932 void DeleteCellEntries(
933 std::vector<ScChangeActionContent*>&,
943 bool IsLastAction(
sal_uLong nNum )
const;
945 void ClearMsgQueue();
950 SCSIZE ComputeContentSlot( sal_Int32 nRow )
const;
961 bool IsGenerated(
sal_uLong nAction )
const;
965 sal_uLong GetLastSavedActionNumber()
const;
966 void SetLastSavedActionNumber(
sal_uLong nNew);
971 {
return aInDeleteRange; }
977 const OUString&
GetUser()
const {
return maUser;}
987 { bUseFixDateTime = bVal; }
990 { aFixDateTime = rDT; }
1008 void AppendContent(
const ScAddress& rPos,
1012 void AppendContentRange(
const ScRange& rRange,
1027 void AppendContentsIfInRefDoc(
ScDocument& rRefDoc,
1055 nStartLastCut = nEndLastCut = 0;
1056 pLastCutMove.reset();
1060 return nEndLastCut > 0 &&
1061 nStartLastCut <= nEndLastCut &&
1070 void MergePrepare(
const ScChangeAction* pFirstMerge,
bool bShared );
1116 { aModifiedLink = r; ClearMsgQueue(); }
1123 const ScBigRange& aBigRange,
const OUString& sNewValue );
1124 void AppendLoaded( std::unique_ptr<ScChangeAction> pAppend );
1126 { nActionMax = nTempActionMax; }
1129 { aProtectPass = rPass; }
1131 {
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)