2014-12-07 19:09:38 -05:00
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
# pragma once
class FCollectionManager : public ICollectionManager
{
public :
FCollectionManager ( ) ;
virtual ~ FCollectionManager ( ) ;
// ICollectionManager implementation
2015-05-29 13:15:23 -04:00
virtual bool HasCollections ( ) const override ;
2015-06-19 07:33:02 -04:00
virtual void GetCollections ( TArray < FCollectionNameType > & OutCollections ) const override ;
2014-06-13 06:14:46 -04:00
virtual void GetCollectionNames ( ECollectionShareType : : Type ShareType , TArray < FName > & CollectionNames ) const override ;
2015-06-19 07:33:02 -04:00
virtual void GetRootCollections ( TArray < FCollectionNameType > & OutCollections ) const override ;
virtual void GetRootCollectionNames ( ECollectionShareType : : Type ShareType , TArray < FName > & CollectionNames ) const override ;
virtual void GetChildCollections ( FName CollectionName , ECollectionShareType : : Type ShareType , TArray < FCollectionNameType > & OutCollections ) const override ;
virtual void GetChildCollectionNames ( FName CollectionName , ECollectionShareType : : Type ShareType , ECollectionShareType : : Type ChildShareType , TArray < FName > & CollectionNames ) const override ;
2014-06-13 06:14:46 -04:00
virtual bool CollectionExists ( FName CollectionName , ECollectionShareType : : Type ShareType ) const override ;
2015-06-19 07:33:02 -04:00
virtual bool GetAssetsInCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , TArray < FName > & AssetPaths , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual bool GetObjectsInCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , TArray < FName > & ObjectPaths , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual bool GetClassesInCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , TArray < FName > & ClassPaths , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual void GetCollectionsContainingObject ( FName ObjectPath , ECollectionShareType : : Type ShareType , TArray < FName > & OutCollectionNames , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual void GetCollectionsContainingObject ( FName ObjectPath , TArray < FCollectionNameType > & OutCollections , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual void GetCollectionsContainingObjects ( const TArray < FName > & ObjectPaths , TMap < FCollectionNameType , TArray < FName > > & OutCollectionsAndMatchedObjects , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual FString GetCollectionsStringForObject ( FName ObjectPath , ECollectionShareType : : Type ShareType , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
2014-06-13 06:14:46 -04:00
virtual void CreateUniqueCollectionName ( const FName & BaseName , ECollectionShareType : : Type ShareType , FName & OutCollectionName ) const override ;
virtual bool CreateCollection ( FName CollectionName , ECollectionShareType : : Type ShareType ) override ;
virtual bool RenameCollection ( FName CurrentCollectionName , ECollectionShareType : : Type CurrentShareType , FName NewCollectionName , ECollectionShareType : : Type NewShareType ) override ;
2015-06-19 07:33:02 -04:00
virtual bool ReparentCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , FName ParentCollectionName , ECollectionShareType : : Type ParentShareType ) override ;
2014-06-13 06:14:46 -04:00
virtual bool DestroyCollection ( FName CollectionName , ECollectionShareType : : Type ShareType ) override ;
virtual bool AddToCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , FName ObjectPath ) override ;
2015-05-21 07:43:16 -04:00
virtual bool AddToCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , const TArray < FName > & ObjectPaths , int32 * OutNumAdded = nullptr ) override ;
2014-06-13 06:14:46 -04:00
virtual bool RemoveFromCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , FName ObjectPath ) override ;
2015-05-21 07:43:16 -04:00
virtual bool RemoveFromCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , const TArray < FName > & ObjectPaths , int32 * OutNumRemoved = nullptr ) override ;
2014-06-13 06:14:46 -04:00
virtual bool EmptyCollection ( FName CollectionName , ECollectionShareType : : Type ShareType ) override ;
2015-05-21 07:43:16 -04:00
virtual bool IsCollectionEmpty ( FName CollectionName , ECollectionShareType : : Type ShareType ) const override ;
2015-06-19 07:33:02 -04:00
virtual bool IsObjectInCollection ( FName ObjectPath , FName CollectionName , ECollectionShareType : : Type ShareType , ECollectionRecursionFlags : : Flags RecursionMode = ECollectionRecursionFlags : : Self ) const override ;
virtual bool IsValidParentCollection ( FName CollectionName , ECollectionShareType : : Type ShareType , FName ParentCollectionName , ECollectionShareType : : Type ParentShareType ) const override ;
2014-06-13 06:14:46 -04:00
virtual FText GetLastError ( ) const override { return LastError ; }
2014-03-14 14:13:41 -04:00
/** Event for when collections are created */
DECLARE_DERIVED_EVENT ( FCollectionManager , ICollectionManager : : FCollectionCreatedEvent , FCollectionCreatedEvent ) ;
2014-06-13 06:14:46 -04:00
virtual FCollectionCreatedEvent & OnCollectionCreated ( ) override { return CollectionCreatedEvent ; }
2014-03-14 14:13:41 -04:00
/** Event for when collections are destroyed */
DECLARE_DERIVED_EVENT ( FCollectionManager , ICollectionManager : : FCollectionDestroyedEvent , FCollectionDestroyedEvent ) ;
2014-06-13 06:14:46 -04:00
virtual FCollectionDestroyedEvent & OnCollectionDestroyed ( ) override { return CollectionDestroyedEvent ; }
2014-03-14 14:13:41 -04:00
/** Event for when assets are added to a collection */
DECLARE_DERIVED_EVENT ( FCollectionManager , ICollectionManager : : FAssetsAddedEvent , FAssetsAddedEvent ) ;
2014-06-13 06:14:46 -04:00
virtual FAssetsAddedEvent & OnAssetsAdded ( ) override { return AssetsAddedEvent ; }
2014-03-14 14:13:41 -04:00
/** Event for when assets are removed to a collection */
DECLARE_DERIVED_EVENT ( FCollectionManager , ICollectionManager : : FAssetsRemovedEvent , FAssetsRemovedEvent ) ;
2014-06-13 06:14:46 -04:00
virtual FAssetsRemovedEvent & OnAssetsRemoved ( ) override { return AssetsRemovedEvent ; }
2014-03-14 14:13:41 -04:00
/** Event for when collections are renamed */
DECLARE_DERIVED_EVENT ( FCollectionManager , ICollectionManager : : FCollectionRenamedEvent , FCollectionRenamedEvent ) ;
2014-06-13 06:14:46 -04:00
virtual FCollectionRenamedEvent & OnCollectionRenamed ( ) override { return CollectionRenamedEvent ; }
2014-03-14 14:13:41 -04:00
2015-06-19 07:33:02 -04:00
/** Event for when collections are re-parented */
DECLARE_DERIVED_EVENT ( FCollectionManager , ICollectionManager : : FCollectionReparentedEvent , FCollectionReparentedEvent ) ;
virtual FCollectionReparentedEvent & OnCollectionReparented ( ) override { return CollectionReparentedEvent ; }
2014-03-14 14:13:41 -04:00
private :
/** Loads all collection files from disk */
void LoadCollections ( ) ;
2015-05-29 13:15:23 -04:00
/** Rebuild the entire cached objects map based on the current collection data */
void RebuildCachedObjects ( ) ;
2015-06-19 07:33:02 -04:00
/** Rebuild the entire cached hierarchy map based on the current collection data */
void RebuildCachedHierarchy ( ) ;
2014-03-14 14:13:41 -04:00
/** Returns true if the specified share type requires source control */
bool ShouldUseSCC ( ECollectionShareType : : Type ShareType ) const ;
2015-06-19 07:33:02 -04:00
/** Given a collection name and share type, work out the full filename for the collection to use on disk */
FString GetCollectionFilename ( const FName & InCollectionName , const ECollectionShareType : : Type InCollectionShareType ) const ;
2014-03-14 14:13:41 -04:00
/** Adds a collection to the lookup maps */
2015-05-21 07:43:16 -04:00
bool AddCollection ( const TSharedRef < FCollection > & CollectionRef , ECollectionShareType : : Type ShareType ) ;
2014-03-14 14:13:41 -04:00
/** Removes a collection from the lookup maps */
2015-05-21 07:43:16 -04:00
bool RemoveCollection ( const TSharedRef < FCollection > & CollectionRef , ECollectionShareType : : Type ShareType ) ;
2014-03-14 14:13:41 -04:00
2015-06-19 07:33:02 -04:00
enum class ERecursiveWorkerFlowControl : uint8
{
Stop ,
Continue ,
} ;
typedef TFunctionRef < ERecursiveWorkerFlowControl ( const FCollectionNameType & , ECollectionRecursionFlags : : Flag ) > FRecursiveWorkerFunc ;
void RecursionHelper_DoWork ( const FCollectionNameType & InCollectionKey , const ECollectionRecursionFlags : : Flags InRecursionMode , const FRecursiveWorkerFunc & InWorkerFunc ) const ;
ERecursiveWorkerFlowControl RecursionHelper_DoWorkOnParents ( const FCollectionNameType & InCollectionKey , const FRecursiveWorkerFunc & InWorkerFunc ) const ;
ERecursiveWorkerFlowControl RecursionHelper_DoWorkOnChildren ( const FCollectionNameType & InCollectionKey , const FRecursiveWorkerFunc & InWorkerFunc ) const ;
2014-03-14 14:13:41 -04:00
private :
2015-06-19 07:33:02 -04:00
/** Collection info for a given object - gives the collection name, as well as the reason this object is considered to be part of this collection */
struct FObjectCollectionInfo
{
explicit FObjectCollectionInfo ( const FCollectionNameType & InCollectionKey )
: CollectionKey ( InCollectionKey )
, Reason ( 0 )
{
}
FObjectCollectionInfo ( const FCollectionNameType & InCollectionKey , const ECollectionRecursionFlags : : Flags InReason )
: CollectionKey ( InCollectionKey )
, Reason ( InReason )
{
}
/** The key identifying the collection that contains this object */
FCollectionNameType CollectionKey ;
/** The reason(s) why this collection contains this object - this can be tested against the recursion mode when getting the collections for an object */
ECollectionRecursionFlags : : Flags Reason ;
} ;
2014-03-14 14:13:41 -04:00
/** The folders that contain collections */
FString CollectionFolders [ ECollectionShareType : : CST_All ] ;
/** The extension used for collection files */
FString CollectionExtension ;
/** A map of collection names to FCollection objects */
2015-05-21 07:43:16 -04:00
TMap < FCollectionNameType , TSharedRef < FCollection > > CachedCollections ;
2014-03-14 14:13:41 -04:00
2015-06-19 07:33:02 -04:00
/** A map of collection GUIDs to their associated collection names */
TMap < FGuid , FCollectionNameType > CachedCollectionNamesFromGuids ;
/** A map of object paths to their associated collection info - only objects that are in collections will appear in here */
TMap < FName , TArray < FObjectCollectionInfo > > CachedObjects ;
/** A map of parent collection GUIDs to their child collection GUIDs - only collections that have children will appear in here */
TMap < FGuid , TArray < FGuid > > CachedHierarchy ;
2015-05-29 13:15:23 -04:00
2014-03-14 14:13:41 -04:00
/** The most recent error that occurred */
2015-05-21 07:43:16 -04:00
mutable FText LastError ;
2014-03-14 14:13:41 -04:00
/** Event for when assets are added to a collection */
FAssetsAddedEvent AssetsAddedEvent ;
/** Event for when assets are removed from a collection */
FAssetsRemovedEvent AssetsRemovedEvent ;
/** Event for when collections are renamed */
FCollectionRenamedEvent CollectionRenamedEvent ;
2015-06-19 07:33:02 -04:00
/** Event for when collections are re-parented */
FCollectionReparentedEvent CollectionReparentedEvent ;
2014-03-14 14:13:41 -04:00
/** Event for when collections are created */
FCollectionCreatedEvent CollectionCreatedEvent ;
/** Event for when collections are destroyed */
FCollectionDestroyedEvent CollectionDestroyedEvent ;
2015-05-21 07:43:16 -04:00
} ;