3
0

AnimGraphTransitionHandler.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 <AzCore/std/smart_ptr/unique_ptr.h>
  11. #include <MCore/Source/CommandManagerCallback.h>
  12. #include <AzToolsFramework/UI/PropertyEditor/PropertyEditorAPI.h>
  13. #include <EMotionFX/Source/AnimGraphObjectIds.h>
  14. #include <QWidget>
  15. #include <QPushButton>
  16. #include <QToolTip>
  17. #include <QVBoxLayout>
  18. #endif
  19. namespace EMotionFX
  20. {
  21. class AnimGraphStateMachine;
  22. class AnimGraphStateTransition;
  23. class AnimGraphTransitionIdSelector
  24. {
  25. public:
  26. AnimGraphTransitionIdSelector();
  27. ~AnimGraphTransitionIdSelector();
  28. void StartSelection(AnimGraphStateMachine* stateMachine, const AZStd::vector<AZ::u64>& transitionIds);
  29. void StopSelection(AnimGraphStateTransition* transition);
  30. bool IsSelecting() const { return m_isSelecting; }
  31. void ResetUI();
  32. private:
  33. bool m_isSelecting = false;
  34. static const QColor s_graphWindowBorderOverwriteColor;
  35. static const float s_graphWindowBorderOverwriteWidth;
  36. };
  37. class AnimGraphTransitionIdPicker
  38. : public QWidget
  39. {
  40. Q_OBJECT // AUTOMOC
  41. public:
  42. AZ_CLASS_ALLOCATOR_DECL
  43. AnimGraphTransitionIdPicker(QWidget* parent);
  44. ~AnimGraphTransitionIdPicker();
  45. void SetTransition(AnimGraphStateTransition* transition);
  46. void SetTransitionIds(const AZStd::vector<AZ::u64>& transitionIds);
  47. const AZStd::vector<AZ::u64>& GetTransitionIds() const;
  48. signals:
  49. void SelectionChanged();
  50. private slots:
  51. void OnPickClicked();
  52. void OnAboutToBeRemoved(const QModelIndex &parent, int first, int last);
  53. private:
  54. AnimGraphStateMachine* GetStateMachine() const;
  55. void Reinit();
  56. void UpdateInterface();
  57. QString GetTransitionNameById(const AnimGraphConnectionId transitionId);
  58. AnimGraphStateTransition* m_transition = nullptr;
  59. AZStd::vector<AZ::u64> m_transitionIds;
  60. QVBoxLayout* m_mainLayout = nullptr;
  61. QWidget* m_widget = nullptr;
  62. QLabel* m_label = nullptr;
  63. AZStd::vector<QPushButton*> m_removeButtons;
  64. QPushButton* m_pickButton = nullptr;
  65. AnimGraphTransitionIdSelector m_transitionSelector;
  66. };
  67. class AnimGraphMultiTransitionIdHandler
  68. : public QObject
  69. , public AzToolsFramework::PropertyHandler<AZStd::vector<AZ::u64>, AnimGraphTransitionIdPicker>
  70. {
  71. Q_OBJECT // AUTOMOC
  72. public:
  73. AZ_CLASS_ALLOCATOR_DECL
  74. AnimGraphMultiTransitionIdHandler();
  75. AZ::u32 GetHandlerName() const override;
  76. QWidget* CreateGUI(QWidget* parent) override;
  77. void ConsumeAttribute(AnimGraphTransitionIdPicker* widget, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) override;
  78. void WriteGUIValuesIntoProperty(size_t index, AnimGraphTransitionIdPicker* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
  79. bool ReadValuesIntoGUI(size_t index, AnimGraphTransitionIdPicker* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node) override;
  80. protected:
  81. AnimGraphStateTransition* m_transition = nullptr;
  82. };
  83. } // namespace EMotionFX