AssetTreeItem.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 "AssetTreeItem.h"
  9. #include <QApplication>
  10. #include <QFileIconProvider>
  11. #include <QStyle>
  12. #include <QVariant>
  13. #include <AzCore/Casting/numeric_cast.h>
  14. namespace AssetProcessor
  15. {
  16. AssetTreeItemData::AssetTreeItemData(
  17. const AZStd::string& assetDbName, QString name, bool isFolder, const AZ::Uuid& uuid, const AZ::s64 scanFolderID)
  18. :
  19. m_assetDbName(assetDbName),
  20. m_name(name),
  21. m_isFolder(isFolder),
  22. m_uuid(uuid),
  23. m_scanFolderID(scanFolderID)
  24. {
  25. QFileInfo fileInfo(name);
  26. m_extension = fileInfo.suffix();
  27. }
  28. int AssetTreeItemData::GetColumnCount() const
  29. {
  30. return aznumeric_cast<int>(AssetTreeColumns::Max);
  31. }
  32. QVariant AssetTreeItemData::GetDataForColumn(int column) const
  33. {
  34. switch (column)
  35. {
  36. case aznumeric_cast<int>(AssetTreeColumns::Name):
  37. return m_name;
  38. case aznumeric_cast<int>(AssetTreeColumns::Extension):
  39. if (m_isFolder)
  40. {
  41. return QVariant();
  42. }
  43. return m_extension;
  44. default:
  45. AZ_Warning("AssetProcessor", false, "Unhandled AssetTree column %d", column);
  46. break;
  47. }
  48. return QVariant();
  49. }
  50. AssetTreeItem::AssetTreeItem(
  51. AZStd::shared_ptr<AssetTreeItemData> data,
  52. QIcon errorIcon,
  53. QIcon folderIcon,
  54. QIcon fileIcon,
  55. AssetTreeItem* parentItem) :
  56. m_data(data),
  57. m_parent(parentItem),
  58. m_errorIcon(errorIcon), // QIcon is implicitly shared.
  59. m_folderIcon(folderIcon),
  60. m_fileIcon(fileIcon)
  61. {
  62. }
  63. AssetTreeItem::~AssetTreeItem()
  64. {
  65. }
  66. AssetTreeItem* AssetTreeItem::CreateChild(AZStd::shared_ptr<AssetTreeItemData> data)
  67. {
  68. m_childItems.emplace_back(new AssetTreeItem(data, m_errorIcon, m_folderIcon, m_fileIcon, this));
  69. return m_childItems.back().get();
  70. }
  71. AssetTreeItem* AssetTreeItem::GetChild(int row) const
  72. {
  73. if (row < 0 || row >= getChildCount())
  74. {
  75. return nullptr;
  76. }
  77. return m_childItems.at(row).get();
  78. }
  79. void AssetTreeItem::EraseChild(AssetTreeItem* child)
  80. {
  81. for (auto& item : m_childItems)
  82. {
  83. if (item.get() == child)
  84. {
  85. m_childItems.erase(&item);
  86. break;
  87. }
  88. }
  89. }
  90. int AssetTreeItem::getChildCount() const
  91. {
  92. return static_cast<int>(m_childItems.size());
  93. }
  94. int AssetTreeItem::GetRow() const
  95. {
  96. if (m_parent)
  97. {
  98. int index = 0;
  99. for (const auto& item : m_parent->m_childItems)
  100. {
  101. if (item.get() == this)
  102. {
  103. return index;
  104. }
  105. ++index;
  106. }
  107. }
  108. return 0;
  109. }
  110. int AssetTreeItem::GetColumnCount() const
  111. {
  112. return m_data->GetColumnCount();
  113. }
  114. QVariant AssetTreeItem::GetDataForColumn(int column) const
  115. {
  116. if (column < 0 || column >= GetColumnCount() || !m_data)
  117. {
  118. return QVariant();
  119. }
  120. return m_data->GetDataForColumn(column);
  121. }
  122. QIcon AssetTreeItem::GetIcon() const
  123. {
  124. if (!m_data)
  125. {
  126. return QIcon();
  127. }
  128. if (m_data->m_assetHasUnresolvedIssue)
  129. {
  130. return m_errorIcon;
  131. }
  132. if (m_data->m_isFolder)
  133. {
  134. return m_folderIcon;
  135. }
  136. else
  137. {
  138. return m_fileIcon;
  139. }
  140. }
  141. AssetTreeItem* AssetTreeItem::GetParent() const
  142. {
  143. return m_parent;
  144. }
  145. AssetTreeItem* AssetTreeItem::GetChildFolder(QString folder) const
  146. {
  147. for (const auto& item : m_childItems)
  148. {
  149. if (!item->m_data ||
  150. !item->m_data->m_isFolder)
  151. {
  152. continue;
  153. }
  154. if (item->m_data->m_name == folder)
  155. {
  156. return item.get();
  157. }
  158. }
  159. return nullptr;
  160. }
  161. }