Merged step and object edit actions.
This commit is contained in:
+57
-86
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user