mirror of
https://github.com/sinbad/StevesUEHelpers.git
synced 2025-02-23 17:45:23 +00:00
Oops, missed added files
This commit is contained in:
parent
ee07df6172
commit
18c2f2c5d5
44
Source/StevesUEHelpers/Public/StevesUiHelpers.cpp
Normal file
44
Source/StevesUEHelpers/Public/StevesUiHelpers.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include "StevesUiHelpers.h"
|
||||||
|
|
||||||
|
#include "Components/PanelWidget.h"
|
||||||
|
|
||||||
|
void StevesUiHelpers::InsertChildWidgetAt(UPanelWidget* Parent, UWidget* Child, int AtIndex)
|
||||||
|
{
|
||||||
|
checkf(AtIndex <= Parent->GetChildrenCount(), TEXT("Insertion index %d is greater than child count"), AtIndex);
|
||||||
|
|
||||||
|
// Short-circuit for simple case of insert at end
|
||||||
|
const int OrigCount = Parent->GetChildrenCount();
|
||||||
|
if (OrigCount == AtIndex)
|
||||||
|
{
|
||||||
|
Parent->AddChild(Child);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Note: cannot use InsertChildAt, that's editor-only
|
||||||
|
// There are a few options with the runtime API
|
||||||
|
// 1. Remove all children and re-add them in the right order
|
||||||
|
// 2. Remove all children on or after the insert point and re-add those after adding the new item
|
||||||
|
// 3. Use ReplaceChildAt to insert a new item and move everything down, with AddChild at the end
|
||||||
|
//
|
||||||
|
// I'm going with 2. because that seems to blend best performance with the most well defined behaviour
|
||||||
|
// I'm not sure ReplaceChildAt is designed to move children around (note: ShiftChild exists but again, editor-only)
|
||||||
|
|
||||||
|
TArray<UWidget*> WidgetsToReplaceReversed;
|
||||||
|
WidgetsToReplaceReversed.Reserve(OrigCount - AtIndex);
|
||||||
|
// Go backwards so we can remove as we go and not remove from the middle
|
||||||
|
for (int i = OrigCount - 1; i >= AtIndex; --i)
|
||||||
|
{
|
||||||
|
WidgetsToReplaceReversed.Add(Parent->GetChildAt(i));
|
||||||
|
Parent->RemoveChildAt(i);
|
||||||
|
}
|
||||||
|
// insert item
|
||||||
|
Parent->AddChild(Child);
|
||||||
|
// add back previous, reverse order
|
||||||
|
for (int i = WidgetsToReplaceReversed.Num() - 1; i >= 0; --i)
|
||||||
|
{
|
||||||
|
Parent->AddChild(WidgetsToReplaceReversed[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
Source/StevesUEHelpers/Public/StevesUiHelpers.h
Normal file
17
Source/StevesUEHelpers/Public/StevesUiHelpers.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Components/Widget.h"
|
||||||
|
|
||||||
|
/// Helper Ui routines that UE4 is missing, all static
|
||||||
|
/// Exposed to BP in in StevesBPL
|
||||||
|
class STEVESUEHELPERS_API StevesUiHelpers
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Insert a child widget at a specific index
|
||||||
|
* @param Parent The container widget
|
||||||
|
* @param Child The child widget to add
|
||||||
|
* @param AtIndex The index at which the new child should exist
|
||||||
|
*/
|
||||||
|
static void InsertChildWidgetAt(UPanelWidget* Parent, UWidget* Child, int AtIndex = 0);
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user