123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- /*******************************************************************************
- The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
- Technology released in source code form as part of the game integration package.
- The content of this file may not be used without valid licenses to the
- AUDIOKINETIC Wwise Technology.
- Note that the use of the game engine is subject to the Unreal(R) Engine End User
- License Agreement at https://www.unrealengine.com/en-US/eula/unreal
-
- License Usage
-
- Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
- this file in accordance with the end user license agreement provided with the
- software or, alternatively, in accordance with the terms contained
- in a written agreement between you and Audiokinetic Inc.
- Copyright (c) 2023 Audiokinetic Inc.
- *******************************************************************************/
- /*------------------------------------------------------------------------------------
- AkWaapiUri.cpp
- ------------------------------------------------------------------------------------*/
- /*------------------------------------------------------------------------------------
- includes.
- ------------------------------------------------------------------------------------*/
- #include "AkWaapiBlueprints/AkWaapiUri.h"
- #include "AkAudioDevice.h"
- #include "Widgets/Input/SSearchBox.h"
- #include "Misc/ScopedSlowTask.h"
- #include "Framework/Application/SlateApplication.h"
- #include "AkAudioStyle.h"
- /*------------------------------------------------------------------------------------
- Defines
- ------------------------------------------------------------------------------------*/
- #define LOCTEXT_NAMESPACE "AkAudio"
- /*------------------------------------------------------------------------------------
- Statics and Globals
- ------------------------------------------------------------------------------------*/
- namespace SAkWaapiUri_Helpers
- {
- #include "AkWaapiUriList.inc"
- }
- /*------------------------------------------------------------------------------------
- Helpers
- ------------------------------------------------------------------------------------*/
- /*------------------------------------------------------------------------------------
- UAkWaapiUriConv
- ------------------------------------------------------------------------------------*/
- UAkWaapiUriConv::UAkWaapiUriConv(const class FObjectInitializer& ObjectInitializer)
- : Super(ObjectInitializer)
- {
- // Property initialization
- }
- FString UAkWaapiUriConv::Conv_FAkWaapiUriToString(const FAkWaapiUri& INAkWaapiUri)
- {
- return INAkWaapiUri.Uri;
- }
- FText UAkWaapiUriConv::Conv_FAkWaapiUriToText(const FAkWaapiUri& INAkWaapiUri)
- {
- return FText::FromString(*INAkWaapiUri.Uri);
- }
- /*------------------------------------------------------------------------------------
- SAkWaapiUri
- ------------------------------------------------------------------------------------*/
- SAkWaapiUri::SAkWaapiUri()
- {}
- SAkWaapiUri::~SAkWaapiUri()
- {}
- void SAkWaapiUri::Construct(const FArguments& InArgs)
- {
- OnDragDetected = InArgs._OnDragDetected;
- OnSelectionChanged = InArgs._OnSelectionChanged;
- if (InArgs._FocusSearchBoxWhenOpened)
- {
- RegisterActiveTimer(0.f, FWidgetActiveTimerDelegate::CreateSP(this, &SAkWaapiUri::SetFocusPostConstruct));
- }
- SearchBoxFilter = MakeShareable(new StringFilter(StringFilter::FItemToStringArray::CreateSP(this, &SAkWaapiUri::PopulateSearchStrings)));
- SearchBoxFilter->OnChanged().AddSP(this, &SAkWaapiUri::FilterUpdated);
- ChildSlot
- [
- SNew(SBorder)
- .Padding(4)
- .BorderImage(FAkAudioStyle::GetBrush("AudiokineticTools.GroupBorder"))
- [
- SNew(SVerticalBox)
- // Search
- + SVerticalBox::Slot()
- .AutoHeight()
- .Padding(0, 1, 0, 3)
- [
- SNew(SHorizontalBox)
- + SHorizontalBox::Slot()
- .AutoWidth()
- [
- InArgs._SearchContent.Widget
- ]
- + SHorizontalBox::Slot()
- .FillWidth(1.0f)
- [
- SAssignNew(SearchBoxPtr, SSearchBox)
- .HintText(LOCTEXT("UriSearchHint", "Search a Uri"))
- .ToolTipText(LOCTEXT("UriSearchTooltip", "Type here to search for a Uri"))
- .OnTextChanged(SearchBoxFilter.Get(), &StringFilter::SetRawFilterText)
- .SelectAllTextWhenFocused(false)
- .DelayChangeNotificationsWhileTyping(true)
- ]
- ]
- // Tree
- + SVerticalBox::Slot()
- .FillHeight(1.f)
- [
- SAssignNew(ListViewPtr, SListView< TSharedPtr<FString> >)
- .ListItemsSource(&UriList)
- .OnGenerateRow(this, &SAkWaapiUri::GenerateRow)
- .ItemHeight(18)
- .SelectionMode(InArgs._SelectionMode)
- .OnSelectionChanged(this, &SAkWaapiUri::ListSelectionChanged)
- .ClearSelectionOnClick(false)
- ]
- ]
- ];
- for (const auto& Uri : SAkWaapiUri_Helpers::FullUriList)
- {
- UriList.Add(MakeShareable(new FString(Uri)));
- }
- UriList.Sort([](TSharedPtr< FString > Firststr, TSharedPtr< FString > Secondstr) { return *Firststr.Get() < *Secondstr.Get(); });
- ListViewPtr->RequestListRefresh();
- }
- TSharedRef<ITableRow> SAkWaapiUri::GenerateRow(TSharedPtr<FString> in_Uri, const TSharedRef<STableViewBase>& OwnerTable)
- {
- check(in_Uri.IsValid());
- TSharedPtr<ITableRow> NewRow = SNew(STableRow< TSharedPtr<FString> >, OwnerTable)
- [
- SNew(STextBlock)
- .Text(FText::FromString(*in_Uri.Get()))
- .HighlightText(SearchBoxFilter.Get(), &StringFilter::GetRawFilterText)
- ];
- return NewRow.ToSharedRef();
- }
- void SAkWaapiUri::PopulateSearchStrings(const FString& in_Uri, OUT TArray< FString >& OutSearchStrings) const
- {
- OutSearchStrings.Add(in_Uri);
- }
- void SAkWaapiUri::FilterUpdated()
- {
- FScopedSlowTask SlowTask(2.f, LOCTEXT("AK_PopulatingPicker", "Populating Uri Picker..."));
- SlowTask.MakeDialog();
- UriList.Empty(SAkWaapiUri_Helpers::FullUriListSize);
- FString FilterString = SearchBoxFilter->GetRawFilterText().ToString();
- if (FilterString.IsEmpty())
- {
- for (const auto& Uri : SAkWaapiUri_Helpers::FullUriList)
- {
- UriList.Add(MakeShareable(new FString(Uri)));
- }
- }
- else
- {
- for (const auto& Uri : SAkWaapiUri_Helpers::FullUriList)
- {
- if (Uri.Contains(FilterString))
- {
- UriList.Add(MakeShareable(new FString(Uri)));
- }
- }
- }
- UriList.Sort([](TSharedPtr< FString > Firststr, TSharedPtr< FString > Secondstr) { return *Firststr.Get() < *Secondstr.Get(); });
- ListViewPtr->RequestListRefresh();
- }
- void SAkWaapiUri::ListSelectionChanged(TSharedPtr< FString > in_Uri, ESelectInfo::Type /*SelectInfo*/)
- {
- if (OnSelectionChanged.IsBound())
- OnSelectionChanged.Execute(in_Uri, ESelectInfo::OnMouseClick);
- }
- const TArray<TSharedPtr<FString>> SAkWaapiUri::GetSelectedUri() const
- {
- return ListViewPtr->GetSelectedItems();
- }
- EActiveTimerReturnType SAkWaapiUri::SetFocusPostConstruct(double InCurrentTime, float InDeltaTime)
- {
- FWidgetPath WidgetToFocusPath;
- FSlateApplication::Get().GeneratePathToWidgetUnchecked(SearchBoxPtr.ToSharedRef(), WidgetToFocusPath);
- FSlateApplication::Get().SetKeyboardFocus(WidgetToFocusPath, EFocusCause::SetDirectly);
- return EActiveTimerReturnType::Stop;
- }
- #undef LOCTEXT_NAMESPACE
|