ManifestNameWidget.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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 <QStyle>
  9. #include <AzFramework/StringFunc/StringFunc.h>
  10. #include <SceneAPI/SceneCore/Containers/Scene.h>
  11. #include <SceneAPI/SceneCore/Containers/SceneManifest.h>
  12. #include <SceneAPI/SceneCore/DataTypes/DataTypeUtilities.h>
  13. #include <SceneAPI/SceneCore/DataTypes/IManifestObject.h>
  14. #include <SceneAPI/SceneUI/SceneWidgets/ManifestWidget.h>
  15. #include <SceneAPI/SceneUI/RowWidgets/ManifestNameWidget.h>
  16. namespace AZ
  17. {
  18. namespace SceneAPI
  19. {
  20. namespace SceneUI
  21. {
  22. AZ_CLASS_ALLOCATOR_IMPL(ManifestNameWidget, SystemAllocator);
  23. ManifestNameWidget::ManifestNameWidget(QWidget* parent)
  24. : QLineEdit(parent)
  25. , m_filterType(GetO3deTypeId(AZ::Adl{}, AZStd::type_identity<DataTypes::IManifestObject>()))
  26. , m_inFailureState(false)
  27. {
  28. connect(this, &QLineEdit::textChanged, this, &ManifestNameWidget::OnTextChanged);
  29. }
  30. void ManifestNameWidget::SetName(const char* name)
  31. {
  32. setText(name);
  33. UpdateStatus(name, false);
  34. }
  35. void ManifestNameWidget::SetName(const AZStd::string& name)
  36. {
  37. setText(name.c_str());
  38. UpdateStatus(name, false);
  39. }
  40. const AZStd::string& ManifestNameWidget::GetName() const
  41. {
  42. return m_name;
  43. }
  44. void ManifestNameWidget::SetFilterType(const Uuid& type)
  45. {
  46. m_filterType = type;
  47. }
  48. void ManifestNameWidget::OnTextChanged(const QString& textValue)
  49. {
  50. m_name = textValue.toStdString().c_str();
  51. UpdateStatus(m_name, true);
  52. emit valueChanged(m_name);
  53. }
  54. void ManifestNameWidget::UpdateStatus(const AZStd::string& newName, bool checkAvailability)
  55. {
  56. AZStd::string error;
  57. bool isValid = AzFramework::StringFunc::Path::IsValid(newName.c_str(), false, false, &error);
  58. if (isValid && checkAvailability)
  59. {
  60. isValid = IsAvailableName(error, newName);
  61. }
  62. if (!isValid && !m_inFailureState)
  63. {
  64. m_originalToolTip = toolTip();
  65. setToolTip(error.c_str());
  66. setProperty("inputValid", "false");
  67. m_inFailureState = true;
  68. style()->unpolish(this);
  69. style()->polish(this);
  70. }
  71. else if (isValid && m_inFailureState)
  72. {
  73. setToolTip(m_originalToolTip);
  74. setProperty("inputValid", "true");
  75. m_inFailureState = false;
  76. style()->unpolish(this);
  77. style()->polish(this);
  78. }
  79. }
  80. bool ManifestNameWidget::IsAvailableName(AZStd::string& error, const AZStd::string& name) const
  81. {
  82. const UI::ManifestWidget* manifestWidget = UI::ManifestWidget::FindRoot(this);
  83. if (!manifestWidget)
  84. {
  85. error = "ManifestNameWidget is not a child of a ManifestWidget. For correct name checking this is required.";
  86. return false;
  87. }
  88. const SceneAPI::Containers::SceneManifest& manifest = manifestWidget->GetScene()->GetManifest();
  89. if (!DataTypes::Utilities::IsNameAvailable(name, manifest, m_filterType))
  90. {
  91. error = "Name is already in use.";
  92. return false;
  93. }
  94. return true;
  95. }
  96. } // SceneUI
  97. } // SceneAPI
  98. } // AZ
  99. #include <RowWidgets/moc_ManifestNameWidget.cpp>