mirror of
https://github.com/leozide/leocad.git
synced 2026-07-27 19:56:49 +00:00
@@ -3196,15 +3196,15 @@ void lcMainWindow::HandleCommand(lcCommandId CommandId)
|
||||
break;
|
||||
|
||||
case LC_VIEW_TIME_INSERT_BEFORE:
|
||||
lcGetActiveModel()->InsertStep(lcGetActiveModel()->GetCurrentStep());
|
||||
lcGetActiveModel()->InsertStepAction(lcGetActiveModel()->GetCurrentStep());
|
||||
break;
|
||||
|
||||
case LC_VIEW_TIME_INSERT_AFTER:
|
||||
lcGetActiveModel()->InsertStep(lcGetActiveModel()->GetCurrentStep() + 1);
|
||||
lcGetActiveModel()->InsertStepAction(lcGetActiveModel()->GetCurrentStep() + 1);
|
||||
break;
|
||||
|
||||
case LC_VIEW_TIME_DELETE:
|
||||
lcGetActiveModel()->RemoveStep(lcGetActiveModel()->GetCurrentStep());
|
||||
lcGetActiveModel()->RemoveStepAction(lcGetActiveModel()->GetCurrentStep());
|
||||
break;
|
||||
|
||||
case LC_VIEW_VIEWPOINT_FRONT:
|
||||
|
||||
+47
-4
@@ -2125,9 +2125,6 @@ lcStep lcModel::GetLastStep() const
|
||||
|
||||
void lcModel::InsertStep(lcStep Step)
|
||||
{
|
||||
BeginHistorySequence();
|
||||
BeginEditHistory(lcModelHistoryEditMerge::None);
|
||||
|
||||
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
|
||||
Piece->InsertTime(Step, 1);
|
||||
|
||||
@@ -2136,7 +2133,14 @@ void lcModel::InsertStep(lcStep Step)
|
||||
|
||||
for (const std::unique_ptr<lcLight>& Light : mLights)
|
||||
Light->InsertTime(Step, 1);
|
||||
}
|
||||
|
||||
void lcModel::InsertStepAction(lcStep Step)
|
||||
{
|
||||
BeginHistorySequence();
|
||||
BeginEditHistory(lcModelHistoryEditMerge::None);
|
||||
|
||||
InsertStep(Step);
|
||||
|
||||
EndEditHistory();
|
||||
EndHistorySequence(tr("Insert Step"));
|
||||
@@ -2144,7 +2148,7 @@ void lcModel::InsertStep(lcStep Step)
|
||||
SetCurrentStep(mCurrentStep);
|
||||
}
|
||||
|
||||
void lcModel::RemoveStep(lcStep Step)
|
||||
void lcModel::RemoveStepAction(lcStep Step)
|
||||
{
|
||||
BeginHistorySequence();
|
||||
BeginEditHistory(lcModelHistoryEditMerge::None);
|
||||
@@ -3103,6 +3107,45 @@ void lcModel::ShowSelectedPiecesLater()
|
||||
gMainWindow->UpdateSelectedObjects(false);
|
||||
}
|
||||
|
||||
void lcModel::InsertStepAndMoveSelectedPieces(lcStep Step)
|
||||
{
|
||||
BeginHistorySequence();
|
||||
BeginEditHistory(lcModelHistoryEditMerge::None);
|
||||
|
||||
InsertStep(Step);
|
||||
|
||||
std::vector<lcPiece*> MovedPieces;
|
||||
|
||||
for (auto PieceIt = mPieces.begin(); PieceIt != mPieces.end(); )
|
||||
{
|
||||
lcPiece* Piece = PieceIt->get();
|
||||
|
||||
if (Piece->IsSelected())
|
||||
{
|
||||
Piece->SetStepShow(Step);
|
||||
|
||||
MovedPieces.emplace_back(PieceIt->release());
|
||||
PieceIt = mPieces.erase(PieceIt);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
PieceIt++;
|
||||
}
|
||||
|
||||
for (lcPiece* Piece : MovedPieces)
|
||||
{
|
||||
Piece->SetFileLine(-1);
|
||||
AddPiece(Piece);
|
||||
}
|
||||
|
||||
EndEditHistory();
|
||||
EndHistorySequence(tr("Show Pieces"));
|
||||
|
||||
gMainWindow->UpdateTimeline(false, false);
|
||||
gMainWindow->UpdateSelectedObjects(false);
|
||||
}
|
||||
|
||||
void lcModel::SetPieceSteps(const std::vector<std::pair<lcPiece*, lcStep>>& PieceSteps)
|
||||
{
|
||||
if (PieceSteps.size() != mPieces.size())
|
||||
|
||||
+4
-2
@@ -223,8 +223,8 @@ public:
|
||||
void ShowLastStep();
|
||||
void ShowPreviousStep();
|
||||
void ShowNextStep();
|
||||
void InsertStep(lcStep Step);
|
||||
void RemoveStep(lcStep Step);
|
||||
void InsertStepAction(lcStep Step);
|
||||
void RemoveStepAction(lcStep Step);
|
||||
|
||||
template<typename StateType, typename ObjectType>
|
||||
void LoadObjectHistoryState(const std::vector<StateType>& ObjectStates, std::vector<std::unique_ptr<ObjectType>>& Objects);
|
||||
@@ -243,6 +243,7 @@ public:
|
||||
void RotateFocusedTrainTrack(int Direction);
|
||||
void ShowSelectedPiecesEarlier();
|
||||
void ShowSelectedPiecesLater();
|
||||
void InsertStepAndMoveSelectedPieces(lcStep Step);
|
||||
void SetPieceSteps(const std::vector<std::pair<lcPiece*, lcStep>>& PieceSteps);
|
||||
void RenamePiece(PieceInfo* Info);
|
||||
|
||||
@@ -423,6 +424,7 @@ protected:
|
||||
void SelectGroup(lcGroup* TopGroup, bool Select);
|
||||
|
||||
size_t AddPiece(lcPiece* Piece);
|
||||
void InsertStep(lcStep Step);
|
||||
|
||||
lcPOVRayOptions mPOVRayOptions;
|
||||
lcModelProperties mProperties;
|
||||
|
||||
@@ -326,7 +326,7 @@ void lcTimelineWidget::InsertStepBefore()
|
||||
if (Step == -1)
|
||||
return;
|
||||
|
||||
gMainWindow->GetActiveModel()->InsertStep(Step + 1);
|
||||
gMainWindow->GetActiveModel()->InsertStepAction(Step + 1);
|
||||
}
|
||||
|
||||
void lcTimelineWidget::InsertStepAfter()
|
||||
@@ -344,7 +344,7 @@ void lcTimelineWidget::InsertStepAfter()
|
||||
if (Step == -1)
|
||||
return;
|
||||
|
||||
gMainWindow->GetActiveModel()->InsertStep(Step + 2);
|
||||
gMainWindow->GetActiveModel()->InsertStepAction(Step + 2);
|
||||
}
|
||||
|
||||
void lcTimelineWidget::RemoveStep()
|
||||
@@ -362,7 +362,7 @@ void lcTimelineWidget::RemoveStep()
|
||||
if (Step == -1)
|
||||
return;
|
||||
|
||||
gMainWindow->GetActiveModel()->RemoveStep(Step + 1);
|
||||
gMainWindow->GetActiveModel()->RemoveStepAction(Step + 1);
|
||||
}
|
||||
|
||||
void lcTimelineWidget::MoveSelection()
|
||||
@@ -419,27 +419,10 @@ void lcTimelineWidget::MoveSelectionBefore()
|
||||
|
||||
Step++;
|
||||
|
||||
const QList<QTreeWidgetItem*> SelectedItems = selectedItems();
|
||||
|
||||
gMainWindow->GetActiveModel()->InsertStep(Step);
|
||||
|
||||
CurrentItem = topLevelItem(Step - 1);
|
||||
|
||||
for (QTreeWidgetItem* PieceItem : SelectedItems)
|
||||
{
|
||||
QTreeWidgetItem* Parent = PieceItem->parent();
|
||||
|
||||
if (!Parent)
|
||||
continue;
|
||||
|
||||
int ChildIndex = Parent->indexOfChild(PieceItem);
|
||||
CurrentItem->addChild(Parent->takeChild(ChildIndex));
|
||||
}
|
||||
|
||||
UpdateModel();
|
||||
|
||||
lcModel* Model = gMainWindow->GetActiveModel();
|
||||
|
||||
Model->InsertStepAndMoveSelectedPieces(Step);
|
||||
|
||||
if (Step > static_cast<int>(Model->GetCurrentStep()))
|
||||
Model->SetCurrentStep(Step);
|
||||
}
|
||||
@@ -461,35 +444,10 @@ void lcTimelineWidget::MoveSelectionAfter()
|
||||
|
||||
Step += 2;
|
||||
|
||||
const QList<QTreeWidgetItem*> SelectedItems = selectedItems();
|
||||
|
||||
gMainWindow->GetActiveModel()->InsertStep(Step);
|
||||
|
||||
for (int TopLevelItemIdx = topLevelItemCount(); TopLevelItemIdx < Step; TopLevelItemIdx++)
|
||||
{
|
||||
QTreeWidgetItem* StepItem = new QTreeWidgetItem(this, QStringList(tr("Step %1").arg(TopLevelItemIdx + 1)));
|
||||
StepItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
|
||||
addTopLevelItem(StepItem);
|
||||
StepItem->setExpanded(true);
|
||||
}
|
||||
|
||||
CurrentItem = topLevelItem(Step - 1);
|
||||
|
||||
for (QTreeWidgetItem* PieceItem : SelectedItems)
|
||||
{
|
||||
QTreeWidgetItem* Parent = PieceItem->parent();
|
||||
|
||||
if (!Parent)
|
||||
continue;
|
||||
|
||||
int ChildIndex = Parent->indexOfChild(PieceItem);
|
||||
CurrentItem->addChild(Parent->takeChild(ChildIndex));
|
||||
}
|
||||
|
||||
UpdateModel();
|
||||
|
||||
lcModel* Model = gMainWindow->GetActiveModel();
|
||||
|
||||
Model->InsertStepAndMoveSelectedPieces(Step);
|
||||
|
||||
if (Step > static_cast<int>(Model->GetCurrentStep()))
|
||||
Model->SetCurrentStep(Step);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user