JobsModel.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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 <AzToolsFramework/API/EditorAssetSystemAPI.h>
  11. #include <native/resourcecompiler/RCCommon.h>
  12. #include <QAbstractItemModel>
  13. #include <QDateTime>
  14. #include <QHash>
  15. #include <QIcon>
  16. #include <QVector>
  17. // Don't reorder above RCCommon
  18. #include <native/assetprocessor.h>
  19. #endif
  20. // Do this here, rather than EditorAssetSystemAPI.h so that we don't have to link against Qt5Core to
  21. // use EditorAssetSystemAPI.h
  22. Q_DECLARE_METATYPE(AzToolsFramework::AssetSystem::JobStatus);
  23. namespace AzToolsFramework
  24. {
  25. namespace AssetDatabase
  26. {
  27. class ProductDatabaseEntry;
  28. class AssetDatabaseConnection;
  29. }
  30. }
  31. namespace AssetProcessor
  32. {
  33. //! CachedJobInfo stores all the necessary information needed for showing a particular job including its log
  34. struct CachedJobInfo
  35. {
  36. QueueElementID m_elementId;
  37. QDateTime m_completedTime;
  38. AzToolsFramework::AssetSystem::JobStatus m_jobState;
  39. AZ::u32 m_warningCount;
  40. AZ::u32 m_errorCount;
  41. unsigned int m_jobRunKey;
  42. AZ::Uuid m_builderGuid;
  43. QTime m_processDuration;
  44. };
  45. /**
  46. * The JobsModel class contains list of jobs from both the Database and the RCController
  47. */
  48. class JobsModel
  49. : public QAbstractItemModel
  50. {
  51. Q_OBJECT
  52. public:
  53. enum DataRoles
  54. {
  55. logRole = Qt::UserRole + 1,
  56. statusRole,
  57. logFileRole,
  58. SortRole,
  59. };
  60. enum Column
  61. {
  62. ColumnStatus,
  63. ColumnSource,
  64. ColumnCompleted,
  65. ColumnPlatform,
  66. ColumnJobKey,
  67. ColumnProcessDuration,
  68. Max
  69. };
  70. explicit JobsModel(QObject* parent = nullptr);
  71. virtual ~JobsModel();
  72. QModelIndex parent(const QModelIndex& index) const override;
  73. QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
  74. int columnCount(const QModelIndex& parent = QModelIndex()) const override;
  75. int rowCount(const QModelIndex& parent = QModelIndex()) const override;
  76. QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
  77. QVariant data(const QModelIndex& index, int role) const override;
  78. int itemCount() const;
  79. CachedJobInfo* getItem(int index) const;
  80. static QString GetStatusInString(const AzToolsFramework::AssetSystem::JobStatus& state, AZ::u32 warningCount, AZ::u32 errorCount);
  81. void PopulateJobsFromDatabase();
  82. QModelIndex GetJobFromProduct(const AzToolsFramework::AssetDatabase::ProductDatabaseEntry& productEntry, AzToolsFramework::AssetDatabase::AssetDatabaseConnection& assetDatabaseConnection);
  83. QModelIndex GetJobFromSourceAndJobInfo(const SourceAssetReference& source, const AZStd::string& platform, const AZStd::string& jobKey);
  84. public Q_SLOTS:
  85. void OnJobStatusChanged(JobEntry entry, AzToolsFramework::AssetSystem::JobStatus status);
  86. void OnJobProcessDurationChanged(JobEntry jobEntry, int durationMs);
  87. void OnJobRemoved(AzToolsFramework::AssetSystem::JobInfo jobInfo);
  88. void OnSourceRemoved(const SourceAssetReference& sourceAsset);
  89. protected:
  90. QIcon m_pendingIcon;
  91. QIcon m_errorIcon;
  92. QIcon m_failureIcon;
  93. QIcon m_warningIcon;
  94. QIcon m_okIcon;
  95. QIcon m_processingIcon;
  96. AZStd::vector<CachedJobInfo*> m_cachedJobs;
  97. QHash<AssetProcessor::QueueElementID, int> m_cachedJobsLookup; // QVector uses int as type of index.
  98. void RemoveJob(const AssetProcessor::QueueElementID& elementId);
  99. };
  100. } //namespace AssetProcessor