MaterialEditorApplication.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. #if defined(EXTERNAL_CRASH_REPORTING)
  14. #include <ToolsCrashHandler.h>
  15. #endif
  16. void InitMaterialEditorResources()
  17. {
  18. // Must register qt resources from other modules
  19. Q_INIT_RESOURCE(MaterialEditor);
  20. Q_INIT_RESOURCE(InspectorWidget);
  21. Q_INIT_RESOURCE(AtomToolsAssetBrowser);
  22. }
  23. namespace MaterialEditor
  24. {
  25. static const char* GetBuildTargetName()
  26. {
  27. #if !defined(LY_CMAKE_TARGET)
  28. #error "LY_CMAKE_TARGET must be defined in order to add this source file to a CMake executable target"
  29. #endif
  30. return LY_CMAKE_TARGET;
  31. }
  32. MaterialEditorApplication::MaterialEditorApplication(int* argc, char*** argv)
  33. : Base(GetBuildTargetName(), argc, argv)
  34. {
  35. #if defined(EXTERNAL_CRASH_REPORTING)
  36. CrashHandler::ToolsCrashHandler::InitCrashHandler("MaterialEditor", {});
  37. #endif
  38. InitMaterialEditorResources();
  39. QApplication::setOrganizationName("O3DE");
  40. QApplication::setApplicationName("O3DE Material Editor");
  41. QApplication::setWindowIcon(QIcon(":/Icons/application.svg"));
  42. AzToolsFramework::EditorWindowRequestBus::Handler::BusConnect();
  43. }
  44. MaterialEditorApplication::~MaterialEditorApplication()
  45. {
  46. AzToolsFramework::EditorWindowRequestBus::Handler::BusDisconnect();
  47. m_window.reset();
  48. }
  49. void MaterialEditorApplication::Reflect(AZ::ReflectContext* context)
  50. {
  51. Base::Reflect(context);
  52. MaterialDocument::Reflect(context);
  53. }
  54. const char* MaterialEditorApplication::GetCurrentConfigurationName() const
  55. {
  56. #if defined(_RELEASE)
  57. return "ReleaseMaterialEditor";
  58. #elif defined(_DEBUG)
  59. return "DebugMaterialEditor";
  60. #else
  61. return "ProfileMaterialEditor";
  62. #endif
  63. }
  64. void MaterialEditorApplication::StartCommon(AZ::Entity* systemEntity)
  65. {
  66. Base::StartCommon(systemEntity);
  67. // Overriding default document type info to provide a custom view
  68. auto documentTypeInfo = MaterialDocument::BuildDocumentTypeInfo();
  69. documentTypeInfo.m_documentViewFactoryCallback = [this]([[maybe_unused]] const AZ::Crc32& toolId, const AZ::Uuid& documentId) {
  70. auto emptyWidget = new QWidget(m_window.get());
  71. emptyWidget->setContentsMargins(0, 0, 0, 0);
  72. emptyWidget->setFixedSize(0, 0);
  73. return m_window->AddDocumentTab(documentId, emptyWidget);
  74. };
  75. AtomToolsFramework::AtomToolsDocumentSystemRequestBus::Event(
  76. m_toolId, &AtomToolsFramework::AtomToolsDocumentSystemRequestBus::Handler::RegisterDocumentType, documentTypeInfo);
  77. m_viewportSettingsSystem.reset(aznew AtomToolsFramework::EntityPreviewViewportSettingsSystem(m_toolId));
  78. m_window.reset(aznew MaterialEditorMainWindow(m_toolId));
  79. m_window->show();
  80. }
  81. void MaterialEditorApplication::Destroy()
  82. {
  83. m_window.reset();
  84. m_viewportSettingsSystem.reset();
  85. Base::Destroy();
  86. }
  87. AZStd::vector<AZStd::string> MaterialEditorApplication::GetCriticalAssetFilters() const
  88. {
  89. return AZStd::vector<AZStd::string>({ "passes/", "config/", "MaterialEditor/" });
  90. }
  91. QWidget* MaterialEditorApplication::GetAppMainWindow()
  92. {
  93. return m_window.get();
  94. }
  95. } // namespace MaterialEditor