/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #pragma once #include AZ_PUSH_DISABLE_WARNING(4244 4251 4800, "-Wunknown-warning-option") #include #include #include #include #include #include #include #include #include #include AZ_POP_DISABLE_WARNING #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class QAction; class QLineEdit; class QPushButton; namespace Ui { class VariableDockWidget; } namespace ScriptCanvasEditor { class VariablePropertiesComponent : public GraphCanvas::GraphCanvasPropertyComponent , protected ScriptCanvas::VariableNotificationBus::Handler { public: AZ_COMPONENT(VariablePropertiesComponent, "{885F276B-9633-42F7-85BD-10869E606873}", GraphCanvasPropertyComponent); static void Reflect(AZ::ReflectContext*); static AZ::Entity* CreateVariablePropertiesEntity(); VariablePropertiesComponent(); ~VariablePropertiesComponent() = default; const char* GetTitle(); void SetVariable(ScriptCanvas::GraphVariable* variable); private: void OnNameChanged(); // VariableNotificationBus::Handler void OnVariableRemoved() override; void OnVariableRenamed(AZStd::string_view variableName) override; void OnVariableScopeChanged() override; void OnVariableValueChanged() override; //// AZStd::string m_variableName; ScriptCanvas::GraphVariable* m_variable; ScriptCanvas::ScriptCanvasId m_scriptCanvasGraphId; AZStd::string m_componentTitle; }; class VariableDockWidget; class VariablePanelContextMenu : public QMenu { public: VariablePanelContextMenu(VariableDockWidget* contextMenu, const ScriptCanvas::ScriptCanvasId& scriptCanvasExecutionId, ScriptCanvas::VariableId varId); }; class VariableDockWidget : public AzQtComponents::StyledDockWidget , public GraphCanvas::AssetEditorNotificationBus::Handler , public AzToolsFramework::EditorEvents::Bus::Handler , public VariableAutomationRequestBus::Handler { Q_OBJECT public: AZ_CLASS_ALLOCATOR(VariableDockWidget, AZ::SystemAllocator, 0); static AZStd::string ConstructDefaultVariableName(AZ::u32 variableCounter); static AZStd::string FindDefaultVariableName(const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId); VariableDockWidget(QWidget* parent = nullptr); ~VariableDockWidget(); void PopulateVariablePalette(const AZStd::unordered_set< AZ::Uuid >& objectTypes); // GraphCanvas::AssetEditorNotificationBus::Handler void OnActiveGraphChanged(const GraphCanvas::GraphId& graphCanvasGraphId) override; //// // VariableAutomationRequestBus AZStd::vector< ScriptCanvas::Data::Type > GetPrimitiveTypes() const override; AZStd::vector< ScriptCanvas::Data::Type > GetBehaviorContextObjectTypes() const override; AZStd::vector< ScriptCanvas::Data::Type > GetMapTypes() const override; AZStd::vector< ScriptCanvas::Data::Type > GetArrayTypes() const override; //// // AzToolsFramework::EditorEvents::Bus void OnEscape() override; //// // QWidget void focusOutEvent(QFocusEvent* focusEvent) override; //// const ScriptCanvas::ScriptCanvasId& GetActiveScriptCanvasId() const; bool IsValidVariableType(const ScriptCanvas::Data::Type& dataType) const; public slots: void OnCreateVariable(ScriptCanvas::Data::Type varType); void OnCreateNamedVariable(const AZStd::string& variableName, ScriptCanvas::Data::Type varType); void OnSelectionChanged(const AZStd::unordered_set< ScriptCanvas::VariableId>& variableIds); void OnDuplicateVariable(const ScriptCanvas::VariableId& variableId); void OnDeleteVariables(const AZStd::unordered_set< ScriptCanvas::VariableId>& variableIds); void OnHighlightVariables(const AZStd::unordered_set< ScriptCanvas::VariableId>& variableIds); void OnRemoveUnusedVariables(); Q_SIGNALS: void OnVariableSelectionChanged(const AZStd::vector& variableIds); private: bool IsShowingVariablePalette() const; void ShowVariablePalette(); bool IsShowingGraphVariables() const; void ShowGraphVariables(); void FocusOnSearchFilter(); void ClearFilter(); void UpdateFilter(); void OnReturnPressed(); void OnQuickFilterChanged(const QString &text); void RefreshModel(); void OnAddVariableButton(); void OnContextMenuRequested(const QPoint &pos); bool CanDeleteVariable(const ScriptCanvas::VariableId& variableId); VariablePropertiesComponent* AllocateComponent(const ScriptCanvas::VariableId& variableId); void ReleaseComponent(const ScriptCanvas::VariableId& variableId); void ResetPool(); bool m_manipulatingSelection; AZStd::unordered_map< ScriptCanvas::VariableId, VariablePropertiesComponent* > m_usedElements; AZStd::vector< VariablePropertiesComponent* > m_unusedPool; AZStd::vector< AZStd::unique_ptr > m_propertyHelpers; ScriptCanvas::ScriptCanvasId m_scriptCanvasId; AZ::EntityId m_graphCanvasGraphId; AZStd::unique_ptr ui; QTimer m_filterTimer; }; }