MaterialEditorApplication.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AtomToolsFramework/Document/AtomToolsDocumentSystemRequestBus.h>
  9. #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
  10. #include <MaterialEditorApplication.h>
  11. #include <Document/MaterialDocument.h>
  12. #include <Window/MaterialEditorMainWindow.h>
  13. void InitMaterialEditorResources()
  14. {
  15. // Must register qt resources from other modules
  16. Q_INIT_RESOURCE(MaterialEditor);
  17. Q_INIT_RESOURCE(InspectorWidget);
  18. Q_INIT_RESOURCE(AtomToolsAssetBrowser);
  19. }
  20. namespace MaterialEditor
  21. {
  22. static const char* GetBuildTargetName()
  23. {
  24. #if !defined(LY_CMAKE_TARGET)
  25. #error "LY_CMAKE_TARGET must be defined in order to add this source file to a CMake executable target"
  26. #endif
  27. return LY_CMAKE_TARGET;
  28. }
  29. MaterialEditorApplication::MaterialEditorApplication(int* argc, char*** argv)
  30. : Base(GetBuildTargetName(), argc, argv)
  31. {
  32. InitMaterialEditorResources();
  33. QApplication::setOrganizationName("O3DE");
  34. QApplication::setApplicationName("O3DE Material Editor");
  35. QApplication::setWindowIcon(QIcon(":/Icons/application.svg"));
  36. AzToolsFramework::EditorWindowRequestBus::Handler::BusConnect();
  37. }
  38. MaterialEditorApplication::~MaterialEditorApplication()
  39. {
  40. AzToolsFramework::EditorWindowRequestBus::Handler::BusDisconnect();
  41. m_window.reset();
  42. }
  43. void MaterialEditorApplication::Reflect(AZ::ReflectContext* context)
  44. {
  45. Base::Reflect(context);
  46. MaterialDocument::Reflect(context);
  47. }
  48. const char* MaterialEditorApplication::GetCurrentConfigurationName() const
  49. {
  50. #if defined(_RELEASE)
  51. return "ReleaseMaterialEditor";
  52. #elif defined(_DEBUG)
  53. return "DebugMaterialEditor";
  54. #else
  55. return "ProfileMaterialEditor";
  56. #endif
  57. }
  58. void MaterialEditorApplication::StartCommon(AZ::Entity* systemEntity)
  59. {
  60. Base::StartCommon(systemEntity);
  61. // Overriding default document type info to provide a custom view
  62. auto documentTypeInfo = MaterialDocument::BuildDocumentTypeInfo();
  63. documentTypeInfo.m_documentViewFactoryCallback = [this]([[maybe_unused]] const AZ::Crc32& toolId, const AZ::Uuid& documentId) {
  64. auto emptyWidget = new QWidget(m_window.get());
  65. emptyWidget->setContentsMargins(0, 0, 0, 0);
  66. emptyWidget->setFixedSize(0, 0);
  67. return m_window->AddDocumentTab(documentId, emptyWidget);
  68. };
  69. AtomToolsFramework::AtomToolsDocumentSystemRequestBus::Event(
  70. m_toolId, &AtomToolsFramework::AtomToolsDocumentSystemRequestBus::Handler::RegisterDocumentType, documentTypeInfo);
  71. m_viewportSettingsSystem.reset(aznew AtomToolsFramework::EntityPreviewViewportSettingsSystem(m_toolId));
  72. m_window.reset(aznew MaterialEditorMainWindow(m_toolId));
  73. m_window->show();
  74. }
  75. void MaterialEditorApplication::Destroy()
  76. {
  77. m_window.reset();
  78. m_viewportSettingsSystem.reset();
  79. Base::Destroy();
  80. }
  81. AZStd::vector<AZStd::string> MaterialEditorApplication::GetCriticalAssetFilters() const
  82. {
  83. return AZStd::vector<AZStd::string>({ "passes/", "config/", "MaterialEditor/" });
  84. }
  85. QWidget* MaterialEditorApplication::GetAppMainWindow()
  86. {
  87. return m_window.get();
  88. }
  89. } // namespace MaterialEditor