3
0

DynamicNodePaletteItem.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 <AtomToolsFramework/Graph/DynamicNode/DynamicNodePaletteItem.h>
  9. #include <AzCore/Serialization/SerializeContext.h>
  10. #include <AzCore/std/smart_ptr/make_shared.h>
  11. #include <AzFramework/StringFunc/StringFunc.h>
  12. #include <GraphCanvas/Utils/GraphUtils.h>
  13. #include <GraphModel/GraphModelBus.h>
  14. #include <GraphModel/Model/Common.h>
  15. namespace AtomToolsFramework
  16. {
  17. void CreateDynamicNodeMimeEvent::Reflect(AZ::ReflectContext* context)
  18. {
  19. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  20. {
  21. serializeContext->Class<CreateDynamicNodeMimeEvent, GraphCanvas::GraphCanvasMimeEvent>()
  22. ->Version(0)
  23. ->Field("toolId", &CreateDynamicNodeMimeEvent::m_toolId)
  24. ->Field("configId", &CreateDynamicNodeMimeEvent::m_configId);
  25. }
  26. }
  27. CreateDynamicNodeMimeEvent::CreateDynamicNodeMimeEvent(const AZ::Crc32& toolId, const AZ::Uuid& configId)
  28. : m_toolId(toolId)
  29. , m_configId(configId)
  30. {
  31. }
  32. bool CreateDynamicNodeMimeEvent::ExecuteEvent(
  33. [[maybe_unused]] const AZ::Vector2& mouseDropPosition, AZ::Vector2& dropPosition, const AZ::EntityId& graphCanvasSceneId)
  34. {
  35. GraphModel::GraphPtr graph;
  36. GraphModelIntegration::GraphManagerRequestBus::BroadcastResult(
  37. graph, &GraphModelIntegration::GraphManagerRequests::GetGraph, graphCanvasSceneId);
  38. if (graph)
  39. {
  40. if (auto node = AZStd::make_shared<DynamicNode>(graph, m_toolId, m_configId))
  41. {
  42. // Handle undo/redo adding a single node. This will need to be done at a higher level for multiple nodes.
  43. GraphCanvas::ScopedGraphUndoBatch undoBatch(graphCanvasSceneId);
  44. GraphModelIntegration::GraphControllerRequestBus::EventResult(
  45. m_createdNodeId, graphCanvasSceneId, &GraphModelIntegration::GraphControllerRequests::AddNode, node, dropPosition);
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. DynamicNodePaletteItem::DynamicNodePaletteItem(const AZ::Crc32& toolId, const DynamicNodeConfig& config)
  52. : DraggableNodePaletteTreeItem(config.m_title.c_str(), toolId)
  53. , m_toolId(toolId)
  54. , m_configId(config.m_id)
  55. {
  56. SetTitlePalette(!config.m_titlePaletteName.empty() ? config.m_titlePaletteName : "DefaultNodeTitlePalette");
  57. SetToolTip(config.m_description.c_str());
  58. }
  59. GraphCanvas::GraphCanvasMimeEvent* DynamicNodePaletteItem::CreateMimeEvent() const
  60. {
  61. return aznew CreateDynamicNodeMimeEvent(m_toolId, m_configId);
  62. }
  63. } // namespace AtomToolsFramework