When I type in combobox the current selected string does not update. Not sure why.
Making ComboBox
+ SHorizontalBox::Slot()
.Padding(FMargin(4,4))
.MaxWidth(135)
[
SAssignNew(NamespaceComboBox,SComboBox<TSharedPtr<FString>>)
.OptionsSource(&NamespaceComboBoxOptions)
.OnSelectionChanged(this,&SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxSelectionChanged)
.OnGenerateWidget(this, &SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxMakeWidget)
.InitiallySelectedItem(CultureComboBoxOptionSelected)
[
SNew(SEditableText)
.Text(this, &SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxCurrentItemLabel)
.OnTextChanged(this, &SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxSelectionTextChanged)
]
]
Functions
TSharedRef<SWidget> SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxMakeWidget(TSharedPtr<FString> InOption) const
{
return SNew(STextBlock).Text(FText::FromString(*InOption));
}
void SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxSelectionChanged(TSharedPtr<FString> SelectedValue, ESelectInfo::Type)
{
NamespaceComboBoxOptionSelected = SelectedValue;
}
void SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxSelectionTextChanged(const FText& NewText)
{
//Return If Not Valid
if (LocalizationAsset == nullptr)
return;
//Update Selected
for (int i = 0; i < NamespaceComboBoxOptions.Num(); i++)
if (NamespaceComboBoxOptions[i] == NamespaceComboBoxOptionSelected)
NamespaceComboBoxOptions[i] = MakeShareable(new FString(NewText.ToString()));
CultureComboBox->RefreshOptions();
//Mark Dirty (Needs To Save)
LocalizationAsset->MarkPackageDirty();
}
void SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxUpdated()
{
//Return If Not Valid
if (LocalizationAsset == nullptr)
return;
//Set Previous
NamespaceComboBoxOptionSelectedPrevious = NamespaceComboBoxOptionSelected;
//Set NONE If No Namespaces
if (LocalizationAsset->Namespaces.Num() == 0)
{
NamespaceComboBoxOptions = { (MakeShareable(new FString("No Namespaces"))) };
NamespaceComboBoxOptionSelected = NamespaceComboBoxOptions[0];
return;
}
//Add Namespaces
NamespaceComboBoxOptions.Empty();
NamespaceComboBoxOptions.Add((MakeShareable(new FString ("All"))));
for (int i = 0; i < LocalizationAsset->Namespaces.Num(); i++)
NamespaceComboBoxOptions.Add((MakeShareable(new FString (LocalizationAsset->Namespaces[i].ToString()))));
NamespaceComboBoxOptionSelected = NamespaceComboBoxOptionSelectedPrevious == nullptr ? NamespaceComboBoxOptions[0] : NamespaceComboBoxOptionSelectedPrevious;
//Refresh Namespace ComboBox (Update It)
NamespaceComboBox->RefreshOptions();
}
void SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxAdd()
{
//Return If Not Valid
if (LocalizationAsset == nullptr)
return;
//Add Namespace | Update
LocalizationAsset->Namespaces.AddUnique("NEW");
HandelNamespaceComboBoxUpdated();
//Mark Dirty (Needs To Save)
LocalizationAsset->MarkPackageDirty();
}
void SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxRemove()
{
//Return If Not Valid
if (LocalizationAsset == nullptr || NamespaceComboBoxOptionSelected == nullptr)
return;
//Remove Selected Namespace | Update
LocalizationAsset->Namespaces.Remove(FName(*NamespaceComboBoxOptionSelected));
HandelNamespaceComboBoxUpdated();
//Mark Dirty (Needs To Save)
LocalizationAsset->MarkPackageDirty();
}
FText SFluidNarratorLocalizationTextsSlateWidget::HandelNamespaceComboBoxCurrentItemLabel() const
{
if (NamespaceComboBoxOptionSelected.IsValid())
{
return FText::FromString(*NamespaceComboBoxOptionSelected);
}
return FText::FromString("NULL");
}