AnimGraphNodeHandler.h 2.7 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. #pragma once
  9. #if !defined(Q_MOC_RUN)
  10. #include <AzToolsFramework/UI/PropertyEditor/PropertyEditorAPI.h>
  11. #include <EMotionFX/Source/AnimGraph.h>
  12. #include <EMotionFX/Source/AnimGraphObjectIds.h>
  13. #include <QWidget>
  14. #include <QPushButton>
  15. #endif
  16. namespace EMotionFX
  17. {
  18. class AnimGraphNodeIdPicker
  19. : public QWidget
  20. {
  21. Q_OBJECT
  22. public:
  23. AZ_CLASS_ALLOCATOR_DECL
  24. AnimGraphNodeIdPicker(QWidget* parent);
  25. void SetAnimGraph(AnimGraph* animGraph);
  26. void SetNodeId(AnimGraphNodeId nodeId);
  27. AnimGraphNodeId GetNodeId() const;
  28. void SetShowStatesOnly(bool showStatesOnly);
  29. void SetNodeTypeFilter(const AZ::TypeId& nodeFilterType);
  30. signals:
  31. void SelectionChanged();
  32. private slots:
  33. void OnPickClicked();
  34. private:
  35. void UpdateInterface();
  36. AnimGraph* m_animGraph;
  37. AnimGraphNodeId m_nodeId;
  38. QPushButton* m_pickButton;
  39. AZ::TypeId m_nodeFilterType;
  40. bool m_showStatesOnly;
  41. };
  42. class AnimGraphNodeIdHandler
  43. : public QObject
  44. , public AzToolsFramework::PropertyHandler<AZ::u64, AnimGraphNodeIdPicker>
  45. {
  46. Q_OBJECT
  47. public:
  48. AZ_CLASS_ALLOCATOR_DECL
  49. AnimGraphNodeIdHandler();
  50. AZ::u32 GetHandlerName() const override;
  51. QWidget* CreateGUI(QWidget* parent) override;
  52. bool AutoDelete() const override { return false; }
  53. void ConsumeAttribute(AnimGraphNodeIdPicker* widget, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) override;
  54. void WriteGUIValuesIntoProperty(size_t index, AnimGraphNodeIdPicker* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
  55. bool ReadValuesIntoGUI(size_t index, AnimGraphNodeIdPicker* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
  56. protected:
  57. AnimGraph* m_animGraph;
  58. AZ::TypeId m_nodeFilterType;
  59. bool m_showStatesOnly;
  60. };
  61. class AnimGraphMotionNodeIdHandler
  62. : public AnimGraphNodeIdHandler
  63. {
  64. Q_OBJECT
  65. public:
  66. AZ_CLASS_ALLOCATOR_DECL
  67. AnimGraphMotionNodeIdHandler();
  68. AZ::u32 GetHandlerName() const override;
  69. };
  70. class AnimGraphStateIdHandler
  71. : public AnimGraphNodeIdHandler
  72. {
  73. Q_OBJECT
  74. public:
  75. AZ_CLASS_ALLOCATOR_DECL
  76. AnimGraphStateIdHandler();
  77. AZ::u32 GetHandlerName() const override;
  78. };
  79. } // namespace EMotionFX