ImporterRootDisplay.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #pragma once
  2. /*
  3. * Copyright (c) Contributors to the Open 3D Engine Project.
  4. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  5. *
  6. * SPDX-License-Identifier: Apache-2.0 OR MIT
  7. *
  8. */
  9. #if !defined(Q_MOC_RUN)
  10. #include <QWidget>
  11. #include <QMenu>
  12. #include <QScopedPointer>
  13. #include <AzCore/std/smart_ptr/shared_ptr.h>
  14. #include <AzCore/std/smart_ptr/unique_ptr.h>
  15. #include <AzCore/Memory/SystemAllocator.h>
  16. #include <SceneAPI/SceneCore/Events/ManifestMetaInfoBus.h>
  17. #include <SceneAPI/SceneUI/SceneUIConfiguration.h>
  18. #endif
  19. class ImporterRootDisplayWidget;
  20. class QAction;
  21. class QDockWidget;
  22. class QMenu;
  23. namespace AZ
  24. {
  25. class ReflectContext;
  26. class SerializeContext;
  27. namespace SceneAPI
  28. {
  29. namespace Containers
  30. {
  31. class Scene;
  32. }
  33. namespace UI
  34. {
  35. class ManifestWidget;
  36. }
  37. }
  38. } // namespace AZ
  39. namespace Ui
  40. {
  41. class ImporterRootDisplay;
  42. } // namespace UI
  43. //! Python interface for the scene importer root display settings
  44. class SceneSettingsRootDisplayScriptRequests
  45. : public AZ::EBusTraits
  46. {
  47. public:
  48. //////////////////////////////////////////////////////////////////////////
  49. // EBusTraits overrides
  50. static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
  51. static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
  52. //////////////////////////////////////////////////////////////////////////
  53. //! Returns true if the open scene settings file has unsaved changes, false if not.
  54. virtual bool HasUnsavedChanges() const = 0;
  55. };
  56. using SceneSettingsRootDisplayScriptRequestBus = AZ::EBus<SceneSettingsRootDisplayScriptRequests>;
  57. class SceneSettingsRootDisplayScriptRequestHandler : protected SceneSettingsRootDisplayScriptRequestBus::Handler
  58. {
  59. public:
  60. AZ_RTTI(SceneSettingsRootDisplayScriptRequestHandler, "{DF965807-DA41-4DFB-BD26-DD94E4955E8D}");
  61. SceneSettingsRootDisplayScriptRequestHandler();
  62. ~SceneSettingsRootDisplayScriptRequestHandler();
  63. static void Reflect(AZ::ReflectContext* context);
  64. bool HasUnsavedChanges() const override;
  65. void SetRootDisplay(ImporterRootDisplayWidget* importerRootDisplay);
  66. private:
  67. ImporterRootDisplayWidget* m_importerRootDisplay = nullptr;
  68. };
  69. class ImporterRootDisplayWidget
  70. : public QWidget
  71. , public AZ::SceneAPI::Events::ManifestMetaInfoBus::Handler
  72. {
  73. Q_OBJECT
  74. public:
  75. AZ_CLASS_ALLOCATOR(ImporterRootDisplayWidget, AZ::SystemAllocator);
  76. ImporterRootDisplayWidget(AZ::SerializeContext* serializeContext, QWidget* parent = nullptr);
  77. ~ImporterRootDisplayWidget();
  78. AZ::SceneAPI::UI::ManifestWidget* GetManifestWidget();
  79. void SetSceneDisplay(const QString& headerText, const AZStd::shared_ptr<AZ::SceneAPI::Containers::Scene>& scene);
  80. void SetSceneHeaderText(const QString& headerText);
  81. void SetPythonBuilderText(QString pythonBuilderText);
  82. void HandleSceneWasReset(const AZStd::shared_ptr<AZ::SceneAPI::Containers::Scene>& scene);
  83. void HandleSaveWasSuccessful();
  84. QString GetHeaderFileName() const;
  85. void UpdateTimeStamp(const QString& manifestFilePath, bool enableInspector);
  86. bool HasUnsavedChanges() const;
  87. signals:
  88. void AppendUnsavedChangesToTitle(bool hasUnsavedChanges);
  89. private:
  90. // ManifestMetaInfoBus
  91. void ObjectUpdated(const AZ::SceneAPI::Containers::Scene& scene, const AZ::SceneAPI::DataTypes::IManifestObject* target, void* sender) override;
  92. void SetUnsavedChanges(bool hasUnsavedChanges);
  93. Ui::ImporterRootDisplay* ui;
  94. QScopedPointer<AZ::SceneAPI::UI::ManifestWidget> m_manifestWidget;
  95. bool m_hasUnsavedChanges;
  96. QString m_filePath;
  97. AZStd::shared_ptr<SceneSettingsRootDisplayScriptRequestHandler> m_requestHandler;
  98. };