ProductAssetDetailsPanel.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. #pragma once
  9. #if !defined(Q_MOC_RUN)
  10. #include <native/ui/AssetDetailsPanel.h>
  11. #include <native/ui/ProductDependencyTreeModel.h>
  12. #include <native/ui/ProductDependencyTreeDelegate.h>
  13. #include <AzCore/std/parallel/mutex.h>
  14. #include <AzCore/std/smart_ptr/shared_ptr.h>
  15. #include <QDateTime>
  16. #include <QHash>
  17. #include <QPointer>
  18. #include <QScopedPointer>
  19. #endif
  20. class QItemSelection;
  21. class QLabel;
  22. class QListWidget;
  23. class QListWidgetItem;
  24. namespace AZ
  25. {
  26. namespace Data
  27. {
  28. struct AssetId;
  29. }
  30. }
  31. namespace Ui
  32. {
  33. class ProductAssetDetailsPanel;
  34. }
  35. namespace AssetProcessor
  36. {
  37. class AssetTreeItem;
  38. class AssetDatabaseConnection;
  39. class ProductAssetTreeItemData;
  40. class ProductAssetDetailsPanel
  41. : public AssetDetailsPanel
  42. {
  43. Q_OBJECT
  44. public:
  45. explicit ProductAssetDetailsPanel(QWidget* parent = nullptr);
  46. ~ProductAssetDetailsPanel() override;
  47. // The scan results widget is in a separate section of the UI, but updates when scans are added / completed.
  48. void SetScannerInformation(QPointer<QListWidget> missingDependencyScanResults, AZStd::shared_ptr<AssetDatabaseConnection> assetDatabaseConnection)
  49. {
  50. m_missingDependencyScanResults = missingDependencyScanResults;
  51. m_assetDatabaseConnection = assetDatabaseConnection;
  52. }
  53. void SetScanQueueEnabled(bool enabled);
  54. void SetupDependencyGraph(QTreeView* productAssetsTreeView, AZStd::shared_ptr<AssetDatabaseConnection> assetDatabaseConnection);
  55. QTreeView* GetOutgoingProductDependenciesTreeView() const;
  56. QTreeView* GetIncomingProductDependenciesTreeView() const;
  57. public Q_SLOTS:
  58. void AssetDataSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
  59. protected:
  60. struct MissingDependencyScanGUIInfo
  61. {
  62. QListWidgetItem* m_scanWidgetRow = nullptr;
  63. size_t m_remainingFiles = 0;
  64. QDateTime m_scanTimeStart;
  65. };
  66. enum class MissingDependencyTableColumns
  67. {
  68. GoToButton,
  69. ScanTime,
  70. Dependency,
  71. Max
  72. };
  73. void ResetText();
  74. void SetDetailsVisible(bool visible);
  75. void OnSupportClicked(bool checked);
  76. void OnScanFileClicked(bool checked);
  77. void OnScanFolderClicked(bool checked);
  78. void OnClearScanFileClicked(bool checked);
  79. void OnClearScanFolderClicked(bool checked);
  80. void ScanFolderForMissingDependencies(QString scanName, AssetTreeItem& folder);
  81. void ScanFileForMissingDependencies(QString scanName, const AZStd::shared_ptr<const ProductAssetTreeItemData> productItemData);
  82. void ClearMissingDependenciesForFile(const AZStd::shared_ptr<const ProductAssetTreeItemData> productItemData);
  83. void ClearMissingDependenciesForFolder(AssetTreeItem& folder);
  84. void RefreshUI();
  85. void BuildOutgoingProductDependencies(
  86. const AZStd::shared_ptr<const ProductAssetTreeItemData> productItemData,
  87. const AZStd::string& platform);
  88. void BuildIncomingProductDependencies(
  89. const AZStd::shared_ptr<const ProductAssetTreeItemData> productItemData,
  90. const AZ::Data::AssetId& assetId,
  91. const AZStd::string& platform);
  92. void BuildMissingProductDependencies(
  93. const AZStd::shared_ptr<const ProductAssetTreeItemData> productItemData);
  94. void AddProductIdToScanCount(AZ::s64 scannedProductId, QString scanName);
  95. void RemoveProductIdFromScanCount(AZ::s64 scannedProductId, QString scanName);
  96. void UpdateScannerUI(MissingDependencyScanGUIInfo& scannerUIInfo, QString scanName);
  97. QScopedPointer<Ui::ProductAssetDetailsPanel> m_ui;
  98. AssetTreeItem* m_currentItem = nullptr;
  99. // Track how many files are being scanned in the UI.
  100. QHash<AZ::s64, QString> m_productIdToScanName;
  101. QHash<QString, MissingDependencyScanGUIInfo> m_scanNameToScanGUIInfo;
  102. mutable AZStd::recursive_mutex m_scanCountMutex;
  103. QPointer<QListWidget> m_missingDependencyScanResults;
  104. // The asset database connection in the AzToolsFramework namespace is read only. The AssetProcessor connection allows writing.
  105. AZStd::shared_ptr<AssetDatabaseConnection> m_assetDatabaseConnection;
  106. ProductDependencyTreeModel* m_outgoingDependencyTreeModel = nullptr;
  107. ProductDependencyTreeModel* m_incomingDependencyTreeModel = nullptr;
  108. };
  109. } // namespace AssetProcessor