You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/GraphCanvas/Code/Source/Components/Nodes/General/GeneralNodeTitleComponent.h

183 lines
6.1 KiB
C++

/*
* 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 <QGraphicsLinearLayout>
#include <QGraphicsWidget>
#include <AzCore/Component/Component.h>
#include <GraphCanvas/Components/GraphCanvasPropertyBus.h>
#include <GraphCanvas/Components/Nodes/NodeBus.h>
#include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
#include <GraphCanvas/Components/SceneBus.h>
#include <GraphCanvas/Components/StyleBus.h>
#include <GraphCanvas/Components/VisualBus.h>
#include <GraphCanvas/Types/EntitySaveData.h>
#include <GraphCanvas/Types/TranslationTypes.h>
#include <Widgets/GraphCanvasLabel.h>
namespace GraphCanvas
{
class GeneralNodeTitleGraphicsWidget;
//! The Title component gives a Node the ability to display a title.
class GeneralNodeTitleComponent
: public AZ::Component
, public NodeTitleRequestBus::Handler
, public SceneMemberNotificationBus::Handler
, public VisualNotificationBus::Handler
{
public:
AZ_COMPONENT(GeneralNodeTitleComponent, "{67D54B26-A924-4028-8544-5684B16BF04A}");
static void Reflect(AZ::ReflectContext*);
GeneralNodeTitleComponent();
~GeneralNodeTitleComponent() = default;
// AZ::Component
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
provided.push_back(NodeTitleServiceCrc);
}
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
{
incompatible.push_back(NodeTitleServiceCrc);
}
static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
{
(void)dependent;
}
static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
{
required.push_back(AZ_CRC("GraphCanvas_StyledGraphicItemService", 0xeae4cdf4));
required.push_back(AZ_CRC("GraphCanvas_SceneMemberService", 0xe9759a2d));
}
void Init() override;
void Activate() override;
void Deactivate() override;
////
// NodeTitleRequestBus
void SetTitle(const AZStd::string& title) override;
void SetTranslationKeyedTitle(const TranslationKeyedString& title) override;
AZStd::string GetTitle() const override;
void SetSubTitle(const AZStd::string& subtitle) override;
void SetTranslationKeyedSubTitle(const TranslationKeyedString& subtitle) override;
AZStd::string GetSubTitle() const override;
QGraphicsWidget* GetGraphicsWidget() override;
void SetDefaultPalette(const AZStd::string& palette) override;
void SetPaletteOverride(const AZStd::string& paletteOverride) override;
void SetDataPaletteOverride(const AZ::Uuid& uuid) override;
void SetColorPaletteOverride(const QColor& color) override;
void ConfigureIconConfiguration(PaletteIconConfiguration& paletteConfiguration) override;
void ClearPaletteOverride() override;
/////
// SceneMemberNotificationBus
void OnSceneSet(const AZ::EntityId& graphId) override;
////
private:
GeneralNodeTitleComponent(const GeneralNodeTitleComponent&) = delete;
TranslationKeyedString m_title;
TranslationKeyedString m_subTitle;
AZStd::string m_basePalette;
GeneralNodeTitleComponentSaveData m_saveData;
GeneralNodeTitleGraphicsWidget* m_generalNodeTitleWidget = nullptr;
};
//! The Title QGraphicsWidget for displaying a title
class GeneralNodeTitleGraphicsWidget
: public QGraphicsWidget
, public SceneNotificationBus::Handler
, public SceneMemberNotificationBus::Handler
, public NodeNotificationBus::Handler
, public RootGraphicsItemNotificationBus::Handler
{
public:
AZ_TYPE_INFO(GeneralNodeTitleGraphicsWidget, "{9DE7D3C0-D88C-47D8-85D4-5E0F619E60CB}");
AZ_CLASS_ALLOCATOR(GeneralNodeTitleGraphicsWidget, AZ::SystemAllocator, 0);
GeneralNodeTitleGraphicsWidget(const AZ::EntityId& entityId);
~GeneralNodeTitleGraphicsWidget() override;
void Activate();
void Deactivate();
void SetTitle(const TranslationKeyedString& title);
void SetSubTitle(const TranslationKeyedString& subtitle);
void SetPaletteOverride(AZStd::string_view paletteOverride);
void SetPaletteOverride(const AZ::Uuid& uuid);
void SetPaletteOverride(const QColor& color);
void ConfigureIconConfiguration(PaletteIconConfiguration& paletteConfiguration);
void ClearPaletteOverride();
void UpdateLayout();
void UpdateStyles();
void RefreshDisplay();
// SceneNotificationBus
void OnStylesChanged() override;
////
// SceneMemberNotificationBus
void OnAddedToScene(const AZ::EntityId& scene) override;
void OnRemovedFromScene(const AZ::EntityId& scene) override;
////
// NodeNotificationBus
void OnTooltipChanged(const AZStd::string& tooltip) override;
////
// RootGraphicsItemNotifications
void OnEnabledChanged(RootGraphicsItemEnabledState enabledState) override;
////
protected:
// QGraphicsItem
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override;
const AZ::EntityId& GetEntityId() const { return m_entityId; }
private:
GeneralNodeTitleGraphicsWidget(const GeneralNodeTitleGraphicsWidget&) = delete;
QGraphicsLinearLayout* m_linearLayout;
GraphCanvasLabel* m_titleWidget;
GraphCanvasLabel* m_subTitleWidget;
AZ::EntityId m_entityId;
const Styling::StyleHelper* m_disabledPalette;
const Styling::StyleHelper* m_paletteOverride;
Styling::StyleHelper* m_colorOverride;
Styling::StyleHelper m_styleHelper;
};
}