ExecutionSlotLayoutComponent.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. #include <QGraphicsLinearLayout>
  10. #include <Components/Slots/SlotLayoutComponent.h>
  11. #include <GraphCanvas/Components/Nodes/NodeBus.h>
  12. #include <GraphCanvas/Components/SceneBus.h>
  13. #include <GraphCanvas/Components/Slots/SlotBus.h>
  14. #include <GraphCanvas/Components/StyleBus.h>
  15. #include <GraphCanvas/Styling/StyleHelper.h>
  16. #include <Widgets/GraphCanvasLabel.h>
  17. namespace GraphCanvas
  18. {
  19. class ExecutionSlotLayoutComponent;
  20. class ExecutionSlotConnectionPin;
  21. class GraphCanvasLabel;
  22. class ExecutionSlotLayout
  23. : public QGraphicsLinearLayout
  24. , public SlotNotificationBus::Handler
  25. , public SceneMemberNotificationBus::Handler
  26. , public StyleNotificationBus::Handler
  27. {
  28. public:
  29. AZ_CLASS_ALLOCATOR(ExecutionSlotLayout, AZ::SystemAllocator);
  30. ExecutionSlotLayout(ExecutionSlotLayoutComponent& owner);
  31. ~ExecutionSlotLayout();
  32. void Activate();
  33. void Deactivate();
  34. // SceneMemberNotificationBus
  35. void OnSceneSet(const AZ::EntityId&) override;
  36. void OnSceneReady() override;
  37. ////
  38. // SlotNotificationBus
  39. void OnRegisteredToNode(const AZ::EntityId& nodeId) override;
  40. void OnNameChanged(const AZStd::string& name) override;
  41. void OnTooltipChanged(const AZStd::string& tooltip) override;
  42. ////
  43. // StyleNotificationBus
  44. void OnStyleChanged() override;
  45. ////
  46. private:
  47. // ExecutionSlotLayoutBus
  48. void SetTextDecoration(const AZStd::string& textDecoration, const AZStd::string& toolTip);
  49. void ClearTextDecoration();
  50. ////
  51. void ApplyTextStyle(GraphCanvasLabel* graphCanvasLabel);
  52. void UpdateLayout();
  53. void UpdateGeometry();
  54. ConnectionType m_connectionType;
  55. Styling::StyleHelper m_style;
  56. ExecutionSlotLayoutComponent& m_owner;
  57. ExecutionSlotConnectionPin* m_slotConnectionPin;
  58. GraphCanvasLabel* m_slotText;
  59. GraphCanvasLabel* m_textDecoration;
  60. bool m_isNameHidden = false;
  61. };
  62. //! Lays out the parts of a basic Node
  63. class ExecutionSlotLayoutComponent
  64. : public SlotLayoutComponent
  65. {
  66. public:
  67. AZ_COMPONENT(ExecutionSlotLayoutComponent, "{9742DEFD-6EC9-4F06-850B-8F5FE2647E34}", SlotLayoutComponent);
  68. static void Reflect(AZ::ReflectContext* context);
  69. ExecutionSlotLayoutComponent();
  70. ~ExecutionSlotLayoutComponent() override = default;
  71. void Init() override;
  72. void Activate() override;
  73. void Deactivate() override;
  74. private:
  75. ExecutionSlotLayout* m_layout;
  76. };
  77. }