From a6c5cdde2bd1bcba82cbfde0d324129124e5366c Mon Sep 17 00:00:00 2001 From: Leonardo Zide Date: Mon, 23 Feb 2026 22:42:33 -0800 Subject: [PATCH] Fixed selection marking files modified. --- common/lc_model.cpp | 24 ++++++++++++++++++++++++ common/lc_model.h | 23 +++++++---------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/common/lc_model.cpp b/common/lc_model.cpp index 7c5b73ce..c6cf9f08 100644 --- a/common/lc_model.cpp +++ b/common/lc_model.cpp @@ -2010,6 +2010,30 @@ void lcModel::RevertActionSequence() mActionSequence.clear(); } +bool lcModel::IsModified() const +{ + const lcModelHistoryEntry* FirstModifyAction = GetFirstUndoChange(); + + if (!FirstModifyAction) + return mSavedHistory != nullptr; + else + return mSavedHistory != FirstModifyAction; +} + +void lcModel::SetSaved() +{ + mSavedHistory = GetFirstUndoChange(); +} + +const lcModelHistoryEntry* lcModel::GetFirstUndoChange() const +{ + for (const std::unique_ptr& UndoEntry : mUndoHistory) + if (UndoEntry->ModelActions.size() != 1 || !dynamic_cast(UndoEntry->ModelActions.front().get())) + return UndoEntry.get(); + + return nullptr; +} + void lcModel::SaveCheckpoint(const QString& ) { /* diff --git a/common/lc_model.h b/common/lc_model.h index b420d80d..b0a11900 100644 --- a/common/lc_model.h +++ b/common/lc_model.h @@ -131,19 +131,14 @@ public: return mProject; } - bool IsModified() const - { - if (mUndoHistory.empty()) - return mSavedHistory != nullptr; - else - return mSavedHistory != mUndoHistory.front().get(); - } - bool IsActive() const { return mActive; } - + + bool IsModified() const; + void SetSaved(); + bool GetPieceWorldMatrix(lcPiece* Piece, lcMatrix44& ParentWorldMatrix) const; bool IncludesModel(const lcModel* Model) const; void CreatePieceInfo(Project* Project); @@ -271,12 +266,7 @@ public: bool LoadInventory(const QByteArray& Inventory); int SplitMPD(QIODevice& Device); void Merge(std::unique_ptr Other); - - void SetSaved() - { - mSavedHistory = mUndoHistory.empty() ? nullptr : mUndoHistory.front().get(); - } - + void SetMinifig(const lcMinifig& Minifig); void SetPreviewPieceInfo(PieceInfo* Info, int ColorIndex); @@ -422,6 +412,7 @@ protected: void EndActionSequence(const QString& Description); void DiscardActionSequence(); void RevertActionSequence(); + const lcModelHistoryEntry* GetFirstUndoChange() const; void SaveCheckpoint(const QString& Description); void LoadCheckPoint(lcModelHistoryEntry* CheckPoint, bool Apply); @@ -457,7 +448,7 @@ protected: QStringList mFileLines; std::vector> mActionSequence; - lcModelHistoryEntry* mSavedHistory; + const lcModelHistoryEntry* mSavedHistory = nullptr; std::vector> mUndoHistory; std::vector> mRedoHistory;