| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- * 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 <AzCore/Component/Component.h>
- #include <AzCore/Serialization/SerializeContext.h>
- #include <AzCore/Serialization/EditContext.h>
- #include <AWSCoreEditorSystemComponent.h>
- #include <QMainWindow>
- #include <QMenuBar>
- #include <QAction>
- #include <QList>
- #include <QString>
- #include <AzToolsFramework/ActionManager/Action/ActionManagerInterface.h>
- #include <AzToolsFramework/ActionManager/Menu/MenuManagerInterface.h>
- #include <AzToolsFramework/ActionManager/Menu/MenuManagerInternalInterface.h>
- #include <AzToolsFramework/Editor/ActionManagerUtils.h>
- #include <Editor/Constants/AWSCoreEditorMenuNames.h>
- #include <Editor/UI/AWSCoreEditorMenu.h>
- #include <QDesktopServices>
- #include <QUrl>
- namespace AWSCore
- {
- void AWSCoreEditorSystemComponent::Reflect(AZ::ReflectContext* context)
- {
- if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
- {
- serialize->Class<AWSCoreEditorSystemComponent, AZ::Component>()
- ->Version(0)
- ;
- if (AZ::EditContext* ec = serialize->GetEditContext())
- {
- ec->Class<AWSCoreEditorSystemComponent>("AWSCoreEditor", "Adds supporting for working with AWS features in the Editor")
- ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
- ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
- ;
- }
- }
- }
- void AWSCoreEditorSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
- {
- provided.push_back(AZ_CRC_CE("AWSCoreEditorService"));
- }
- void AWSCoreEditorSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
- {
- incompatible.push_back(AZ_CRC_CE("AWSCoreEditorService"));
- }
- void AWSCoreEditorSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
- {
- AZ_UNUSED(required);
- }
- void AWSCoreEditorSystemComponent::GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
- {
- AZ_UNUSED(dependent);
- }
- void AWSCoreEditorSystemComponent::Init()
- {
- }
- void AWSCoreEditorSystemComponent::Activate()
- {
- AzToolsFramework::ActionManagerRegistrationNotificationBus::Handler::BusConnect();
- m_actionManagerInterface = AZ::Interface<AzToolsFramework::ActionManagerInterface>::Get();
- AZ_Assert(m_actionManagerInterface, "AWSCoreEditorSystemComponent - could not get ActionManagerInterface");
- m_menuManagerInterface = AZ::Interface<AzToolsFramework::MenuManagerInterface>::Get();
- AZ_Assert(m_menuManagerInterface, "AWSCoreEditorSystemComponent - could not get MenuManagerInterface");
- m_menuManagerInternalInterface = AZ::Interface<AzToolsFramework::MenuManagerInternalInterface>::Get();
- AZ_Assert(m_menuManagerInterface, "AWSCoreEditorSystemComponent - could not get MenuManagerInternalInterface");
- AWSCoreEditorRequestBus::Handler::BusConnect();
- }
- void AWSCoreEditorSystemComponent::Deactivate()
- {
- AzToolsFramework::ActionManagerRegistrationNotificationBus::Handler::BusDisconnect();
- AWSCoreEditorRequestBus::Handler::BusDisconnect();
- m_awsCoreEditorMenu.reset();
- }
- void AWSCoreEditorSystemComponent::OnMenuBarRegistrationHook()
- {
- m_awsCoreEditorMenu = AZStd::make_unique<AWSCoreEditorMenu>();
- }
- void AWSCoreEditorSystemComponent::OnMenuBindingHook()
- {
- m_awsCoreEditorMenu->UpdateMenuBinding();
- }
- void AWSCoreEditorSystemComponent::AddExternalLinkAction(const AZStd::string& menuIdentifier, const char* const actionDetails[], int sort)
- {
- const auto& identifier = actionDetails[IdentIndex];
- const auto& text = actionDetails[NameIndex];
- const auto& icon = actionDetails[IconIndex];
- const auto& url = actionDetails[URLIndex];
- AzToolsFramework::ActionProperties actionProperties;
- actionProperties.m_name = text;
- actionProperties.m_iconPath = icon;
- auto outcome = m_actionManagerInterface->RegisterAction(ActionContext, identifier, actionProperties, [url]()
- {
- QDesktopServices::openUrl(QUrl(url));
- });
- AZ_Assert(outcome.IsSuccess(), "Failed to register action %s", identifier);
- outcome = m_menuManagerInterface->AddActionToMenu(menuIdentifier, identifier, sort);
- AZ_Assert(outcome.IsSuccess(), "Failed to add action %s to menu %s", identifier, menuIdentifier.c_str());
- }
- void AWSCoreEditorSystemComponent::CreateSubMenu(const AZStd::string& parentMenuIdentifier, const char* const menuDetails[], int sort)
- {
- AzToolsFramework::MenuProperties menuProperties;
- menuProperties.m_name = menuDetails[NameIndex];
- auto outcome = m_menuManagerInterface->RegisterMenu(menuDetails[IdentIndex], menuProperties);
- AZ_Assert(outcome.IsSuccess(), "Failed to register '%s' Menu", menuDetails[IdentIndex]);
- QMenu* menu = m_menuManagerInternalInterface->GetMenu(menuDetails[IdentIndex]);
- menu->setProperty("noHover", true);
- outcome = m_menuManagerInterface->AddSubMenuToMenu(parentMenuIdentifier, menuDetails[IdentIndex], sort);
- AZ_Assert(outcome.IsSuccess(), "Failed to add '%s' SubMenu to '%s' Menu", menuDetails[IdentIndex], parentMenuIdentifier.c_str());
- }
- } // namespace AWSCore
|