|
@@ -6,6 +6,7 @@
|
|
#include "SPositiveActionButton.h"
|
|
#include "SPositiveActionButton.h"
|
|
#include "Widgets/Layout/SScrollBox.h"
|
|
#include "Widgets/Layout/SScrollBox.h"
|
|
#include "SEzAbleTreeViewRowWidget.h"
|
|
#include "SEzAbleTreeViewRowWidget.h"
|
|
|
|
+#include "AbleTreeEditorCommands.h"
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "AbleStateTreeEditor"
|
|
#define LOCTEXT_NAMESPACE "AbleStateTreeEditor"
|
|
|
|
|
|
@@ -34,6 +35,9 @@ void SEzAbleTreeViewWidget::Construct(const FArguments& InArgs, TSharedPtr<FEzAb
|
|
TreeView = SNew(STreeView<TWeakObjectPtr<UEzAbilityState>>)
|
|
TreeView = SNew(STreeView<TWeakObjectPtr<UEzAbilityState>>)
|
|
.OnGenerateRow(this, &SEzAbleTreeViewWidget::HandleGenerateRow)
|
|
.OnGenerateRow(this, &SEzAbleTreeViewWidget::HandleGenerateRow)
|
|
.OnGetChildren(this, &SEzAbleTreeViewWidget::HandleGetChildren)
|
|
.OnGetChildren(this, &SEzAbleTreeViewWidget::HandleGetChildren)
|
|
|
|
+ .OnSelectionChanged(this, &SEzAbleTreeViewWidget::HandleTreeSelectionChanged)
|
|
|
|
+ .OnExpansionChanged(this, &SEzAbleTreeViewWidget::HandleTreeExpansionChanged)
|
|
|
|
+ .OnContextMenuOpening(this, &SEzAbleTreeViewWidget::HandleContextMenuOpening )
|
|
.TreeItemsSource(&Subtrees)
|
|
.TreeItemsSource(&Subtrees)
|
|
.ItemHeight(32)
|
|
.ItemHeight(32)
|
|
.AllowOverscroll(EAllowOverscroll::No)
|
|
.AllowOverscroll(EAllowOverscroll::No)
|
|
@@ -162,9 +166,90 @@ void SEzAbleTreeViewWidget::UpdateTree(bool bExpandPersistent /*= false*/)
|
|
TreeView->RequestTreeRefresh();
|
|
TreeView->RequestTreeRefresh();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void SEzAbleTreeViewWidget::HandleTreeSelectionChanged(TWeakObjectPtr<UEzAbilityState> InSelectedItem, ESelectInfo::Type SelectionType)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void SEzAbleTreeViewWidget::HandleTreeExpansionChanged(TWeakObjectPtr<UEzAbilityState> InSelectedItem, bool bExpanded)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+TSharedPtr<SWidget> SEzAbleTreeViewWidget::HandleContextMenuOpening()
|
|
|
|
+{
|
|
|
|
+ if (!AbleTreeViewOperationMode)
|
|
|
|
+ {
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FMenuBuilder MenuBuilder(true, CommandList);
|
|
|
|
+
|
|
|
|
+ MenuBuilder.AddSubMenu(
|
|
|
|
+ LOCTEXT("AddState", "Add State"),
|
|
|
|
+ FText(),
|
|
|
|
+ FNewMenuDelegate::CreateLambda([this](FMenuBuilder& MenuBuilder)
|
|
|
|
+ {
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().AddSiblingState);
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().AddChildState);
|
|
|
|
+ }),
|
|
|
|
+ /*bInOpenSubMenuOnClick =*/false,
|
|
|
|
+ FSlateIcon(FAppStyle::GetAppStyleSetName(), "Icons.Plus")
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ MenuBuilder.AddSeparator();
|
|
|
|
+
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().CutStates);
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().CopyStates);
|
|
|
|
+
|
|
|
|
+ MenuBuilder.AddSubMenu(
|
|
|
|
+ LOCTEXT("Paste", "Paste"),
|
|
|
|
+ FText(),
|
|
|
|
+ FNewMenuDelegate::CreateLambda([this](FMenuBuilder& MenuBuilder)
|
|
|
|
+ {
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().PasteStatesAsSiblings);
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().PasteStatesAsChildren);
|
|
|
|
+ }),
|
|
|
|
+ /*bInOpenSubMenuOnClick =*/false,
|
|
|
|
+ FSlateIcon(FAppStyle::GetAppStyleSetName(), "GenericCommands.Paste")
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().DuplicateStates);
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().DeleteStates);
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().RenameState);
|
|
|
|
+ MenuBuilder.AddSeparator();
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().EnableStates);
|
|
|
|
+
|
|
|
|
+//#if WITH_STATETREE_TRACE_DEBUGGER
|
|
|
|
+ MenuBuilder.AddSeparator();
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().EnableOnEnterStateBreakpoint);
|
|
|
|
+ MenuBuilder.AddMenuEntry(FAbleTreeEditorCommands::Get().EnableOnExitStateBreakpoint);
|
|
|
|
+//#endif // WITH_STATETREE_TRACE_DEBUGGER
|
|
|
|
+
|
|
|
|
+ return MenuBuilder.MakeWidget();
|
|
|
|
+}
|
|
|
|
+
|
|
void SEzAbleTreeViewWidget::HandleModelStateAdded(UEzAbilityState* ParentState, UEzAbilityState* NewState)
|
|
void SEzAbleTreeViewWidget::HandleModelStateAdded(UEzAbilityState* ParentState, UEzAbilityState* NewState)
|
|
{
|
|
{
|
|
TreeView->RequestTreeRefresh();
|
|
TreeView->RequestTreeRefresh();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void SEzAbleTreeViewWidget::BindCommands()
|
|
|
|
+{
|
|
|
|
+ const FAbleTreeEditorCommands& Commands = FAbleTreeEditorCommands::Get();
|
|
|
|
+
|
|
|
|
+ CommandList->MapAction(
|
|
|
|
+ Commands.DeleteStates,
|
|
|
|
+ FExecuteAction::CreateSP(this, &SStateTreeView::HandleDeleteStates),
|
|
|
|
+ FCanExecuteAction::CreateSP(this, &SStateTreeView::HasSelection));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void SEzAbleTreeViewWidget::HandleDeleteStates()
|
|
|
|
+{
|
|
|
|
+ if (AbleTreeViewOperationMode)
|
|
|
|
+ {
|
|
|
|
+ AbleTreeViewOperationMode->RemoveSelectedStates();
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
#undef LOCTEXT_NAMESPACE
|
|
#undef LOCTEXT_NAMESPACE
|