UMovieSceneSection* UMovieSceneSection::SplitSection(float SplitTime) { if (!IsTimeWithinSection(SplitTime)) { return nullptr; } SetFlags(RF_Transactional); if (TryModify()) { float SectionEndTime = GetEndTime(); // Trim off the right SetEndTime(SplitTime); // Create a new section UMovieSceneTrack* Track = CastChecked<UMovieSceneTrack>(GetOuter()); Track->Modify(); UMovieSceneSection* NewSection = DuplicateObject<UMovieSceneSection>(this, Track); check(NewSection); NewSection->SetStartTime(SplitTime); NewSection->SetEndTime(SectionEndTime); Track->AddSection(*NewSection); return NewSection; } return nullptr; }
void FSequencer::DeleteSection(class UMovieSceneSection* Section) { UMovieScene* MovieScene = GetFocusedMovieScene(); bool bAnythingRemoved = false; UMovieSceneTrack* Track = CastChecked<UMovieSceneTrack>( Section->GetOuter() ); // If this check fails then the section is outered to a type that doesnt know about the section //checkSlow( Track->HasSection(Section) ); Track->SetFlags( RF_Transactional ); FScopedTransaction DeleteSectionTransaction( NSLOCTEXT("Sequencer", "DeleteSection_Transaction", "Delete Section") ); Track->Modify(); Track->RemoveSection(Section); bAnythingRemoved = true; if( bAnythingRemoved ) { UpdateRuntimeInstances(); } }
void FMoveSection::OnEndDrag(TSharedPtr<FTrackNode> SequencerNode) { DraggedKeyHandles.Empty(); if (Section.IsValid()) { SequencerNode->FixRowIndices(); UMovieSceneTrack* OuterTrack = Cast<UMovieSceneTrack>(Section->GetOuter()); if (OuterTrack) { OuterTrack->Modify(); OuterTrack->OnSectionMoved(*Section); } } EndTransaction(); }