NodePaletteFullCreation.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. #include <QMenu>
  9. #include <GraphCanvas/Components/SceneBus.h>
  10. #include <GraphCanvas/Components/GridBus.h>
  11. #include <GraphCanvas/Components/VisualBus.h>
  12. #include <GraphCanvas/Editor/EditorTypes.h>
  13. #include <GraphCanvas/Widgets/GraphCanvasGraphicsView/GraphCanvasGraphicsView.h>
  14. #include <GraphCanvas/Widgets/NodePalette/TreeItems/NodePaletteTreeItem.h>
  15. #include <Editor/View/Widgets/NodePalette/CreateNodeMimeEvent.h>
  16. #include <ScriptCanvas/Bus/RequestBus.h>
  17. #include <Editor/Include/ScriptCanvas/Bus/NodeIdPair.h>
  18. #include <ScriptCanvasDeveloperEditor/AutomationActions/NodePaletteFullCreation.h>
  19. #include <ScriptCanvasDeveloperEditor/DeveloperUtils.h>
  20. namespace ScriptCanvasDeveloperEditor
  21. {
  22. namespace NodePaletteFullCreation
  23. {
  24. class FullCreationNodePaletteInterface
  25. : public ProcessNodePaletteInterface
  26. {
  27. public:
  28. void SetupInterface(const AZ::EntityId& activeGraphCanvasGraphId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
  29. {
  30. m_graphCanvasGraphId = activeGraphCanvasGraphId;
  31. m_scriptCanvasId = scriptCanvasId;
  32. GraphCanvas::SceneRequestBus::EventResult(m_viewId, activeGraphCanvasGraphId, &GraphCanvas::SceneRequests::GetViewId);
  33. GraphCanvas::SceneRequestBus::EventResult(m_gridId, activeGraphCanvasGraphId, &GraphCanvas::SceneRequests::GetGrid);
  34. GraphCanvas::GridRequestBus::EventResult(m_minorPitch, m_gridId, &GraphCanvas::GridRequests::GetMinorPitch);
  35. GraphCanvas::ViewRequestBus::EventResult(m_nodeCreationPos, m_viewId, &GraphCanvas::ViewRequests::GetViewSceneCenter);
  36. GraphCanvas::GraphCanvasGraphicsView* graphicsView = nullptr;
  37. GraphCanvas::ViewRequestBus::EventResult(graphicsView, m_viewId, &GraphCanvas::ViewRequests::AsGraphicsView);
  38. m_viewportRectangle = graphicsView->mapToScene(graphicsView->viewport()->geometry()).boundingRect();
  39. }
  40. bool ShouldProcessItem([[maybe_unused]] const GraphCanvas::NodePaletteTreeItem* nodePaletteTreeItem) const
  41. {
  42. return true;
  43. }
  44. void ProcessItem(const GraphCanvas::NodePaletteTreeItem* nodePaletteTreeItem)
  45. {
  46. GraphCanvas::GraphCanvasMimeEvent* mimeEvent = nodePaletteTreeItem->CreateMimeEvent();
  47. if (ScriptCanvasEditor::MultiCreateNodeMimeEvent* multiCreateMimeEvent = azrtti_cast<ScriptCanvasEditor::MultiCreateNodeMimeEvent*>(mimeEvent))
  48. {
  49. AZStd::vector< GraphCanvas::GraphCanvasMimeEvent* > mimeEvents = multiCreateMimeEvent->CreateMimeEvents();
  50. for (GraphCanvas::GraphCanvasMimeEvent* currentEvent : mimeEvents)
  51. {
  52. DeveloperUtils::HandleMimeEvent(currentEvent, m_graphCanvasGraphId, m_viewportRectangle, m_widthOffset, m_heightOffset, m_maxRowHeight, m_minorPitch);
  53. delete currentEvent;
  54. }
  55. }
  56. else if (mimeEvent)
  57. {
  58. DeveloperUtils::HandleMimeEvent(mimeEvent, m_graphCanvasGraphId, m_viewportRectangle, m_widthOffset, m_heightOffset, m_maxRowHeight, m_minorPitch);
  59. }
  60. }
  61. private:
  62. AZ::EntityId m_graphCanvasGraphId;
  63. ScriptCanvas::ScriptCanvasId m_scriptCanvasId;
  64. AZ::Vector2 m_nodeCreationPos = AZ::Vector2::CreateZero();
  65. AZ::EntityId m_viewId;
  66. AZ::EntityId m_gridId;
  67. AZ::Vector2 m_minorPitch = AZ::Vector2::CreateZero();
  68. QRectF m_viewportRectangle;
  69. int m_widthOffset = 0;
  70. int m_heightOffset = 0;
  71. int m_maxRowHeight = 0;
  72. };
  73. void NodePaletteFullCreationAction()
  74. {
  75. ScriptCanvasEditor::AutomationRequestBus::Broadcast(&ScriptCanvasEditor::AutomationRequests::SignalAutomationBegin);
  76. FullCreationNodePaletteInterface nodePaletteInterface;
  77. DeveloperUtils::ProcessNodePalette(nodePaletteInterface);
  78. ScriptCanvasEditor::AutomationRequestBus::Broadcast(&ScriptCanvasEditor::AutomationRequests::SignalAutomationEnd);
  79. }
  80. QAction* CreateNodePaletteFullCreationAction(QMenu* mainMenu)
  81. {
  82. QAction* createNodePaletteAction = nullptr;
  83. if (mainMenu)
  84. {
  85. createNodePaletteAction = mainMenu->addAction(QAction::tr("Create Node Palette"));
  86. createNodePaletteAction->setAutoRepeat(false);
  87. createNodePaletteAction->setToolTip("Tries to create every node in the node palette. All of them. At once.");
  88. createNodePaletteAction->setShortcut(QKeySequence(QAction::tr("Ctrl+Shift+h", "Debug|Create Node Palette")));
  89. QObject::connect(createNodePaletteAction, &QAction::triggered, &NodePaletteFullCreationAction);
  90. }
  91. return createNodePaletteAction;
  92. }
  93. }
  94. }