3
0

VariableDockWidget.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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/PlatformDef.h>
  11. AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option")
  12. #include <QAbstractListModel>
  13. #include <QAbstractItemView>
  14. #include <QListView>
  15. #include <QVBoxLayout>
  16. #include <QHeaderView>
  17. #include <QTimer>
  18. #include <QSortFilterProxyModel>
  19. #include <QStandardItemModel>
  20. #include <QFocusEvent>
  21. #include <QMenu>
  22. AZ_POP_DISABLE_WARNING
  23. #include <AzCore/Component/EntityId.h>
  24. #include <AzCore/Component/ComponentApplicationBus.h>
  25. #include <AzCore/Component/Entity.h>
  26. #include <AzCore/std/containers/vector.h>
  27. #include <AzCore/Casting/numeric_cast.h>
  28. #include <AzToolsFramework/API/ToolsApplicationAPI.h>
  29. #include <AzQtComponents/Components/StyledDockWidget.h>
  30. #include <GraphCanvas/Editor/AssetEditorBus.h>
  31. #include <GraphCanvas/Components/GraphCanvasPropertyBus.h>
  32. #include <GraphCanvas/Components/SceneBus.h>
  33. #include <GraphCanvas/Components/Nodes/NodeBus.h>
  34. #include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
  35. #include <GraphCanvas/Widgets/GraphCanvasTreeItem.h>
  36. #include <GraphCanvas/Widgets/GraphCanvasTreeModel.h>
  37. #include <ScriptCanvas/Bus/RequestBus.h>
  38. #include <ScriptCanvas/Variable/VariableBus.h>
  39. #include <ScriptCanvas/Variable/GraphVariable.h>
  40. #include <Editor/View/Widgets/VariablePanel/VariablePaletteTableView.h>
  41. #include <Editor/View/Widgets/VariablePanel/GraphVariablesTableView.h>
  42. #endif
  43. class QAction;
  44. class QLineEdit;
  45. class QPushButton;
  46. namespace Ui
  47. {
  48. class VariableDockWidget;
  49. }
  50. namespace ScriptCanvasEditor
  51. {
  52. class VariablePropertiesComponent
  53. : public GraphCanvas::GraphCanvasPropertyComponent
  54. , protected ScriptCanvas::VariableNotificationBus::Handler
  55. {
  56. public:
  57. AZ_COMPONENT(VariablePropertiesComponent, "{885F276B-9633-42F7-85BD-10869E606873}", GraphCanvasPropertyComponent);
  58. static void Reflect(AZ::ReflectContext*);
  59. static AZ::Entity* CreateVariablePropertiesEntity();
  60. VariablePropertiesComponent();
  61. ~VariablePropertiesComponent() = default;
  62. const char* GetTitle();
  63. void SetVariable(ScriptCanvas::GraphVariable* variable);
  64. private:
  65. void OnNameChanged();
  66. // VariableNotificationBus::Handler
  67. void OnVariableRemoved() override;
  68. void OnVariableRenamed(AZStd::string_view variableName) override;
  69. void OnVariableScopeChanged() override;
  70. void OnVariableValueChanged() override;
  71. ////
  72. AZStd::string m_variableName;
  73. ScriptCanvas::GraphVariable* m_variable;
  74. ScriptCanvas::ScriptCanvasId m_scriptCanvasGraphId;
  75. AZStd::string m_componentTitle;
  76. };
  77. class VariableDockWidget;
  78. class VariablePanelContextMenu
  79. : public QMenu
  80. {
  81. public:
  82. VariablePanelContextMenu(VariableDockWidget* contextMenu, const ScriptCanvas::ScriptCanvasId& scriptCanvasExecutionId
  83. , ScriptCanvas::VariableId varId, QPoint position);
  84. };
  85. class VariableDockWidget
  86. : public AzQtComponents::StyledDockWidget
  87. , public GraphCanvas::AssetEditorNotificationBus::Handler
  88. , public AzToolsFramework::EditorEvents::Bus::Handler
  89. , public VariableAutomationRequestBus::Handler
  90. {
  91. Q_OBJECT
  92. public:
  93. AZ_CLASS_ALLOCATOR(VariableDockWidget, AZ::SystemAllocator);
  94. static AZStd::string ConstructDefaultVariableName(AZ::u32 variableCounter);
  95. static AZStd::string FindDefaultVariableName(const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId);
  96. VariableDockWidget(QWidget* parent = nullptr);
  97. ~VariableDockWidget();
  98. void PopulateVariablePalette(const AZStd::unordered_set< AZ::Uuid >& objectTypes);
  99. // GraphCanvas::AssetEditorNotificationBus::Handler
  100. void OnActiveGraphChanged(const GraphCanvas::GraphId& graphCanvasGraphId) override;
  101. ////
  102. // VariableAutomationRequestBus
  103. AZStd::vector< ScriptCanvas::Data::Type > GetPrimitiveTypes() const override;
  104. AZStd::vector< ScriptCanvas::Data::Type > GetBehaviorContextObjectTypes() const override;
  105. AZStd::vector< ScriptCanvas::Data::Type > GetMapTypes() const override;
  106. AZStd::vector< ScriptCanvas::Data::Type > GetArrayTypes() const override;
  107. bool IsShowingVariablePalette() const override;
  108. bool IsShowingGraphVariables() const override;
  109. QPushButton* GetCreateVariableButton() const override;
  110. QTableView* GetGraphPaletteTableView() const override;
  111. QTableView* GetVariablePaletteTableView() const override;
  112. QLineEdit* GetVariablePaletteFilter() const override;
  113. QLineEdit* GetGraphVariablesFilter() const override;
  114. ////
  115. // AzToolsFramework::EditorEvents::Bus
  116. void OnEscape() override;
  117. ////
  118. // QWidget
  119. void focusOutEvent(QFocusEvent* focusEvent) override;
  120. ////
  121. const ScriptCanvas::ScriptCanvasId& GetActiveScriptCanvasId() const;
  122. bool IsValidVariableType(const ScriptCanvas::Data::Type& dataType) const;
  123. public slots:
  124. void OnCreateVariable(ScriptCanvas::Data::Type varType);
  125. void OnCreateNamedVariable(const AZStd::string& variableName, ScriptCanvas::Data::Type varType);
  126. void OnSelectionChanged(const AZStd::unordered_set< ScriptCanvas::VariableId>& variableIds);
  127. void OnDuplicateVariable(const ScriptCanvas::VariableId& variableId);
  128. void OnDeleteVariables(const AZStd::unordered_set< ScriptCanvas::VariableId>& variableIds);
  129. void OnHighlightVariables(const AZStd::unordered_set< ScriptCanvas::VariableId>& variableIds);
  130. void OnRemoveUnusedVariables();
  131. void OnConfigureVariable(const ScriptCanvas::VariableId& variableId, QPoint position);
  132. Q_SIGNALS:
  133. void OnVariableSelectionChanged(const AZStd::vector<AZ::EntityId>& variableIds);
  134. private:
  135. void ShowVariablePalette();
  136. void ShowGraphVariables();
  137. void FocusOnSearchFilter();
  138. void ClearFilter();
  139. void UpdateFilter();
  140. void OnReturnPressed();
  141. void OnQuickFilterChanged(const QString &text);
  142. void RefreshModel();
  143. void OnAddVariableButton();
  144. void OnContextMenuRequested(const QPoint &pos);
  145. bool CanDeleteVariable(const ScriptCanvas::VariableId& variableId);
  146. VariablePropertiesComponent* AllocateComponent(const ScriptCanvas::VariableId& variableId);
  147. void ReleaseComponent(const ScriptCanvas::VariableId& variableId);
  148. void ResetPool();
  149. AZStd::unordered_map< ScriptCanvas::VariableId, VariablePropertiesComponent* > m_usedElements;
  150. AZStd::vector< VariablePropertiesComponent* > m_unusedPool;
  151. AZStd::vector< AZStd::unique_ptr<AZ::Entity> > m_propertyHelpers;
  152. ScriptCanvas::ScriptCanvasId m_scriptCanvasId;
  153. AZ::EntityId m_graphCanvasGraphId;
  154. AZStd::unique_ptr<Ui::VariableDockWidget> ui;
  155. QTimer m_filterTimer;
  156. };
  157. }