Removed lcModelActionSelectionMode.

This commit is contained in:
Leonardo Zide
2026-02-01 21:48:58 -08:00
parent 966c7abf55
commit e2a1ada4df
3 changed files with 77 additions and 66 deletions
+68 -53
View File
@@ -1230,9 +1230,9 @@ void lcModel::Paste(bool PasteToCurrentStep)
SaveCheckpoint(tr("Pasting"));
if (SelectedObjects.size() == 1)
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), SelectedObjects.front(), LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), SelectedObjects.front(), LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
else
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, SelectedObjects, nullptr, 0, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(SelectedObjects, nullptr, 0, lcSelectionMode::Single);
CalculateStep(mCurrentStep);
gMainWindow->UpdateTimeline(false, false);
@@ -1310,7 +1310,7 @@ void lcModel::DuplicateSelectedPieces()
EndObjectEditAction(std::move(PieceIndices));
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, NewPieces, Focus, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(NewPieces, Focus, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
EndActionSequence(tr("Duplicate"));
@@ -1734,53 +1734,68 @@ void lcModel::SubModelAddBoundingBoxPoints(const lcMatrix44& WorldMatrix, std::v
Piece->SubModelAddBoundingBoxPoints(WorldMatrix, Points);
}
void lcModel::RecordSelectionAction(lcModelActionSelectionMode ModelActionSelectionMode, const std::vector<lcObject*>& Objects, lcObject* FocusObject, uint32_t FocusSection, lcSelectionMode SelectionMode)
void lcModel::RecordSelectionAction(std::function<void()> Callback)
{
std::unique_ptr<lcModelActionSelection> ModelActionSelection = std::make_unique<lcModelActionSelection>();
ModelActionSelection->SaveStartState(this);
Callback();
ModelActionSelection->SaveEndState(this);
if (ModelActionSelection->StateChanged())
mActionSequence.emplace_back(std::move(ModelActionSelection));
}
switch (ModelActionSelectionMode)
void lcModel::RecordClearSelectionAction()
{
RecordSelectionAction([this](){ DeselectAllObjects(); });
}
void lcModel::RecordSetFocusAction(lcObject* FocusObject, uint32_t FocusSection, lcSelectionMode SelectionMode)
{
RecordSelectionAction([this, FocusObject, FocusSection, SelectionMode](){ SetFocusedObject(FocusObject, FocusSection, SelectionMode); });
}
void lcModel::RecordSetSelectionAndFocusAction(const std::vector<lcObject*>& Objects, lcObject* FocusObject, uint32_t FocusSection, lcSelectionMode SelectionMode)
{
RecordSelectionAction([this, &Objects, FocusObject, FocusSection, SelectionMode]()
{
case lcModelActionSelectionMode::ClearSelection:
DeselectAllObjects();
break;
case lcModelActionSelectionMode::SetSelectionAndFocus:
DeselectAllObjects();
SetObjectsSelected(Objects, true);
SetFocusedObject(FocusObject, FocusSection, SelectionMode);
break;
});
}
case lcModelActionSelectionMode::SetFocus:
SetFocusedObject(FocusObject, FocusSection, SelectionMode);
break;
case lcModelActionSelectionMode::SelectAllPieces:
void lcModel::RecordSelectAllPiecesAction()
{
RecordSelectionAction([this]()
{
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
if (Piece->IsVisible(mCurrentStep))
Piece->SetSelected(true);
break;
});
}
case lcModelActionSelectionMode::InvertPieceSelection:
void lcModel::RecordInvertPieceSelectionAction()
{
RecordSelectionAction([this]()
{
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
if (Piece->IsSelected() || Piece->IsVisible(mCurrentStep))
Piece->SetSelected(!Piece->IsSelected());
break;
});
}
case lcModelActionSelectionMode::AddToSelection:
SetObjectsSelected(Objects, true);
break;
void lcModel::RecordAddToSelectionAction(const std::vector<lcObject*>& Objects)
{
RecordSelectionAction([this, &Objects](){ SetObjectsSelected(Objects, true); });
}
case lcModelActionSelectionMode::RemoveFromSelection:
SetObjectsSelected(Objects, false);
break;
}
ModelActionSelection->SaveEndState(this);
if (ModelActionSelection->StateChanged())
mActionSequence.emplace_back(std::move(ModelActionSelection));
void lcModel::RecordRemoveFromSelectionAction(const std::vector<lcObject*>& Objects)
{
RecordSelectionAction([this, &Objects](){ SetObjectsSelected(Objects, false); });
}
void lcModel::RunSelectionAction(const lcModelActionSelection* ModelActionSelection, bool Apply)
@@ -2598,7 +2613,7 @@ lcPiece* lcModel::AddPiece(PieceInfo* Info, quint32 Section)
}
gMainWindow->UpdateTimeline(false, false);
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), Piece, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), Piece, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
SaveCheckpoint(tr("Adding Piece"));
@@ -2734,7 +2749,7 @@ void lcModel::FocusNextTrainTrack()
}
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::SetFocus, std::vector<lcObject*>(), FocusPiece, LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST + ConnectionIndex, lcSelectionMode::Single);
RecordSetFocusAction(FocusPiece, LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST + ConnectionIndex, lcSelectionMode::Single);
EndActionSequence(tr("Selection"));
}
@@ -2761,7 +2776,7 @@ void lcModel::FocusPreviousTrainTrack()
}
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::SetFocus, std::vector<lcObject*>(), FocusPiece, LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST + ConnectionIndex, lcSelectionMode::Single);
RecordSetFocusAction(FocusPiece, LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST + ConnectionIndex, lcSelectionMode::Single);
EndActionSequence(tr("Selection"));
}
@@ -3150,7 +3165,7 @@ void lcModel::MoveSelectionToModel(lcModel* Model)
SaveCheckpoint(tr("New Model"));
gMainWindow->UpdateTimeline(false, false);
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), ModelPiece, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), ModelPiece, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
}
void lcModel::InlineSelectedModels()
@@ -3202,7 +3217,7 @@ void lcModel::InlineSelectedModels()
return;
}
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, NewPieces, nullptr, 0, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(NewPieces, nullptr, 0, lcSelectionMode::Single);
SaveCheckpoint(tr("Inlining"));
gMainWindow->UpdateTimeline(false, false);
@@ -4327,14 +4342,14 @@ void lcModel::GetSelectionInformation(int* Flags, std::vector<lcObject*>& Select
void lcModel::ClearSelection()
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::ClearSelection, std::vector<lcObject*>(), nullptr, 0, lcSelectionMode::Single);
RecordClearSelectionAction();
EndActionSequence(tr("Selection"));
}
void lcModel::SetSelectionAndFocus(const std::vector<lcObject*>& Objects, lcObject* Focus, quint32 Section, lcSelectionMode SelectionMode)
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, Objects, Focus, Section, SelectionMode);
RecordSetSelectionAndFocusAction(Objects, Focus, Section, SelectionMode);
EndActionSequence(tr("Selection"));
}
@@ -4345,13 +4360,13 @@ void lcModel::FocusOrDeselectObject(lcObject* Object, uint32_t Section, lcSelect
if (Object)
{
if (!Object->IsFocused(Section))
RecordSelectionAction(lcModelActionSelectionMode::SetFocus, std::vector<lcObject*>(), Object, Section, SelectionMode);
RecordSetFocusAction(Object, Section, SelectionMode);
else
RecordSelectionAction(lcModelActionSelectionMode::SetFocus, std::vector<lcObject*>(), nullptr, 0, SelectionMode);
RecordSetFocusAction(nullptr, ~0, SelectionMode);
}
else
{
RecordSelectionAction(lcModelActionSelectionMode::SetFocus, std::vector<lcObject*>(), nullptr, 0, SelectionMode);
RecordSetFocusAction(nullptr, 0, SelectionMode);
}
EndActionSequence(tr("Selection"));
@@ -4360,28 +4375,28 @@ void lcModel::FocusOrDeselectObject(lcObject* Object, uint32_t Section, lcSelect
void lcModel::SelectAllPieces()
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::SelectAllPieces, std::vector<lcObject*>(), nullptr, 0, lcSelectionMode::Single);
RecordSelectAllPiecesAction();
EndActionSequence(tr("Selection"));
}
void lcModel::InvertPieceSelection()
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::InvertPieceSelection, std::vector<lcObject*>(), nullptr, 0, lcSelectionMode::Single);
RecordInvertPieceSelectionAction();
EndActionSequence(tr("Selection"));
}
void lcModel::AddToSelection(const std::vector<lcObject*>& Objects)
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::AddToSelection, Objects, nullptr, 0, lcSelectionMode::Single);
RecordAddToSelectionAction(Objects);
EndActionSequence(tr("Selection"));
}
void lcModel::RemoveFromSelection(const std::vector<lcObject*>& Objects)
{
BeginActionSequence();
RecordSelectionAction(lcModelActionSelectionMode::RemoveFromSelection, Objects, nullptr, 0, lcSelectionMode::Single);
RecordRemoveFromSelectionAction(Objects);
EndActionSequence(tr("Selection"));
}
@@ -4718,9 +4733,9 @@ void lcModel::FindReplacePiece(bool SearchForward, bool FindAll, bool Replace)
}
if (FindAll)
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, Selection, nullptr, 0, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(Selection, nullptr, 0, lcSelectionMode::Single);
else
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), Focus, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), Focus, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
if (ReplacedCount)
{
@@ -4909,7 +4924,7 @@ void lcModel::InsertPieceToolClicked(const std::vector<lcInsertPieceInfo>& Piece
EndObjectEditAction(std::move(PieceIndices));
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), Piece, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), Piece, LC_PIECE_SECTION_POSITION, lcSelectionMode::Single);
EndActionSequence(tr("Add Piece"));
@@ -4931,7 +4946,7 @@ void lcModel::InsertCameraToolClicked(const lcVector3& Position)
EndObjectEditAction({ mCameras.size() - 1 });
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), Camera, LC_CAMERA_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), Camera, LC_CAMERA_SECTION_POSITION, lcSelectionMode::Single);
EndActionSequence(tr("Add Camera"));
}
@@ -4972,7 +4987,7 @@ void lcModel::InsertLightToolClicked(const lcVector3& Position, lcLightType Ligh
EndObjectEditAction({ mLights.size() - 1 });
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, std::vector<lcObject*>(), Light, LC_LIGHT_SECTION_POSITION, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(std::vector<lcObject*>(), Light, LC_LIGHT_SECTION_POSITION, lcSelectionMode::Single);
EndActionSequence(ActionName);
}
@@ -5431,7 +5446,7 @@ void lcModel::ShowArrayDialog()
EndObjectEditAction(std::move(PieceIndices));
RecordSelectionAction(lcModelActionSelectionMode::AddToSelection, NewPieces, nullptr, 0, lcSelectionMode::Single);
RecordAddToSelectionAction(NewPieces);
EndActionSequence(tr("Piece Array"));
@@ -5476,7 +5491,7 @@ void lcModel::ShowMinifigDialog()
EndObjectEditAction(std::move(PieceIndices), { mGroups.size() - 1});
RecordSelectionAction(lcModelActionSelectionMode::SetSelectionAndFocus, Pieces, nullptr, 0, lcSelectionMode::Single);
RecordSetSelectionAndFocusAction(Pieces, nullptr, 0, lcSelectionMode::Single);
EndActionSequence(tr("Add Minifig"));
+9 -2
View File
@@ -402,8 +402,15 @@ public:
protected:
void DeleteModel();
void RecordSelectionAction(lcModelActionSelectionMode ModelActionSelectionMode, const std::vector<lcObject*>& Objects, lcObject* FocusObject, uint32_t FocusSection, lcSelectionMode SelectionMode);
void RecordSelectionAction(std::function<void()> Callback);
void RecordClearSelectionAction();
void RecordSetFocusAction(lcObject* FocusObject, uint32_t FocusSection, lcSelectionMode SelectionMode);
void RecordSetSelectionAndFocusAction(const std::vector<lcObject*>& Objects, lcObject* FocusObject, uint32_t FocusSection, lcSelectionMode SelectionMode);
void RecordSelectAllPiecesAction();
void RecordInvertPieceSelectionAction();
void RecordAddToSelectionAction(const std::vector<lcObject*>& Objects);
void RecordRemoveFromSelectionAction(const std::vector<lcObject*>& Objects);
void RunSelectionAction(const lcModelActionSelection* ModelActionSelection, bool Apply);
void BeginObjectEditAction(lcModelActionObjectEditMode ModelActionObjectEditMode, const lcCamera* Camera);
void EndObjectEditAction(std::vector<size_t>&& ObjectIndices = std::vector<size_t>(), std::vector<size_t>&& GroupIndices = std::vector<size_t>());
-11
View File
@@ -19,17 +19,6 @@ protected:
std::vector<size_t> mLightIndices;
};
enum class lcModelActionSelectionMode
{
ClearSelection,
SetFocus,
SetSelectionAndFocus,
SelectAllPieces,
InvertPieceSelection,
AddToSelection,
RemoveFromSelection
};
struct lcModelActionSelectionState
{
std::vector<bool> PieceSelection;