// Copyright 2019-Present LexLiu. All Rights Reserved. #include "LGUIVectorInputBox.h" #include "Widgets/SBoxPanel.h" #include "Widgets/Layout/SBorder.h" #include "HAL/IConsoleManager.h" #include "Widgets/Input/SNumericEntryBox.h" #include "Widgets/Layout/SWidgetSwitcher.h" #define LOCTEXT_NAMESPACE "SLGUIVectorInputBox" void SLGUIVectorInputBox::Construct( const FArguments& InArgs ) { TSharedRef HorizontalBox = SNew(SHorizontalBox); ChildSlot [ HorizontalBox ]; if (InArgs._ShowX)ConstructX(InArgs, HorizontalBox); if (InArgs._ShowY)ConstructY(InArgs, HorizontalBox); if (InArgs._ShowZ)ConstructZ(InArgs, HorizontalBox); if (InArgs._ShowW)ConstructW(InArgs, HorizontalBox); } void SLGUIVectorInputBox::ConstructX( const FArguments& InArgs, TSharedRef HorizontalBox ) { TSharedRef LabelWidget = SNullWidget::NullWidget; if (InArgs._bColorAxisLabels) { const FLinearColor LabelColor = SNumericEntryBox::RedLabelBackgroundColor; LabelWidget = SNumericEntryBox::BuildNarrowColorLabel(LabelColor); } TAttribute> Value = InArgs._X; HorizontalBox->AddSlot() [ SNew( SNumericEntryBox ) .AllowSpin(InArgs._AllowSpin) .Font( InArgs._Font ) .Value( InArgs._X ) .OnValueChanged( InArgs._OnXChanged ) .OnValueCommitted( InArgs._OnXCommitted ) .IsEnabled(InArgs._EnableX) .ToolTipText(MakeAttributeLambda([=] { if (Value.Get().IsSet()) { if (InArgs._EnableX.IsBound()) { return InArgs._EnableX.Get() ? FText::Format(LOCTEXT("X_ToolTip", "X: {0}"), Value.Get().GetValue()) : LOCTEXT("X_ToolTip_Control", "X Value Controlled by LGUI's Anchors"); } return FText::Format(LOCTEXT("X_ToolTip", "X: {0}"), Value.Get().GetValue()); } return LOCTEXT("MultipleValues", "Multiple Values"); })) .UndeterminedString(LOCTEXT("MultipleValues", "Multiple Values")) .ContextMenuExtender(InArgs._ContextMenuExtenderX) .TypeInterface(InArgs._TypeInterface) .MinValue(TOptional()) .MaxValue(TOptional()) .MinSliderValue(TOptional()) .MaxSliderValue(TOptional()) .LinearDeltaSensitivity(1) .Delta(InArgs._SpinDelta) .OnBeginSliderMovement(InArgs._OnBeginSliderMovement) .OnEndSliderMovement(InArgs._OnEndSliderMovement) .LabelPadding(FMargin(3)) .LabelLocation(SNumericEntryBox::ELabelLocation::Inside) .Label() [ LabelWidget ] ]; } void SLGUIVectorInputBox::ConstructY( const FArguments& InArgs, TSharedRef HorizontalBox ) { TSharedRef LabelWidget = SNullWidget::NullWidget; if (InArgs._bColorAxisLabels) { const FLinearColor LabelColor = SNumericEntryBox::GreenLabelBackgroundColor; LabelWidget = SNumericEntryBox::BuildNarrowColorLabel(LabelColor); } TAttribute> Value = InArgs._Y; HorizontalBox->AddSlot() [ SNew( SNumericEntryBox ) .AllowSpin(InArgs._AllowSpin) .Font( InArgs._Font ) .Value( InArgs._Y ) .OnValueChanged( InArgs._OnYChanged ) .OnValueCommitted( InArgs._OnYCommitted ) .IsEnabled(InArgs._EnableY) .ToolTipText(MakeAttributeLambda([=] { if (Value.Get().IsSet()) { if (InArgs._EnableY.IsBound()) { return InArgs._EnableY.Get() ? FText::Format(LOCTEXT("Y_ToolTip", "Y: {0}"), Value.Get().GetValue()) : LOCTEXT("Y_ToolTip_Control", "Y Value Controlled by LGUI's Anchors"); } return FText::Format(LOCTEXT("Y_ToolTip", "Y: {0}"), Value.Get().GetValue()); } return LOCTEXT("MultipleValues", "Multiple Values"); })) .UndeterminedString(LOCTEXT("MultipleValues", "Multiple Values")) .ContextMenuExtender(InArgs._ContextMenuExtenderY) .TypeInterface(InArgs._TypeInterface) .MinValue(TOptional()) .MaxValue(TOptional()) .MinSliderValue(TOptional()) .MaxSliderValue(TOptional()) .LinearDeltaSensitivity(1) .Delta(InArgs._SpinDelta) .OnBeginSliderMovement(InArgs._OnBeginSliderMovement) .OnEndSliderMovement(InArgs._OnEndSliderMovement) .LabelPadding(FMargin(3)) .LabelLocation(SNumericEntryBox::ELabelLocation::Inside) .Label() [ LabelWidget ] ]; } void SLGUIVectorInputBox::ConstructZ( const FArguments& InArgs, TSharedRef HorizontalBox ) { TSharedRef LabelWidget = SNullWidget::NullWidget; if (InArgs._bColorAxisLabels) { const FLinearColor LabelColor = SNumericEntryBox::BlueLabelBackgroundColor; LabelWidget = SNumericEntryBox::BuildNarrowColorLabel(LabelColor); } TAttribute> Value = InArgs._Z; HorizontalBox->AddSlot() [ SNew( SNumericEntryBox ) .AllowSpin(InArgs._AllowSpin) .Font( InArgs._Font ) .Value( InArgs._Z ) .OnValueChanged( InArgs._OnZChanged ) .OnValueCommitted( InArgs._OnZCommitted ) .IsEnabled(InArgs._EnableZ) .ToolTipText(MakeAttributeLambda([=] { if (Value.Get().IsSet()) { if (InArgs._EnableZ.IsBound()) { return InArgs._EnableZ.Get() ? FText::Format(LOCTEXT("Z_ToolTip", "Z: {0}"), Value.Get().GetValue()) : LOCTEXT("Z_ToolTip_Control", "Z Value Controlled by LGUI's Anchors"); } return FText::Format(LOCTEXT("Z_ToolTip", "Z: {0}"), Value.Get().GetValue()); } return LOCTEXT("MultipleValues", "Multiple Values"); })) .UndeterminedString(LOCTEXT("MultipleValues", "Multiple Values")) .ContextMenuExtender(InArgs._ContextMenuExtenderZ) .TypeInterface(InArgs._TypeInterface) .MinValue(TOptional()) .MaxValue(TOptional()) .MinSliderValue(TOptional()) .MaxSliderValue(TOptional()) .LinearDeltaSensitivity(1) .Delta(InArgs._SpinDelta) .OnBeginSliderMovement(InArgs._OnBeginSliderMovement) .OnEndSliderMovement(InArgs._OnEndSliderMovement) .LabelPadding(FMargin(3)) .LabelLocation(SNumericEntryBox::ELabelLocation::Inside) .Label() [ LabelWidget ] ]; } void SLGUIVectorInputBox::ConstructW(const FArguments& InArgs, TSharedRef HorizontalBox) { TSharedRef LabelWidget = SNullWidget::NullWidget; if (InArgs._bColorAxisLabels) { const FLinearColor LabelColor = FLinearColor::Yellow; LabelWidget = SNumericEntryBox::BuildNarrowColorLabel(LabelColor); } TAttribute> Value = InArgs._W; HorizontalBox->AddSlot() [ SNew( SNumericEntryBox ) .AllowSpin(InArgs._AllowSpin) .Font( InArgs._Font ) .Value( InArgs._W ) .OnValueChanged( InArgs._OnWChanged ) .OnValueCommitted( InArgs._OnWCommitted ) .IsEnabled(InArgs._EnableW) .ToolTipText(MakeAttributeLambda([=] { if (Value.Get().IsSet()) { if (InArgs._EnableW.IsBound()) { return InArgs._EnableW.Get() ? FText::Format(LOCTEXT("W_ToolTip", "W: {0}"), Value.Get().GetValue()) : LOCTEXT("W_ToolTip_Control", "W Value Controlled by LGUI's Anchors"); } return FText::Format(LOCTEXT("W_ToolTip", "W: {0}"), Value.Get().GetValue()); } return LOCTEXT("MultipleValues", "Multiple Values"); })) .UndeterminedString(LOCTEXT("MultipleValues", "Multiple Values")) .ContextMenuExtender(InArgs._ContextMenuExtenderW) .TypeInterface(InArgs._TypeInterface) .MinValue(TOptional()) .MaxValue(TOptional()) .MinSliderValue(TOptional()) .MaxSliderValue(TOptional()) .LinearDeltaSensitivity(1) .Delta(InArgs._SpinDelta) .OnBeginSliderMovement(InArgs._OnBeginSliderMovement) .OnEndSliderMovement(InArgs._OnEndSliderMovement) .LabelPadding(FMargin(3)) .LabelLocation(SNumericEntryBox::ELabelLocation::Inside) .Label() [ LabelWidget ] ]; } #undef LOCTEXT_NAMESPACE