// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "MovieSceneToolsPrivatePCH.h" #include "SubMovieSceneTrackEditor.h" #include "SubMovieSceneTrack.h" #include "SubMovieSceneSection.h" /** * A generic implementation for displaying simple property sections */ class FSubMovieSceneSection : public ISequencerSection { public: FSubMovieSceneSection( TSharedPtr InSequencer, UMovieSceneSection& InSectionObject, FName SectionName ) : DisplayName( NSLOCTEXT("SubMovieSceneSection", "DisplayName", "Scenes") ) , SectionObject( *CastChecked( &InSectionObject ) ) , Sequencer( InSequencer ) { MovieSceneInstance = InSequencer->GetInstanceForSubMovieSceneSection( InSectionObject ); } /** ISequencerSection interface */ virtual UMovieSceneSection* GetSectionObject() override { return &SectionObject; } virtual FText GetDisplayName() const override { return DisplayName; } virtual FText GetSectionTitle() const override { return FText::FromString( SectionObject.GetMovieScene()->GetName() ); } virtual void GenerateSectionLayout( class ISectionLayoutBuilder& LayoutBuilder ) const override { } virtual FReply OnSectionDoubleClicked( const FGeometry& SectionGeometry, const FPointerEvent& MouseEvent ) override { if( MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton ) { Sequencer.Pin()->FocusSubMovieScene( MovieSceneInstance.Pin().ToSharedRef() ); } return FReply::Handled(); } virtual float GetSectionHeight() const override { return 30.0f; } virtual int32 OnPaintSection( const FGeometry& AllottedGeometry, const FSlateRect& SectionClippingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, bool bParentEnabled ) const override { // Add a box for the section FSlateDrawElement::MakeBox( OutDrawElements, LayerId, AllottedGeometry.ToPaintGeometry(), FEditorStyle::GetBrush("Sequencer.GenericSection.Background"), SectionClippingRect, ESlateDrawEffect::None, FColor( 220, 120, 120 ) ); return LayerId; } private: /** Display name of the section */ FText DisplayName; /** The section we are visualizing */ USubMovieSceneSection& SectionObject; /** The instance that this section is part of */ TWeakPtr MovieSceneInstance; /** Sequencer interface */ TWeakPtr Sequencer; }; FSubMovieSceneTrackEditor::FSubMovieSceneTrackEditor( TSharedRef InSequencer ) : FMovieSceneTrackEditor( InSequencer ) { } TSharedRef FSubMovieSceneTrackEditor::CreateTrackEditor( TSharedRef InSequencer ) { return MakeShareable( new FSubMovieSceneTrackEditor( InSequencer ) ); } bool FSubMovieSceneTrackEditor::SupportsType( TSubclassOf Type ) const { // We support sub movie scenes return Type == USubMovieSceneTrack::StaticClass(); } TSharedRef FSubMovieSceneTrackEditor::MakeSectionInterface( UMovieSceneSection& SectionObject, UMovieSceneTrack* Track ) { return MakeShareable( new FSubMovieSceneSection( GetSequencer(), SectionObject, Track->GetTrackName() ) ); } bool FSubMovieSceneTrackEditor::HandleAssetAdded(UObject* Asset, const FGuid& TargetObjectGuid) { if (Asset->IsA()) { GetSequencer()->AddSubMovieScene( CastChecked( Asset ) ); return true; } return false; }