Merge pull request #142 from aws-lumberyard-dev/Atom/mnaumov/ATOM-15222

[ATOM-15222] Adding "Create New Material" context menu option to folder in Materia…
This commit is contained in:
AMZN-mnaumov
2021-04-20 11:38:34 -07:00
committed by GitHub
6 changed files with 55 additions and 4 deletions
@@ -170,6 +170,15 @@ namespace AzToolsFramework
return m_filter;
}
QSharedPointer<CompositeFilter> SearchWidget::GetStringFilter() const
{
return m_stringFilter;
}
QSharedPointer<CompositeFilter> SearchWidget::GetTypesFilter() const
{
return m_typesFilter;
}
} // namespace AssetBrowser
} // namespace AzToolsFramework
@@ -39,6 +39,10 @@ namespace AzToolsFramework
QSharedPointer<CompositeFilter> GetFilter() const;
QSharedPointer<CompositeFilter> GetStringFilter() const;
QSharedPointer<CompositeFilter> GetTypesFilter() const;
QString GetFilterString() const { return textFilter(); }
void ClearStringFilter() { ClearTextFilter(); }
@@ -26,8 +26,14 @@
namespace MaterialEditor
{
CreateMaterialDialog::CreateMaterialDialog(QWidget* parent)
: CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent)
{
}
CreateMaterialDialog::CreateMaterialDialog(const QString& path, QWidget* parent)
: QDialog(parent)
, m_ui(new Ui::CreateMaterialDialog)
, m_path(path)
{
m_ui->setupUi(this);
@@ -77,8 +83,7 @@ namespace MaterialEditor
{
//Select a default location and unique name for the new material
m_materialFileInfo = AtomToolsFramework::GetUniqueFileInfo(
QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" +
m_path +
AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." +
AZ::RPI::MaterialSourceData::Extension).absoluteFilePath();
@@ -27,6 +27,7 @@ namespace MaterialEditor
Q_OBJECT
public:
CreateMaterialDialog(QWidget* parent = nullptr);
CreateMaterialDialog(const QString& path, QWidget* parent = nullptr);
~CreateMaterialDialog() = default;
QFileInfo m_materialFileInfo;
@@ -34,6 +35,8 @@ namespace MaterialEditor
private:
QScopedPointer<Ui::CreateMaterialDialog> m_ui;
QString m_path;
void InitMaterialTypeSelection();
void InitMaterialFileSelection();
void UpdateMaterialTypeSelection();
@@ -29,6 +29,7 @@
#include <Atom/Document/MaterialDocumentSystemRequestBus.h>
#include <Source/Window/MaterialBrowserInteractions.h>
#include <Window/CreateMaterialDialog/CreateMaterialDialog.h>
#include <Atom/RPI.Reflect/Material/MaterialAsset.h>
#include <Atom/RPI.Edit/Material/MaterialSourceData.h>
@@ -246,6 +247,24 @@ namespace MaterialEditor
}
}
});
menu->addSeparator();
QAction* createMaterialAction = menu->addAction(QObject::tr("Create Material..."));
QObject::connect(createMaterialAction, &QAction::triggered, caller, [caller, entry]()
{
CreateMaterialDialog createDialog(entry->GetFullPath().c_str(), caller);
createDialog.adjustSize();
if (createDialog.exec() == QDialog::Accepted &&
!createDialog.m_materialFileInfo.absoluteFilePath().isEmpty() &&
!createDialog.m_materialTypeFileInfo.absoluteFilePath().isEmpty())
{
MaterialDocumentSystemRequestBus::Broadcast(&MaterialDocumentSystemRequestBus::Events::CreateDocumentFromFile,
createDialog.m_materialTypeFileInfo.absoluteFilePath().toUtf8().constData(),
createDialog.m_materialFileInfo.absoluteFilePath().toUtf8().constData());
}
});
}
void MaterialBrowserInteractions::AddPerforceMenuActions([[maybe_unused]] QWidget* caller, QMenu* menu, const AzToolsFramework::AssetBrowser::AssetBrowserEntry* entry)
@@ -110,19 +110,30 @@ namespace MaterialEditor
{
using namespace AzToolsFramework::AssetBrowser;
// Material Browser uses the following filters:
// 1. [All source files (no products) that contain products matching the assetType specified by searchWidget (default is materials and textures)]
// 2. [All folders (including empty folders)]
// 3. [All Sources and folders matching the search text typed in search widget]
// Final filter = ((1 OR 2) AND 3)
QSharedPointer<EntryTypeFilter> sourceFilter(new EntryTypeFilter);
sourceFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Source);
QSharedPointer<CompositeFilter> assetTypeFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND));
assetTypeFilter->AddFilter(sourceFilter);
assetTypeFilter->AddFilter(m_ui->m_searchWidget->GetTypesFilter());
QSharedPointer<EntryTypeFilter> folderFilter(new EntryTypeFilter);
folderFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Folder);
QSharedPointer<CompositeFilter> sourceOrFolderFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::OR));
sourceOrFolderFilter->AddFilter(sourceFilter);
sourceOrFolderFilter->AddFilter(assetTypeFilter);
sourceOrFolderFilter->AddFilter(folderFilter);
QSharedPointer<CompositeFilter> finalFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND));
finalFilter->AddFilter(sourceOrFolderFilter);
finalFilter->AddFilter(m_ui->m_searchWidget->GetFilter());
finalFilter->AddFilter(m_ui->m_searchWidget->GetStringFilter());
finalFilter->SetFilterPropagation(AssetBrowserEntryFilter::PropagateDirection::Down);
return finalFilter;
}