AssetDetailsPanel.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 "AssetDetailsPanel.h"
  9. #include "AssetTreeFilterModel.h"
  10. #include "MainWindow.h"
  11. #include "ProductAssetTreeModel.h"
  12. #include "SourceAssetTreeModel.h"
  13. namespace AssetProcessor
  14. {
  15. AssetDetailsPanel::AssetDetailsPanel(QWidget* parent) : QFrame(parent)
  16. {
  17. }
  18. AssetDetailsPanel::~AssetDetailsPanel()
  19. {
  20. }
  21. void AssetDetailsPanel::RegisterAssociatedWidgets(
  22. QTreeView* sourceTreeView,
  23. SourceAssetTreeModel* sourceAssetTreeModel,
  24. AssetTreeFilterModel* sourceFilterModel,
  25. QTreeView* intermediateTreeView,
  26. SourceAssetTreeModel* intermediateAssetTreeModel,
  27. AssetTreeFilterModel* intermediateFilterModel,
  28. QTreeView* productTreeView,
  29. ProductAssetTreeModel* productAssetTreeModel,
  30. AssetTreeFilterModel* productFilterModel,
  31. QTabWidget* assetTab)
  32. {
  33. m_sourceTreeView = sourceTreeView;
  34. m_sourceTreeModel = sourceAssetTreeModel;
  35. m_sourceFilterModel = sourceFilterModel;
  36. m_intermediateTreeView = intermediateTreeView;
  37. m_intermediateTreeModel = intermediateAssetTreeModel;
  38. m_intermediateFilterModel = intermediateFilterModel;
  39. m_productTreeView = productTreeView;
  40. m_productTreeModel = productAssetTreeModel;
  41. m_productFilterModel = productFilterModel;
  42. m_assetsTab = assetTab;
  43. }
  44. void AssetDetailsPanel::GoToSource(const AZStd::string& source)
  45. {
  46. if (!m_sourceTreeModel || !m_sourceTreeView || !m_assetsTab || !m_sourceFilterModel ||
  47. !m_intermediateTreeView || !m_intermediateTreeModel || !m_intermediateFilterModel)
  48. {
  49. return;
  50. }
  51. AssetDatabaseConnection assetDatabaseConnection;
  52. assetDatabaseConnection.OpenDatabase();
  53. AzToolsFramework::AssetDatabase::SourceDatabaseEntry sourceDetails;
  54. SourceAssetReference sourceAsset;
  55. if (AZ::IO::PathView(source).IsRelative())
  56. {
  57. assetDatabaseConnection.QuerySourceBySourceName(
  58. source.c_str(),
  59. [&](AzToolsFramework::AssetDatabase::SourceDatabaseEntry& sourceEntry)
  60. {
  61. sourceDetails = sourceEntry;
  62. sourceAsset = SourceAssetReference(sourceEntry.m_scanFolderPK, sourceEntry.m_sourceName.c_str());
  63. return false;
  64. });
  65. }
  66. else
  67. {
  68. sourceAsset = SourceAssetReference{ source.c_str() };
  69. assetDatabaseConnection.GetSourceBySourceNameScanFolderId(
  70. sourceAsset.RelativePath().c_str(), sourceAsset.ScanFolderId(), sourceDetails);
  71. }
  72. bool isIntermediate = false;
  73. if(m_intermediateAssetFolderId.has_value())
  74. {
  75. isIntermediate = sourceDetails.m_scanFolderPK == m_intermediateAssetFolderId.value();
  76. }
  77. int assetTabIndex = static_cast<int>(
  78. isIntermediate ? MainWindow::AssetTabIndex::Intermediate : MainWindow::AssetTabIndex::Source);
  79. m_assetsTab->setCurrentIndex(assetTabIndex);
  80. QTreeView* treeView = isIntermediate ? m_intermediateTreeView : m_sourceTreeView;
  81. SourceAssetTreeModel* treeModel = isIntermediate ? m_intermediateTreeModel : m_sourceTreeModel;
  82. AssetTreeFilterModel* filterModel = isIntermediate ? m_intermediateFilterModel : m_sourceFilterModel;
  83. QModelIndex goToIndex = treeModel->GetIndexForSource(sourceAsset.RelativePath().c_str(), sourceAsset.ScanFolderId());
  84. // Make sure this index is visible, even if a search is active.
  85. filterModel->ForceModelIndexVisible(goToIndex);
  86. QModelIndex filterIndex = filterModel->mapFromSource(goToIndex);
  87. // Some tables, like the source dependencies table, may have wildcards or links to files that don't exist.
  88. if (!filterIndex.isValid())
  89. {
  90. return;
  91. }
  92. treeView->scrollTo(filterIndex, QAbstractItemView::ScrollHint::EnsureVisible);
  93. treeView->selectionModel()->setCurrentIndex(filterIndex, AssetTreeModel::GetAssetTreeSelectionFlags());
  94. }
  95. void AssetDetailsPanel::GoToProduct(const AZStd::string& product)
  96. {
  97. if (!m_productTreeModel || !m_productTreeView || !m_assetsTab || !m_productFilterModel)
  98. {
  99. return;
  100. }
  101. m_assetsTab->setCurrentIndex(static_cast<int>(MainWindow::AssetTabIndex::Product));
  102. QModelIndex goToIndex = m_productTreeModel->GetIndexForProduct(product);
  103. // Make sure this index is visible, even if a search is active.
  104. m_productFilterModel->ForceModelIndexVisible(goToIndex);
  105. QModelIndex filterIndex = m_productFilterModel->mapFromSource(goToIndex);
  106. // Some tables may have wildcards or links to files that don't exist.
  107. if (!filterIndex.isValid())
  108. {
  109. return;
  110. }
  111. m_productTreeView->scrollTo(filterIndex, QAbstractItemView::ScrollHint::EnsureVisible);
  112. m_productTreeView->selectionModel()->setCurrentIndex(filterIndex, AssetTreeModel::GetAssetTreeSelectionFlags());
  113. }
  114. }