2
0

SoftNameSetting.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/Serialization/EditContext.h>
  9. #include <AzCore/std/sort.h>
  10. #include <SceneAPI/SceneCore/Events/GraphMetaInfoBus.h>
  11. #include <Config/SettingsObjects/SoftNameSetting.h>
  12. namespace AZ
  13. {
  14. namespace SceneProcessingConfig
  15. {
  16. SoftNameSetting::SoftNameSetting(const char* pattern, SceneAPI::SceneCore::PatternMatcher::MatchApproach approach,
  17. const char* virtualType)
  18. : m_pattern(pattern, approach)
  19. , m_virtualType(virtualType)
  20. {
  21. }
  22. SoftNameSetting::~SoftNameSetting() = default;
  23. Crc32 SoftNameSetting::GetVirtualTypeHash() const
  24. {
  25. if (m_virtualTypeHash == Crc32())
  26. {
  27. m_virtualTypeHash = Crc32(m_virtualType.c_str());
  28. }
  29. return m_virtualTypeHash;
  30. }
  31. const AZStd::string& SoftNameSetting::GetVirtualType() const
  32. {
  33. return m_virtualType;
  34. }
  35. void SoftNameSetting::Reflect(ReflectContext* context)
  36. {
  37. SerializeContext* serialize = azrtti_cast<SerializeContext*>(context);
  38. if (serialize)
  39. {
  40. serialize->Class<SoftNameSetting>()
  41. ->Version(1)
  42. ->Field("pattern", &SoftNameSetting::m_pattern)
  43. ->Field("virtualType", &SoftNameSetting::m_virtualType);
  44. EditContext* editContext = serialize->GetEditContext();
  45. if (editContext)
  46. {
  47. editContext->Class<SoftNameSetting>("Soft name setting", "A pattern matcher to setup project specific naming conventions.")
  48. ->ClassElement(Edit::ClassElements::EditorData, "")
  49. ->Attribute(Edit::Attributes::AutoExpand, true)
  50. ->Attribute(Edit::Attributes::Visibility, AZ_CRC_CE("PropertyVisibility_ShowChildrenOnly"))
  51. ->DataElement(Edit::UIHandlers::Default, &SoftNameSetting::m_pattern, "Pattern",
  52. "The pattern the matcher will check against.")
  53. ->Attribute(Edit::Attributes::Visibility, AZ_CRC_CE("PropertyVisibility_ShowChildrenOnly"))
  54. ->DataElement(Edit::UIHandlers::ComboBox, &SoftNameSetting::m_virtualType, "Virtual Type",
  55. "The node(s) will be converted to this type after their pattern matches.")
  56. ->Attribute(Edit::Attributes::StringList, &SoftNameSetting::GetAllVirtualTypes);
  57. }
  58. }
  59. }
  60. AZStd::vector<AZStd::string> SoftNameSetting::GetAllVirtualTypes() const
  61. {
  62. using namespace SceneAPI::Events;
  63. GraphMetaInfo::VirtualTypesSet virtualTypes;
  64. GraphMetaInfoBus::Broadcast(&GraphMetaInfoBus::Events::GetAllVirtualTypes, virtualTypes);
  65. AZStd::vector<AZStd::string> result;
  66. for (Crc32 virtualType : virtualTypes)
  67. {
  68. AZStd::string virtualTypeName;
  69. GraphMetaInfoBus::Broadcast(&GraphMetaInfoBus::Events::GetVirtualTypeName, virtualTypeName, virtualType);
  70. AZ_Assert(!virtualTypeName.empty(), "No name found for virtual type with hash %i.", static_cast<u32>(virtualType));
  71. result.emplace_back(AZStd::move(virtualTypeName));
  72. }
  73. AZStd::sort(result.begin(), result.end());
  74. return result;
  75. }
  76. } // namespace SceneProcessingConfig
  77. } // namespace AZ