123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- #pragma once
- #include "WwiseTreeItem.h"
- #include "Misc/TextFilter.h"
- #include "Widgets/Views/STableRow.h"
- #include "AkWaapiClient.h"
- #include "Dom/JsonObject.h"
- #include "Widgets/Input/SSearchBox.h"
- #include "Widgets/Views/STreeView.h"
- #include "Framework/Commands/UICommandList.h"
- DECLARE_DELEGATE_OneParam(FOnImportWwiseAssetsClicked, const FString&);
- typedef TTextFilter< const FString& > StringFilter;
- struct TransformStringField
- {
- const FString keyArg;
- const TArray<FString> valueStringArgs;
- const TArray<int32> valueNumberArgs;
- };
- class AKAUDIO_API SWaapiPicker : public SCompoundWidget
- {
- public:
- typedef TSlateDelegates< TSharedPtr< FWwiseTreeItem > >::FOnSelectionChanged FOnSelectionChanged;
- DECLARE_DELEGATE(FOnGenerateSoundBankClicked);
- DECLARE_DELEGATE(FOnRefreshClicked);
- public:
- SLATE_BEGIN_ARGS( SWaapiPicker )
- : _FocusSearchBoxWhenOpened(false)
- , _ShowTreeTitle(true)
- , _ShowSearchBar(true)
- , _ShowSeparator(true)
- , _AllowContextMenu(true)
- , _RestrictContextMenu(false)
- , _ShowGenerateSoundBanksButton(false)
- , _SelectionMode( ESelectionMode::Multi )
- {}
-
- SLATE_NAMED_SLOT( FArguments, SearchContent )
-
- SLATE_ARGUMENT( bool, FocusSearchBoxWhenOpened )
-
- SLATE_ARGUMENT( bool, ShowTreeTitle )
-
- SLATE_ARGUMENT( bool, ShowSearchBar )
-
- SLATE_ARGUMENT( bool, ShowSeparator )
-
- SLATE_ARGUMENT( bool, AllowContextMenu )
-
- SLATE_ARGUMENT(bool, RestrictContextMenu)
-
- SLATE_ARGUMENT(bool, ShowGenerateSoundBanksButton)
-
- SLATE_ARGUMENT( ESelectionMode::Type, SelectionMode )
-
-
- SLATE_EVENT(FOnDragDetected, OnDragDetected)
-
- SLATE_EVENT(FOnSelectionChanged, OnSelectionChanged)
-
- SLATE_EVENT(FOnGenerateSoundBankClicked, OnGenerateSoundBanksClicked)
-
- SLATE_EVENT(FOnRefreshClicked, OnRefreshClicked)
-
- SLATE_EVENT(FOnImportWwiseAssetsClicked, OnImportWwiseAssetsClicked)
- SLATE_END_ARGS( )
- void Construct(const FArguments& InArgs);
- SWaapiPicker(void);
- ~SWaapiPicker();
- static const FName WaapiPickerTabName;
- static const FText ModalWarning;
-
- virtual void Tick( const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime ) override;
-
- static bool CallWaapiGetInfoFrom(const FString& inFromField, const FString& inFromString, TSharedPtr<FJsonObject>& outJsonResult, const TArray<TransformStringField>& TransformFields);
-
- TSharedPtr<FWwiseTreeItem> FindItemFromPath(const TSharedPtr<FWwiseTreeItem>& RootItem, const FString& CurrentItemPath);
-
- void FindAndCreateItems(TSharedPtr<FWwiseTreeItem> CurrentItem);
-
- inline TSharedPtr<FWwiseTreeItem> GetRootItem(const FString& InFullPath);
-
- TSharedPtr<FWwiseTreeItem> ConstructWwiseTreeItem(const TSharedPtr<FJsonValue>& InJsonItem);
- TSharedPtr<FWwiseTreeItem> ConstructWwiseTreeItem(const TSharedPtr<FJsonObject>& ItemInfoObj);
- virtual FReply OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyboardEvent) override;
-
- const TArray<TSharedPtr<FWwiseTreeItem>> GetSelectedItems() const;
- const FString GetSearchText() const;
- const void SetSearchText(const FString& newText);
- private:
-
- TSharedPtr< STreeView< TSharedPtr<FWwiseTreeItem>> > TreeViewPtr;
-
- TSharedPtr< SSearchBox > SearchBoxPtr;
-
- TSharedPtr<StringFilter> SearchBoxFilter;
-
- FCriticalSection RootItemsLock;
- TArray< TSharedPtr<FWwiseTreeItem> > RootItems;
- FGraphEventRef ConstructTreeTask;
-
- bool AllowTreeViewDelegates;
-
- TSet< FGuid > LastSelectedItems;
-
- TSet< FGuid > LastExpandedItems;
-
- struct TransportInfo
- {
- int32 TransportID;
- uint64 SubscriptionID;
- TransportInfo(int32 transID, uint64 subsID) : TransportID(transID), SubscriptionID(subsID) {}
- };
-
- TMap<FGuid, TransportInfo> ItemToTransport;
-
- TSharedRef<FUICommandList> CommandList;
-
- FOnDragDetected OnDragDetected;
-
-
- FOnSelectionChanged OnSelectionChanged;
- FOnGenerateSoundBankClicked OnGenerateSoundBanksClicked;
- FOnRefreshClicked OnRefreshClicked;
-
- FOnImportWwiseAssetsClicked OnImportWwiseAssetsClicked;
-
- bool bRestrictContextMenu;
-
- FDelegateHandle ProjectLoadedHandle;
- FDelegateHandle ConnectionLostHandle;
- FDelegateHandle ClientBeginDestroyHandle;
-
- void RemoveClientCallbacks();
- void OnProjectLoadedCallback();
- void OnConnectionLostCallback();
-
- EVisibility isPickerAllowed() const;
- EVisibility isWarningVisible() const;
- FText GetWarningText() const;
- bool isPickerVisible;
- bool isModalActiveInWwise = false;
-
- EActiveTimerReturnType SetFocusPostConstruct(double InCurrentTime, float InDeltaTime);
-
- FReply OnRefreshButtonClicked();
- FReply OnGenerateSoundBanksButtonClicked();
-
- void ConstructTree();
-
- TSharedRef<ITableRow> GenerateRow( TSharedPtr<FWwiseTreeItem> TreeItem, const TSharedRef<STableViewBase>& OwnerTable );
-
- void GetChildrenForTree( TSharedPtr< FWwiseTreeItem > TreeItem, TArray< TSharedPtr<FWwiseTreeItem> >& OutChildren );
-
- FReply HandleOnDragDetected(const FGeometry& Geometry, const FPointerEvent& MouseEvent);
- void ExpandFirstLevel();
- void ExpandParents(TSharedPtr<FWwiseTreeItem> Item);
- FText GetProjectName() const;
-
- void PopulateSearchStrings( const FString& FolderName, OUT TArray< FString >& OutSearchStrings ) const;
- void OnSearchBoxChanged( const FText& InSearchText );
- FText GetHighlightText() const;
- void FilterUpdated();
- void SetItemVisibility(TSharedPtr<FWwiseTreeItem> Item, bool IsVisible);
- void ApplyFilter();
- void RestoreTreeExpansion(const TArray< TSharedPtr<FWwiseTreeItem> >& Items);
-
- void TreeSelectionChanged( TSharedPtr< FWwiseTreeItem > TreeItem, ESelectInfo::Type SelectInfo );
-
- void TreeExpansionChanged( TSharedPtr< FWwiseTreeItem > TreeItem, bool bIsExpanded );
- FString ProjectFolder;
- FString ProjectName;
-
- bool IsTreeItemSelected(TSharedPtr<FWwiseTreeItem> TreeItem) const;
-
-
- void CreateWaapiPickerCommands();
-
- TSharedPtr<SWidget> MakeWaapiPickerContextMenu();
-
- int32 CreateTransport(const FGuid& ItemID);
- void DestroyTransport(const FGuid& ItemID);
- void TogglePlayStop(int32 TransportID);
- void StopTransport(int32 TransportID);
- uint64 SubscribeToTransportStateChanged(int32 TransportID);
- void HandleStateChanged(TSharedPtr<FJsonObject> UEJsonObject);
-
-
- bool HandleRenameWwiseItemCommandCanExecute() const;
-
-
- void HandleRenameWwiseItemCommandExecute() const;
-
-
- bool HandlePlayWwiseItemCommandCanExecute() const;
-
- void HandlePlayWwiseItemCommandExecute();
-
-
- void StopAndDestroyAllTransports();
-
- bool HandleDeleteWwiseItemCommandCanExecute() const;
-
- void HandleDeleteWwiseItemCommandExecute();
-
-
- void HandleExploreWwiseItemCommandExecute() const;
-
- bool HandleWwiseCommandCanExecute() const;
-
- void HandleFindWwiseItemInProjectExplorerCommandExecute() const;
-
- void HandleRefreshWaapiPickerCommandExecute();
-
- void HandleUndoWaapiPickerCommandExecute() const;
-
- void HandleRedoWaapiPickerCommandExecute() const;
-
- void HandleImportWwiseItemCommandExecute() const;
- void SubscribeWaapiCallbacks();
- void UnsubscribeWaapiCallbacks();
- void OnWaapiRenamed(uint64_t Id, TSharedPtr<FJsonObject> Response);
- void OnWaapiChildAdded(uint64_t Id, TSharedPtr<FJsonObject> Response);
- void OnWaapiChildRemoved(uint64_t Id, TSharedPtr<FJsonObject> Response);
- void OnWwiseSelectionChanged(uint64_t Id, TSharedPtr<FJsonObject> Response);
- void CreateTreeItemWaapi(const TSharedPtr<FWwiseTreeItem>& parentTreeItem, const TSharedPtr<FJsonObject>& childJson);
- template<typename ActionFunctor>
- void HandleOnWaapiChildResponse(TSharedPtr<FJsonObject> Response, const ActionFunctor& Action);
- TSharedPtr<FWwiseTreeItem> FindTreeItemFromJsonObject(const TSharedPtr<FJsonObject>& Object, const FString& OverrideLastPart = FString());
- TSharedPtr<FWwiseTreeItem> FindOrConstructTreeItemFromJsonObject(const TSharedPtr<FJsonObject>& Object);
- private:
- struct FWaapiSubscriptionIds
- {
- uint64 Renamed = 0;
- uint64 ChildAdded = 0;
- uint64 ChildRemoved = 0;
- uint64 SelectionChanged = 0;
- } WaapiSubscriptionIds;
- TMap<FGuid, TSharedPtr<FWwiseTreeItem>> pendingTreeItems;
- };
|