diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.cpp index a1e921684f..854918ac19 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.cpp +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.cpp @@ -119,6 +119,11 @@ namespace GraphCanvas m_nodePalette->setProperty("HasNoWindowDecorations", true); m_nodePalette->SetupNodePalette(config); + if (m_userNodePaletteWidth > 0) + { + m_nodePalette->setFixedWidth(m_userNodePaletteWidth); + } + QWidgetAction* actionWidget = new QWidgetAction(this); actionWidget->setDefaultWidget(m_nodePalette); diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.h index a942858f56..08ee8cecbf 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.h +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/EditorContextMenu.h @@ -63,34 +63,34 @@ namespace GraphCanvas void ResetSourceSlotFilter(); void FilterForSourceSlot(const GraphId& graphId, const AZ::EntityId& sourceSlotId); - protected slots: + protected Q_SLOTS: virtual void SetupDisplay(); virtual void HandleContextMenuSelection(); protected: + virtual void OnRefreshActions(const GraphId& graphId, const AZ::EntityId& targetMemberId); void keyPressEvent(QKeyEvent* keyEvent) override; - NodePaletteWidget* m_nodePalette = nullptr; - - private: - void ConstructMenu(); void AddUnprocessedActions(AZStd::vector& actions); - bool m_finalized; - bool m_isToolBarMenu; + NodePaletteWidget* m_nodePalette = nullptr; + + bool m_finalized; + bool m_isToolBarMenu; + AZ::u32 m_userNodePaletteWidth = 300; EditorId m_editorId; - AZStd::vector< ActionGroupId > m_actionGroupOrdering; - AZStd::unordered_set< ActionGroupId > m_actionGroups; + AZStd::vector m_actionGroupOrdering; + AZStd::unordered_set m_actionGroups; AZStd::vector m_unprocessedFrontActions; AZStd::vector m_unprocessedActions; AZStd::vector m_unprocessedBackActions; - AZStd::unordered_map< AZStd::string, QMenu* > m_subMenuMap; + AZStd::unordered_map m_subMenuMap; }; } diff --git a/Gems/ScriptCanvas/Code/Editor/Settings.cpp b/Gems/ScriptCanvas/Code/Editor/Settings.cpp index fd745fa257..8d24a30aab 100644 --- a/Gems/ScriptCanvas/Code/Editor/Settings.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Settings.cpp @@ -395,6 +395,7 @@ namespace ScriptCanvasEditor ->Field("ShowUpgradeDialog", &ScriptCanvasEditorSettings::m_showUpgradeDialog) ->Field("ZoomSettings", &ScriptCanvasEditorSettings::m_zoomSettings) ->Field("ExperimentalSettings", &ScriptCanvasEditorSettings::m_experimentalSettings) + ->Field("SceneContextMenuNodePaletteWidth", &ScriptCanvasEditorSettings::m_sceneContextMenuNodePaletteWidth) ; AZ::EditContext* editContext = serialize->GetEditContext(); @@ -467,13 +468,13 @@ namespace ScriptCanvasEditor ->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_snapDistance, "Connection Snap Distance", "The distance from a slot under which connections will snap to it.") ->Attribute(AZ::Edit::Attributes::Min, 10.0) - ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_enableGroupDoubleClickCollapse, "Double Click to Collapse/Uncollapse Group", "Enables the user to decide whether you can double click on a group to collapse/uncollapse a group.") + ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_enableGroupDoubleClickCollapse, "Double Click to Collapse/Expand Group", "Enables the user to decide whether you can double click on a group to collapse/expand a group.") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_allowBookmarkViewpointControl, "Bookmark Zooming", "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, &ScriptCanvasEditorSettings::m_dragNodeCouplingConfig, "Node Coupling Configuration", "Controls for managing Node Coupling.\nNode Coupling is when you are dragging a node and leave it hovered over another Node, we will try to connect the sides you overlapped with each other.") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_dragNodeSplicingConfig, "Drag Node Splicing Configuration", "Controls for managing Node Splicing on a Drag.\nNode Splicing on a Drag will let you drag a node onto a connection, and splice that node onto the specified connection.") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_dropNodeSplicingConfig, "Drop Node Splicing Configuration", "Controls for managing Node Splicing on a Drag.\nNode Splicing on a drop will let you drop a node onto a connection from the Node Palette, and splice that node onto the specified connection.") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_autoSaveConfig, "AutoSave Configuration", "Controls for managing Auto Saving.\nAuto Saving will occur after the specified time of inactivity on a graph.") - ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_shakeDespliceConfig, "Shake To Desplice", "Settings that controls various parameters of the Shake to Desplice feature") + ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_shakeDespliceConfig, "Shake To De-splice", "Settings that controls various parameters of the Shake to De-splice feature") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_allowNodeNudging, "Allow Node Nudging", "Controls whether or not nodes will attempt to nudge each other out of the way under various interactions.") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_alignmentTimeMS, "Alignment Time", "Controls the amount of time nodes will take to slide into place when performing alignment commands") ->Attribute(AZ::Edit::Attributes::Min, 0) @@ -485,8 +486,10 @@ namespace ScriptCanvasEditor ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_experimentalSettings, "Experimental Settings", "Settings that will control elements that are under development and may not work as expected") ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_saveRawTranslationOuputToFile, "Save Translation File", "Save out the raw result of translation for debug purposes") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &SettingsCpp::UpdateProcessingSettings) - ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_printAbstractCodeModel, "Print Abstract Modeld", "Print out the Abstract Code Model to the console at the end of parsing for debug purposes") + ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_printAbstractCodeModel, "Print Abstract Model", "Print out the Abstract Code Model to the console at the end of parsing for debug purposes") ->Attribute(AZ::Edit::Attributes::ChangeNotify, &SettingsCpp::UpdateProcessingSettings) + ->DataElement(AZ::Edit::UIHandlers::Default, &ScriptCanvasEditorSettings::m_sceneContextMenuNodePaletteWidth, "Context Menu Width", "Allows you to configure the width of the context menu that opens on a Script Canvas graph") + ->Attribute(AZ::Edit::Attributes::Min, 120) ; editContext->Class("Experimental", "Settings for features under development that may not behave as expected yet.") diff --git a/Gems/ScriptCanvas/Code/Editor/Settings.h b/Gems/ScriptCanvas/Code/Editor/Settings.h index eefb7454c3..dee55f8272 100644 --- a/Gems/ScriptCanvas/Code/Editor/Settings.h +++ b/Gems/ScriptCanvas/Code/Editor/Settings.h @@ -357,6 +357,8 @@ namespace ScriptCanvasEditor AZ::u32 m_alignmentTimeMS; StylingSettings m_stylingSettings; + + AZ::u32 m_sceneContextMenuNodePaletteWidth = 300; }; } } diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/ScriptCanvasContextMenus.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/ScriptCanvasContextMenus.cpp index e4a95d7d19..6402a24b3a 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/ScriptCanvasContextMenus.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/ScriptCanvasContextMenus.cpp @@ -12,6 +12,8 @@ #include #include +#include + #include #include @@ -41,6 +43,8 @@ #include #include "ScriptCanvasContextMenus.h" +#include "Settings.h" + #include #include #include @@ -53,6 +57,7 @@ #include #include + namespace ScriptCanvasEditor { //////////////////////////// @@ -805,6 +810,13 @@ namespace ScriptCanvasEditor SceneContextMenu::SceneContextMenu(const NodePaletteModel& paletteModel, AzToolsFramework::AssetBrowser::AssetBrowserFilterModel* assetModel) : GraphCanvas::SceneContextMenu(ScriptCanvasEditor::AssetEditorId) { + + auto userSettings = AZ::UserSettings::CreateFind(AZ_CRC("ScriptCanvasPreviewSettings", 0x1c5a2965), AZ::UserSettings::CT_LOCAL); + if (userSettings) + { + m_userNodePaletteWidth = userSettings->m_sceneContextMenuNodePaletteWidth; + } + const bool inContextMenu = true; Widget::ScriptCanvasNodePaletteConfig paletteConfig(paletteModel, assetModel, inContextMenu); AddNodePaletteMenuAction(paletteConfig);