123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #pragma once
- #include <QGraphicsScene>
- #include <QRect>
- #include <QTimer>
- #include <AzCore/Component/Component.h>
- #include <AzCore/Component/EntityBus.h>
- #include <AzCore/Math/Vector2.h>
- #include <AzToolsFramework/API/ToolsApplicationAPI.h>
- #include <GraphCanvas/Components/Bookmarks/BookmarkBus.h>
- #include <GraphCanvas/Components/EntitySaveDataBus.h>
- #include <GraphCanvas/Components/GeometryBus.h>
- #include <GraphCanvas/Components/GraphCanvasPropertyBus.h>
- #include <GraphCanvas/Components/MimeDataHandlerBus.h>
- #include <GraphCanvas/Components/SceneBus.h>
- #include <GraphCanvas/Components/StyleBus.h>
- #include <GraphCanvas/Components/ViewBus.h>
- #include <GraphCanvas/Components/VisualBus.h>
- #include <GraphCanvas/Editor/AssetEditorBus.h>
- #include <GraphCanvas/GraphicsItems/GlowOutlineGraphicsItem.h>
- #include <GraphCanvas/Types/EntitySaveData.h>
- #include <GraphCanvas/Utils/StateControllers/StateController.h>
- #include <GraphCanvas/Utils/GraphUtils.h>
- #include <GraphCanvas/Utils/NodeNudgingController.h>
- class QAction;
- class QMimeData;
- namespace AZ
- {
- AZ_TYPE_INFO_SPECIALIZE(QGraphicsScene, "{C27E4829-BA47-4BAA-B9FD-C549ACF316B7}");
- }
- class QGraphicsItem;
- namespace GraphCanvas
- {
- class GraphCanvasGraphicsScene;
- class SceneHelper
- {
- public:
- AZ_CLASS_ALLOCATOR(SceneHelper, AZ::SystemAllocator, 0);
- SceneHelper() = default;
- virtual ~SceneHelper() = default;
- void SetSceneId(const AZ::EntityId& sceneId);
- const AZ::EntityId& GetSceneId() const;
- void SetEditorId(const EditorId& editorId);
- const EditorId& GetEditorId() const;
- protected:
- virtual void OnEditorIdSet();
- private:
- AZ::EntityId m_sceneId;
- EditorId m_editorId;
- };
- //! Separate class just to avoid over-cluttering the scene.
- //
- // Handles the creation process for nodes
- class MimeDelegateSceneHelper
- : public SceneHelper
- , public SceneMimeDelegateHandlerRequestBus::Handler
- {
- public:
- AZ_CLASS_ALLOCATOR(MimeDelegateSceneHelper, AZ::SystemAllocator, 0);
- MimeDelegateSceneHelper() = default;
- ~MimeDelegateSceneHelper() = default;
- void Activate();
- void Deactivate();
- void SetMimeType(const char* mimeType);
- const QString& GetMimeType() const;
- bool HasMimeType() const;
- // SceneMimeDelegateHandlerRequestBus
- bool IsInterestedInMimeData(const AZ::EntityId& sceneId, const QMimeData* dragEnterEvent) override;
- void HandleMove(const AZ::EntityId& sceneId, const QPointF& dropPoint, const QMimeData* mimeData) override;
- void HandleDrop(const AZ::EntityId& sceneId, const QPointF& dropPoint, const QMimeData* mimeData) override;
- void HandleLeave(const AZ::EntityId& sceneId, const QMimeData* mimeData) override;
- ////
- void SignalNodeCreated(const NodeId& nodeId);
- private:
-
- void OnTrySplice();
- void CancelSplice();
- void PushUndoBlock();
- void PopUndoBlock();
- void AssignLastCreationToGroup();
- QString m_mimeType;
- NodeNudgingController m_nudgingController;
- QTimer m_spliceTimer;
- AZ::EntityId m_targetConnection;
- bool m_enableConnectionSplicing;
- QByteArray m_splicingData;
- AZ::EntityId m_splicingNode;
- QPainterPath m_splicingPath;
- AZ::Vector2 m_positionOffset;
- QPointF m_targetPosition;
- Endpoint m_spliceSource;
- Endpoint m_spliceTarget;
- AZStd::vector< ConnectionEndpoints > m_opportunisticSpliceRemovals;
- bool m_pushedUndoBlock;
-
- StateSetter<RootGraphicsItemDisplayState> m_displayStateStateSetter;
- AZ::EntityId m_groupTarget;
- StateSetter<RootGraphicsItemDisplayState> m_groupTargetStateSetter;
- AZStd::unordered_set< NodeId > m_lastCreationGroup;
- };
- // Handles identifying Gestures for the Scene.
- // Helper class just to avoid overcomplicating the actual scene class
- class GestureSceneHelper
- : public SceneHelper
- , public GeometryNotificationBus::Handler
- , public SceneNotificationBus::Handler
- , public AZ::SystemTickBus::Handler
- {
- public:
- AZ_CLASS_ALLOCATOR(GestureSceneHelper, AZ::SystemAllocator, 0);
- GestureSceneHelper() = default;
- ~GestureSceneHelper() = default;
- void Activate();
- void Deactivate();
- void TrackElement(const AZ::EntityId& elementId);
- void ResetTracker();
- void StopTrack();
- // GeometryNotificationBus
- void OnPositionChanged(const AZ::EntityId& itemId, const AZ::Vector2& position) override;
- ////
- void OnSettingsChanged();
- // SystemTickBus
- void OnSystemTick() override;
- ////
- protected:
- void OnEditorIdSet() override;
- private:
- void HandleDesplice();
- QTimer m_timer;
- bool m_handleShakeAction = false;
- bool m_trackShake = false;
- AZ::EntityId m_trackingTarget;
- float m_movementTolerance = 0.0f;
- float m_minimumDistance = 0.0f;
- float m_straightnessPercent = 0.0f;
-
- int m_shakeThreshold = 0;
- int m_shakeCounter = 0;
- QPointF m_currentAnchor;
- QPointF m_lastPoint;
- AZ::Vector2 m_lastDirection;
- bool m_hasDirection = false;
- };
- struct SceneMemberBuckets
- {
- AZStd::unordered_set< AZ::EntityId > m_nodes;
- AZStd::unordered_set< AZ::EntityId > m_connections;
- AZStd::unordered_set< AZ::EntityId > m_bookmarkAnchors;
- };
- class SceneComponent
- : public GraphCanvasPropertyComponent
- , public AZ::EntityBus::Handler
- , public SceneRequestBus::Handler
- , public GeometryNotificationBus::MultiHandler
- , public VisualNotificationBus::MultiHandler
- , public ViewNotificationBus::Handler
- , public SceneMimeDelegateRequestBus::Handler
- , public EntitySaveDataRequestBus::Handler
- , public SceneBookmarkActionBus::Handler
- , public StyleManagerNotificationBus::Handler
- , public AZ::SystemTickBus::Handler
- , public AssetEditorSettingsNotificationBus::Handler
- {
- private:
- friend class GraphCanvasGraphicsScene;
- friend class SceneComponentSaveData;
- public:
- AZ_COMPONENT(SceneComponent, "{3F71486C-3D51-431F-B904-DA070C7A0238}", GraphCanvasPropertyComponent);
- static void Reflect(AZ::ReflectContext* context);
- struct GraphCanvasConstructSaveData
- {
- AZ_CLASS_ALLOCATOR(GraphCanvasConstructSaveData, AZ::SystemAllocator, 0);
- AZ_RTTI(GraphCanvasConstructSaveData, "{C074944F-8218-4753-94EE-1C5CC02DE8E4}");
- static bool VersionConverter(AZ::SerializeContext& serializeContext, AZ::SerializeContext::DataElementNode& classElement);
- // Put the invalid thing at the end of the list, instead of the start.
- // Cannot actually add new elements to this list.
- //
- // Going to make a new enum rather then try to salvage this.
- enum class GraphCanvasConstructType
- {
- CommentNode,
- BlockCommentNode,
- BookmarkAnchor,
- Unknown,
- };
- virtual ~GraphCanvasConstructSaveData() = default;
- ConstructType m_constructType = ConstructType::Unknown;
- EntitySaveDataContainer m_saveDataContainer;
- AZ::EntityId m_persistentId;
- };
- class SceneComponentSaveData
- : public ComponentSaveData
- {
- public:
- AZ_RTTI(SceneComponentSaveData, "{5F84B500-8C45-40D1-8EFC-A5306B241444}", ComponentSaveData);
- AZ_CLASS_ALLOCATOR(SceneComponentSaveData, AZ::SystemAllocator, 0);
- SceneComponentSaveData()
- : m_bookmarkCounter(0)
- {
- }
- ~SceneComponentSaveData()
- {
- ClearConstructData();
- }
- void ClearConstructData()
- {
- for (GraphCanvasConstructSaveData* saveData : m_constructs)
- {
- delete saveData;
- }
- m_constructs.clear();
- }
- AZStd::vector< GraphCanvasConstructSaveData* > m_constructs;
- ViewParams m_viewParams;
- AZ::u32 m_bookmarkCounter;
- };
- SceneComponent();
- ~SceneComponent() override;
- // AZ::Component
- static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
- {
- provided.push_back(AZ_CRC("GraphCanvas_SceneService", 0x8ec010e7));
- provided.push_back(AZ_CRC("GraphCanvas_MimeDataHandlerService", 0x7a6beb5a));
- }
- static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incombatible)
- {
- incombatible.push_back(AZ_CRC("GraphCanvas_SceneService", 0x8ec010e7));
- incombatible.push_back(AZ_CRC("GraphCanvas_MimeDataHandlerService", 0x7a6beb5a));
- }
- static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& /*dependent*/)
- {
- }
- static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& /*required*/)
- {
- }
- void Init() override;
- void Activate() override;
- void Deactivate() override;
- ////
- // SystemTickBus
- void OnSystemTick() override;
- ////
- // EntityBus
- void OnEntityExists(const AZ::EntityId& entityId) override;
- ////
- // EntitySaveDataRequest
- void WriteSaveData(EntitySaveDataContainer& saveDataContainer) const override;
- void ReadSaveData(const EntitySaveDataContainer& saveDataContainer) override;
- ////
- SceneRequests* GetSceneRequests() { return this; }
- const SceneRequests* GetSceneRequestsConst() const { return this; }
- GraphData* GetGraphData() override { return &m_graphData; };
- const GraphData* GetGraphDataConst() const override { return &m_graphData; };
- // SceneRequestBus
- AZStd::any* GetUserData() override;
- const AZStd::any* GetUserDataConst() const override;
- AZ::Entity* GetSceneEntity() const override { return GetEntity(); }
- void SetEditorId(const EditorId& editorId) override;
- EditorId GetEditorId() const override;
- AZ::EntityId GetGrid() const override;
- GraphicsEffectId CreatePulse(const AnimatedPulseConfiguration& pulseConfiguration) override;
- GraphicsEffectId CreatePulseAroundArea(const QRectF& area, int gridSteps, AnimatedPulseConfiguration& pulseConfiguration) override;
- GraphicsEffectId CreatePulseAroundSceneMember(const AZ::EntityId& memberId, int gridSteps, AnimatedPulseConfiguration configuration) override;
- GraphicsEffectId CreateCircularPulse(const AZ::Vector2& centerPoint, float initialRadius, float finalRadius, AnimatedPulseConfiguration configuration) override;
- GraphicsEffectId CreateOccluder(const OccluderConfiguration& occluderConfiguration) override;
- GraphicsEffectId CreateGlow(const FixedGlowOutlineConfiguration& configuration) override;
- GraphicsEffectId CreateGlowOnSceneMember(const SceneMemberGlowOutlineConfiguration& configuration) override;
- GraphicsEffectId CreateParticle(const ParticleConfiguration& configuration) override;
- AZStd::vector< GraphicsEffectId > ExplodeSceneMember(const AZ::EntityId& memberId, float fillPercent) override;
- void CancelGraphicsEffect(const GraphicsEffectId& effectId) override;
- bool AddNode(const AZ::EntityId& nodeId, const AZ::Vector2& position, bool isPaste) override;
- void AddNodes(const AZStd::vector<AZ::EntityId>& nodeIds) override;
- bool RemoveNode(const AZ::EntityId& nodeId) override;
- AZStd::vector<AZ::EntityId> GetNodes() const override;
- AZStd::vector<AZ::EntityId> GetSelectedNodes() const override;
- void DeleteNodeAndStitchConnections(const AZ::EntityId& node) override;
- AZ::EntityId CreateConnectionBetween(const Endpoint& sourceEndpoint, const Endpoint& targetEndpoint) override;
- bool AddConnection(const AZ::EntityId& connectionId) override;
- void AddConnections(const AZStd::vector<AZ::EntityId>& connectionIds) override;
- bool RemoveConnection(const AZ::EntityId& connectionId) override;
- AZStd::vector<AZ::EntityId> GetConnections() const override;
- AZStd::vector<AZ::EntityId> GetSelectedConnections() const override;
- AZStd::vector<AZ::EntityId> GetConnectionsForEndpoint(const Endpoint& firstEndpoint) const override;
- bool IsEndpointConnected(const Endpoint& endpoint) const override;
- AZStd::vector<Endpoint> GetConnectedEndpoints(const Endpoint& firstEndpoint) const override;
- bool CreateConnection(const Endpoint& sourceEndpoint, const Endpoint& targetEndpoint) override;
- bool DisplayConnection(const Endpoint& sourceEndpoint, const Endpoint& targetEndpoint) override;
- bool Disconnect(const Endpoint&, const Endpoint&) override;
- bool DisconnectById(const AZ::EntityId& connectionId) override;
- bool FindConnection(AZ::Entity*& connectionEntity, const Endpoint& firstEndpoint, const Endpoint& otherEndpoint) const override;
- bool AddBookmarkAnchor(const AZ::EntityId& bookmarkAnchorId, const AZ::Vector2& position) override;
- bool RemoveBookmarkAnchor(const AZ::EntityId& bookmarkAnchorId) override;
- bool Add(const AZ::EntityId& entity, bool isPaste = false) override;
- bool Remove(const AZ::EntityId& entity) override;
- bool Show(const AZ::EntityId& graphMemeber) override;
- bool Hide(const AZ::EntityId& graphMemeber) override;
- bool IsHidden(const AZ::EntityId& graphMember) const override;
- bool Enable(const NodeId& nodeId) override;
- void EnableVisualState(const NodeId& nodeId) override;
- void EnableSelection() override;
- bool Disable(const NodeId& nodeId) override;
- void DisableVisualState(const NodeId& nodeId) override;
- void DisableSelection() override;
- void ProcessEnableDisableQueue() override;
- void ClearSelection() override;
- void SetSelectedArea(const AZ::Vector2& topLeft, const AZ::Vector2& topRight) override;
- void SelectAll() override;
- void SelectAllRelative(ConnectionType connectionType) override;
- void SelectConnectedNodes() override;
- bool HasSelectedItems() const override;
- bool HasMultipleSelection() const override;
- bool HasCopiableSelection() const override;
- bool HasEntitiesAt(const AZ::Vector2& scenePoint) const override;
- AZStd::vector<AZ::EntityId> GetSelectedItems() const override;
- QGraphicsScene* AsQGraphicsScene() override;
- void CopySelection() const override;
- void Copy(const AZStd::vector<AZ::EntityId>& itemIds) const override;
- void CutSelection() override;
- void Cut(const AZStd::vector<AZ::EntityId>& itemIds) override;
- void Paste() override;
- void PasteAt(const QPointF& scenePos) override;
- void SerializeEntities(const AZStd::unordered_set<AZ::EntityId>& itemIds, GraphSerialization& serializationTarget) const override;
- void DeserializeEntities(const QPointF& scenePos, const GraphSerialization& serializationTarget) override;
- void DuplicateSelection() override;
- void DuplicateSelectionAt(const QPointF& scenePos) override;
- void Duplicate(const AZStd::vector<AZ::EntityId>& itemIds) override;
- void DuplicateAt(const AZStd::vector<AZ::EntityId>& itemIds, const QPointF& scenePos) override;
- void DeleteSelection() override;
- void Delete(const AZStd::unordered_set<AZ::EntityId>& itemIds) override;
- void DeleteGraphData(const GraphData& graphData) override;
-
- void ClearScene() override;
- void SuppressNextContextMenu() override;
- const AZStd::string& GetCopyMimeType() const override;
- void SetMimeType(const char* mimeType) override;
- AZStd::vector<AZ::EntityId> GetEntitiesAt(const AZ::Vector2& position) const override;
- AZStd::vector<AZ::EntityId> GetEntitiesInRect(const QRectF& rect, Qt::ItemSelectionMode mode) const override;
- AZStd::vector<Endpoint> GetEndpointsInRect(const QRectF& rect) const override;
- void RegisterView(const AZ::EntityId& viewId) override;
- void RemoveView(const AZ::EntityId& viewId) override;
- ViewId GetViewId() const override;
- void DispatchSceneDropEvent(const AZ::Vector2& scenePos, const QMimeData* mimeData) override;
- bool AddGraphData(const GraphData& graphData) override;
- void RemoveGraphData(const GraphData& graphData) override;
- void SetDragSelectionType(DragSelectionType dragSelectionType) override;
- void SignalDragSelectStart() override;
- void SignalDragSelectEnd() override;
- bool IsDragSelecting() const override;
- void SignalConnectionDragBegin() override;
- void SignalConnectionDragEnd() override;
- bool IsDraggingConnection() const override;
- void SignalDesplice() override;
- QRectF GetSelectedSceneBoundingArea() const override;
- QRectF GetSceneBoundingArea() const override;
- void SignalLoadStart() override;
- void SignalLoadEnd() override;
- bool IsLoading() const override;
- bool IsPasting() const override;
- void RemoveUnusedNodes() override;
- void RemoveUnusedElements() override;
- void HandleProposalDaisyChainWithGroup(const NodeId& startNode, SlotType slotType, ConnectionType connectionType, const QPoint& screenPoint, const QPointF& focusPoint, AZ::EntityId targetId) override;
-
- void StartNudging(const AZStd::unordered_set<AZ::EntityId>& fixedNodes) override;
- void FinalizeNudging() override;
- void CancelNudging() override;
- AZ::EntityId FindTopmostGroupAtPoint(QPointF scenePoint) override;
- QPointF SignalGenericAddPositionUseBegin() override;
- void SignalGenericAddPositionUseEnd() override;
- ////
- bool AllowContextMenu() const;
- // VisualNotificationBus
- bool OnMousePress(const AZ::EntityId& sourceId, const QGraphicsSceneMouseEvent* mouseEvent) override;
- bool OnMouseRelease(const AZ::EntityId& sourceId, const QGraphicsSceneMouseEvent* mouseEvent) override;
- ////
- // GeometryNotificationBus
- void OnPositionChanged(const AZ::EntityId& itemId, const AZ::Vector2& position) override;
- ////
- // ViewNotificationBus
- void OnEscape() override;
- void OnViewParamsChanged(const ViewParams& viewParams) override;
- ////
- // MimeDelegateRequestBus
- void AddDelegate(const AZ::EntityId& delegateId) override;
- void RemoveDelegate(const AZ::EntityId& delegateId) override;
- ////
- // SceneBookmarkActionBus
- AZ::u32 GetNewBookmarkCounter() override;
- ////
- // StyleManagerNotificationBus
- void OnStylesLoaded() override;
- ////
- // AssetEditorSettingsNotificationBus
- void OnSettingsChanged() override;
- ////
- protected:
- void ConfigureAndAddGraphicsEffect(GraphicsEffectInterface* graphicsEffect);
- void OnSceneDragEnter(const QMimeData* mimeData);
- void OnSceneDragMoveEvent(const QPointF& scenePoint, const QMimeData* mimeData);
- void OnSceneDropEvent(const QPointF& scenePoint, const QMimeData* mimeData);
- void OnSceneDragExit(const QMimeData* mimeData);
- bool HasActiveMimeDelegates() const;
- private:
- SceneComponent(const SceneComponent&) = delete;
- template<typename Container>
- void InitItems(const Container& entities) const;
- template<typename Container>
- void ActivateItems(const Container& entities);
- template<typename Container>
- void DeactivateItems(const Container& entities);
- template<typename Container>
- void DestroyItems(const Container& entities) const;
- void DestroyGraphicsItem(const GraphicsEffectId& effectId, QGraphicsItem* graphicsItem);
- void InitConnections();
- void NotifyConnectedSlots();
- void OnSelectionChanged();
- void RegisterSelectionItem(const AZ::EntityId& itemId);
- void UnregisterSelectionItem(const AZ::EntityId& itemId);
- void AddSceneMember(const AZ::EntityId& item, bool positionItem = false, const AZ::Vector2& position = AZ::Vector2());
- void RemoveItemFromScene(QGraphicsItem* item);
- //! Seives a set of entity id's into a node, connection and group entityId set based on if they are in the scene
- void SieveSceneMembers(const AZStd::unordered_set<AZ::EntityId>& itemIds, SceneMemberBuckets& buckets) const;
- QPointF GetViewCenterScenePoint() const;
- void OnDragCursorMove(const QPointF& mousePosition);
- void DetermineDragGroupTarget(const QPointF& cursorPoint);
- AZ::EntityId FindGroupTarget(const QPointF& scenePoint, const AZStd::unordered_set<AZ::EntityId>& ignoreElement = {});
- void OnTrySplice();
- void InitiateSpliceToNode(const NodeId& nodeId);
- void InitiateSpliceToConnection(const AZStd::vector<ConnectionId>& connectionIds);
- bool m_allowReset;
- QPointF m_genericAddOffset;
- int m_deleteCount;
- AZStd::string m_copyMimeType;
- AZ::EntityId m_grid;
- AZStd::unordered_map<QGraphicsItem*, AZ::EntityId> m_itemLookup;
- ViewId m_viewId;
- ViewParams m_viewParams;
- MimeDelegateSceneHelper m_mimeDelegateSceneHelper;
- GestureSceneHelper m_gestureSceneHelper;
- AZStd::unordered_set< QGraphicsItem* > m_hiddenElements;
- GraphData m_graphData;
-
- AZStd::vector< GraphicsEffectId > m_activeParticles;
- AZStd::unordered_set<NodeId> m_queuedEnable;
- AZStd::unordered_set<NodeId> m_queuedDisable;
- AZStd::unordered_set<NodeId> m_queuedVisualEnable;
- AZStd::unordered_set<NodeId> m_queuedVisualDisable;
- AZStd::unordered_set<AZ::EntityId> m_delegates;
- AZStd::unordered_set<AZ::EntityId> m_activeDelegates;
- AZStd::unordered_set<AZ::EntityId> m_interestedDelegates;
- AZStd::unordered_set<AZ::EntityId> m_ignoredDragTargets;
- AZStd::unordered_set<AZ::EntityId> m_draggedGroupableElements;
- AZ::EntityId m_dragTargetGroup;
- StateSetter< RootGraphicsItemDisplayState > m_forcedGroupDisplayStateStateSetter;
- StateSetter< AZStd::string > m_forcedLayerStateSetter;
- bool m_isLoading;
- bool m_isPasting;
- AZStd::unique_ptr<GraphCanvasGraphicsScene> m_graphicsSceneUi;
- DragSelectionType m_dragSelectionType;
- bool m_activateScene;
- bool m_isDragSelecting;
- AZ::EntityId m_inputCouplingTarget;
- AZ::EntityId m_outputCouplingTarget;
- AZ::EntityId m_couplingTarget;
-
- AZ::EntityId m_pressedEntity;
- AZ::Vector2 m_originalPosition;
- bool m_forceDragReleaseUndo;
- bool m_isDraggingEntity;
- bool m_isDraggingConnection;
- // Elements for handling with the drag onto objects
- QTimer m_spliceTimer;
- bool m_enableSpliceTracking;
-
- bool m_enableNodeDragConnectionSpliceTracking;
- bool m_enableNodeDragCouplingTracking;
- bool m_enableNodeChainDragConnectionSpliceTracking;
- bool m_enableNudging;
- NodeNudgingController m_nudgingController;
-
- AZ::EntityId m_spliceTarget;
- GraphSubGraph m_selectedSubGraph;
- StateSetter<RootGraphicsItemDisplayState> m_spliceTargetDisplayStateStateSetter;
- StateSetter<RootGraphicsItemDisplayState> m_pressedEntityDisplayStateStateSetter;
- StateSetter<RootGraphicsItemDisplayState> m_couplingEntityDisplayStateStateSetter;
- ////
- AZ::u32 m_bookmarkCounter;
- EditorId m_editorId;
- };
- //! This is the is Qt Ui QGraphicsScene elements that is stored in the GraphCanvas SceneComponent
- //! This class should NOT be serialized
- class GraphCanvasGraphicsScene
- : public QGraphicsScene
- {
- public:
- AZ_TYPE_INFO(Scene, "{48C47083-2CF2-4BB5-8058-FF25084FC2AA}");
- AZ_CLASS_ALLOCATOR(GraphCanvasGraphicsScene, AZ::SystemAllocator, 0);
- static void Reflect(AZ::ReflectContext*) = delete;
- GraphCanvasGraphicsScene(SceneComponent& scene);
- ~GraphCanvasGraphicsScene() = default;
- // Do not allow serialization
- AZ::EntityId GetEntityId() const;
- void SuppressNextContextMenu();
- protected:
- // QGraphicsScene
- void keyPressEvent(QKeyEvent* event) override;
- void keyReleaseEvent(QKeyEvent* event) override;
- void contextMenuEvent(QGraphicsSceneContextMenuEvent* contextMenuEvent) override;
- QList<QGraphicsItem*> itemsAtPosition(const QPoint& screenPos, const QPointF& scenePos, QWidget* widget) const;
- void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
- void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
- void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override;
- void dragEnterEvent(QGraphicsSceneDragDropEvent * event) override;
- void dragLeaveEvent(QGraphicsSceneDragDropEvent* event) override;
- void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override;
- void dropEvent(QGraphicsSceneDragDropEvent* event) override;
- ////
- private:
- GraphCanvasGraphicsScene(const GraphCanvasGraphicsScene&) = delete;
- void SignalGroupHighlight();
- void CleanupHighlight();
- SceneComponent& m_scene;
- bool m_suppressContextMenu;
- // Elements to make the group highlighting correct.
- AZ::EntityId m_contextMenuGroupTarget;
- StateSetter< RootGraphicsItemDisplayState > m_forcedGroupDisplayStateStateSetter;
- StateSetter< AZStd::string > m_forcedLayerStateSetter;
- };
- }
|