Files
o3de/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/StyleBus.h
T
Steve Pham 38261d0800 Shorten copyright headers by splitting into 2 lines (#2213)
* Updated all copyright headers to split the longer original copyright line into 2 shorter lines

Signed-off-by: Steve Pham <spham@amazon.com>
2021-07-16 15:25:48 -07:00

229 lines
8.3 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 <AzCore/PlatformDef.h>
AZ_PUSH_DISABLE_WARNING(4251 4800 4244, "-Wunknown-warning-option")
#include <QColor>
#include <QPixmap>
AZ_POP_DISABLE_WARNING
#include <AzCore/EBus/EBus.h>
#include <AzCore/Component/EntityId.h>
#include <AzCore/Math/Uuid.h>
#include <AzCore/std/containers/vector.h>
#include <AzCore/std/string/string.h>
#include <AzCore/std/string/string_view.h>
#include <GraphCanvas/Editor/EditorTypes.h>
#include <GraphCanvas/Styling/Selector.h>
class QVariant;
namespace GraphCanvas
{
namespace Styling
{
class StyleHelper;
}
static const AZ::Crc32 StyledGraphicItemServiceCrc = AZ_CRC("GraphCanvas_StyledGraphicItemService", 0xeae4cdf4);
///////////////////////////////////////////////////////////////////////////////////
//! StyledEntityRequests
//! Provide details about an entity to support it being styled.
class StyledEntityRequests : public AZ::EBusTraits
{
public:
// Allow any number of handlers per address.
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = AZ::EntityId;
//! If this entity has a parent that is also styled, get its ID, otherwise AZ::EntityId()
virtual AZ::EntityId GetStyleParent() const = 0;
//! Get a set of styling selectors applicable for the entity
virtual Styling::SelectorVector GetStyleSelectors() const = 0;
virtual void AddSelectorState(const char* selector) = 0;
virtual void RemoveSelectorState(const char* selector) = 0;
//! Get the "style element" that the entity "is"; e.g. "node", "slot", "connection", etc.
virtual AZStd::string GetElement() const = 0;
//! Get the "style class" that the entity has. This should start with a '.' and contain [A-Za-z_-].
virtual AZStd::string GetClass() const = 0;
//! Returns <element>.<class>
virtual AZStd::string GetFullStyleElement() const
{
AZStd::string element = GetElement();
AZStd::string subStyle = GetClass();
if (subStyle.empty())
{
return element;
}
else
{
return AZStd::string::format("%s.%s", element.c_str(), subStyle.c_str());
}
}
};
using StyledEntityRequestBus = AZ::EBus<StyledEntityRequests>;
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
// StyleManager
// Requests
class PaletteIconConfiguration
{
public:
AZStd::string m_iconPalette;
float m_transitionPercent = 0.1f;
void ClearPalettes()
{
m_colorPalettes.clear();
m_paletteCrc = AZ::Crc32();
}
void ReservePalettes(size_t size)
{
m_colorPalettes.reserve(size);
}
void SetColorPalette(AZStd::string_view paletteString)
{
ClearPalettes();
AddColorPalette(paletteString);
}
void AddColorPalette(AZStd::string_view paletteString)
{
m_colorPalettes.push_back(paletteString);
m_paletteCrc.Add(paletteString.data());
}
const AZStd::vector< AZStd::string >& GetColorPalettes() const
{
return m_colorPalettes;
}
AZ::Crc32 GetPaletteCrc() const
{
return m_paletteCrc;
}
private:
AZ::Crc32 m_paletteCrc;
AZStd::vector< AZStd::string > m_colorPalettes;
};
class StyleManagerRequests : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = EditorId;
//! Match the selectors an entity has against known styles and provide an aggregate meta - style for it.
virtual AZ::EntityId ResolveStyles(const AZ::EntityId& object) const = 0;
virtual void RegisterDataPaletteStyle(const AZ::Uuid& dataType, const AZStd::string& palette) = 0;
virtual AZStd::string GetDataPaletteStyle(const AZ::Uuid& dataType) const = 0;
virtual const Styling::StyleHelper* FindDataColorPalette(const AZ::Uuid& uuid) = 0;
virtual QColor GetDataTypeColor(const AZ::Uuid& dataType) = 0;
virtual const QPixmap* GetDataTypeIcon(const AZ::Uuid& dataType) = 0;
virtual const QPixmap* GetMultiDataTypeIcon(const AZStd::vector<AZ::Uuid>& dataTypes) = 0;
virtual const Styling::StyleHelper* FindColorPalette(const AZStd::string& paletteString) = 0;
virtual QColor GetPaletteColor(const AZStd::string& palette) = 0;
virtual const QPixmap* GetPaletteIcon(const AZStd::string& iconStyle, const AZStd::string& palette) = 0;
virtual const QPixmap* GetConfiguredPaletteIcon(const PaletteIconConfiguration& paletteConfiguration) = 0;
virtual const Styling::StyleHelper* FindPaletteIconStyleHelper(const PaletteIconConfiguration& paletteConfiguration) = 0;
virtual QPixmap* CreateIcon(const QColor& colorType, const AZStd::string& iconStyle) = 0;
virtual QPixmap* CreateIconFromConfiguration(const PaletteIconConfiguration& paletteConfiguration) = 0;
virtual QPixmap* CreateMultiColoredIcon(const AZStd::vector<QColor>& colorType, float transitionPercent, const AZStd::string& iconStyle) = 0;
virtual QPixmap* CreateColoredPatternPixmap(const AZStd::vector< QColor >& colorTypes, const AZStd::string& patternKey) = 0;
virtual const QPixmap* CreatePatternPixmap(const AZStd::vector< AZStd::string >& palettes, const AZStd::string& patternKey) = 0;
virtual AZStd::vector<AZStd::string> GetColorPaletteStyles() const = 0;
// Pixmap Caching Mechanism
virtual QPixmap* FindPixmap(const AZ::Crc32& keyName) = 0;
virtual void CachePixmap(const AZ::Crc32& keyName, QPixmap* pixmap) = 0;
// Layering
virtual int FindLayer(AZStd::string_view layer) = 0;
// Size Stepping
virtual int GetSteppedWidth(int gridSteps) = 0;
virtual int GetSteppedHeight(int gridSteps) = 0;
};
using StyleManagerRequestBus = AZ::EBus<StyleManagerRequests>;
//! Notifications
class StyleManagerNotifications : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = EditorId;
virtual void OnStylesUnloaded() {}
virtual void OnStylesLoaded() {}
};
using StyleManagerNotificationBus = AZ::EBus<StyleManagerNotifications>;
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//! StyleRequests
//! Get the style for an entity (per its current state)
class StyleRequests : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = AZ::EntityId;
//! Get a textual description of the style, useful for debugging.
virtual AZStd::string GetDescription() const = 0;
//! Check whether the style has a given attribute.
virtual bool HasAttribute(AZ::u32 attribute) const = 0;
//! Get an attribute from a style. If the style lacks the attribute, QVariant() will be returned.
virtual QVariant GetAttribute(AZ::u32 attribute) const = 0;
};
using StyleRequestBus = AZ::EBus<StyleRequests>;
//! StyleNtofications
//! Notifications about changes to the style
class StyleNotifications : public AZ::EBusTraits
{
public:
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
using BusIdType = AZ::EntityId;
//! The style changed.
virtual void OnStyleChanged() = 0;
};
using StyleNotificationBus = AZ::EBus<StyleNotifications>;
///////////////////////////////////////////////////////////////////////////////////
}