void SAnimCurveListRow::OnAnimCurveWeightChanged( float NewWeight ) { float NewValidWeight = FMath::Clamp(NewWeight, -MaxMorphWeight, MaxMorphWeight); Item->Weight = NewValidWeight; Item->bAutoFillData = false; TSharedPtr<SAnimCurveViewer> AnimCurveViewer = AnimCurveViewerPtr.Pin(); if (AnimCurveViewer.IsValid()) { // Add override AnimCurveViewer->AddAnimCurveOverride(Item->SmartName.DisplayName, Item->Weight); // ...then any selected rows need changing by the same delta TArray< TSharedPtr< FDisplayedAnimCurveInfo > > SelectedRows = AnimCurveViewer->AnimCurveListView->GetSelectedItems(); for (auto ItemIt = SelectedRows.CreateIterator(); ItemIt; ++ItemIt) { TSharedPtr< FDisplayedAnimCurveInfo > RowItem = (*ItemIt); if (RowItem != Item) // Don't do "this" row again if it's selected { RowItem->Weight = NewValidWeight; RowItem->bAutoFillData = false; AnimCurveViewer->AddAnimCurveOverride(RowItem->SmartName.DisplayName, RowItem->Weight); } } if(PreviewScenePtr.IsValid()) { PreviewScenePtr.Pin()->InvalidateViews(); } } }
void SAnimCurveListRow::OnAnimCurveAutoFillChecked(ECheckBoxState InState) { Item->bAutoFillData = InState == ECheckBoxState::Checked; TSharedPtr<SAnimCurveViewer> AnimCurveViewer = AnimCurveViewerPtr.Pin(); if (AnimCurveViewer.IsValid()) { if (Item->bAutoFillData) { // clear value so that it can be filled up AnimCurveViewer->RemoveAnimCurveOverride(Item->SmartName.DisplayName); } else { AnimCurveViewer->AddAnimCurveOverride(Item->SmartName.DisplayName, Item->Weight); } } }