| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- /*
- * 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
- *
- */
- #include <AtomToolsFramework/Graph/GraphViewSettings.h>
- #include <AzCore/RTTI/BehaviorContext.h>
- #include <AzCore/Serialization/EditContext.h>
- #include <AzCore/Serialization/SerializeContext.h>
- namespace AtomToolsFramework
- {
- void GraphViewSettings::Reflect(AZ::ReflectContext* context)
- {
- if (auto serialize = azrtti_cast<AZ::SerializeContext*>(context))
- {
- serialize->Class<GraphViewSettings>()
- ->Version(0)
- ->Field("snapDistance", &GraphViewSettings::m_snapDistance)
- ->Field("alignmentTime", &GraphViewSettings::m_alignmentTime)
- ->Field("maxZoom", &GraphViewSettings::m_maxZoom)
- ->Field("edgePanningPercentage", &GraphViewSettings::m_edgePanningPercentage)
- ->Field("edgePanningScrollSpeed", &GraphViewSettings::m_edgePanningScrollSpeed)
- ->Field("dragNodeCouplingEnabled", &GraphViewSettings::m_dragNodeCouplingEnabled)
- ->Field("dragCouplingTime", &GraphViewSettings::m_dragCouplingTime)
- ->Field("dragConnectionSpliceEnabled", &GraphViewSettings::m_dragConnectionSpliceEnabled)
- ->Field("dragConnectionSpliceTime", &GraphViewSettings::m_dragConnectionSpliceTime)
- ->Field("dropConnectionSpliceEnabled", &GraphViewSettings::m_dropConnectionSpliceEnabled)
- ->Field("dropConnectionSpliceTime", &GraphViewSettings::m_dropConnectionSpliceTime)
- ->Field("shakeToDespliceEnabled", &GraphViewSettings::m_shakeToDespliceEnabled)
- ->Field("shakesToDesplice", &GraphViewSettings::m_shakesToDesplice)
- ->Field("minimumShakePercent", &GraphViewSettings::m_minimumShakePercent)
- ->Field("shakeDeadZonePercent", &GraphViewSettings::m_shakeDeadZonePercent)
- ->Field("shakeStraightnessPercent", &GraphViewSettings::m_shakeStraightnessPercent)
- ->Field("maximumShakeDuration", &GraphViewSettings::m_maximumShakeDuration)
- ->Field("splicedNodeNudgingEnabled", &GraphViewSettings::m_splicedNodeNudgingEnabled)
- ->Field("nodeNudgingEnabled", &GraphViewSettings::m_nodeNudgingEnabled)
- ->Field("connectionCurveType", &GraphViewSettings::m_connectionCurveType)
- ->Field("dataConnectionCurveType", &GraphViewSettings::m_dataConnectionCurveType)
- ->Field("groupDoubleClickCollapseEnabled", &GraphViewSettings::m_groupDoubleClickCollapseEnabled)
- ->Field("bookmarkViewportControlEnabled", &GraphViewSettings::m_bookmarkViewportControlEnabled)
- ->Field("allowNodeDisabling", &GraphViewSettings::m_allowNodeDisabling)
- ->Field("allowDataReferenceSlots", &GraphViewSettings::m_allowDataReferenceSlots)
- ->Field("constructPresets", &GraphViewSettings::m_constructPresets)
- ;
- serialize->RegisterGenericType<GraphViewSettingsPtr>();
- if (auto editContext = serialize->GetEditContext())
- {
- editContext->Class<GraphViewSettingsPtr>("GraphViewSettingsPtr", "")
- ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly)
- ;
- editContext->Class<GraphViewSettings>("Graph View Config", "")
- ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->ClassElement(AZ::Edit::ClassElements::Group, "Basic Interactions")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_snapDistance, "Snap Distance", "The distance at which connections will snap to a nearby slot.")
- ->Attribute(AZ::Edit::Attributes::Min, 10.0)
- ->Attribute(AZ::Edit::Attributes::Max, 100.0)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_maxZoom, "Max Zoom", "Controls the maximum magnification for zooming in")
- ->Attribute(AZ::Edit::Attributes::Min, 1.0)
- ->Attribute(AZ::Edit::Attributes::Max, 5.0)
- ->Attribute(AZ::Edit::Attributes::Step, 0.1)
- ->Attribute(AZ::Edit::Attributes::Suffix, "X")
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_edgePanningPercentage, "Edge Panning Percentage", "The percentage of the visible area to start scrolling when the mouse cursor is dragged into")
- ->Attribute(AZ::Edit::Attributes::Min, 0.0)
- ->Attribute(AZ::Edit::Attributes::Max, 50.0)
- ->Attribute(AZ::Edit::Attributes::Step, 1.0)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_edgePanningScrollSpeed, "Edge Panning Scroll Speed", "How fast the scene will scroll when scrolling")
- ->Attribute(AZ::Edit::Attributes::Min, 1.0)
- ->Attribute(AZ::Edit::Attributes::Max, 1000.0)
- ->ClassElement(AZ::Edit::ClassElements::Group, "Coupling")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_dragNodeCouplingEnabled, "Drag Node Coupling Enabled", "Allow automatic connections to be created between nodes when dragging them on top of each other")
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_dragCouplingTime, "Drag Coupling Time", "Amount of time nodes must be overlapping before automatic coupling is activated")
- ->Attribute(AZ::Edit::Attributes::Suffix, "ms")
- ->Attribute(AZ::Edit::Attributes::Min, 1)
- ->Attribute(AZ::Edit::Attributes::Max, 1000)
- ->ClassElement(AZ::Edit::ClassElements::Group, "Splicing")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_dragConnectionSpliceEnabled, "Drag Connection Splice Enabled", "Allow automatic splicing when dragging nodes on top of existing graph connections")
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_dragConnectionSpliceTime, "Drag Connection Splice Time", "Amount of time a node must be overlapping an existing connection before automatic splicing occurs")
- ->Attribute(AZ::Edit::Attributes::Suffix, "ms")
- ->Attribute(AZ::Edit::Attributes::Min, 1)
- ->Attribute(AZ::Edit::Attributes::Max, 1000)
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_dropConnectionSpliceEnabled, "Drop Connection Splice Enabled", "Allow automatic splicing when dropping nodes onto existing graph connections")
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_dropConnectionSpliceTime, "Drop Connection Splice Time", "Amount of time a node must be overlapping an existing connection before automatic splicing occurs")
- ->Attribute(AZ::Edit::Attributes::Suffix, "ms")
- ->Attribute(AZ::Edit::Attributes::Min, 1)
- ->Attribute(AZ::Edit::Attributes::Max, 1000)
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_splicedNodeNudgingEnabled, "Spliced Node Nudging Enabled", "Allow splicing actions to nudge other nodes out of the way")
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_shakeToDespliceEnabled, "Shake To Desplice Enabled", "Allow shaking a node to break connections from the nodes")
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_shakesToDesplice, "Shakes To Desplice", "The number of shades required to break connections between nodes")
- ->Attribute(AZ::Edit::Attributes::Min, 1)
- ->Attribute(AZ::Edit::Attributes::Max, 10)
- ->ClassElement(AZ::Edit::ClassElements::Group, "Nudging")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_nodeNudgingEnabled, "Node Nudging Enabled", "Controls if nodes will attempt to nudge each other out of the way during different operations")
- ->ClassElement(AZ::Edit::ClassElements::Group, "Shaking")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_minimumShakePercent, "Minimum Shake Percent", "Controls how long each motion must be in order to be registered as a shake")
- ->Attribute(AZ::Edit::Attributes::Min, 0.0)
- ->Attribute(AZ::Edit::Attributes::Max, 100.0)
- ->Attribute(AZ::Edit::Attributes::Step, 1.0)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_shakeDeadZonePercent, "Shake Dead Zone Percent", "Controls how far the cursor must move before a check is initiated")
- ->Attribute(AZ::Edit::Attributes::Min, 0.0)
- ->Attribute(AZ::Edit::Attributes::Max, 100.0)
- ->Attribute(AZ::Edit::Attributes::Step, 1.0)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_shakeStraightnessPercent, "Shake Straightness Percent", "Controls how aligned the individual motions must be in order to qualify as a shake")
- ->Attribute(AZ::Edit::Attributes::Min, 0.0)
- ->Attribute(AZ::Edit::Attributes::Max, 100.0)
- ->Attribute(AZ::Edit::Attributes::Step, 1.0)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_maximumShakeDuration, "Maximum Shake Duration", "Sets a cap on how long it consider a series of actions as a single shake gesture")
- ->Attribute(AZ::Edit::Attributes::Suffix, "ms")
- ->Attribute(AZ::Edit::Attributes::Min, 1)
- ->Attribute(AZ::Edit::Attributes::Max, 1000)
- ->ClassElement(AZ::Edit::ClassElements::Group, "Aligning")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Slider, &GraphViewSettings::m_alignmentTime, "Alignment Time", "Controls the amount of time nodes will take to slide into place when performing alignment commands")
- ->Attribute(AZ::Edit::Attributes::Suffix, "ms")
- ->Attribute(AZ::Edit::Attributes::Min, 0)
- ->Attribute(AZ::Edit::Attributes::Max, 5)
- ->ClassElement(AZ::Edit::ClassElements::Group, "Connections")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::ComboBox, &GraphViewSettings::m_connectionCurveType, "Connection Curve Type", "Style used for drawing lines between non-data connections")
- ->EnumAttribute(GraphCanvas::Styling::ConnectionCurveType::Straight, "Straight")
- ->EnumAttribute(GraphCanvas::Styling::ConnectionCurveType::Curved, "Curved")
- ->DataElement(AZ::Edit::UIHandlers::ComboBox, &GraphViewSettings::m_dataConnectionCurveType, "Data Connection Curve Type", "Style used for drawing lines between data connections")
- ->EnumAttribute(GraphCanvas::Styling::ConnectionCurveType::Straight, "Straight")
- ->EnumAttribute(GraphCanvas::Styling::ConnectionCurveType::Curved, "Curved")
- ->ClassElement(AZ::Edit::ClassElements::Group, "Misc")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_groupDoubleClickCollapseEnabled, "Group Double Click Collapse Enabled", "Toggle if groups can be expanded or collapsed by double clicking")
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_bookmarkViewportControlEnabled, "Bookmark Viewport Control Enabled", "Will cause the bookmarks to force the viewport into the state determined by the bookmark type\nBookmark Anchors - The viewport that exists when the bookmark is created.\nNode Groups - The area the Node Group covers")
- ->DataElement(AZ::Edit::UIHandlers::Default, &GraphViewSettings::m_allowDataReferenceSlots, "Allow Data Reference Slots", "")
- ;
- }
- }
- }
- GraphViewSettings::~GraphViewSettings()
- {
- GraphCanvas::AssetEditorSettingsRequestBus::Handler::BusDisconnect();
- }
- void GraphViewSettings::Initialize(const AZ::Crc32& toolId, const AZStd::map<AZStd::string, AZ::Color>& defaultGroupPresets)
- {
- m_toolId = toolId;
- m_constructPresets.SetDefaultGroupPresets(defaultGroupPresets);
- m_constructPresets.SetEditorId(m_toolId);
- GraphCanvas::AssetEditorSettingsRequestBus::Handler::BusConnect(m_toolId);
- }
- double GraphViewSettings::GetSnapDistance() const
- {
- return m_snapDistance;
- }
- bool GraphViewSettings::IsGroupDoubleClickCollapseEnabled() const
- {
- return m_groupDoubleClickCollapseEnabled;
- }
- bool GraphViewSettings::IsBookmarkViewportControlEnabled() const
- {
- return m_bookmarkViewportControlEnabled;
- }
- bool GraphViewSettings::IsDragNodeCouplingEnabled() const
- {
- return m_dragNodeCouplingEnabled;
- }
- AZStd::chrono::milliseconds GraphViewSettings::GetDragCouplingTime() const
- {
- return AZStd::chrono::milliseconds(m_dragCouplingTime);
- }
- bool GraphViewSettings::IsDragConnectionSpliceEnabled() const
- {
- return m_dragConnectionSpliceEnabled;
- }
- AZStd::chrono::milliseconds GraphViewSettings::GetDragConnectionSpliceTime() const
- {
- return AZStd::chrono::milliseconds(m_dropConnectionSpliceTime);
- }
- bool GraphViewSettings::IsDropConnectionSpliceEnabled() const
- {
- return m_dropConnectionSpliceEnabled;
- }
- AZStd::chrono::milliseconds GraphViewSettings::GetDropConnectionSpliceTime() const
- {
- return AZStd::chrono::milliseconds(m_dropConnectionSpliceTime);
- }
- bool GraphViewSettings::IsSplicedNodeNudgingEnabled() const
- {
- return m_splicedNodeNudgingEnabled;
- }
- bool GraphViewSettings::IsNodeNudgingEnabled() const
- {
- return m_nodeNudgingEnabled;
- }
- bool GraphViewSettings::IsShakeToDespliceEnabled() const
- {
- return m_shakeToDespliceEnabled;
- }
- int GraphViewSettings::GetShakesToDesplice() const
- {
- return m_shakesToDesplice;
- }
- float GraphViewSettings::GetMinimumShakePercent() const
- {
- return m_minimumShakePercent;
- }
- float GraphViewSettings::GetShakeDeadZonePercent() const
- {
- return m_shakeDeadZonePercent;
- }
- float GraphViewSettings::GetShakeStraightnessPercent() const
- {
- return m_shakeStraightnessPercent;
- }
- AZStd::chrono::milliseconds GraphViewSettings::GetMaximumShakeDuration() const
- {
- return AZStd::chrono::milliseconds(m_maximumShakeDuration);
- }
- AZStd::chrono::milliseconds GraphViewSettings::GetAlignmentTime() const
- {
- return AZStd::chrono::milliseconds(m_alignmentTime);
- }
- float GraphViewSettings::GetMaxZoom() const
- {
- return m_maxZoom;
- }
- float GraphViewSettings::GetEdgePanningPercentage() const
- {
- return m_edgePanningPercentage;
- }
- float GraphViewSettings::GetEdgePanningScrollSpeed() const
- {
- return m_edgePanningScrollSpeed;
- }
- GraphCanvas::EditorConstructPresets* GraphViewSettings::GetConstructPresets() const
- {
- return &m_constructPresets;
- }
- const GraphCanvas::ConstructTypePresetBucket* GraphViewSettings::GetConstructTypePresetBucket(GraphCanvas::ConstructType constructType) const
- {
- return m_constructPresets.FindPresetBucket(constructType);
- }
- GraphCanvas::Styling::ConnectionCurveType GraphViewSettings::GetConnectionCurveType() const
- {
- return m_connectionCurveType;
- }
- GraphCanvas::Styling::ConnectionCurveType GraphViewSettings::GetDataConnectionCurveType() const
- {
- return m_dataConnectionCurveType;
- }
- bool GraphViewSettings::AllowNodeDisabling() const
- {
- return m_allowNodeDisabling;
- }
- bool GraphViewSettings::AllowDataReferenceSlots() const
- {
- return m_allowDataReferenceSlots;
- }
- } // namespace AtomToolsFramework
|