Merged step and object edit actions.

This commit is contained in:
Leonardo Zide
2025-12-21 19:07:52 -03:00
parent 2741b86e9c
commit 529ecff8dd
4 changed files with 70 additions and 148 deletions
+57 -86
View File
@@ -1727,13 +1727,14 @@ void lcModel::BeginObjectEditAction(lcModelActionObjectEditMode ModelActionObjec
switch (ModelActionObjectEditMode)
{
case lcModelActionObjectEditMode::All:
case lcModelActionObjectEditMode::Selection:
ModelActionObjectEdit->SaveModelStartState(this);
break;
case lcModelActionObjectEditMode::Camera:
ModelActionObjectEdit->SaveCameraStartState(Camera);
break;
case lcModelActionObjectEditMode::Selection:
ModelActionObjectEdit->SaveSelectionStartState(this);
break;
}
mActionSequence.emplace_back(std::move(ModelActionObjectEdit));
@@ -1751,12 +1752,13 @@ void lcModel::EndObjectEditAction(lcModelActionObjectEditMode ModelActionObjectE
switch (ModelActionObjectEditMode)
{
case lcModelActionObjectEditMode::Camera:
ModelActionObjectEdit->SaveCameraEndState(Camera);
case lcModelActionObjectEditMode::All:
case lcModelActionObjectEditMode::Selection:
ModelActionObjectEdit->SaveModelEndState(this);
break;
case lcModelActionObjectEditMode::Selection:
ModelActionObjectEdit->SaveSelectionEndState(this);
case lcModelActionObjectEditMode::Camera:
ModelActionObjectEdit->SaveCameraEndState(Camera);
break;
}
}
@@ -1770,6 +1772,16 @@ void lcModel::RunObjectEditAction(const lcModelActionObjectEdit* ModelActionObje
switch (ModelActionObjectEditMode)
{
case lcModelActionObjectEditMode::All:
case lcModelActionObjectEditMode::Selection:
if (Apply)
ModelActionObjectEdit->LoadModelEndState(this);
else
ModelActionObjectEdit->LoadModelStartState(this);
SetCurrentStep(mCurrentStep);
break;
case lcModelActionObjectEditMode::Camera:
if (lcCamera* Camera = GetCamera(ModelActionObjectEdit->GetCameraName()))
{
@@ -1781,15 +1793,6 @@ void lcModel::RunObjectEditAction(const lcModelActionObjectEdit* ModelActionObje
SetCurrentStep(mCurrentStep);
}
break;
case lcModelActionObjectEditMode::Selection:
if (Apply)
ModelActionObjectEdit->LoadSelectionEndState(this);
else
ModelActionObjectEdit->LoadSelectionStartState(this);
SetCurrentStep(mCurrentStep);
break;
}
}
@@ -2166,67 +2169,6 @@ void lcModel::RunHidePiecesAction(const lcModelActionHidePieces* ModelActionHide
}
}
void lcModel::RecordStepAction(lcModelActionStepMode Mode, lcStep Step)
{
std::unique_ptr<lcModelActionStep> ModelActionStep = std::make_unique<lcModelActionStep>(Mode, Step);
ModelActionStep->SaveModelState(this);
RunStepAction(ModelActionStep.get(), true);
mActionSequence.emplace_back(std::move(ModelActionStep));
}
void lcModel::RunStepAction(const lcModelActionStep* ModelActionStep, bool Apply)
{
if (!ModelActionStep)
return;
lcStep Step = ModelActionStep->GetStep();
if (Apply)
{
if (ModelActionStep->GetMode() == lcModelActionStepMode::Insert)
{
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
{
Piece->InsertTime(Step, 1);
if (Piece->IsSelected() && !Piece->IsVisible(mCurrentStep))
Piece->SetSelected(false);
}
for (std::unique_ptr<lcCamera>& Camera : mCameras)
Camera->InsertTime(Step, 1);
for (const std::unique_ptr<lcLight>& Light : mLights)
Light->InsertTime(Step, 1);
}
else
{
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
{
Piece->RemoveTime(Step, 1);
if (Piece->IsSelected() && !Piece->IsVisible(mCurrentStep))
Piece->SetSelected(false);
}
for (std::unique_ptr<lcCamera>& Camera : mCameras)
Camera->RemoveTime(Step, 1);
for (const std::unique_ptr<lcLight>& Light : mLights)
Light->RemoveTime(Step, 1);
}
}
else
{
ModelActionStep->LoadModelState(this);
}
SetCurrentStep(mCurrentStep);
}
void lcModel::PerformActionSequence(const std::vector<std::unique_ptr<lcModelAction>>& ActionSequence, bool Apply)
{
auto PerformAction=[this](const lcModelAction* ModelAction, bool Apply)
@@ -2247,8 +2189,6 @@ void lcModel::PerformActionSequence(const std::vector<std::unique_ptr<lcModelAct
RunDuplicatePiecesAction(ModelActionDuplicatePieces, Apply);
else if (const lcModelActionHidePieces* ModelActionHidePieces = dynamic_cast<const lcModelActionHidePieces*>(ModelAction))
RunHidePiecesAction(ModelActionHidePieces, Apply);
else if (const lcModelActionStep* ModelActionStep = dynamic_cast<const lcModelActionStep*>(ModelAction))
RunStepAction(ModelActionStep, Apply);
};
if (Apply)
@@ -2463,21 +2403,52 @@ lcStep lcModel::GetLastStep() const
void lcModel::InsertStep(lcStep Step)
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::Set);
RecordStepAction(lcModelActionStepMode::Insert, Step);
BeginObjectEditAction(lcModelActionObjectEditMode::All, nullptr);
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
{
Piece->InsertTime(Step, 1);
if (Piece->IsSelected() && !Piece->IsVisible(mCurrentStep))
Piece->SetSelected(false);
}
for (std::unique_ptr<lcCamera>& Camera : mCameras)
Camera->InsertTime(Step, 1);
for (const std::unique_ptr<lcLight>& Light : mLights)
Light->InsertTime(Step, 1);
EndObjectEditAction(lcModelActionObjectEditMode::All, nullptr);
EndActionSequence(tr("Insert Step"));
SetCurrentStep(mCurrentStep);
}
void lcModel::RemoveStep(lcStep Step)
{
BeginActionSequence();
BeginObjectEditAction(lcModelActionObjectEditMode::All, nullptr);
RecordSelectionAction(lcModelActionSelectionMode::Set);
RecordStepAction(lcModelActionStepMode::Remove, Step);
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
{
Piece->RemoveTime(Step, 1);
if (Piece->IsSelected() && !Piece->IsVisible(mCurrentStep))
Piece->SetSelected(false);
}
for (std::unique_ptr<lcCamera>& Camera : mCameras)
Camera->RemoveTime(Step, 1);
for (const std::unique_ptr<lcLight>& Light : mLights)
Light->RemoveTime(Step, 1);
EndObjectEditAction(lcModelActionObjectEditMode::All, nullptr);
EndActionSequence(tr("Remove Step"));
SetCurrentStep(mCurrentStep);
}
lcGroup* lcModel::AddGroup(const QString& Prefix, lcGroup* Parent)
-4
View File
@@ -13,13 +13,11 @@ class lcModelActionAddLight;
class lcModelActionGroupPieces;
class lcModelActionDuplicatePieces;
class lcModelActionHidePieces;
class lcModelActionStep;
enum class lcModelActionSelectionMode;
enum class lcModelActionAddPieceSelectionMode;
enum class lcModelActionObjectEditMode;
enum class lcModelActionGroupPiecesMode;
enum class lcModelActionHidePiecesMode;
enum class lcModelActionStepMode;
#define LC_SEL_NO_PIECES 0x0001 // No pieces in model
#define LC_SEL_PIECE 0x0002 // At least 1 piece selected
@@ -426,8 +424,6 @@ protected:
void RunDuplicatePiecesAction(const lcModelActionDuplicatePieces* ModelActionDuplicatePieces, bool Apply);
void RecordHidePiecesAction(lcModelActionHidePiecesMode Mode);
void RunHidePiecesAction(const lcModelActionHidePieces* ModelActionHidePieces, bool Apply);
void RecordStepAction(lcModelActionStepMode Mode, lcStep Step);
void RunStepAction(const lcModelActionStep* ModelActionStep, bool Apply);
void PerformActionSequence(const std::vector<std::unique_ptr<lcModelAction>>& ActionSequence, bool Apply);
void BeginActionSequence();
+6 -21
View File
@@ -287,22 +287,22 @@ void lcModelActionObjectEdit::LoadCameraEndState(lcCamera* Camera) const
Camera->LoadUndoData(Stream);
}
void lcModelActionObjectEdit::SaveSelectionStartState(const lcModel* Model)
void lcModelActionObjectEdit::SaveModelStartState(const lcModel* Model)
{
SaveUndoBuffer(mStartBuffer, Model, true);
SaveUndoBuffer(mStartBuffer, Model, mMode == lcModelActionObjectEditMode::Selection);
}
void lcModelActionObjectEdit::LoadSelectionStartState(lcModel* Model) const
void lcModelActionObjectEdit::LoadModelStartState(lcModel* Model) const
{
LoadUndoBuffer(mStartBuffer, Model);
}
void lcModelActionObjectEdit::SaveSelectionEndState(const lcModel* Model)
void lcModelActionObjectEdit::SaveModelEndState(const lcModel* Model)
{
SaveUndoBuffer(mEndBuffer, Model, true);
SaveUndoBuffer(mEndBuffer, Model, mMode == lcModelActionObjectEditMode::Selection);
}
void lcModelActionObjectEdit::LoadSelectionEndState(lcModel* Model) const
void lcModelActionObjectEdit::LoadModelEndState(lcModel* Model) const
{
LoadUndoBuffer(mEndBuffer, Model);
}
@@ -359,18 +359,3 @@ void lcModelActionHidePieces::SaveHiddenState(const std::vector<std::unique_ptr<
for (size_t PieceIndex = 0; PieceIndex < Pieces.size(); PieceIndex++)
mHiddenState[PieceIndex] = Pieces[PieceIndex]->IsHidden();
}
lcModelActionStep::lcModelActionStep(lcModelActionStepMode Mode, lcStep Step)
: mMode(Mode), mStep(Step)
{
}
void lcModelActionStep::SaveModelState(const lcModel* Model)
{
SaveUndoBuffer(mUndoBuffer, Model, false);
}
void lcModelActionStep::LoadModelState(lcModel* Model) const
{
LoadUndoBuffer(mUndoBuffer, Model);
}
+7 -37
View File
@@ -53,8 +53,9 @@ protected:
enum class lcModelActionObjectEditMode
{
Camera,
Selection
All,
Selection,
Camera
};
class lcModelActionObjectEdit: public lcModelAction
@@ -68,10 +69,10 @@ public:
void SaveCameraEndState(const lcCamera* Camera);
void LoadCameraEndState(lcCamera* Camera) const;
void SaveSelectionStartState(const lcModel* Model);
void LoadSelectionStartState(lcModel* Model) const;
void SaveSelectionEndState(const lcModel* Model);
void LoadSelectionEndState(lcModel* Model) const;
void SaveModelStartState(const lcModel* Model);
void LoadModelStartState(lcModel* Model) const;
void SaveModelEndState(const lcModel* Model);
void LoadModelEndState(lcModel* Model) const;
lcModelActionObjectEditMode GetMode() const
{
@@ -247,34 +248,3 @@ protected:
std::vector<bool> mHiddenState;
lcModelActionHidePiecesMode mMode;
};
enum class lcModelActionStepMode
{
Insert,
Remove
};
class lcModelActionStep : public lcModelAction
{
public:
lcModelActionStep(lcModelActionStepMode Mode, lcStep Step);
virtual ~lcModelActionStep() = default;
lcModelActionStepMode GetMode() const
{
return mMode;
}
lcStep GetStep() const
{
return mStep;
}
void SaveModelState(const lcModel* Model);
void LoadModelState(lcModel* Model) const;
protected:
QByteArray mUndoBuffer;
lcModelActionStepMode mMode;
lcStep mStep;
};