Added asset selection model option for a source asset type based on regex.
Signed-off-by: Chris Galvan <chgalvan@amazon.com>
This commit is contained in:
+60
-9
@@ -10,18 +10,24 @@
|
|||||||
#include <AzToolsFramework/AssetBrowser/AssetBrowserBus.h>
|
#include <AzToolsFramework/AssetBrowser/AssetBrowserBus.h>
|
||||||
#include <AzToolsFramework/AssetBrowser/EBusFindAssetTypeByName.h>
|
#include <AzToolsFramework/AssetBrowser/EBusFindAssetTypeByName.h>
|
||||||
|
|
||||||
|
#if !defined(Q_MOC_RUN)
|
||||||
|
AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option")
|
||||||
|
#include <QRegExp>
|
||||||
|
AZ_POP_DISABLE_WARNING
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace AzToolsFramework
|
namespace AzToolsFramework
|
||||||
{
|
{
|
||||||
namespace AssetBrowser
|
namespace AssetBrowser
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
FilterConstType ProductsNoFoldersFilter()
|
FilterConstType EntryTypeNoFoldersFilter(AssetBrowserEntry::AssetEntryType entryType = AssetBrowserEntry::AssetEntryType::Product)
|
||||||
{
|
{
|
||||||
EntryTypeFilter* productFilter = new EntryTypeFilter();
|
EntryTypeFilter* entryTypeFilter = new EntryTypeFilter();
|
||||||
productFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Product);
|
entryTypeFilter->SetEntryType(entryType);
|
||||||
// in case entry is a source or folder, it may still contain relevant product
|
// in case entry is a source or folder, it may still contain relevant product
|
||||||
productFilter->SetFilterPropagation(AssetBrowserEntryFilter::PropagateDirection::Down);
|
entryTypeFilter->SetFilterPropagation(AssetBrowserEntryFilter::PropagateDirection::Down);
|
||||||
|
|
||||||
EntryTypeFilter* foldersFilter = new EntryTypeFilter();
|
EntryTypeFilter* foldersFilter = new EntryTypeFilter();
|
||||||
foldersFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Folder);
|
foldersFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Folder);
|
||||||
@@ -30,7 +36,7 @@ namespace AzToolsFramework
|
|||||||
noFoldersFilter->SetFilter(FilterConstType(foldersFilter));
|
noFoldersFilter->SetFilter(FilterConstType(foldersFilter));
|
||||||
|
|
||||||
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
||||||
compFilter->AddFilter(FilterConstType(productFilter));
|
compFilter->AddFilter(FilterConstType(entryTypeFilter));
|
||||||
compFilter->AddFilter(FilterConstType(noFoldersFilter));
|
compFilter->AddFilter(FilterConstType(noFoldersFilter));
|
||||||
|
|
||||||
return FilterConstType(compFilter);
|
return FilterConstType(compFilter);
|
||||||
@@ -79,15 +85,39 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
void AssetSelectionModel::SetSelectedAssetIds(const AZStd::vector<AZ::Data::AssetId>& selectedAssetIds)
|
void AssetSelectionModel::SetSelectedAssetIds(const AZStd::vector<AZ::Data::AssetId>& selectedAssetIds)
|
||||||
{
|
{
|
||||||
|
m_selectedFilePaths.clear();
|
||||||
|
|
||||||
m_selectedAssetIds = selectedAssetIds;
|
m_selectedAssetIds = selectedAssetIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetSelectionModel::SetSelectedAssetId(const AZ::Data::AssetId& selectedAssetId)
|
void AssetSelectionModel::SetSelectedAssetId(const AZ::Data::AssetId& selectedAssetId)
|
||||||
{
|
{
|
||||||
|
m_selectedFilePaths.clear();
|
||||||
|
|
||||||
m_selectedAssetIds.clear();
|
m_selectedAssetIds.clear();
|
||||||
m_selectedAssetIds.push_back(selectedAssetId);
|
m_selectedAssetIds.push_back(selectedAssetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const AZStd::vector<AZStd::string>& AssetSelectionModel::GetSelectedFilePaths() const
|
||||||
|
{
|
||||||
|
return m_selectedFilePaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetSelectionModel::SetSelectedFilePaths(const AZStd::vector<AZStd::string>& selectedFilePaths)
|
||||||
|
{
|
||||||
|
m_selectedAssetIds.clear();
|
||||||
|
|
||||||
|
m_selectedFilePaths = selectedFilePaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetSelectionModel::SetSelectedFilePath(const AZStd::string& selectedFilePath)
|
||||||
|
{
|
||||||
|
m_selectedAssetIds.clear();
|
||||||
|
|
||||||
|
m_selectedFilePaths.clear();
|
||||||
|
m_selectedFilePaths.push_back(selectedFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
void AssetSelectionModel::SetDefaultDirectory(AZStd::string_view defaultDirectory)
|
void AssetSelectionModel::SetDefaultDirectory(AZStd::string_view defaultDirectory)
|
||||||
{
|
{
|
||||||
m_defaultDirectory = defaultDirectory;
|
m_defaultDirectory = defaultDirectory;
|
||||||
@@ -136,7 +166,7 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
||||||
compFilter->AddFilter(assetTypeFilterPtr);
|
compFilter->AddFilter(assetTypeFilterPtr);
|
||||||
compFilter->AddFilter(ProductsNoFoldersFilter());
|
compFilter->AddFilter(EntryTypeNoFoldersFilter());
|
||||||
|
|
||||||
selection.SetSelectionFilter(FilterConstType(compFilter));
|
selection.SetSelectionFilter(FilterConstType(compFilter));
|
||||||
selection.SetMultiselect(multiselect);
|
selection.SetMultiselect(multiselect);
|
||||||
@@ -169,7 +199,7 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
||||||
compFilter->AddFilter(anyAssetTypeFilterPtr);
|
compFilter->AddFilter(anyAssetTypeFilterPtr);
|
||||||
compFilter->AddFilter(ProductsNoFoldersFilter());
|
compFilter->AddFilter(EntryTypeNoFoldersFilter());
|
||||||
|
|
||||||
selection.SetSelectionFilter(FilterConstType(compFilter));
|
selection.SetSelectionFilter(FilterConstType(compFilter));
|
||||||
selection.SetMultiselect(multiselect);
|
selection.SetMultiselect(multiselect);
|
||||||
@@ -190,7 +220,28 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
||||||
compFilter->AddFilter(assetGroupFilterPtr);
|
compFilter->AddFilter(assetGroupFilterPtr);
|
||||||
compFilter->AddFilter(ProductsNoFoldersFilter());
|
compFilter->AddFilter(EntryTypeNoFoldersFilter());
|
||||||
|
|
||||||
|
selection.SetSelectionFilter(FilterConstType(compFilter));
|
||||||
|
selection.SetMultiselect(multiselect);
|
||||||
|
|
||||||
|
return selection;
|
||||||
|
}
|
||||||
|
|
||||||
|
AssetSelectionModel AssetSelectionModel::SourceAssetTypeSelection(const QString& pattern, bool multiselect)
|
||||||
|
{
|
||||||
|
AssetSelectionModel selection;
|
||||||
|
|
||||||
|
RegExpFilter* patternFilter = new RegExpFilter();
|
||||||
|
patternFilter->SetFilterPattern(pattern);
|
||||||
|
patternFilter->SetFilterPropagation(AssetBrowserEntryFilter::PropagateDirection::Down);
|
||||||
|
auto patternFilterPtr = FilterConstType(patternFilter);
|
||||||
|
|
||||||
|
selection.SetDisplayFilter(patternFilterPtr);
|
||||||
|
|
||||||
|
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::AND);
|
||||||
|
compFilter->AddFilter(patternFilterPtr);
|
||||||
|
compFilter->AddFilter(EntryTypeNoFoldersFilter(AssetBrowserEntry::AssetEntryType::Source));
|
||||||
|
|
||||||
selection.SetSelectionFilter(FilterConstType(compFilter));
|
selection.SetSelectionFilter(FilterConstType(compFilter));
|
||||||
selection.SetMultiselect(multiselect);
|
selection.SetMultiselect(multiselect);
|
||||||
@@ -204,7 +255,7 @@ namespace AzToolsFramework
|
|||||||
|
|
||||||
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::OR);
|
CompositeFilter* compFilter = new CompositeFilter(CompositeFilter::LogicOperatorType::OR);
|
||||||
selection.SetDisplayFilter(FilterConstType(compFilter));
|
selection.SetDisplayFilter(FilterConstType(compFilter));
|
||||||
selection.SetSelectionFilter(ProductsNoFoldersFilter());
|
selection.SetSelectionFilter(EntryTypeNoFoldersFilter());
|
||||||
selection.SetMultiselect(multiselect);
|
selection.SetMultiselect(multiselect);
|
||||||
|
|
||||||
return selection;
|
return selection;
|
||||||
|
|||||||
+10
-1
@@ -44,6 +44,10 @@ namespace AzToolsFramework
|
|||||||
void SetSelectedAssetIds(const AZStd::vector<AZ::Data::AssetId>& selectedAssetIds);
|
void SetSelectedAssetIds(const AZStd::vector<AZ::Data::AssetId>& selectedAssetIds);
|
||||||
void SetSelectedAssetId(const AZ::Data::AssetId& selectedAssetId);
|
void SetSelectedAssetId(const AZ::Data::AssetId& selectedAssetId);
|
||||||
|
|
||||||
|
const AZStd::vector<AZStd::string>& GetSelectedFilePaths() const;
|
||||||
|
void SetSelectedFilePaths(const AZStd::vector<AZStd::string>& selectedFilePaths);
|
||||||
|
void SetSelectedFilePath(const AZStd::string& selectedFilePath);
|
||||||
|
|
||||||
void SetDefaultDirectory(AZStd::string_view defaultDirectory);
|
void SetDefaultDirectory(AZStd::string_view defaultDirectory);
|
||||||
AZStd::string_view GetDefaultDirectory() const;
|
AZStd::string_view GetDefaultDirectory() const;
|
||||||
|
|
||||||
@@ -60,6 +64,7 @@ namespace AzToolsFramework
|
|||||||
static AssetSelectionModel AssetTypeSelection(const char* assetTypeName, bool multiselect = false);
|
static AssetSelectionModel AssetTypeSelection(const char* assetTypeName, bool multiselect = false);
|
||||||
static AssetSelectionModel AssetTypesSelection(const AZStd::vector<AZ::Data::AssetType>& assetTypes, bool multiselect = false);
|
static AssetSelectionModel AssetTypesSelection(const AZStd::vector<AZ::Data::AssetType>& assetTypes, bool multiselect = false);
|
||||||
static AssetSelectionModel AssetGroupSelection(const char* group, bool multiselect = false);
|
static AssetSelectionModel AssetGroupSelection(const char* group, bool multiselect = false);
|
||||||
|
static AssetSelectionModel SourceAssetTypeSelection(const QString& pattern, bool multiselect = false);
|
||||||
static AssetSelectionModel EverythingSelection(bool multiselect = false);
|
static AssetSelectionModel EverythingSelection(bool multiselect = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -68,8 +73,12 @@ namespace AzToolsFramework
|
|||||||
// some entries like folder should always be displayed, but not always selectable, thus 2 separate filters
|
// some entries like folder should always be displayed, but not always selectable, thus 2 separate filters
|
||||||
FilterConstType m_selectionFilter;
|
FilterConstType m_selectionFilter;
|
||||||
FilterConstType m_displayFilter;
|
FilterConstType m_displayFilter;
|
||||||
|
|
||||||
|
//! Selection can be based on asset ids (for products), or file paths (for sources)
|
||||||
|
//! These are mututally exclusive
|
||||||
AZStd::vector<AZ::Data::AssetId> m_selectedAssetIds;
|
AZStd::vector<AZ::Data::AssetId> m_selectedAssetIds;
|
||||||
|
AZStd::vector<AZStd::string> m_selectedFilePaths;
|
||||||
|
|
||||||
AZStd::vector<const AssetBrowserEntry*> m_results;
|
AZStd::vector<const AssetBrowserEntry*> m_results;
|
||||||
AZStd::string m_defaultDirectory;
|
AZStd::string m_defaultDirectory;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user