Skip to content

Commit e6de721

Browse files
committed
Fixed timeline move selection. Fixes #1014, #1015.
1 parent db14a26 commit e6de721

File tree

4 files changed

+61
-58
lines changed

4 files changed

+61
-58
lines changed

common/lc_mainwindow.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3196,15 +3196,15 @@ void lcMainWindow::HandleCommand(lcCommandId CommandId)
31963196
break;
31973197

31983198
case LC_VIEW_TIME_INSERT_BEFORE:
3199-
lcGetActiveModel()->InsertStep(lcGetActiveModel()->GetCurrentStep());
3199+
lcGetActiveModel()->InsertStepAction(lcGetActiveModel()->GetCurrentStep());
32003200
break;
32013201

32023202
case LC_VIEW_TIME_INSERT_AFTER:
3203-
lcGetActiveModel()->InsertStep(lcGetActiveModel()->GetCurrentStep() + 1);
3203+
lcGetActiveModel()->InsertStepAction(lcGetActiveModel()->GetCurrentStep() + 1);
32043204
break;
32053205

32063206
case LC_VIEW_TIME_DELETE:
3207-
lcGetActiveModel()->RemoveStep(lcGetActiveModel()->GetCurrentStep());
3207+
lcGetActiveModel()->RemoveStepAction(lcGetActiveModel()->GetCurrentStep());
32083208
break;
32093209

32103210
case LC_VIEW_VIEWPOINT_FRONT:

common/lc_model.cpp

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2125,9 +2125,6 @@ lcStep lcModel::GetLastStep() const
21252125

21262126
void lcModel::InsertStep(lcStep Step)
21272127
{
2128-
BeginHistorySequence();
2129-
BeginEditHistory(lcModelHistoryEditMerge::None);
2130-
21312128
for (const std::unique_ptr<lcPiece>& Piece : mPieces)
21322129
Piece->InsertTime(Step, 1);
21332130

@@ -2136,15 +2133,22 @@ void lcModel::InsertStep(lcStep Step)
21362133

21372134
for (const std::unique_ptr<lcLight>& Light : mLights)
21382135
Light->InsertTime(Step, 1);
2136+
}
21392137

2138+
void lcModel::InsertStepAction(lcStep Step)
2139+
{
2140+
BeginHistorySequence();
2141+
BeginEditHistory(lcModelHistoryEditMerge::None);
2142+
2143+
InsertStep(Step);
21402144

21412145
EndEditHistory();
21422146
EndHistorySequence(tr("Insert Step"));
21432147

21442148
SetCurrentStep(mCurrentStep);
21452149
}
21462150

2147-
void lcModel::RemoveStep(lcStep Step)
2151+
void lcModel::RemoveStepAction(lcStep Step)
21482152
{
21492153
BeginHistorySequence();
21502154
BeginEditHistory(lcModelHistoryEditMerge::None);
@@ -3103,6 +3107,45 @@ void lcModel::ShowSelectedPiecesLater()
31033107
gMainWindow->UpdateSelectedObjects(false);
31043108
}
31053109

3110+
void lcModel::InsertStepAndMoveSelectedPieces(lcStep Step)
3111+
{
3112+
BeginHistorySequence();
3113+
BeginEditHistory(lcModelHistoryEditMerge::None);
3114+
3115+
InsertStep(Step);
3116+
3117+
std::vector<lcPiece*> MovedPieces;
3118+
3119+
for (auto PieceIt = mPieces.begin(); PieceIt != mPieces.end(); )
3120+
{
3121+
lcPiece* Piece = PieceIt->get();
3122+
3123+
if (Piece->IsSelected())
3124+
{
3125+
Piece->SetStepShow(Step);
3126+
3127+
MovedPieces.emplace_back(PieceIt->release());
3128+
PieceIt = mPieces.erase(PieceIt);
3129+
3130+
continue;
3131+
}
3132+
3133+
PieceIt++;
3134+
}
3135+
3136+
for (lcPiece* Piece : MovedPieces)
3137+
{
3138+
Piece->SetFileLine(-1);
3139+
AddPiece(Piece);
3140+
}
3141+
3142+
EndEditHistory();
3143+
EndHistorySequence(tr("Show Pieces"));
3144+
3145+
gMainWindow->UpdateTimeline(false, false);
3146+
gMainWindow->UpdateSelectedObjects(false);
3147+
}
3148+
31063149
void lcModel::SetPieceSteps(const std::vector<std::pair<lcPiece*, lcStep>>& PieceSteps)
31073150
{
31083151
if (PieceSteps.size() != mPieces.size())

common/lc_model.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,8 @@ class lcModel
223223
void ShowLastStep();
224224
void ShowPreviousStep();
225225
void ShowNextStep();
226-
void InsertStep(lcStep Step);
227-
void RemoveStep(lcStep Step);
226+
void InsertStepAction(lcStep Step);
227+
void RemoveStepAction(lcStep Step);
228228

229229
template<typename StateType, typename ObjectType>
230230
void LoadObjectHistoryState(const std::vector<StateType>& ObjectStates, std::vector<std::unique_ptr<ObjectType>>& Objects);
@@ -243,6 +243,7 @@ class lcModel
243243
void RotateFocusedTrainTrack(int Direction);
244244
void ShowSelectedPiecesEarlier();
245245
void ShowSelectedPiecesLater();
246+
void InsertStepAndMoveSelectedPieces(lcStep Step);
246247
void SetPieceSteps(const std::vector<std::pair<lcPiece*, lcStep>>& PieceSteps);
247248
void RenamePiece(PieceInfo* Info);
248249

@@ -423,6 +424,7 @@ class lcModel
423424
void SelectGroup(lcGroup* TopGroup, bool Select);
424425

425426
size_t AddPiece(lcPiece* Piece);
427+
void InsertStep(lcStep Step);
426428

427429
lcPOVRayOptions mPOVRayOptions;
428430
lcModelProperties mProperties;

common/lc_timelinewidget.cpp

Lines changed: 7 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ void lcTimelineWidget::InsertStepBefore()
326326
if (Step == -1)
327327
return;
328328

329-
gMainWindow->GetActiveModel()->InsertStep(Step + 1);
329+
gMainWindow->GetActiveModel()->InsertStepAction(Step + 1);
330330
}
331331

332332
void lcTimelineWidget::InsertStepAfter()
@@ -344,7 +344,7 @@ void lcTimelineWidget::InsertStepAfter()
344344
if (Step == -1)
345345
return;
346346

347-
gMainWindow->GetActiveModel()->InsertStep(Step + 2);
347+
gMainWindow->GetActiveModel()->InsertStepAction(Step + 2);
348348
}
349349

350350
void lcTimelineWidget::RemoveStep()
@@ -362,7 +362,7 @@ void lcTimelineWidget::RemoveStep()
362362
if (Step == -1)
363363
return;
364364

365-
gMainWindow->GetActiveModel()->RemoveStep(Step + 1);
365+
gMainWindow->GetActiveModel()->RemoveStepAction(Step + 1);
366366
}
367367

368368
void lcTimelineWidget::MoveSelection()
@@ -419,27 +419,10 @@ void lcTimelineWidget::MoveSelectionBefore()
419419

420420
Step++;
421421

422-
const QList<QTreeWidgetItem*> SelectedItems = selectedItems();
423-
424-
gMainWindow->GetActiveModel()->InsertStep(Step);
425-
426-
CurrentItem = topLevelItem(Step - 1);
427-
428-
for (QTreeWidgetItem* PieceItem : SelectedItems)
429-
{
430-
QTreeWidgetItem* Parent = PieceItem->parent();
431-
432-
if (!Parent)
433-
continue;
434-
435-
int ChildIndex = Parent->indexOfChild(PieceItem);
436-
CurrentItem->addChild(Parent->takeChild(ChildIndex));
437-
}
438-
439-
UpdateModel();
440-
441422
lcModel* Model = gMainWindow->GetActiveModel();
442423

424+
Model->InsertStepAndMoveSelectedPieces(Step);
425+
443426
if (Step > static_cast<int>(Model->GetCurrentStep()))
444427
Model->SetCurrentStep(Step);
445428
}
@@ -461,35 +444,10 @@ void lcTimelineWidget::MoveSelectionAfter()
461444

462445
Step += 2;
463446

464-
const QList<QTreeWidgetItem*> SelectedItems = selectedItems();
465-
466-
gMainWindow->GetActiveModel()->InsertStep(Step);
467-
468-
for (int TopLevelItemIdx = topLevelItemCount(); TopLevelItemIdx < Step; TopLevelItemIdx++)
469-
{
470-
QTreeWidgetItem* StepItem = new QTreeWidgetItem(this, QStringList(tr("Step %1").arg(TopLevelItemIdx + 1)));
471-
StepItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
472-
addTopLevelItem(StepItem);
473-
StepItem->setExpanded(true);
474-
}
475-
476-
CurrentItem = topLevelItem(Step - 1);
477-
478-
for (QTreeWidgetItem* PieceItem : SelectedItems)
479-
{
480-
QTreeWidgetItem* Parent = PieceItem->parent();
481-
482-
if (!Parent)
483-
continue;
484-
485-
int ChildIndex = Parent->indexOfChild(PieceItem);
486-
CurrentItem->addChild(Parent->takeChild(ChildIndex));
487-
}
488-
489-
UpdateModel();
490-
491447
lcModel* Model = gMainWindow->GetActiveModel();
492448

449+
Model->InsertStepAndMoveSelectedPieces(Step);
450+
493451
if (Step > static_cast<int>(Model->GetCurrentStep()))
494452
Model->SetCurrentStep(Step);
495453
}

0 commit comments

Comments
 (0)