3
0

CanvasWidget.cpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  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 "CanvasWidget.h"
  9. AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option")
  10. #include <QVBoxLayout>
  11. #include <QLabel>
  12. #include <QGraphicsView>
  13. #include <QPushButton>
  14. #include "Editor/View/Widgets/ui_CanvasWidget.h"
  15. AZ_POP_DISABLE_WARNING
  16. #include <AzCore/Casting/numeric_cast.h>
  17. #include <GraphCanvas/Widgets/GraphCanvasGraphicsView/GraphCanvasGraphicsView.h>
  18. #include <GraphCanvas/Widgets/MiniMapGraphicsView/MiniMapGraphicsView.h>
  19. #include <GraphCanvas/GraphCanvasBus.h>
  20. #include <Debugger/Bus.h>
  21. #include <Core/Graph.h>
  22. #include <Editor/View/Dialogs/SettingsDialog.h>
  23. #include <Editor/GraphCanvas/GraphCanvasEditorNotificationBusId.h>
  24. #include <Editor/Include/ScriptCanvas/Bus/EditorScriptCanvasBus.h>
  25. namespace ScriptCanvasEditor
  26. {
  27. namespace Widget
  28. {
  29. CanvasWidget::CanvasWidget(const SourceHandle& assetId, QWidget* parent)
  30. : QWidget(parent)
  31. , ui(new Ui::CanvasWidget())
  32. , m_attached(false)
  33. , m_assetId(assetId)
  34. , m_graphicsView(nullptr)
  35. , m_miniMapView(nullptr)
  36. {
  37. ui->setupUi(this);
  38. ui->m_debuggingControls->hide();
  39. SetupGraphicsView();
  40. connect(ui->m_debugAttach, &QPushButton::clicked, this, &CanvasWidget::OnClicked);
  41. }
  42. CanvasWidget::~CanvasWidget()
  43. {
  44. hide();
  45. }
  46. void CanvasWidget::SetDefaultBorderColor(AZ::Color defaultBorderColor)
  47. {
  48. m_defaultBorderColor = defaultBorderColor;
  49. QString styleSheet = QString("QFrame#graphicsViewFrame { background-color: rgb(%1,%2,%3) }").arg(defaultBorderColor.GetR8()).arg(defaultBorderColor.GetG8()).arg(defaultBorderColor.GetB8());
  50. ui->graphicsViewFrame->setStyleSheet(styleSheet);
  51. }
  52. void CanvasWidget::ShowScene(const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
  53. {
  54. EditorGraphRequests* editorGraphRequests = EditorGraphRequestBus::FindFirstHandler(scriptCanvasId);
  55. editorGraphRequests->CreateGraphCanvasScene();
  56. AZ::EntityId graphCanvasSceneId = editorGraphRequests->GetGraphCanvasGraphId();
  57. m_graphicsView->SetScene(graphCanvasSceneId);
  58. m_scriptCanvasId = scriptCanvasId;
  59. }
  60. void CanvasWidget::SetAssetId(const SourceHandle& assetId)
  61. {
  62. m_assetId = assetId;
  63. }
  64. const GraphCanvas::ViewId& CanvasWidget::GetViewId() const
  65. {
  66. return m_graphicsView->GetViewId();
  67. }
  68. void CanvasWidget::EnableView()
  69. {
  70. if (!isEnabled())
  71. {
  72. setDisabled(false);
  73. if (m_disabledOverlay.IsValid() && m_graphicsView)
  74. {
  75. GraphCanvas::SceneRequestBus::Event(m_graphicsView->GetScene(), &GraphCanvas::SceneRequests::CancelGraphicsEffect, m_disabledOverlay);
  76. m_disabledOverlay = GraphCanvas::GraphicsEffectId();
  77. }
  78. }
  79. }
  80. void CanvasWidget::DisableView()
  81. {
  82. if (isEnabled())
  83. {
  84. setDisabled(true);
  85. if (m_graphicsView)
  86. {
  87. AZ::EntityId graphCanvasSceneId = m_graphicsView->GetScene();
  88. GraphCanvas::OccluderConfiguration occluderConfiguration;
  89. occluderConfiguration.m_bounds = m_graphicsView->sceneRect();
  90. occluderConfiguration.m_opacity = 0.5f;
  91. occluderConfiguration.m_renderColor = QColor(0, 0, 0);
  92. occluderConfiguration.m_zValue = 100000;
  93. GraphCanvas::SceneRequestBus::EventResult(m_disabledOverlay, graphCanvasSceneId, &GraphCanvas::SceneRequests::CreateOccluder, occluderConfiguration);
  94. }
  95. }
  96. }
  97. void CanvasWidget::SetupGraphicsView()
  98. {
  99. const bool registerMenuActions = false;
  100. m_graphicsView = aznew GraphCanvas::GraphCanvasGraphicsView(nullptr, registerMenuActions);
  101. AZ_Assert(m_graphicsView, "Could Canvas Widget unable to create CanvasGraphicsView object.");
  102. if (m_graphicsView)
  103. {
  104. ui->graphicsViewFrame->layout()->addWidget(m_graphicsView);
  105. m_graphicsView->show();
  106. m_graphicsView->SetEditorId(ScriptCanvasEditor::AssetEditorId);
  107. // Temporary shortcut for docking the MiniMap. Removed until we fix up the MiniMap
  108. /*
  109. {
  110. QAction* action = new QAction(m_graphicsView);
  111. action->setShortcut(QKeySequence(Qt::Key_M));
  112. action->setShortcutContext(Qt::WidgetWithChildrenShortcut);
  113. connect(action, &QAction::triggered,
  114. [this]()
  115. {
  116. if (!m_graphicsView->rubberBandRect().isNull() || QApplication::mouseButtons() || m_graphicsView->GetIsEditing())
  117. {
  118. // Nothing to do.
  119. return;
  120. }
  121. if (m_miniMapView)
  122. {
  123. // Cycle the position.
  124. m_miniMapPosition = static_cast<MiniMapPosition>((m_miniMapPosition + 1) % MM_Position_Count);
  125. }
  126. else
  127. {
  128. m_miniMapView = aznew GraphCanvas::MiniMapGraphicsView(0 , false, m_graphicsView->GetScene(), m_graphicsView);
  129. }
  130. // Apply position.
  131. PositionMiniMap();
  132. });
  133. m_graphicsView->addAction(action);
  134. }*/
  135. }
  136. }
  137. void CanvasWidget::showEvent(QShowEvent* /*event*/)
  138. {
  139. ui->m_debugAttach->setText(m_attached ? "Debugging: On" : "Debugging: Off");
  140. EditorGraphRequestBus::Event(m_scriptCanvasId, &EditorGraphRequests::OnGraphCanvasSceneVisible);
  141. }
  142. void CanvasWidget::PositionMiniMap()
  143. {
  144. if (!(m_miniMapView && m_graphicsView))
  145. {
  146. // Nothing to do.
  147. return;
  148. }
  149. const QRect& parentRect = m_graphicsView->frameGeometry();
  150. if (m_miniMapPosition == MM_Upper_Left)
  151. {
  152. m_miniMapView->move(0, 0);
  153. }
  154. else if (m_miniMapPosition == MM_Upper_Right)
  155. {
  156. m_miniMapView->move(parentRect.width() - m_miniMapView->size().width(), 0);
  157. }
  158. else if (m_miniMapPosition == MM_Lower_Right)
  159. {
  160. m_miniMapView->move(parentRect.width() - m_miniMapView->size().width(), parentRect.height() - m_miniMapView->size().height());
  161. }
  162. else if (m_miniMapPosition == MM_Lower_Left)
  163. {
  164. m_miniMapView->move(0, parentRect.height() - m_miniMapView->size().height());
  165. }
  166. m_miniMapView->setVisible(m_miniMapPosition != MM_Not_Visible);
  167. }
  168. void CanvasWidget::resizeEvent(QResizeEvent *ev)
  169. {
  170. QWidget::resizeEvent(ev);
  171. PositionMiniMap();
  172. }
  173. void CanvasWidget::OnClicked()
  174. {
  175. }
  176. #include <Editor/View/Widgets/moc_CanvasWidget.cpp>
  177. }
  178. }