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:
@@ -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(); }
|
||||
|
||||
|
||||
+7
-2
@@ -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();
|
||||
|
||||
|
||||
+3
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user