From 76ecbe00cfcab926516dfd5af34025936b9b4e5a Mon Sep 17 00:00:00 2001 From: andrew rodham Date: Tue, 30 Jan 2024 15:13:57 -0500 Subject: [PATCH] Sequencer: Corrected hover state handling for outliner rows #rb Max.Chen #jira UE-200166 [CL 31017912 by andrew rodham in ue5-main branch] --- .../MVVM/Views/SOutlinerItemViewBase.cpp | 23 ------------- .../Private/MVVM/Views/SOutlinerViewRow.cpp | 33 +++++++++++++++++++ .../Public/MVVM/Views/SOutlinerItemViewBase.h | 4 --- .../Public/MVVM/Views/SOutlinerViewRow.h | 4 +++ 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerItemViewBase.cpp b/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerItemViewBase.cpp index 21c0a31eff2b..3db8b2739b37 100644 --- a/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerItemViewBase.cpp +++ b/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerItemViewBase.cpp @@ -61,7 +61,6 @@ void SOutlinerItemViewBase::Construct( ItemStyle = InArgs._ItemStyle; IsReadOnlyAttribute = InArgs._IsReadOnly; - IsRowHoveredAttribute = MakeAttributeSP(&InTableRow.Get(), &ISequencerTreeViewRow::IsHovered); IsRowSelectedAttribute = MakeAttributeSP(&InTableRow.Get(), &ISequencerTreeViewRow::IsItemSelected); if (!IsReadOnlyAttribute.IsSet()) @@ -363,28 +362,6 @@ FOptionalSize SOutlinerItemViewBase::GetHeight() const : 10.f; } -void SOutlinerItemViewBase::OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) -{ - TViewModelPtr DataModel = WeakOutlinerExtension.Pin(); - TSharedPtr Editor = WeakEditor.Pin(); - if (DataModel && Editor) - { - Editor->GetOutliner()->SetHoveredItem(DataModel); - } - SWidget::OnMouseEnter(MyGeometry, MouseEvent); -} - -void SOutlinerItemViewBase::OnMouseLeave(const FPointerEvent& MouseEvent) -{ - TSharedPtr Editor = WeakEditor.Pin(); - if (Editor) - { - Editor->GetOutliner()->SetHoveredItem(nullptr); - } - - SWidget::OnMouseLeave(MouseEvent); -} - const FSlateBrush* SOutlinerItemViewBase::GetNodeBorderImage() const { TSharedPtr DataModel = WeakOutlinerExtension.Pin().AsModel(); diff --git a/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerViewRow.cpp b/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerViewRow.cpp index 76830736af31..712646fb2ee2 100644 --- a/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerViewRow.cpp +++ b/Engine/Source/Editor/SequencerCore/Private/MVVM/Views/SOutlinerViewRow.cpp @@ -5,6 +5,9 @@ #include "MVVM/Views/SOutlinerView.h" #include "MVVM/Views/STrackLane.h" #include "MVVM/Extensions/ISelectableExtension.h" +#include "MVVM/ViewModels/EditorViewModel.h" +#include "MVVM/ViewModels/OutlinerViewModel.h" +#include "MVVM/ViewModels/EditorSharedViewModelData.h" namespace UE::Sequencer @@ -237,6 +240,36 @@ TViewModelPtr SOutlinerViewRow::GetDataModel() const return WeakModel.Pin(); } +void SOutlinerViewRow::OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) +{ + TViewModelPtr DataModel = WeakModel.Pin(); + TSharedPtr SharedData = DataModel ? DataModel.AsModel()->GetSharedData() : nullptr; + TSharedPtr SharedEditorData = SharedData ? SharedData->CastThisShared() : nullptr; + TSharedPtr Editor = SharedEditorData ? SharedEditorData->GetEditor() : nullptr; + + if (DataModel && Editor) + { + Editor->GetOutliner()->SetHoveredItem(DataModel); + } + SWidget::OnMouseEnter(MyGeometry, MouseEvent); +} + +void SOutlinerViewRow::OnMouseLeave(const FPointerEvent& MouseEvent) +{ + TViewModelPtr DataModel = WeakModel.Pin(); + TSharedPtr SharedData = DataModel ? DataModel.AsModel()->GetSharedData() : nullptr; + TSharedPtr SharedEditorData = SharedData ? SharedData->CastThisShared() : nullptr; + TSharedPtr Editor = SharedEditorData ? SharedEditorData->GetEditor() : nullptr; + + if (Editor) + { + Editor->GetOutliner()->SetHoveredItem(nullptr); + } + + SWidget::OnMouseLeave(MouseEvent); +} + + TSharedPtr SOutlinerViewRow::GetTrackLane(bool bOnlyOwnTrackLane) const { if (!bOnlyOwnTrackLane) diff --git a/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerItemViewBase.h b/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerItemViewBase.h index f8c81f0f98c0..baa9104640ef 100644 --- a/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerItemViewBase.h +++ b/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerItemViewBase.h @@ -129,9 +129,6 @@ private: // SWidget interface - void OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override; - void OnMouseLeave(const FPointerEvent& MouseEvent) override; - FSlateColor GetForegroundBasedOnSelection() const; /** @@ -160,7 +157,6 @@ protected: TWeakPtr WeakEditor; TAttribute IsReadOnlyAttribute; - TAttribute IsRowHoveredAttribute; TAttribute IsRowSelectedAttribute; /** Default background brush for this node when expanded */ diff --git a/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerViewRow.h b/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerViewRow.h index 72b20cae6230..ae6a45514727 100644 --- a/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerViewRow.h +++ b/Engine/Source/Editor/SequencerCore/Public/MVVM/Views/SOutlinerViewRow.h @@ -74,6 +74,10 @@ public: virtual void ConstructChildren(ETableViewMode::Type InOwnerTableMode, const TAttribute& InPadding, const TSharedRef& InContent) override; + virtual void OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override; + + virtual void OnMouseLeave(const FPointerEvent& MouseEvent) override; + virtual bool IsColumnVisible(const FName& InColumnName) const override; /** Called whenever a drag is detected by the tree view. */